Process JWT messages over WebSockets

This commit is contained in:
D. Berge
2024-05-01 10:06:35 +02:00
parent d2f94dbb88
commit a9270157ea

View File

@@ -2,6 +2,7 @@ const ws = require('ws');
const URL = require('url');
const { listen } = require('../lib/db/notify');
const channels = require('../lib/db/channels');
const jwt = require('../lib/jwt');
function start (server, pingInterval=30000) {
@@ -9,7 +10,31 @@ function start (server, pingInterval=30000) {
wsServer.on('connection', socket => {
socket.alive = true;
socket.on('pong', function () { this.alive = true; })
socket.on('message', message => console.log(message));
socket.on('message', message => {
// console.log("Websocket message:");
// console.log(message);
try {
const payload = JSON.parse(message);
if (payload?.jwt) {
// console.log("Refresh JWT token", payload);
const decoded = jwt.checkValidCredentials({jwt: payload.jwt});
// console.log("Decoded", decoded);
if (decoded) {
delete decoded.exp;
const token = jwt.issue(decoded);
socket.send(JSON.stringify({
channel: ".jwt",
payload: {
token
}
}));
}
}
} catch (err) {
console.warn("Websocket message decoding failed", err);
}
});
});
server.on('upgrade', (request, socket, head) => {