Initial commit
This commit is contained in:
commit
d5d35b3e0f
0
debian/.debhelper/generated/turnserverauth/installed-by-dh_installdocs
vendored
Normal file
0
debian/.debhelper/generated/turnserverauth/installed-by-dh_installdocs
vendored
Normal file
5
debian/changelog
vendored
Normal file
5
debian/changelog
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
turnserverauth (1.0-1) stable; urgency=medium
|
||||||
|
|
||||||
|
* Initial release.
|
||||||
|
|
||||||
|
-- Benoit LORAND <benoit.lorand@blorand.org> Fri, 20 Mar 2020 01:40:00 +0100
|
1
debian/compat
vendored
Normal file
1
debian/compat
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
10
|
17
debian/control
vendored
Normal file
17
debian/control
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
Source: turnserverauth
|
||||||
|
Maintainer: Benoit LORAND <benoit.lorand@blorand.fr>
|
||||||
|
Section: misc
|
||||||
|
Priority: optional
|
||||||
|
Standards-Version: 3.9.2
|
||||||
|
Build-Depends: debhelper (>= 9)
|
||||||
|
|
||||||
|
Package: turnserverauth
|
||||||
|
Architecture: all
|
||||||
|
Depends: ${shlibs:Depends},
|
||||||
|
${misc:Depends},
|
||||||
|
nodejs,
|
||||||
|
npm
|
||||||
|
Suggests: nginx
|
||||||
|
Section: BLORAND
|
||||||
|
Priority: optional
|
||||||
|
Description: WebService pour distribuer des authentifications éphémères TURN
|
0
debian/copyright
vendored
Normal file
0
debian/copyright
vendored
Normal file
28
debian/postinst
vendored
Executable file
28
debian/postinst
vendored
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
configure)
|
||||||
|
npm --prefix /opt/turnserverauth/ install hmacsha1
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl --now enable turnserverauth.service
|
||||||
|
|
||||||
|
;;
|
||||||
|
|
||||||
|
abort-upgrade|abort-remove|abort-deconfigure)
|
||||||
|
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "postinst called with unknown argument \`$1'" >&2
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# dh_installdeb will replace this with shell code automatically
|
||||||
|
# generated by other debhelper scripts.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
exit 0
|
9
debian/rules
vendored
Executable file
9
debian/rules
vendored
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
install -D -m 0644 turnserverauth.js $$(pwd)/debian/turnserverauth/opt/turnserverauth/turnserverauth.js
|
||||||
|
install -D -m 0644 turnserverauth $$(pwd)/debian/turnserverauth/etc/default/turnserverauth
|
||||||
|
install -D -m 0644 turnserverauth.service $$(pwd)/debian/turnserverauth/lib/systemd/system/turnserverauth.service
|
||||||
|
|
1
debian/source/format
vendored
Normal file
1
debian/source/format
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
3.0 (quilt)
|
4
turnserverauth
Normal file
4
turnserverauth
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
NODE_PORT=5000
|
||||||
|
NODE_LISTEN_IP=127.0.0.1
|
||||||
|
SECRET='changeme'
|
||||||
|
TTL=8400
|
52
turnserverauth.js
Normal file
52
turnserverauth.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
"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}/`);
|
14
turnserverauth.service
Normal file
14
turnserverauth.service
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=turnserverauth.js - webservice for negociating turn authentication
|
||||||
|
Documentation=https://www.blorand.org
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=-/etc/default/turnserverauth
|
||||||
|
Type=simple
|
||||||
|
User=www-data
|
||||||
|
ExecStart=/usr/bin/node /opt/turnserverauth/turnserverauth.js
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
Loading…
Reference in New Issue
Block a user