diff --git a/ExpressAPI/src/routes/ApiRoutesManager.ts b/ExpressAPI/src/routes/ApiRoutesManager.ts index e8ff6deba9b3b529f29d6173b38130766fec33b2..64f4fdf7a86c1a5e2ad90c3cc36e56f099038d49 100644 --- a/ExpressAPI/src/routes/ApiRoutesManager.ts +++ b/ExpressAPI/src/routes/ApiRoutesManager.ts @@ -1,6 +1,7 @@ import { Express } from 'express-serve-static-core'; import RoutesManager from '../express/RoutesManager'; import BaseRoutes from './BaseRoutes'; +import SessionRoutes from './SessionRoutes'; class AdminRoutesManager implements RoutesManager { @@ -18,6 +19,7 @@ class AdminRoutesManager implements RoutesManager { registerOnBackend(backend: Express) { BaseRoutes.registerOnBackend(backend); + SessionRoutes.registerOnBackend(backend); } } diff --git a/ExpressAPI/src/routes/SessionRoutes.ts b/ExpressAPI/src/routes/SessionRoutes.ts new file mode 100644 index 0000000000000000000000000000000000000000..d370fec020109f7148ec2a846d4f86e31d57ea33 --- /dev/null +++ b/ExpressAPI/src/routes/SessionRoutes.ts @@ -0,0 +1,60 @@ +import { Express } from 'express-serve-static-core'; +import express from 'express'; +import * as ExpressValidator from 'express-validator'; +import { StatusCodes } from 'http-status-codes'; +import * as bcrypt from 'bcryptjs'; +import RoutesManager from '../express/RoutesManager'; +import ParamsValidatorMiddleware from '../middlewares/ParamsValidatorMiddleware'; +import ApiRequest from '../models/ApiRequest'; +import UserManager from '../managers/UserManager'; +import User from '../models/User'; + + +class SessionRoutes implements RoutesManager { + private static _instance: SessionRoutes; + + private constructor() { } + + public static get instance(): SessionRoutes { + if ( !SessionRoutes._instance ) { + SessionRoutes._instance = new SessionRoutes(); + } + + return SessionRoutes._instance; + } + + private readonly loginValidator: ExpressValidator.Schema = { + mail : { + trim : true, + notEmpty: true + }, + password: { + trim : true, + notEmpty: true + } + }; + + registerOnBackend(backend: Express) { + backend.post('/login', ParamsValidatorMiddleware.validate(this.loginValidator), this.login); + } + + private async login(req: ApiRequest, res: express.Response) { + const params: { mail: string, password: string } = req.body; + + const user: User | undefined = await UserManager.getByMail(params.mail); + + if ( user ) { + if ( bcrypt.compareSync(params.password, user.userPassword) ) { + req.session.profile = user; + + req.session.sendResponse(res, StatusCodes.OK); + return; + } + } + + req.session.sendResponse(res, StatusCodes.NOT_FOUND); + } +} + + +export default SessionRoutes.instance;