Add config template for chat integration and db schema

No other meaningfull changes (I think)
It's been 7 months since last commit god I hope I didn't break anything.
merge-requests/8/head
knotteye 4 years ago
parent 97d4678a0a
commit a9f1875234
  1. 33
      install/config.example.yml
  2. 7
      install/db_template.sql
  3. 61
      package-lock.json
  4. 1
      package.json
  5. 36
      src/config.ts
  6. 1
      src/database.ts
  7. 10
      src/http.ts
  8. 18
      src/index.ts

@ -8,6 +8,9 @@ media:
record: false record: false
ffmpeg: '<ffmpeg>' ffmpeg: '<ffmpeg>'
rtmp:
port: 1935
http: http:
# uncomment to set HSTS when SSL is ready # uncomment to set HSTS when SSL is ready
#hsts: true #hsts: true
@ -21,4 +24,32 @@ database:
transcode: transcode:
adaptive: false adaptive: false
format: dash format: dash
variants: 3 variants: 3
chat:
irc:
enabled: false
server:
port: 6667
tls: false
nickname: 'SatyrChat'
username: 'SatyrChat'
sasl: false
password:
discord:
enabled: false
token:
xmpp:
enabled: false
server:
port: 5222
nickname: 'SatyrChat'
username: 'SatyrChat'
twitch:
enabled: false
username:
token:

@ -13,4 +13,11 @@ CREATE TABLE user_meta(
title VARCHAR(120), title VARCHAR(120),
about VARCHAR(5000), about VARCHAR(5000),
live TINYINT live TINYINT
);
CREATE TABLE chat_integration(
username VARCHAR(25),
irc VARCHAR(1000),
xmpp VARCHAR(1000),
twitch VARCHAR(1000),
discord VARCHAR(1000)
); );

61
package-lock.json generated

@ -501,14 +501,6 @@
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
}, },
"config": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/config/-/config-3.2.2.tgz",
"integrity": "sha512-rOsfIOAcG82AWouK4/vBS/OKz3UPl2T/kP0irExmXJJOoWg2CmdfPLdx56bCoMUMFNh+7soQkQWCUC8DyemiwQ==",
"requires": {
"json5": "^1.0.1"
}
},
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
@ -1684,6 +1676,15 @@
} }
} }
}, },
"iconv": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/iconv/-/iconv-2.2.3.tgz",
"integrity": "sha1-4ITWDut9c9p/CpwJbkyKvgkL+u0=",
"optional": true,
"requires": {
"nan": "^2.3.5"
}
},
"iconv-lite": { "iconv-lite": {
"version": "0.4.24", "version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@ -1734,6 +1735,21 @@
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
"integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
}, },
"irc": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/irc/-/irc-0.5.2.tgz",
"integrity": "sha1-NxT0doNlqW0LL3dryRFmvrJGS7w=",
"requires": {
"iconv": "~2.2.1",
"irc-colors": "^1.1.0",
"node-icu-charset-detector": "~0.2.0"
}
},
"irc-colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/irc-colors/-/irc-colors-1.5.0.tgz",
"integrity": "sha512-HtszKchBQTcqw1DC09uD7i7vvMayHGM1OCo6AHt5pkgZEyo99ClhHTMJdf+Ezc9ovuNNxcH89QfyclGthjZJOw=="
},
"is-accessor-descriptor": { "is-accessor-descriptor": {
"version": "0.1.6", "version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
@ -1891,21 +1907,6 @@
"asn1.js": "^5.2.0" "asn1.js": "^5.2.0"
} }
}, },
"json5": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"requires": {
"minimist": "^1.2.0"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
}
}
},
"kind-of": { "kind-of": {
"version": "6.0.2", "version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
@ -2123,6 +2124,15 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
}, },
"node-icu-charset-detector": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/node-icu-charset-detector/-/node-icu-charset-detector-0.2.0.tgz",
"integrity": "sha1-wjINo3Tdy2cfxUy0oOBB4Vb/1jk=",
"optional": true,
"requires": {
"nan": "^2.3.3"
}
},
"node-media-server": { "node-media-server": {
"version": "2.1.3", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/node-media-server/-/node-media-server-2.1.3.tgz", "resolved": "https://registry.npmjs.org/node-media-server/-/node-media-server-2.1.3.tgz",
@ -3065,11 +3075,6 @@
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
}, },
"toml": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz",
"integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="
},
"ts-node": { "ts-node": {
"version": "8.5.4", "version": "8.5.4",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz",

@ -20,6 +20,7 @@
"dirty": "^1.1.0", "dirty": "^1.1.0",
"express": "^4.17.1", "express": "^4.17.1",
"flags": "^0.1.3", "flags": "^0.1.3",
"irc": "^0.5.2",
"jose": "^1.15.1", "jose": "^1.15.1",
"mysql": "^2.17.1", "mysql": "^2.17.1",
"node-media-server": ">=2.1.3 <3.0.0", "node-media-server": ">=2.1.3 <3.0.0",

@ -13,9 +13,6 @@ const config: Object = {
rootredirect: '/users/live', rootredirect: '/users/live',
version: process.env.npm_package_version, version: process.env.npm_package_version,
}, localconfig['satyr']), }, localconfig['satyr']),
ircd: Object.assign({
port: 6667,
}, localconfig['ircd']),
database: Object.assign({ database: Object.assign({
host: 'localhost', host: 'localhost',
user: 'satyr', user: 'satyr',
@ -44,6 +41,37 @@ const config: Object = {
adapative: false, adapative: false,
variants: 3, variants: 3,
format: 'dash' format: 'dash'
}, localconfig['transcode']) }, localconfig['transcode']),
chat: {
irc: Object.assign({
enabled: false,
server: null,
port: 6667,
tls: false,
nickname: 'SatyrChat',
userName: 'SatyrChat',
sasl: false,
password: null
}, localconfig['chat']['irc']),
discord: Object.assign({
enabled: false,
token: null
}, localconfig['chat']['discord']),
xmpp: Object.assign({
enabled: false,
server: null,
port: 5222,
nickname: 'SatyrChat',
username: 'SatyrChat'
}, localconfig['chat']['xmpp']),
twitch: Object.assign({
enabled: false,
username: null,
token: null
}, localconfig['chat']['twitch'])
}
}; };
export { config }; export { config };

