2025-11-11 21:46:18 +00:00
|
|
|
import { RegExpUtility } from "../../../../browser/text/RegExpUtitlity";
|
|
|
|
|
import { CryptIO } from "../../../crypt/CryptIO";
|
|
|
|
|
import { RJLog } from "../../../log/RJLog";
|
|
|
|
|
import { RequestHandler, RequestType } from "../../RequestHandler";
|
2025-11-10 17:41:48 +00:00
|
|
|
import { FastifyRequest, FastifyReply } from 'fastify';
|
2025-11-11 21:46:18 +00:00
|
|
|
import { VariableReplacer, Variables } from "../../../../browser/text/replacing/VariableReplacer";
|
2025-11-10 17:41:48 +00:00
|
|
|
import { ConfirmSignUpHandler } from "./confirm-signup";
|
2025-11-11 21:46:18 +00:00
|
|
|
import { Session } from "../../Session";
|
|
|
|
|
import { UserLoginData } from "../../UserData";
|
|
|
|
|
import { ISOTimeStamp } from "../../../../browser/date/ISOTimeStamp";
|
|
|
|
|
import { Arrays } from "../../../../browser/tools/Arrays";
|
2025-11-10 17:41:48 +00:00
|
|
|
|
|
|
|
|
export class LoginHandler extends RequestHandler
|
|
|
|
|
{
|
|
|
|
|
static url = "/login";
|
|
|
|
|
constructor(){ super( RequestType.POST, LoginHandler.url ); }
|
|
|
|
|
|
|
|
|
|
async _handle( request:FastifyRequest, reply:FastifyReply )
|
|
|
|
|
{
|
2025-11-11 13:13:39 +00:00
|
|
|
let requestBody = request.body;
|
2025-11-10 17:41:48 +00:00
|
|
|
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;
|
2025-11-24 14:25:10 +00:00
|
|
|
loginData.renewal = false;
|
2025-11-10 17:41:48 +00:00
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
2025-11-15 20:18:53 +00:00
|
|
|
await this.ums.saveSessionData();
|
|
|
|
|
|
2025-11-10 17:41:48 +00:00
|
|
|
|
2025-11-24 14:25:10 +00:00
|
|
|
return this.sendDataInfo( "Login successfull", { token: session.token, renewal: loginToken.renewalToken } );
|
2025-11-10 17:41:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|