mirror of
https://github.com/overleaf/overleaf.git
synced 2024-09-16 02:52:31 -04:00
Merge pull request #14178 from overleaf/mf-admin-email-managed-group-alert
Add managed group admin email inside managed group alert on the subscription page & team invite page warning GitOrigin-RevId: 00929008170ef9302ddcbbf10aefd76f95e189a8
This commit is contained in:
parent
34aec8f8be
commit
a3e30c0a39
8 changed files with 66 additions and 5 deletions
|
@ -40,6 +40,17 @@ const SubscriptionLocator = {
|
|||
.exec(callback)
|
||||
},
|
||||
|
||||
getAdminEmail(subscriptionId, callback) {
|
||||
Subscription.findById(subscriptionId)
|
||||
.populate('admin_id', 'email')
|
||||
.exec((err, subscription) => {
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
callback(err, subscription?.admin_id?.email)
|
||||
})
|
||||
},
|
||||
|
||||
getAdminEmailAndName(subscriptionId, callback) {
|
||||
Subscription.findById(subscriptionId)
|
||||
.populate('admin_id', ['email', 'first_name', 'last_name'])
|
||||
|
@ -122,6 +133,7 @@ SubscriptionLocator.promises = {
|
|||
SubscriptionLocator.getManagedGroupSubscriptions
|
||||
),
|
||||
getMemberSubscriptions: promisify(SubscriptionLocator.getMemberSubscriptions),
|
||||
getAdminEmail: promisify(SubscriptionLocator.getAdminEmail),
|
||||
getAdminEmailAndName: promisify(SubscriptionLocator.getAdminEmailAndName),
|
||||
getSubscription: promisify(SubscriptionLocator.getSubscription),
|
||||
getSubscriptionByMemberIdAndId: promisify(
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
const settings = require('@overleaf/settings')
|
||||
const logger = require('@overleaf/logger')
|
||||
const TeamInvitesHandler = require('./TeamInvitesHandler')
|
||||
const SessionManager = require('../Authentication/SessionManager')
|
||||
const SubscriptionLocator = require('./SubscriptionLocator')
|
||||
|
@ -106,6 +107,14 @@ async function viewInvite(req, res, next) {
|
|||
validationStatus: Object.fromEntries(validationStatus),
|
||||
})
|
||||
} else {
|
||||
let currentManagedUserAdminEmail
|
||||
try {
|
||||
currentManagedUserAdminEmail =
|
||||
await SubscriptionLocator.promises.getAdminEmail(req.managedBy)
|
||||
} catch (err) {
|
||||
logger.error({ err }, 'error getting subscription admin email')
|
||||
}
|
||||
|
||||
return res.render('subscriptions/team/invite', {
|
||||
inviterName: invite.inviterName,
|
||||
inviteToken: invite.token,
|
||||
|
@ -113,6 +122,7 @@ async function viewInvite(req, res, next) {
|
|||
appName: settings.appName,
|
||||
expired: req.query.expired,
|
||||
userRestrictions: Array.from(req.userRestrictions || []),
|
||||
currentManagedUserAdminEmail,
|
||||
})
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -6,6 +6,7 @@ const Settings = require('@overleaf/settings')
|
|||
const AuthenticationController = require('../Authentication/AuthenticationController')
|
||||
const SessionManager = require('../Authentication/SessionManager')
|
||||
const NewsletterManager = require('../Newsletter/NewsletterManager')
|
||||
const SubscriptionLocator = require('../Subscription/SubscriptionLocator')
|
||||
const _ = require('lodash')
|
||||
const { expressify } = require('../../util/promises')
|
||||
const Features = require('../../infrastructure/Features')
|
||||
|
@ -81,6 +82,14 @@ async function settingsPage(req, res) {
|
|||
}
|
||||
}
|
||||
|
||||
let currentManagedUserAdminEmail
|
||||
try {
|
||||
currentManagedUserAdminEmail =
|
||||
await SubscriptionLocator.promises.getAdminEmail(req.managedBy)
|
||||
} catch (err) {
|
||||
logger.error({ err }, 'error getting subscription admin email')
|
||||
}
|
||||
|
||||
res.render('user/settings', {
|
||||
title: 'account_settings',
|
||||
user: {
|
||||
|
@ -128,6 +137,7 @@ async function settingsPage(req, res) {
|
|||
emailAddressLimit: Settings.emailAddressLimit,
|
||||
isManagedAccount: !!req.managedBy,
|
||||
userRestrictions: Array.from(req.userRestrictions || []),
|
||||
currentManagedUserAdminEmail,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ block content
|
|||
|
||||
div(ng-show="view =='restrictedByManagedGroup'")
|
||||
.alert.alert-info #{translate("restricted")}
|
||||
p #{translate("account_managed_by_group_administrator")}
|
||||
p #{translate("account_managed_by_group_administrator", {admin: currentManagedUserAdminEmail})}
|
||||
|
||||
div(ng-show="view =='hasIndividualRecurlySubscription'")
|
||||
p #{translate("cancel_personal_subscription_first")}
|
||||
|
|
|
@ -25,6 +25,7 @@ block append meta
|
|||
meta(name="ol-showPersonalAccessToken", data-type="boolean" content=showPersonalAccessToken)
|
||||
meta(name="ol-personalAccessTokens", data-type="json" content=personalAccessTokens)
|
||||
meta(name="ol-emailAddressLimit", data-type="json", content=emailAddressLimit)
|
||||
meta(name="ol-currentManagedUserAdminEmail" data-type="string" content=currentManagedUserAdminEmail)
|
||||
|
||||
block content
|
||||
main.content.content-alt#settings-page-root
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
import { Trans, useTranslation } from 'react-i18next'
|
||||
import { Trans } from 'react-i18next'
|
||||
import getMeta from '../../../utils/meta'
|
||||
|
||||
export default function ManagedAccountAlert() {
|
||||
const { t } = useTranslation()
|
||||
const isManaged = getMeta('ol-isManagedAccount', false)
|
||||
const currentManagedUserAdminEmail: string = getMeta(
|
||||
'ol-currentManagedUserAdminEmail',
|
||||
''
|
||||
)
|
||||
|
||||
if (!isManaged) {
|
||||
return null
|
||||
|
@ -16,7 +19,14 @@ export default function ManagedAccountAlert() {
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
<strong>{t('account_managed_by_group_administrator')}</strong>
|
||||
<strong>
|
||||
<Trans
|
||||
i18nKey="account_managed_by_group_administrator"
|
||||
values={{
|
||||
admin: currentManagedUserAdminEmail,
|
||||
}}
|
||||
/>
|
||||
</strong>
|
||||
</div>
|
||||
<div>
|
||||
<Trans
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
"account_has_been_link_to_institution_account": "Your __appName__ account on <b>__email__</b> has been linked to your <b>__institutionName__</b> institutional account.",
|
||||
"account_has_past_due_invoice_change_plan_warning": "Your account currently has a past due invoice. You will not be able to change your plan until this is resolved.",
|
||||
"account_linking": "Account Linking",
|
||||
"account_managed_by_group_administrator": "Your account is managed by your group administrator",
|
||||
"account_managed_by_group_administrator": "Your account is managed by your group administrator (__admin__)",
|
||||
"account_not_linked_to_dropbox": "Your account is not linked to Dropbox",
|
||||
"account_settings": "Account Settings",
|
||||
"account_with_email_exists": "It looks like an <b>__appName__</b> account with the email <b>__email__</b> already exists.",
|
||||
|
|
|
@ -48,6 +48,10 @@ describe('UserPagesController', function () {
|
|||
zotero: { encrypted: 'bbbb' },
|
||||
},
|
||||
}
|
||||
this.adminEmail = 'group-admin-email@overleaf.com'
|
||||
this.subscriptionViewModel = {
|
||||
memberGroupSubscriptions: [],
|
||||
}
|
||||
|
||||
this.UserGetter = {
|
||||
getUser: sinon.stub(),
|
||||
|
@ -73,6 +77,11 @@ describe('UserPagesController', function () {
|
|||
this.PersonalAccessTokenManager = {
|
||||
listTokens: sinon.stub().returns([]),
|
||||
}
|
||||
this.SubscriptionLocator = {
|
||||
promises: {
|
||||
getAdminEmail: sinon.stub().returns(this.adminEmail),
|
||||
},
|
||||
}
|
||||
this.UserPagesController = SandboxedModule.require(modulePath, {
|
||||
requires: {
|
||||
'@overleaf/settings': this.settings,
|
||||
|
@ -82,6 +91,7 @@ describe('UserPagesController', function () {
|
|||
'../Errors/ErrorController': this.ErrorController,
|
||||
'../Authentication/AuthenticationController':
|
||||
this.AuthenticationController,
|
||||
'../Subscription/SubscriptionLocator': this.SubscriptionLocator,
|
||||
'../../infrastructure/Features': this.Features,
|
||||
'../../../../modules/oauth2-server/app/src/OAuthPersonalAccessTokenManager':
|
||||
this.PersonalAccessTokenManager,
|
||||
|
@ -325,6 +335,14 @@ describe('UserPagesController', function () {
|
|||
return this.UserPagesController.settingsPage(this.req, this.res)
|
||||
})
|
||||
|
||||
it('should send the correct managed user admin email', function (done) {
|
||||
this.res.render = (page, opts) => {
|
||||
expect(opts.currentManagedUserAdminEmail).to.equal(this.adminEmail)
|
||||
return done()
|
||||
}
|
||||
return this.UserPagesController.settingsPage(this.req, this.res)
|
||||
})
|
||||
|
||||
describe('when ldap.updateUserDetailsOnLogin is true', function () {
|
||||
beforeEach(function () {
|
||||
return (this.settings.ldap = { updateUserDetailsOnLogin: true })
|
||||
|
|
Loading…
Reference in a new issue