import { RegExpUtility } from "../../../browser/text/RegExpUtitlity"; import { CryptIO } from "../../crypt/CryptIO"; import { RJLog } from "../../log/RJLog"; import { RequestHandler, RequestType } from "../RequestHandler"; import { FastifyRequest, FastifyReply } from 'fastify'; import { VariableReplacer, Variables } from "../../../browser/text/replacing/VariableReplacer"; import { ConfirmSignUpHandler } from "./confirm-signup"; import { Session } from "../Session"; import { UserLoginData } from "../UserData"; import { ISOTimeStamp } from "../../../browser/date/ISOTimeStamp"; import { Arrays } from "../../../browser/tools/Arrays"; export class LoginHandler extends RequestHandler { static url = "/login"; constructor(){ super( RequestType.POST, LoginHandler.url ); } async _handle( request:FastifyRequest, reply:FastifyReply ) { let requestBody = JSON.parse( request.body as string ); let { email, password, userName } = requestBody as { email: string; password: string; userName: string }; if ( ! email || ! password ) { return this.sendError( "Missing email or password:" + `"${requestBody}"` ); } let loginToken = await this.userDB.login( email, password, this.ip ); if ( ! loginToken ) { return this.sendError( "Login failed" ); } let user = await this.userDB.byEmail( email ); let loginData = new UserLoginData(); loginData.timeStamp = ISOTimeStamp.now(); loginData.location = await this.getLocation(); loginData.userAgent = this.userAgent; user.lastLogins = user.lastLogins || []; user.lastLogins.push( loginData ); Arrays.shiftToSize( user.lastLogins, this._ums._settings.maxLogins ); let session = new Session(); session.token = loginToken.id; session.userID = user.id; this._ums._sessions.set( session.token, session ); await this.userDB.save(); return this.sendDataInfo( "Login successfull", { token: session.token } ); } }