Merge pull request #7210 from overleaf/jpa-switch-to-admin

[web] add a button for switching to the admin domain from www.

GitOrigin-RevId: 7e14b9c1415ef6cad5f369d77530599bac3148e7
This commit is contained in:
Jakob Ackermann 2022-03-31 11:37:49 +01:00 committed by Copybot
parent c8866bbda0
commit 4d18dcb377
6 changed files with 18 additions and 7 deletions

View file

@ -8,12 +8,12 @@ const SessionManager = require('../Authentication/SessionManager')
const TokenAccessHandler = require('../TokenAccess/TokenAccessHandler')
const { expressify } = require('../../util/promises')
const {
shouldRedirectToAdminDomain,
canRedirectToAdminDomain,
} = require('../Helpers/AdminAuthorizationHelper')
const { getSafeAdminDomainRedirect } = require('../Helpers/UrlHelper')
function handleAdminDomainRedirect(req, res) {
if (shouldRedirectToAdminDomain(SessionManager.getSessionUser(req.session))) {
if (canRedirectToAdminDomain(SessionManager.getSessionUser(req.session))) {
logger.warn({ req }, 'redirecting admin user to admin domain')
res.redirect(getSafeAdminDomainRedirect(req.originalUrl))
return true

View file

@ -2,7 +2,7 @@ const Settings = require('@overleaf/settings')
module.exports = {
hasAdminAccess,
shouldRedirectToAdminDomain,
canRedirectToAdminDomain,
}
function hasAdminAccess(user) {
@ -11,7 +11,7 @@ function hasAdminAccess(user) {
return Boolean(user.isAdmin)
}
function shouldRedirectToAdminDomain(user) {
function canRedirectToAdminDomain(user) {
if (Settings.adminPrivilegeAvailable) return false
if (!Settings.adminUrl) return false
if (!user) return false

View file

@ -13,6 +13,7 @@ const PackageVersions = require('./PackageVersions')
const Modules = require('./Modules')
const SafeHTMLSubstitute = require('../Features/Helpers/SafeHTMLSubstitution')
const {
canRedirectToAdminDomain,
hasAdminAccess,
} = require('../Features/Helpers/AdminAuthorizationHelper')
@ -302,6 +303,8 @@ module.exports = function (webRouter, privateApiRouter, publicApiRouter) {
res.locals.getLoggedInUserId = () =>
SessionManager.getLoggedInUserId(req.session)
res.locals.getSessionUser = () => SessionManager.getSessionUser(req.session)
res.locals.canRedirectToAdminDomain = () =>
canRedirectToAdminDomain(SessionManager.getSessionUser(req.session))
res.locals.hasAdminAccess = () =>
hasAdminAccess(SessionManager.getSessionUser(req.session))
next()

View file

@ -16,10 +16,11 @@ nav.navbar.navbar-default.navbar-main
a(href='/', aria-label=settings.appName).navbar-brand
- var canDisplayAdminMenu = hasAdminAccess()
- var canDisplayAdminRedirect = canRedirectToAdminDomain()
- var canDisplaySplitTestMenu = hasFeature('saas') && (canDisplayAdminMenu || (getSessionUser() && getSessionUser().staffAccess && (getSessionUser().staffAccess.splitTestMetrics || getSessionUser().staffAccess.splitTestManagement)))
.navbar-collapse.collapse(data-ol-navbar-main-collapse)
ul.nav.navbar-nav.navbar-right
if (canDisplayAdminMenu || canDisplaySplitTestMenu)
if (canDisplayAdminMenu || canDisplayAdminRedirect || canDisplaySplitTestMenu)
li.dropdown.subdued
a.dropdown-toggle(
href="#",
@ -38,6 +39,9 @@ nav.navbar.navbar-default.navbar-main
a(href="/admin/user") Manage Users
li
a(href="/admin/project") Project URL Lookup
if canDisplayAdminRedirect
li
a(href=settings.adminUrl) Switch to Admin
if canDisplaySplitTestMenu
li
a(href="/admin/split-test") Manage Split Tests

View file

@ -11,10 +11,11 @@ nav.navbar.navbar-default.navbar-main
a(href='/', aria-label=settings.appName).navbar-brand
- var canDisplayAdminMenu = hasAdminAccess()
- var canDisplayAdminRedirect = canRedirectToAdminDomain()
- var canDisplaySplitTestMenu = hasFeature('saas') && (canDisplayAdminMenu || (getSessionUser() && getSessionUser().staffAccess && (getSessionUser().staffAccess.splitTestMetrics || getSessionUser().staffAccess.splitTestManagement)))
.navbar-collapse.collapse(collapse="navCollapsed")
ul.nav.navbar-nav.navbar-right
if (canDisplayAdminMenu || canDisplaySplitTestMenu)
if (canDisplayAdminMenu || canDisplayAdminRedirect || canDisplaySplitTestMenu)
li.dropdown(class="subdued", dropdown)
a.dropdown-toggle(href, dropdown-toggle)
| Admin
@ -27,6 +28,9 @@ nav.navbar.navbar-default.navbar-main
a(href="/admin/user") Manage Users
li
a(href="/admin/project") Project URL Lookup
if canDisplayAdminRedirect
li
a(href=settings.adminUrl) Switch to Admin
if canDisplaySplitTestMenu
li
a(href="/admin/split-test") Manage Split Tests

View file

@ -44,7 +44,7 @@ describe('AuthorizationMiddleware', function () {
'../Authentication/SessionManager': this.SessionManager,
'../TokenAccess/TokenAccessHandler': this.TokenAccessHandler,
'../Helpers/AdminAuthorizationHelper': {
shouldRedirectToAdminDomain: sinon.stub().returns(false),
canRedirectToAdminDomain: sinon.stub().returns(false),
},
},
})