@soketi/soketi
Version:
Just another simple, fast, and resilient open-source WebSockets server.
45 lines (44 loc) • 1.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PrivateChannelManager = void 0;
const public_channel_manager_1 = require("./public-channel-manager");
const Pusher = require('pusher');
class PrivateChannelManager extends public_channel_manager_1.PublicChannelManager {
join(ws, channel, message) {
var _a;
let passedSignature = (_a = message === null || message === void 0 ? void 0 : message.data) === null || _a === void 0 ? void 0 : _a.auth;
return this.signatureIsValid(ws.app, ws.id, message, passedSignature).then(isValid => {
if (!isValid) {
return {
ws,
success: false,
errorCode: 4009,
errorMessage: 'The connection is unauthorized.',
authError: true,
type: 'AuthError',
};
}
return super.join(ws, channel, message).then(joinResponse => {
if (joinResponse.success && ws.userAuthenticationTimeout) {
clearTimeout(ws.userAuthenticationTimeout);
}
return joinResponse;
});
});
}
signatureIsValid(app, socketId, message, signatureToCheck) {
return this.getExpectedSignature(app, socketId, message).then(expectedSignature => {
return signatureToCheck === expectedSignature;
});
}
getExpectedSignature(app, socketId, message) {
return new Promise(resolve => {
let token = new Pusher.Token(app.key, app.secret);
resolve(app.key + ':' + token.sign(this.getDataToSignForSignature(socketId, message)));
});
}
getDataToSignForSignature(socketId, message) {
return `${socketId}:${message.data.channel}`;
}
}
exports.PrivateChannelManager = PrivateChannelManager;