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 { let requestBody = request.body; let tokenData = requestBody as { token:string }; if ( ! tokenData ) { return Promise.resolve( [ Message.Error( "No token data" )] ); } let tokenID = tokenData.token; let session = this._handler._ums._sessions.get( tokenID ); if ( ! session ) { return Promise.resolve( [ Message.Error( "No session for token:" + tokenID )] ); } let token = this._handler._ums.tokenDB._tokens.get( tokenID ); let isValid = await this._handler._ums.tokenDB.validate( token, request.ip ); if ( ! isValid ) { return Promise.resolve( [ Message.Error( "Invalid token" + tokenID )] ); } return Promise.resolve( [] ); } }