98 lines
3.3 KiB
JavaScript
98 lines
3.3 KiB
JavaScript
const FormController = require('flitter-auth/controllers/Forms')
|
|
|
|
/*
|
|
* Handles views and processing for auth registration/login/logout/etc.
|
|
* Most handlers are inherited from the default flitter-auth/controllers/Forms
|
|
* controller, however you can override them here as you need.
|
|
*/
|
|
class Forms extends FormController {
|
|
static get services() {
|
|
return [...super.services, 'Vue', 'models', 'jobs']
|
|
}
|
|
|
|
async registration_provider_get(req, res, next) {
|
|
if ( req.session.auth.flow ) {
|
|
req.session.registrant_flow = req.session.auth.flow
|
|
}
|
|
|
|
return res.page('auth:register', {
|
|
...this.Vue.data({})
|
|
})
|
|
}
|
|
|
|
async email_verify_keyaction(req, res, next) {
|
|
if ( !req.trap.has_trap('verify_email') ) return res.redirect(req.session.email_verify_flow || '/dash/profile')
|
|
req.user.email_verified = true
|
|
await req.user.save()
|
|
await req.trap.end()
|
|
const url = req.session.email_verify_flow || '/dash/profile'
|
|
return res.redirect(url)
|
|
}
|
|
|
|
async show_verify_email(req, res, next) {
|
|
if ( !req.trap.has_trap('verify_email') ) return res.redirect(req.session.email_verify_flow || '/dash/profile')
|
|
const verify_queue = this.jobs.queue('verifications')
|
|
await verify_queue.add('SendVerificationEmail', { user_id: req.user.id })
|
|
|
|
return res.page('public:message', {
|
|
...this.Vue.data({
|
|
message: req.T('auth.must_verify_email'),
|
|
actions: [
|
|
{
|
|
text: 'Send Verification E-Mail',
|
|
action: 'redirect',
|
|
next: '/auth/verify-email/sent',
|
|
},
|
|
],
|
|
})
|
|
})
|
|
}
|
|
|
|
async send_verify_email(req, res, next) {
|
|
if ( !req.trap.has_trap('verify_email') ) return res.redirect(req.session.email_verify_flow || '/dash/profile')
|
|
return res.page('public:message', {
|
|
...this.Vue.data({
|
|
message: req.T('auth.verify_email_sent'),
|
|
actions: [
|
|
{
|
|
text: 'Re-send Verification E-Mail',
|
|
action: 'redirect',
|
|
next: '/auth/verify-email/sent',
|
|
},
|
|
],
|
|
})
|
|
})
|
|
}
|
|
|
|
async finish_registration(req, res, next) {
|
|
if ( req.trap.has_trap() && req.trap.get_trap() === 'registrant_flow' ) await req.trap.end()
|
|
const dest = req.session.registrant_flow || '/dash/profile'
|
|
return res.redirect(dest)
|
|
}
|
|
|
|
async login_provider_get(req, res, next) {
|
|
const Setting = this.models.get('Setting')
|
|
|
|
return res.page('auth:login', {
|
|
...this.Vue.data({
|
|
login_message: req.session?.auth?.message || req.T('auth.sign_in_to_continue'),
|
|
registration_enabled: await Setting.get('auth.allow_registration')
|
|
}),
|
|
})
|
|
}
|
|
|
|
async logout_provider_present_success(req, res, next) {
|
|
return this.Vue.auth_message(res, {
|
|
message: req.T('auth.logged_out'),
|
|
next_destination: '/',
|
|
})
|
|
}
|
|
|
|
async logout_provider_clean_session(req, res, next) {
|
|
await req.user.logout(req)
|
|
return next()
|
|
}
|
|
}
|
|
|
|
module.exports = exports = Forms
|