| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- UserGetter = require("./UserGetter")
- UserSessionsManager = require("./UserSessionsManager")
- ErrorController = require("../Errors/ErrorController")
- logger = require("logger-sharelatex")
- Settings = require("settings-sharelatex")
- request = require 'request'
- fs = require('fs')
- AuthenticationController = require('../Authentication/AuthenticationController')
- module.exports = UserPagesController =
- registerPage : (req, res)->
- sharedProjectData =
- project_name:req.query.project_name
- user_first_name:req.query.user_first_name
- newTemplateData = {}
- if req.session.templateData?
- newTemplateData.templateName = req.session.templateData.templateName
- res.render 'user/register',
- title: 'register'
- sharedProjectData: sharedProjectData
- newTemplateData: newTemplateData
- new_email:req.query.new_email || ""
- activateAccountPage: (req, res) ->
- # An 'activation' is actually just a password reset on an account that
- # was set with a random password originally.
- logger.log query:req.query, "activiate account page called"
- if !req.query?.user_id? or !req.query?.token?
- return ErrorController.notFound(req, res)
- UserGetter.getUser req.query.user_id, {email: 1, loginCount: 1}, (error, user) ->
- return next(error) if error?
- if !user
- return ErrorController.notFound(req, res)
- if user.loginCount > 0
- logger.log user:user, "user has already logged in so is active, sending them to /login"
- # Already seen this user, so account must be activate
- # This lets users keep clicking the 'activate' link in their email
- # as a way to log in which, if I know our users, they will.
- res.redirect "/login?email=#{encodeURIComponent(user.email)}"
- else
- res.render 'user/activate',
- title: 'activate_account'
- email: user.email,
- token: req.query.token
- loginPage : (req, res)->
- # if user is being sent to /login with explicit redirect (redir=/foo),
- # such as being sent from the editor to /login, then set the redirect explicitly
- if req.query.redir? and !AuthenticationController._getRedirectFromSession(req)?
- logger.log {redir: req.query.redir}, "setting explicit redirect from login page"
- AuthenticationController.setRedirectInSession(req, req.query.redir)
- res.render 'user/login',
- title: 'login',
- email: req.query.email
- logoutPage: (req, res) ->
- res.render 'user/logout'
- renderReconfirmAccountPage: (req, res) ->
- page_data = {
- reconfirm_email: req?.session?.reconfirm_email
- }
- # when a user must reconfirm their account
- res.render 'user/reconfirm', page_data
- settingsPage : (req, res, next)->
- user_id = AuthenticationController.getLoggedInUserId(req)
- logger.log user: user_id, "loading settings page"
- shouldAllowEditingDetails = !(Settings?.ldap?.updateUserDetailsOnLogin) and !(Settings?.saml?.updateUserDetailsOnLogin)
- oauthProviders = Settings.oauthProviders || {}
- UserGetter.getUser user_id, (err, user)->
- return next(err) if err?
- UserPagesController._hasPassword user, (err, passwordPresent) ->
- if err
- logger.err {err}, "error getting password status from v1"
- res.render 'user/settings',
- title:'account_settings'
- user: user,
- hasPassword: passwordPresent,
- shouldAllowEditingDetails: shouldAllowEditingDetails
- languages: Settings.languages,
- accountSettingsTabActive: true,
- oauthProviders: UserPagesController._translateProviderDescriptions(oauthProviders, req),
- thirdPartyIds: UserPagesController._restructureThirdPartyIds(user),
- previewOauth: req.query.prvw?
- sessionsPage: (req, res, next) ->
- user = AuthenticationController.getSessionUser(req)
- logger.log user_id: user._id, "loading sessions page"
- UserSessionsManager.getAllUserSessions user, [req.sessionID], (err, sessions) ->
- if err?
- logger.err {user_id: user._id}, "error getting all user sessions"
- return next(err)
- res.render 'user/sessions',
- title: "sessions"
- sessions: sessions
- _hasPassword: (user, callback) ->
- request.get {
- url: "#{Settings.apis.v1.url}/api/v1/sharelatex/has_password"
- auth: { user: Settings.apis.v1.user, pass: Settings.apis.v1.pass }
- body: { user_id: user?.overleaf?.id }
- timeout: 20 * 1000
- json: true
- }, (err, response, body) ->
- if err
- # for errors assume password and show password setting form
- return callback(err, true)
- else if body?.has_password
- return callback(err, true)
- return callback(err, false)
- _restructureThirdPartyIds: (user) ->
- # 3rd party identifiers are an array of objects
- # this turn them into a single object, which
- # makes data easier to use in template
- return null if !user.thirdPartyIdentifiers || user.thirdPartyIdentifiers.length == 0
- user.thirdPartyIdentifiers.reduce (obj, identifier) ->
- obj[identifier.providerId] = identifier.externalUserId
- obj
- , {}
- _translateProviderDescriptions: (providers, req) ->
- result = {}
- if providers
- for provider, data of providers
- data.description = req.i18n.translate(data.descriptionKey, data.descriptionOptions)
- result[provider] = data
- return result
|