@ -20,6 +20,7 @@ async function addUser(name: string, password: string){
if(dupe[0]) return false; if(dupe[0]) return false;
await query('INSERT INTO users (username, password_hash, stream_key, record_flag) VALUES ('+raw.escape(name)+', '+raw.escape(hash)+', '+raw.escape(key)+', 0)'); await query('INSERT INTO users (username, password_hash, stream_key, record_flag) VALUES ('+raw.escape(name)+', '+raw.escape(hash)+', '+raw.escape(key)+', 0)');
await query('INSERT INTO user_meta (username, title, about, live) VALUES ('+raw.escape(name)+',\'\',\'\',false)'); await query('INSERT INTO user_meta (username, title, about, live) VALUES ('+raw.escape(name)+',\'\',\'\',false)');
await query('INSERT INTO chat_integration (username, irc, xmpp, twitch, discord) VALUES ('+raw.escape(name)+',\'\',\'\',\'\')');
return true; return true;
} }

@ -357,7 +357,7 @@ async function initChat() {
} }
} }
socket.join(data); socket.join(data);
io.to(data).emit('JOINED', {nick: socket.nick}); io.to(data).emit('JOINED', {nick: socket.nick, room: data});
} }
else socket.emit('ALERT', 'Room does not exist'); else socket.emit('ALERT', 'Room does not exist');
}); });
@ -377,8 +377,8 @@ async function initChat() {
}); });
}); });
socket.on('LEAVEROOM', (data) => { socket.on('LEAVEROOM', (data) => {
io.to(data).emit('LEFT', {nick: socket.nick, room: data});
socket.leave(data); socket.leave(data);
io.to(data).emit('LEFT', {nick: socket.nick});
}); });
socket.on('disconnecting', (reason) => { socket.on('disconnecting', (reason) => {
let rooms = Object.keys(socket.rooms); let rooms = Object.keys(socket.rooms);
@ -413,9 +413,9 @@ async function initChat() {
chgNick(socket, data.nick); chgNick(socket, data.nick);
} }
}); });
socket.on('MSG', (data) => { socket.on('MSG', (data: object) => {
if(data.msg === "" || !data.msg.replace(/\s/g, '').length) return; if(data['msg'] === "" || !data['msg'].replace(/\s/g, '').length) return;
if(socket.rooms[data['room']]) io.to(data.room).emit('MSG', {nick: socket.nick, msg: data.msg}); if(socket.rooms[data['room']]) io.to(data['room']).emit('MSG', {nick: socket.nick, msg: data['msg'], room: data['room']});
}); });
socket.on('KICK', (data) => { socket.on('KICK', (data) => {
if(socket.nick === data.room){ if(socket.nick === data.room){

@ -1,14 +1,16 @@
import * as mediaserver from "./server"; import {init as initRTMP} from "./server";
import * as db from "./database"; import {init as initDB} from "./database";
import * as http from "./http"; import {init as initHTTP} from "./http";
import * as cleanup from "./cleanup"; import {init as clean} from "./cleanup";
import {init as initChat} from "./chat";
import { config } from "./config"; import { config } from "./config";
async function run() { async function run() {
await db.init(); await initDB();
await cleanup.init(); await clean();
await http.init(); await initHTTP();
await mediaserver.init(); await initRTMP();
await initChat();
console.log(`Satyr v${config['satyr']['version']} ready`); console.log(`Satyr v${config['satyr']['version']} ready`);
} }
run(); run();