mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-11 20:05:30 +00:00
Merge pull request #2606 from overleaf/ta-check-sso-users
Add SSO Users Info on Users Features Check Summary GitOrigin-RevId: 5c874e1bf50005eb311317b867b17380ca017118
This commit is contained in:
parent
69a98355ce
commit
cd9a9b43bd
2 changed files with 57 additions and 15 deletions
|
@ -21,6 +21,7 @@ const { ObjectId } = require('../../infrastructure/mongojs')
|
|||
const { getInstitutionAffiliations } = require('./InstitutionsAPI')
|
||||
const FeaturesUpdater = require('../Subscription/FeaturesUpdater')
|
||||
const UserGetter = require('../User/UserGetter')
|
||||
const SAMLIdentityManager = require('../User/SAMLIdentityManager')
|
||||
const NotificationsBuilder = require('../Notifications/NotificationsBuilder')
|
||||
const SubscriptionLocator = require('../Subscription/SubscriptionLocator')
|
||||
const { Institution } = require('../../models/Institution')
|
||||
|
@ -60,8 +61,8 @@ module.exports = InstitutionsManager = {
|
|||
return getInstitutionAffiliations(institutionId, (error, affiliations) =>
|
||||
UserGetter.getUsersByAnyConfirmedEmail(
|
||||
affiliations.map(affiliation => affiliation.email),
|
||||
{ features: 1 },
|
||||
(error, users) => callback(error, checkFeatures(users))
|
||||
{ features: 1, samlIdentifiers: 1 },
|
||||
(error, users) => callback(error, checkFeatures(institutionId, users))
|
||||
)
|
||||
)
|
||||
},
|
||||
|
@ -170,19 +171,45 @@ var notifyUser = (user, affiliation, subscription, featuresChanged, callback) =>
|
|||
callback
|
||||
)
|
||||
|
||||
var checkFeatures = function(users) {
|
||||
var checkFeatures = function(institutionId, users) {
|
||||
const usersSummary = {
|
||||
totalConfirmedUsers: users.length,
|
||||
totalConfirmedProUsers: 0,
|
||||
totalConfirmedNonProUsers: 0,
|
||||
confirmedNonProUsers: []
|
||||
confirmedEmailUsers: {
|
||||
total: users.length, // all users are confirmed email users
|
||||
totalProUsers: 0,
|
||||
totalNonProUsers: 0,
|
||||
nonProUsers: []
|
||||
},
|
||||
entitledSSOUsers: {
|
||||
total: 0,
|
||||
totalProUsers: 0,
|
||||
totalNonProUsers: 0,
|
||||
nonProUsers: []
|
||||
}
|
||||
}
|
||||
users.forEach(function(user) {
|
||||
let isSSOEntitled = SAMLIdentityManager.userHasEntitlement(
|
||||
user,
|
||||
institutionId
|
||||
)
|
||||
|
||||
if (isSSOEntitled) {
|
||||
usersSummary.entitledSSOUsers.total += 1
|
||||
}
|
||||
|
||||
if (user.features.collaborators === -1 && user.features.trackChanges) {
|
||||
return (usersSummary.totalConfirmedProUsers += 1)
|
||||
// user is on Pro
|
||||
usersSummary.confirmedEmailUsers.totalProUsers += 1
|
||||
if (isSSOEntitled) {
|
||||
usersSummary.entitledSSOUsers.totalProUsers += 1
|
||||
}
|
||||
} else {
|
||||
usersSummary.totalConfirmedNonProUsers += 1
|
||||
return usersSummary.confirmedNonProUsers.push(user._id)
|
||||
// user is not on Pro
|
||||
usersSummary.confirmedEmailUsers.totalNonProUsers += 1
|
||||
usersSummary.confirmedEmailUsers.nonProUsers.push(user._id)
|
||||
if (isSSOEntitled) {
|
||||
usersSummary.entitledSSOUsers.totalNonProUsers += 1
|
||||
usersSummary.entitledSSOUsers.nonProUsers.push(user._id)
|
||||
}
|
||||
}
|
||||
})
|
||||
return usersSummary
|
||||
|
|
|
@ -50,6 +50,9 @@ describe('InstitutionsManager', function() {
|
|||
}
|
||||
}
|
||||
this.subscriptionExec = sinon.stub().yields()
|
||||
this.SAMLIdentityManager = {
|
||||
userHasEntitlement: sinon.stub().returns(false)
|
||||
}
|
||||
const SubscriptionModel = {
|
||||
Subscription: {
|
||||
find: () => {
|
||||
|
@ -80,7 +83,8 @@ describe('InstitutionsManager', function() {
|
|||
'../Subscription/SubscriptionLocator': this.SubscriptionLocator,
|
||||
'../../models/Institution': this.InstitutionModel,
|
||||
'../../models/Subscription': SubscriptionModel,
|
||||
'../../infrastructure/mongojs': this.Mongo
|
||||
'../../infrastructure/mongojs': this.Mongo,
|
||||
'../User/SAMLIdentityManager': this.SAMLIdentityManager
|
||||
}
|
||||
}))
|
||||
})
|
||||
|
@ -176,17 +180,28 @@ describe('InstitutionsManager', function() {
|
|||
]
|
||||
this.getInstitutionAffiliations.yields(null, affiliations)
|
||||
this.UserGetter.getUsersByAnyConfirmedEmail.yields(null, stubbedUsers)
|
||||
this.SAMLIdentityManager.userHasEntitlement.onCall(0).returns(true)
|
||||
this.SAMLIdentityManager.userHasEntitlement.onCall(1).returns(true)
|
||||
this.SAMLIdentityManager.userHasEntitlement.onCall(2).returns(false)
|
||||
return this.InstitutionsManager.checkInstitutionUsers(
|
||||
this.institutionId,
|
||||
(error, usersSummary) => {
|
||||
should.not.exist(error)
|
||||
usersSummary.totalConfirmedUsers.should.equal(3)
|
||||
usersSummary.totalConfirmedProUsers.should.equal(1)
|
||||
usersSummary.totalConfirmedNonProUsers.should.equal(2)
|
||||
expect(usersSummary.confirmedNonProUsers).to.deep.equal([
|
||||
|
||||
usersSummary.confirmedEmailUsers.total.should.equal(3)
|
||||
usersSummary.confirmedEmailUsers.totalProUsers.should.equal(1)
|
||||
usersSummary.confirmedEmailUsers.totalNonProUsers.should.equal(2)
|
||||
expect(usersSummary.confirmedEmailUsers.nonProUsers).to.deep.equal([
|
||||
'456def456def456def456def',
|
||||
'789def789def789def789def'
|
||||
])
|
||||
|
||||
usersSummary.entitledSSOUsers.total.should.equal(2)
|
||||
usersSummary.entitledSSOUsers.totalProUsers.should.equal(1)
|
||||
usersSummary.entitledSSOUsers.totalNonProUsers.should.equal(1)
|
||||
expect(usersSummary.entitledSSOUsers.nonProUsers).to.deep.equal([
|
||||
'456def456def456def456def'
|
||||
])
|
||||
return done()
|
||||
}
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue