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.
 
 
 
 

82 lines
2.1 KiB

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