/** * 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 loginRouter = express.Router(); loginRouter.post('/:isDevCall', async (req: Request, res: Response) => { try { let username: string = ''; let email: 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; 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(); password = (req.query.password ?? '').toString(); } else { res.status(400).send({ 'status': 'WRONG_CONTENT_TYPE', 'message': 'The transmitted content-type is not supported' }); return; } let userIP = req.socket.remoteAddress ?? ''; let deviceInfo = req.headers['user-agent'] ?? ''; if ((username === '' && email === '') || password === '') { res.status(400).send({ 'status': 'WRONG_PARAMS', 'message': 'Missing or wrong parameters' }); return; } // Check password and create session let session = await UserService.loginUser(useDev, username, email, password, userIP, deviceInfo); res.status(200).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 }); } });