// welcome.js // Copyright (C) 2024 DTP Technologies, LLC // All Rights Reserved 'use strict'; const DTP_COMPONENT_NAME = 'welcome'; 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'; } static create (dtp) { const instance = new WelcomeController(dtp); return instance; } constructor (dtp) { super(dtp, DTP_COMPONENT_NAME); } 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 = DTP_COMPONENT_NAME; return next(); }); router.post('/signup', this.postSignup.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); res.render('welcome/signup-complete'); } catch (error) { this.log.error('failed to create new User account', { error }); return next(error); } } 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'); } }