DTP Base provides a scalable and secure Node.js application development harness ready for production service.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

77 lines
1.9 KiB

// 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');
}
}