diff --git a/server/cert.pem b/server/cert.pem new file mode 100644 index 0000000..35466ed --- /dev/null +++ b/server/cert.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDazCCAlOgAwIBAgIUCxwidJiV5wAryWiBk5lYIRxcmQ8wDQYJKoZIhvcNAQEL +BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDAzMjYxNDAzMzNaFw0yMTAz +MjYxNDAzMzNaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw +HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCuBzkv9ucrpQIErhGh+oXZ/AJzmQdLf5yktJGLbnLZ +D81nE6cX6sbpPyehQRWwAf9a6LWGyQeK37ne4atxbJgsQlqaxWeZuovk0QJXhBrV +A3t9NdIDzzknH6NWzSPhOwDn86GvbMF52AE1kZyy1PIA72cGj7rJWaQAb1fK3BmP +GRGUCm/pJjXHrEaGH4S9EWI3AstX8M8gYFkAS9uWtWznWafUMHbPV0TEni6tFd6g +aaEVSR2iUjimRLTwcEiCFi3Xt9SdewlsyuY/hSQHUyB9qvrupV8chtUHi66eajmS +5CljcY9kSJHKHMwH11w9xu/P76yA9hp7l+u/QzvAt4sBAgMBAAGjUzBRMB0GA1Ud +DgQWBBQgSk64b5N5DjHOG4PLZeq1hmzphDAfBgNVHSMEGDAWgBQgSk64b5N5DjHO +G4PLZeq1hmzphDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBG +KJ/o5HW5+XZauEOG9S51I5IHvEuMUd+3SDCIr6OZlGWma+kaGpKwJGGlTGyla1Sx +kA6i3e4NLVJjsfJVhtn/Wnxhjecv6NnjHgdiGsGkqBKms7k8WWCZghybsTvQpy7z +tTbn6t8VRW3Gun4xuTj2b9aOW/bCuVKt3F0vvneweoCAQ2S1dO/UGYjuMnVv7pI4 +tGqT2L1q9xyrEgnU1jbRTGcZr4R/m1GLeD6YQS3ya/IbLRApxU5oIJSF0CSgpL4O +Eu3vHeDbc2B9HizMWOc91Fa06lagr1cI5AvvVZ6xEy1+pHl5b3HYF/XeSimAcFUK +0jWniQ5w82bNcjNYSJHa +-----END CERTIFICATE----- diff --git a/server/client/scripts/signal.js b/server/client/scripts/signal.js index 791f3c4..4487947 100644 --- a/server/client/scripts/signal.js +++ b/server/client/scripts/signal.js @@ -1,5 +1,4 @@ -//connecting to our signaling server -var conn = new WebSocket('ws://gltronic.ovh/lilstreamy/ws'); +const conn = new WebSocket('wss://localhost:8080') conn.onopen = function () { console.log('Connected to the signaling server') diff --git a/server/key.pem b/server/key.pem new file mode 100644 index 0000000..84cb26e --- /dev/null +++ b/server/key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEArgc5L/bnK6UCBK4RofqF2fwCc5kHS3+cpLSRi25y2Q/NZxOn +F+rG6T8noUEVsAH/Wui1hskHit+53uGrcWyYLEJamsVnmbqL5NECV4Qa1QN7fTXS +A885Jx+jVs0j4TsA5/Ohr2zBedgBNZGcstTyAO9nBo+6yVmkAG9XytwZjxkRlApv +6SY1x6xGhh+EvRFiNwLLV/DPIGBZAEvblrVs51mn1DB2z1dExJ4urRXeoGmhFUkd +olI4pkS08HBIghYt17fUnXsJbMrmP4UkB1Mgfar67qVfHIbVB4uunmo5kuQpY3GP +ZEiRyhzMB9dcPcbvz++sgPYae5frv0M7wLeLAQIDAQABAoIBAQCgZ+oPSt4jPXHR +zHxWN+teVEoSMPAnZ9WDfyhUQ5a6ejVSmCvBANcdMOgfWzVZSU4MhkijlvJL0BGr +3YhAAN92lCadV+05JlhBrWEiN5Lf2tjdPVl5x2yfoirVHDrBJLieE9NpNa5T14St +0qyDrYHu2Lu2sY5yfxyKhhZ+1kb8vJJK7z3NnSHN3rWJ3FMOAvQZaZnuAcaYP7GK +BgUP86aCNk2w2ke6K+BZpRE0+xv1tXwycKk2WiRb80UUmQ9hrYICThkTuVkRWcVp +Z3dZTfzJdUEJr0QQoEDBbd/4VBp1VWgUk7PstzsdB6uC1FMyQakAO+pXvZjSfskn +07zmt+9RAoGBANnBG2GKEhAziFddbR2bTSOijwgD49WNXbaYFO6GFCAukOv79smd ++WTWIhcPPyym+KSYMNjfHiizzNedF2Hya2IjkYiHsTTrqZKxCubEKDI0MUPqCEeJ +DrwBw0exkvbZa8Zfq2CZLvjtm52yynHDqwJsT1XyD+KrjMEBF1+hi4EFAoGBAMyY +DvF/wwXUAxnwN/2skR84004xosL5CXeCARDiTFGo2a+UVX3lT3jZt5fggh11D0B0 +66LlJt7xlYV5XF4JqQ87REh5o/TpvnCV5yEj+JAQPxTJVz99Pn+h57Sz7N/7vTri +zdatQGz31fvTqt8d7S1/IpANID/sdM+xWzcr6XLNAoGBAMaBo9RnadAbKk96e95h +lRDHQFyuLySemq+6NFq9H9u2l6aJK5Dg0ll6W9lprM2n6UMi+mS6AWRZhIOKUaaY +uAvfIOy1xnXX3946RxXX/EzIB6FB2Apeh3Acq0jQOImP6xAMZs7I1mlXMmWwd5z+ +IwcydaCD6rdYbBgGRqiHPAWBAoGALammdCoCufNGuexOYtS4ExLYvnP/kqqIfV7L +pBwN0o/v/esKZa3fXeahvkkCYVa2D7nIubORSGL87yxV/DsFu3uL0u0rNcdRlMkw +K8peeLDXk2kYivgGEfBtyXv620bRRipGrKpAXdG2tZzZXzDLtcLRUPtM/ldk/tHj +vN2VHeUCgYEAvvsPEQHlc+p2E6uyGWmMWume9pSOpUIZCfXFvDK/kJvapBsHGUNb +zlDEi+pPnhzZONbRL5a+IEeuu9z9HKHdQJJBSkE86lm7mMzgpOWhsENYUEtoCDm1 +xd8ft+nbXuPR1j2M1KeB7rFeqobcDV4LaQtxBOdm9zpf3dlyBstbwwo= +-----END RSA PRIVATE KEY----- diff --git a/server/src/server.js b/server/src/server.js index a2e6244..f1f0a63 100644 --- a/server/src/server.js +++ b/server/src/server.js @@ -1,12 +1,18 @@ const express = require('express') +const fs = require('fs') const bodyParser = require('body-parser') const cors = require('cors') const config = require('../config.json') - -require('./signal') +const https = require('https') +const WebSocketServer = require('ws').Server const app = express() -const {port} = config +const server = https.createServer({ + key: fs.readFileSync('key.pem'), + cert: fs.readFileSync('cert.pem') +}, app) +const wss = new WebSocketServer({ server }) +const {port, ws_port} = config app.use(cors()) app.use(bodyParser.urlencoded({ extended: false })) @@ -14,6 +20,107 @@ app.use(bodyParser.json()) app.use(express.static('./client')) -app.listen(port, () => { +server.listen(port, () => { console.log(`Launching Lil'Streamy on ${port}`) }) + + + +var users = {} + +wss.on('connection', function(connection) { + console.log('User connected') + + connection.on('message', (message) => onMessage(connection, message)) + + connection.on('close', () => onClose(connection)) +}) + +function sendTo(connection, message) { + connection.send(JSON.stringify(message)) +} + +function onClose(connection) { + if(connection.name) { + delete users[connection.name] + + if(connection.otherName) { + console.log('Disconnecting from ', connection.otherName) + var conn = users[connection.otherName] + conn.otherName = null + + if(conn != null) { + sendTo(conn, { + type: 'leave' + }) + } + } + } +} + +function onMessage(connection, message) { + var data + + try { + data = JSON.parse(message); + } catch (e) { + console.log('Invalid JSON') + data = {} + } + + switch (data.type) { + case 'login' : + console.log('User logged', data.name); + if(users[data.name]) { + sendTo(connection, { + type: 'login', + success: false + }) + } else { + users[data.name] = connection + connection.name = data.name + + sendTo(connection, { + type: 'login', + success: true + }) + } + break + + case 'leave' : + console.log('Disconnecting from', data.name) + var conn = users[data.name] + conn.otherName = null + + //notify the other user so he can disconnect his peer connection + /* + if(conn != null) { + sendTo(conn, { + type: 'leave' + }); + }*/ + break; + + case 'userlist' : + console.log('Send list to', data.name) + sendTo(connection, { + type: 'userlist', + list: users + }); + break + + default: + if (data.target){ + var targetConnection = users[data.target]; + if(targetConnection){ + console.log('Forward message from ' + data.name + ' to ' + data.target + ' (' + data.type + ')') + sendTo(targetConnection, data) + } + } else { + sendTo(connection, { + type: 'error', + message: 'Command not found: ' + data.type + }); + } + } +}