seepur/app/Middleware/WsCallAuth.js

34 lines
939 B
JavaScript

'use strict'
/** @typedef {import('@adonisjs/framework/src/Request')} Request */
/** @typedef {import('@adonisjs/framework/src/Response')} Response */
/** @typedef {import('@adonisjs/framework/src/View')} View */
const Call = use('App/Models/Call');
class WsCallAuth {
/**
* @param {object} ctx
* @param {Request} ctx.request
* @param {Function} next
*/
async wsHandle(ctx, next) {
const {request, auth, socket} = ctx;
const callId = Number(socket.topic.split(':')[1]);
const user = auth.user;
const call = await Call.find(callId);
if (!call) {
throw new Error('Call not found');
}
if (call.state === 'ENDED') throw new Error('This call has ended');
if (user.id === call.parent_id || user.id === call.guest_id) {
ctx.call = call;
await next()
}
// call next to advance the request
else
throw new Error('Not allowed');
}
}
module.exports = WsCallAuth