53 lines
1.7 KiB
JavaScript
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}/`);
|