library-ts/node/users/requirements/user/UserIsLoggedIn.ts

42 lines
1.0 KiB
TypeScript

import { FastifyRequest, FastifyReply } from 'fastify';
import { RequestRequirement } from '../RequestRequirement';
import { Message } from '../../../../browser/messages/Message';
export class UserIsLoggedIn extends RequestRequirement
{
async handle( request:FastifyRequest, reply:FastifyReply ):Promise<Message[]>
{
let requestBody = request.body;
let tokenData = requestBody as { token:string };
if ( ! tokenData )
{
return this.sendError( "No token data" );
}
let tokenID = tokenData.token;
let session = this.ums._sessions.get( tokenID );
if ( ! session )
{
return this.sendError( "No session for token: " + tokenID );
}
let token = this.ums.tokenDB._tokens.get( tokenID );
let messages = [];
let isValid = await this.ums.tokenDB.validate( token, request.ip, messages );
if ( ! isValid )
{
let message = messages.length > 0 ? ( " " + messages.join( ", " ) ) : "";
return this.sendError( "Invalid token: " + tokenID + message );
}
return this.giveOK();
}
}