turnserverauth/turnserverauth.js

53 lines
1.7 KiB
JavaScript

//
//
//
"use strict";
const http = require('http');
const hmacsha1 = require('hmacsha1');
const port = Number(process.env.NODE_PORT);
const listenip = process.env.NODE_LISTEN_IP;
const secret = process.env.SECRET;
const ttl = Number(process.env.TTL);
function onRequest(request, response) {
if (!request.headers['x-forwarded-user'] || request.headers['x-forwarded-user'].indexOf('Basic ') === -1) {
// return response.status(401).json({ message: 'Missing Authorization Header' });
console.log('Missing Authorization Header');
} else {
const base64Credentials = request.headers['x-forwarded-user'].split(' ')[1];
const credentials = Buffer.from(base64Credentials, 'base64').toString('ascii');
var [httpusername, httppassword] = credentials.split(':');
}
var timestamp = Date.now() / 1000 | 0;
var expiry = (timestamp + ttl).toString(10);
var turnusername = expiry + ':' + httpusername;
var username_sha1 = hmacsha1(secret, turnusername);
var turnpassword = username_sha1;
const data = JSON.stringify({
username: turnusername,
password: turnpassword,
ttl: ttl,
uris: [
// "turn:turn.blorand.org:3478?transport=udp",
// "turn:turn.blorand.org:3479?transport=tcp",
"turns:turn.blorand.org:5349?transport=udp",
"turns:turn.blorand.org:5350?transport=tcp"
],
})
if (request.headers['x-forwarded-for'] == undefined) {
var IP = request.connection.remoteAddress;
} else {
var IP = request.headers['x-forwarded-for'];
}
console.log('turnauthserver : Requête reçue de : ' + IP);
response.statusCode = 200;
response.setHeader('Content-Type', 'application/json');
response.write(data);
response.end();
}
http.createServer(onRequest).listen(port, listenip);
console.log(`turnauthserver running at http://${listenip}:${port}/`);