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