// welcome.js // Copyright (C) 2024 DTP Technologies, LLC // All Rights Reserved 'use strict'; import express from 'express'; import { SiteController } from '../../lib/site-controller.js'; export default class WelcomeController extends SiteController { static get name ( ) { return 'WelcomeController'; } static get slug ( ) { return 'welcome'; } constructor (dtp) { super(dtp, WelcomeController); } async start ( ) { const { dtp } = this; // const { limiter: limiterService } = dtp.services; this.log.info('WelcomeController starting'); const router = express.Router(); dtp.app.use('/welcome', router); router.use(async (req, res, next) => { res.locals.currentView = WelcomeController.name; return next(); }); if (process.env.DTP_MEMBER_SIGNUP === 'enabled') { router.post('/signup', this.postSignup.bind(this)); router.get('/signup-complete', this.getSignupComplete.bind(this)); router.get('/signup', this.getSignup.bind(this)); } router.get('/login', this.getLogin.bind(this)); router.get('/', this.getHome.bind(this)); } async postSignup (req, res, next) { const { user: userService } = this.dtp.services; try { this.log.info('create new user account', { body: req.body }); res.locals.user = await userService.create(req.body); req.login(res.locals.user, async (error) => { if (error) { return next(error); } return res.redirect('/'); }); } catch (error) { this.log.error('failed to create new User account', { error }); return next(error); } } async getSignupComplete (req, res) { res.render('welcome/signup-complete'); } async getSignup (req, res) { res.render('welcome/signup'); } async getLogin (req, res) { const { csrfToken: csrfTokenService } = this.dtp.services; res.locals.csrfLogin = await csrfTokenService.create(req, { name: 'login', expiresMinutes: 15, }); res.render('welcome/login'); } async getHome (req, res) { res.render('welcome/home'); } }