/** * Required External Modules and Interfaces */ import express, {Request, Response} from 'express'; import * as UserService from '../user/user.service'; import logger from '../../../middleware/logger'; import {Guid} from 'guid-typescript'; /** * Router Definition */ export const registerRouter = express.Router(); registerRouter.post('/:isDevCall', async (req: Request, res: Response) => { try { let username: string = ''; let email: string = ''; let firstName: string = ''; let lastName: string = ''; let password: string = ''; let useDev: boolean = (req.params.isDevCall ?? '') === 'dev'; // TBD // Send error when content-type header is missing if (!req.headers['content-type']) { res.status(400).send({ 'status': 'MISSING_CONTENT_TYPE', 'message': 'Please set the content-type header field' }); return; } // API accepts both JSON in body and HTTP parameters if (req.headers['content-type'] === 'application/json') { username = req.body.username; email = req.body.email; firstName = req.body.firstName; lastName = req.body.lastName; password = req.body.password; } else if (req.headers['content-type'] === 'application/x-www-form-urlencoded') { username = (req.query.username ?? '').toString(); email = (req.query.email ?? '').toString(); firstName = (req.query.firstName ?? '').toString(); lastName = (req.query.lastName ?? '').toString(); password = (req.query.password ?? '').toString(); } let userIP = req.socket.remoteAddress ?? ''; let deviceInfo = req.headers['user-agent'] ?? ''; if (username === '' || email === '' || firstName === '' || lastName === '' || password === '') { res.status(400).send({ 'status': 'WRONG_PARAMS', 'message': 'Missing or wrong parameters' }); return; } // Check for invalid username / email const status = await UserService.checkUsernameAndEmail(useDev, username, email); if (status.hasProblems) { // Username and/or email are duplicates, return error res.status(400).send({ 'message': status.messages[0], 'status': status.status[0], 'additionalMessages': status.messages.slice(1), 'additionalStatus': status.status.slice(1) }); return; } // Create user let session = await UserService.registerUser(useDev, username, email, firstName, lastName, password, userIP, deviceInfo); res.status(201).send(session); } catch (e) { let errorGuid = Guid.create().toString(); logger.error('Error handling a request: ' + e.message, {reference: errorGuid}); res.status(500).send({ 'status': 'PROCESSING_ERROR', 'message': 'Internal Server Error. Try again later.', 'reference': errorGuid }); } });