71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
/**
|
|
* 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: any) {
|
|
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
|
|
});
|
|
}
|
|
});
|