import { FastifyRequest, FastifyReply } from 'fastify'; import { Message } from '../../../../browser/messages/Message'; import { RequestRequirement } from '../../requirements/RequestRequirement'; import { Permission } from '../../permissions/Permission'; export class UserCanUseApp extends RequestRequirement { async handle( request:FastifyRequest, reply:FastifyReply ):Promise { let requestBody = request.body; let appData = requestBody as { token:string, appID:string }; if ( ! appData ) { return this.sendError( "No token data" ); } if ( this.ums._settings.userApps.indexOf( appData.appID ) == -1 ) { return this.sendError( "Invalid app id: " + appData.appID + ". Defined apps:" + this.ums._settings.userApps.join( ", " ) ); } let user = await this.ums.getUser( request ); let appPermissionID = "apps." + appData.appID; let hasPermission = await this.ums.userDB.hasPermission( user, appPermissionID ); if ( ! hasPermission ) { return this.sendError( "Permission for app not found" ); } return this.giveOK(); } }