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 } ); } }