mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Move admin register to user activate module
Move admin register to user activate module Co-authored-by: John Lees-Miller <jdleesmiller@gmail.com> & Davinder Singh GitOrigin-RevId: 79428f2932783086435bdad9b1efb5300c467511
This commit is contained in:
parent
bce02b25e4
commit
b3d55fa65e
8 changed files with 77 additions and 70 deletions
|
@ -101,10 +101,6 @@ const AdminController = {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
registerNewUser(req, res, next) {
|
|
||||||
return res.render('admin/register')
|
|
||||||
},
|
|
||||||
|
|
||||||
disconnectAllUsers: (req, res) => {
|
disconnectAllUsers: (req, res) => {
|
||||||
logger.warn('disconecting everyone')
|
logger.warn('disconecting everyone')
|
||||||
const delay = (req.query && req.query.delay) > 0 ? req.query.delay : 10
|
const delay = (req.query && req.query.delay) > 0 ? req.query.delay : 10
|
||||||
|
|
|
@ -3,7 +3,6 @@ const UserDeleter = require('./UserDeleter')
|
||||||
const UserGetter = require('./UserGetter')
|
const UserGetter = require('./UserGetter')
|
||||||
const { User } = require('../../models/User')
|
const { User } = require('../../models/User')
|
||||||
const NewsletterManager = require('../Newsletter/NewsletterManager')
|
const NewsletterManager = require('../Newsletter/NewsletterManager')
|
||||||
const UserRegistrationHandler = require('./UserRegistrationHandler')
|
|
||||||
const logger = require('@overleaf/logger')
|
const logger = require('@overleaf/logger')
|
||||||
const metrics = require('@overleaf/metrics')
|
const metrics = require('@overleaf/metrics')
|
||||||
const AuthenticationManager = require('../Authentication/AuthenticationManager')
|
const AuthenticationManager = require('../Authentication/AuthenticationManager')
|
||||||
|
@ -463,25 +462,6 @@ const UserController = {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
register(req, res, next) {
|
|
||||||
const { email } = req.body
|
|
||||||
if (email == null || email === '') {
|
|
||||||
return res.sendStatus(422) // Unprocessable Entity
|
|
||||||
}
|
|
||||||
UserRegistrationHandler.registerNewUserAndSendActivationEmail(
|
|
||||||
email,
|
|
||||||
(error, user, setNewPasswordUrl) => {
|
|
||||||
if (error != null) {
|
|
||||||
return next(error)
|
|
||||||
}
|
|
||||||
res.json({
|
|
||||||
email: user.email,
|
|
||||||
setNewPasswordUrl,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
|
|
||||||
changePassword: expressify(changePassword),
|
changePassword: expressify(changePassword),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1010,27 +1010,12 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Admin Stuff
|
|
||||||
webRouter.get(
|
webRouter.get(
|
||||||
'/admin',
|
'/admin',
|
||||||
AuthorizationMiddleware.ensureUserIsSiteAdmin,
|
AuthorizationMiddleware.ensureUserIsSiteAdmin,
|
||||||
AdminController.index
|
AdminController.index
|
||||||
)
|
)
|
||||||
webRouter.get(
|
|
||||||
'/admin/user',
|
|
||||||
AuthorizationMiddleware.ensureUserIsSiteAdmin,
|
|
||||||
(req, res) => res.redirect('/admin/register')
|
|
||||||
) // this gets removed by admin-panel addon
|
|
||||||
webRouter.get(
|
|
||||||
'/admin/register',
|
|
||||||
AuthorizationMiddleware.ensureUserIsSiteAdmin,
|
|
||||||
AdminController.registerNewUser
|
|
||||||
)
|
|
||||||
webRouter.post(
|
|
||||||
'/admin/register',
|
|
||||||
AuthorizationMiddleware.ensureUserIsSiteAdmin,
|
|
||||||
UserController.register
|
|
||||||
)
|
|
||||||
if (!Features.hasFeature('saas')) {
|
if (!Features.hasFeature('saas')) {
|
||||||
webRouter.post(
|
webRouter.post(
|
||||||
'/admin/openEditor',
|
'/admin/openEditor',
|
||||||
|
|
|
@ -1,8 +1,32 @@
|
||||||
const Path = require('path')
|
const Path = require('path')
|
||||||
const UserGetter = require('../../../../app/src/Features/User/UserGetter')
|
const UserGetter = require('../../../../app/src/Features/User/UserGetter')
|
||||||
|
const UserRegistrationHandler = require('../../../../app/src/Features/User/UserRegistrationHandler')
|
||||||
const ErrorController = require('../../../../app/src/Features/Errors/ErrorController')
|
const ErrorController = require('../../../../app/src/Features/Errors/ErrorController')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
registerNewUser(req, res, next) {
|
||||||
|
res.render(Path.resolve(__dirname, '../views/user/register'))
|
||||||
|
},
|
||||||
|
|
||||||
|
register(req, res, next) {
|
||||||
|
const { email } = req.body
|
||||||
|
if (email == null || email === '') {
|
||||||
|
return res.sendStatus(422) // Unprocessable Entity
|
||||||
|
}
|
||||||
|
UserRegistrationHandler.registerNewUserAndSendActivationEmail(
|
||||||
|
email,
|
||||||
|
(error, user, setNewPasswordUrl) => {
|
||||||
|
if (error != null) {
|
||||||
|
return next(error)
|
||||||
|
}
|
||||||
|
res.json({
|
||||||
|
email: user.email,
|
||||||
|
setNewPasswordUrl,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
},
|
||||||
|
|
||||||
activateAccountPage(req, res, next) {
|
activateAccountPage(req, res, next) {
|
||||||
// An 'activation' is actually just a password reset on an account that
|
// An 'activation' is actually just a password reset on an account that
|
||||||
// was set with a random password originally.
|
// was set with a random password originally.
|
||||||
|
|
|
@ -1,12 +1,30 @@
|
||||||
const logger = require('@overleaf/logger')
|
const logger = require('@overleaf/logger')
|
||||||
const UserActivateController = require('./UserActivateController')
|
const UserActivateController = require('./UserActivateController')
|
||||||
const AuthenticationController = require('../../../../app/src/Features/Authentication/AuthenticationController')
|
const AuthenticationController = require('../../../../app/src/Features/Authentication/AuthenticationController')
|
||||||
|
const AuthorizationMiddleware = require('../../../../app/src/Features/Authorization/AuthorizationMiddleware')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
apply(webRouter) {
|
apply(webRouter) {
|
||||||
logger.log({}, 'Init UserActivate router')
|
logger.log({}, 'Init UserActivate router')
|
||||||
|
|
||||||
|
webRouter.get(
|
||||||
|
'/admin/user',
|
||||||
|
AuthorizationMiddleware.ensureUserIsSiteAdmin,
|
||||||
|
(req, res) => res.redirect('/admin/register')
|
||||||
|
)
|
||||||
|
|
||||||
webRouter.get('/user/activate', UserActivateController.activateAccountPage)
|
webRouter.get('/user/activate', UserActivateController.activateAccountPage)
|
||||||
AuthenticationController.addEndpointToLoginWhitelist('/user/activate')
|
AuthenticationController.addEndpointToLoginWhitelist('/user/activate')
|
||||||
|
|
||||||
|
webRouter.get(
|
||||||
|
'/admin/register',
|
||||||
|
AuthorizationMiddleware.ensureUserIsSiteAdmin,
|
||||||
|
UserActivateController.registerNewUser
|
||||||
|
)
|
||||||
|
webRouter.post(
|
||||||
|
'/admin/register',
|
||||||
|
AuthorizationMiddleware.ensureUserIsSiteAdmin,
|
||||||
|
UserActivateController.register
|
||||||
|
)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
extends ../layout
|
extends ../../../../../app/views/layout
|
||||||
|
|
||||||
block content
|
block content
|
||||||
.content.content-alt
|
.content.content-alt
|
|
@ -17,21 +17,27 @@ describe('UserActivateController', function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.UserGetter = { getUser: sinon.stub() }
|
this.UserGetter = { getUser: sinon.stub() }
|
||||||
|
this.UserRegistrationHandler = {}
|
||||||
this.ErrorController = { notFound: sinon.stub() }
|
this.ErrorController = { notFound: sinon.stub() }
|
||||||
this.UserActivateController = SandboxedModule.require(MODULE_PATH, {
|
this.UserActivateController = SandboxedModule.require(MODULE_PATH, {
|
||||||
requires: {
|
requires: {
|
||||||
'../../../../app/src/Features/User/UserGetter': this.UserGetter,
|
'../../../../app/src/Features/User/UserGetter': this.UserGetter,
|
||||||
|
'../../../../app/src/Features/User/UserRegistrationHandler':
|
||||||
|
this.UserRegistrationHandler,
|
||||||
'../../../../app/src/Features/Errors/ErrorController':
|
'../../../../app/src/Features/Errors/ErrorController':
|
||||||
this.ErrorController,
|
this.ErrorController,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
this.req = {
|
this.req = {
|
||||||
|
body: {},
|
||||||
query: {},
|
query: {},
|
||||||
session: {
|
session: {
|
||||||
user: this.user,
|
user: this.user,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
this.res = {}
|
this.res = {
|
||||||
|
json: sinon.stub(),
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('activateAccountPage', function () {
|
describe('activateAccountPage', function () {
|
||||||
|
@ -86,4 +92,30 @@ describe('UserActivateController', function () {
|
||||||
this.UserActivateController.activateAccountPage(this.req, this.res)
|
this.UserActivateController.activateAccountPage(this.req, this.res)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('register', function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
this.UserRegistrationHandler.registerNewUserAndSendActivationEmail = sinon
|
||||||
|
.stub()
|
||||||
|
.callsArgWith(1, null, this.user, (this.url = 'mock/url'))
|
||||||
|
this.req.body.email = this.user.email = this.email = 'email@example.com'
|
||||||
|
this.UserActivateController.register(this.req, this.res)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should register the user and send them an email', function () {
|
||||||
|
sinon.assert.calledWith(
|
||||||
|
this.UserRegistrationHandler.registerNewUserAndSendActivationEmail,
|
||||||
|
this.email
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return the user and activation url', function () {
|
||||||
|
this.res.json
|
||||||
|
.calledWith({
|
||||||
|
email: this.email,
|
||||||
|
setNewPasswordUrl: this.url,
|
||||||
|
})
|
||||||
|
.should.equal(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -43,7 +43,6 @@ describe('UserController', function () {
|
||||||
}
|
}
|
||||||
this.User = { findById: sinon.stub().callsArgWith(1, null, this.user) }
|
this.User = { findById: sinon.stub().callsArgWith(1, null, this.user) }
|
||||||
this.NewsLetterManager = { unsubscribe: sinon.stub().callsArgWith(1) }
|
this.NewsLetterManager = { unsubscribe: sinon.stub().callsArgWith(1) }
|
||||||
this.UserRegistrationHandler = { registerNewUser: sinon.stub() }
|
|
||||||
this.AuthenticationController = {
|
this.AuthenticationController = {
|
||||||
establishUserSession: sinon.stub().callsArg(2),
|
establishUserSession: sinon.stub().callsArg(2),
|
||||||
}
|
}
|
||||||
|
@ -104,7 +103,6 @@ describe('UserController', function () {
|
||||||
User: this.User,
|
User: this.User,
|
||||||
},
|
},
|
||||||
'../Newsletter/NewsletterManager': this.NewsLetterManager,
|
'../Newsletter/NewsletterManager': this.NewsLetterManager,
|
||||||
'./UserRegistrationHandler': this.UserRegistrationHandler,
|
|
||||||
'../Authentication/AuthenticationController':
|
'../Authentication/AuthenticationController':
|
||||||
this.AuthenticationController,
|
this.AuthenticationController,
|
||||||
'../Authentication/SessionManager': this.SessionManager,
|
'../Authentication/SessionManager': this.SessionManager,
|
||||||
|
@ -558,32 +556,6 @@ describe('UserController', function () {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('register', function () {
|
|
||||||
beforeEach(function () {
|
|
||||||
this.UserRegistrationHandler.registerNewUserAndSendActivationEmail = sinon
|
|
||||||
.stub()
|
|
||||||
.callsArgWith(1, null, this.user, (this.url = 'mock/url'))
|
|
||||||
this.req.body.email = this.user.email = this.email = 'email@example.com'
|
|
||||||
this.UserController.register(this.req, this.res)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should register the user and send them an email', function () {
|
|
||||||
sinon.assert.calledWith(
|
|
||||||
this.UserRegistrationHandler.registerNewUserAndSendActivationEmail,
|
|
||||||
this.email
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return the user and activation url', function () {
|
|
||||||
this.res.json
|
|
||||||
.calledWith({
|
|
||||||
email: this.email,
|
|
||||||
setNewPasswordUrl: this.url,
|
|
||||||
})
|
|
||||||
.should.equal(true)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('clearSessions', function () {
|
describe('clearSessions', function () {
|
||||||
describe('success', function () {
|
describe('success', function () {
|
||||||
it('should call revokeAllUserSessions', function (done) {
|
it('should call revokeAllUserSessions', function (done) {
|
||||||
|
|
Loading…
Reference in a new issue