library-ts/node/users/handlers/_/renew.ts

70 lines
2.2 KiB
TypeScript
Raw Normal View History

2025-11-24 14:25:10 +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 RenewHandler extends RequestHandler
{
static url = "/renew";
constructor(){ super( RequestType.POST, RenewHandler.url ); }
async _handle( request:FastifyRequest, reply:FastifyReply )
{
let requestBody = request.body;
let { token, renewal } = requestBody as { token: string; renewal: string };
if ( ! token || ! renewal )
{
return this.sendError( "Missing token or renewal:" + `"${requestBody}"` );
}
let session = this._ums._sessions.get( token );
if ( ! session )
{
return this.sendError( "Invalid token" );
}
let user = await this._ums.userDB.byID( session.userID );
let renewToken = await this.userDB.renew( token, renewal, this.ip );
if ( ! renewToken )
{
return this.sendError( "Renewal failed" );
}
let loginData = new UserLoginData();
loginData.timeStamp = ISOTimeStamp.now();
loginData.location = await this.getLocation();
loginData.userAgent = this.userAgent;
loginData.renewal = true;
user.lastLogins = user.lastLogins || [];
user.lastLogins.push( loginData );
Arrays.shiftToSize( user.lastLogins, this._ums._settings.maxLogins );
this._ums._sessions.delete( session.token );
session.token = renewToken.id;
this._ums._sessions.set( session.token, session );
await this.userDB.save();
await this.ums.saveSessionData();
return this.sendDataInfo( "Renewal successfull", { token: session.token, renewal: renewToken.renewalToken } );
}
}