library-ts/node/users/handlers/login.ts

61 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-11-10 17:41:48 +00:00
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 } );
}
}