diff --git a/README.md b/README.md index 49919da..ab5af7a 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ on 'error' -> Server emits and logs an error on 'open chat' -> Preps the server for your messages, places you in the room 'general' on 'message' -> Server broadcasts to all other users in your room on 'disconnect' -> Server will no longer accept your messages +on 'report' -> Report the chatlog with the index 'id' Chat Commands: diff --git a/server/chat/index.js b/server/chat/index.js index 9d570c5..955ff1f 100644 --- a/server/chat/index.js +++ b/server/chat/index.js @@ -1,13 +1,13 @@ const jwt = require('jsonwebtoken'); const { Op } = require('sequelize'); -const { chatlog, mute } = require('../database/models'); +const { chatlog, mute, reports } = require('../database/models'); const chat = io => { io.on('connection', socket => { //middleware socket.use((request, next) => { //verify request format - if (!['open chat', 'message'].includes(request[0])) { + if (!['open chat', 'message', 'report'].includes(request[0])) { return next(`Invalid request to the chat server ${request[0]}`); } return next(); @@ -137,6 +137,19 @@ const chat = io => { emphasis: true }); }); + + socket.on('report', info => { + //handle reports of malicious content + if (!info.id) { + return; + } + + //report + reports.create({ + reporter: socket.user.username, + chatlogId: info.id + }); + }); }); }; diff --git a/server/database/models/index.js b/server/database/models/index.js index 6cf6f8d..63dd316 100644 --- a/server/database/models/index.js +++ b/server/database/models/index.js @@ -1,4 +1,5 @@ module.exports = { chatlog: require('./chatlog'), - mute: require('./mute') + mute: require('./mute'), + reports: require('./reports') }; \ No newline at end of file diff --git a/server/database/models/reports.js b/server/database/models/reports.js new file mode 100644 index 0000000..0e59414 --- /dev/null +++ b/server/database/models/reports.js @@ -0,0 +1,23 @@ +const Sequelize = require('sequelize'); +const sequelize = require('..'); + +const chatlog = require('./chatlog'); + +const reports = sequelize.define('reports', { + id: { + type: Sequelize.INTEGER(11), + allowNull: false, + autoIncrement: true, + primaryKey: true, + unique: true + }, + + reporter: { + type: 'varchar(320)', + allowNull: false + }, +}); + +chatlog.hasMany(reports, { foreignKey: 'chatlogId', foreignKeyConstraint: true }); + +module.exports = reports; \ No newline at end of file