// (C) 2007-2019 GoodData Corporation import { IUser } from "../../model/User"; import { Application } from "express"; import { IEndpoint } from "../Endpoint"; import { IMockProject } from "../../model/MockProject"; import * as HttpStatusCodes from "http-status-codes"; import { profileUri, loginStateUri } from "../../route/routes"; import { authorize, isAuthorized } from "../helpers/authorization"; const PASSWORD = "jindrisska"; export interface IUserLoginRequest { postUserLogin: { login: string; password: string; remember: number; verify_level: number; }; } export interface IUserLoginResponse { userLogin: { profile: string; state: string; }; } interface IBadCredentialsError { component: string; message: string; parameters: string[]; } function createSignInResponse(user: IUser): IUserLoginResponse { return { userLogin: { profile: profileUri(user.identifier), state: loginStateUri(user.identifier), }, }; } function createBadCredentialsError(): IBadCredentialsError { return { component: "Webapp", message: "Bad Login or Password!", parameters: [], }; } export const login: IEndpoint = { register(app: Application, project: IMockProject) { app.post("/gdc/account/login", (req, res) => { const request: IUserLoginRequest = req.body; const { login: userLogin, password } = request.postUserLogin; const user = project.users.find(u => u.email === userLogin && password === PASSWORD); if (user) { authorize(req.session, user); res.status(HttpStatusCodes.OK).json(createSignInResponse(user)); } else { res.status(HttpStatusCodes.UNAUTHORIZED).json(createBadCredentialsError()); } }); app.get("/gdc/account/token", (req, res) => { if (isAuthorized(req.session)) { res.status(HttpStatusCodes.OK).end(); } else { res.status(HttpStatusCodes.UNAUTHORIZED).end(); } }); app.delete("/gdc/account/login/:userid", (req, res) => { req.session.destroy(() => { res.status(HttpStatusCodes.NO_CONTENT).end(); }); }); return app; }, };