From eba441b624499ed24a67b99612a2c11495108f2e Mon Sep 17 00:00:00 2001 From: knotteye Date: Sun, 20 Oct 2019 16:09:28 -0500 Subject: [PATCH] Add working Socket.IO based chat Bump version I guess. --- package-lock.json | 5 +++ package.json | 3 +- site/send.png | Bin 0 -> 18376 bytes src/http.ts | 84 ++++++++++++++++++++++++++++++++++++++++++-- templates/base.njk | 2 +- templates/chat.html | 79 +++++++++++++++++++++++++++++++++++++++++ templates/user.njk | 12 +++++-- 7 files changed, 178 insertions(+), 7 deletions(-) create mode 100644 site/send.png create mode 100644 templates/chat.html diff --git a/package-lock.json b/package-lock.json index b1d7ad3..a6ac8a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -613,6 +613,11 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "dirty": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dirty/-/dirty-1.1.0.tgz", + "integrity": "sha1-cO3SuZlUHcmXT9Ooy9DGcP4jYHg=" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", diff --git a/package.json b/package.json index 92aa9f1..b4a9377 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "satyr", - "version": "0.2.0", + "version": "0.3.0", "description": "A livestreaming server.", "license": "AGPL-3.0", "author": "knotteye", @@ -18,6 +18,7 @@ "bcrypt": "^3.0.6", "body-parser": "^1.19.0", "config": "^3.2.2", + "dirty": "^1.1.0", "express": "^4.17.1", "flags": "^0.1.3", "mysql": "^2.17.1", diff --git a/site/send.png b/site/send.png new file mode 100644 index 0000000000000000000000000000000000000000..7a1259531218fac55d9fb05773715f76d3a64231 GIT binary patch literal 18376 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 Z-@46kx|c|`An;@j22WQ%mvv4FO#t|vRviEU literal 0 HcmV?d00001 diff --git a/src/http.ts b/src/http.ts index 92b4858..f0ee4ff 100644 --- a/src/http.ts +++ b/src/http.ts @@ -4,18 +4,21 @@ import * as bodyparser from "body-parser"; import * as fs from "fs"; import * as socketio from "socket.io"; import * as http from "http"; +import * as dirty from "dirty"; import * as api from "./api"; import * as db from "./database"; const app = express(); const server = http.createServer(app); const io = socketio(server); +const store = dirty(); var njkconf; function init(satyr: any, port: number){ njk.configure('templates', { autoescape: true, express : app, + watch: true }); njkconf ={ sitename: satyr.name, @@ -83,6 +86,9 @@ function init(satyr: any, port: number){ app.get('/changesk', (req, res) => { res.render('changesk.njk', njkconf); }); + app.get('/chat', (req, res) => { + res.render('chat.html', njkconf); + }); //api handlers app.post('/api/register', (req, res) => { api.register(req.body.username, req.body.password, req.body.confirm).then( (result) => { @@ -111,10 +117,84 @@ function init(satyr: any, port: number){ res.status(404).render('404.njk', njkconf); }); //socket.io chat logic - io.on('connection', (socket) => { - + io.on('connection', async (socket) => { + socket.nick = await newNick(socket); + socket.on('JOINROOM', async (data) => { + let t: any = await db.query('select username from users where username='+db.raw.escape(data)); + if(t[0]){ + socket.join(data); + io.to(data).emit('JOINED', {nick: socket.nick}); + } + else socket.emit('ALERT', 'Room does not exist'); + }); + socket.on('LEAVEROOM', (data) => { + socket.leave(data); + io.to(data).emit('LEFT', {nick: socket.nick}); + }); + socket.on('disconnecting', (reason) => { + let rooms = Object.keys(socket.rooms); + for(let i=1;i { + data.nick = data.nick.replace(' ',''); + if(store.get(data.nick)){ + socket.emit('ALERT', 'Nickname is already in use'); + return false; + } + let user = await db.query('select username from users where username='+db.raw.escape(data.nick)); + if(user[0]){ + if(!data.password){ + socket.emit('ALERT','Incorrect username or password'); + return false; + } + if(await db.validatePassword(data.nick, data.password)){ + chgNick(socket, data.nick); + } + else socket.emit('ALERT','Incorrect username or password'); + } + else { + chgNick(socket, data.nick); + } + }); + socket.on('MSG', (data) => { + io.to(data.room).emit('MSG', {nick: socket.nick, msg: data.msg}); + }); + socket.on('KICK', (data) => { + if(socket.nick === data.room){ + //find client with data.nick + let id: string = store.get(data.nick); + if(id){ + let target = io.sockets.connected[id]; + io.in(data.room).emit('ALERT', data.nick+' has been kicked.'); + target.disconnect(true); + } + else socket.emit('ALERT', 'No such user found.'); + } + else socket.emit('ALERT', 'Not authorized to do that.'); + }); }); server.listen(port); } +async function newNick(socket) { + let n: string = 'Guest'+Math.floor(Math.random() * Math.floor(100)); + if(store.get(n)) return newNick(socket); + else { + store.set(n, socket.id); + return n; + } +} +async function chgNick(socket, nick) { + let rooms = Object.keys(socket.rooms); + for(let i=1;i
{% block content %} diff --git a/templates/chat.html b/templates/chat.html new file mode 100644 index 0000000..8ba71ee --- /dev/null +++ b/templates/chat.html @@ -0,0 +1,79 @@ + + + {{ sitename }} Webchat + + + + + + + +
+
  •  
  •  
  • +
    +
    + +
    + \ No newline at end of file diff --git a/templates/user.njk b/templates/user.njk index c077869..2501679 100644 --- a/templates/user.njk +++ b/templates/user.njk @@ -1,13 +1,19 @@ {% extends "base.njk" %} {% block content %} +
    - {{ user }} | {{ streamtitle | escape }} Links | VODs + {{ user }} | {{ streamtitle | escape }} Links | Watch Chat VODs
    -
    - +
    +