Ripped out the pseudonym reserve system
Moving to JWT tokens in future
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
WEB_PORT=3200
|
||||
WEB_PORT=3300
|
||||
|
||||
DB_HOSTNAME=database
|
||||
DB_DATABASE=chat
|
||||
@@ -6,4 +6,3 @@ DB_USERNAME=chat
|
||||
DB_PASSWORD=blastoise
|
||||
DB_TIMEZONE=Australia/Sydney
|
||||
|
||||
CHAT_KEY=chattychattybangbang
|
||||
@@ -2,6 +2,9 @@ name: Publish Docker image
|
||||
on:
|
||||
release:
|
||||
types: [ published ]
|
||||
push:
|
||||
tags:
|
||||
- v1.*
|
||||
jobs:
|
||||
push_to_registry:
|
||||
name: Push Docker Image to Docker Hub
|
||||
|
||||
@@ -2,4 +2,11 @@
|
||||
|
||||
An API centric chat server. Uses Sequelize and mariaDB by default.
|
||||
|
||||
# Setup
|
||||
|
||||
TODO: document the chat server setup
|
||||
|
||||
# API
|
||||
|
||||
TODO: document the chat server api
|
||||
|
||||
|
||||
Generated
-33
@@ -12,7 +12,6 @@
|
||||
"cors": "^2.8.5",
|
||||
"dotenv": "^8.2.0",
|
||||
"express": "^4.17.1",
|
||||
"express-formidable": "^1.2.0",
|
||||
"mariadb": "^2.5.2",
|
||||
"sequelize": "^6.5.0"
|
||||
},
|
||||
@@ -667,17 +666,6 @@
|
||||
"node": ">= 0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/express-formidable": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/express-formidable/-/express-formidable-1.2.0.tgz",
|
||||
"integrity": "sha512-w1vXjF3gb50UKTNkFaW8/4rqY4dUrKfZ1sAZzwAF9YxCAgj/29QZsycf71di0GkskrZOAkubk9pvGYfxyAMYiw==",
|
||||
"dependencies": {
|
||||
"formidable": "^1.0.17"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
@@ -707,14 +695,6 @@
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/formidable": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
|
||||
"integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==",
|
||||
"funding": {
|
||||
"url": "https://ko-fi.com/tunnckoCore/commissions"
|
||||
}
|
||||
},
|
||||
"node_modules/forwarded": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
|
||||
@@ -2564,14 +2544,6 @@
|
||||
"vary": "~1.1.2"
|
||||
}
|
||||
},
|
||||
"express-formidable": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/express-formidable/-/express-formidable-1.2.0.tgz",
|
||||
"integrity": "sha512-w1vXjF3gb50UKTNkFaW8/4rqY4dUrKfZ1sAZzwAF9YxCAgj/29QZsycf71di0GkskrZOAkubk9pvGYfxyAMYiw==",
|
||||
"requires": {
|
||||
"formidable": "^1.0.17"
|
||||
}
|
||||
},
|
||||
"fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
@@ -2595,11 +2567,6 @@
|
||||
"unpipe": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"formidable": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
|
||||
"integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q=="
|
||||
},
|
||||
"forwarded": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
"cors": "^2.8.5",
|
||||
"dotenv": "^8.2.0",
|
||||
"express": "^4.17.1",
|
||||
"express-formidable": "^1.2.0",
|
||||
"mariadb": "^2.5.2",
|
||||
"sequelize": "^6.5.0"
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
//reserve the name using a pseudonym
|
||||
router.post('/reserve', require('./reserve'));
|
||||
//basic route management
|
||||
//TODO: import the routes
|
||||
|
||||
module.exports = router;
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
const crypto = require("crypto");
|
||||
|
||||
const Sequelize = require('sequelize');
|
||||
const Op = Sequelize.Op;
|
||||
const { pseudonyms } = require('../database/models');
|
||||
|
||||
const route = async (req, res) => {
|
||||
//check the key
|
||||
if (req.fields.key != process.env.CHAT_KEY) {
|
||||
return res.status(403).send('Invalid chat key');
|
||||
}
|
||||
|
||||
//generate a UUID to act as a pseudonym (starting with a period)
|
||||
const pseudonym = `.${uuid()}`;
|
||||
|
||||
//find or create the record (using the username)
|
||||
const [instance, created] = await pseudonyms.findOrCreate({
|
||||
where: {
|
||||
username: req.fields.username
|
||||
}
|
||||
});
|
||||
|
||||
//save the pseudonym (overwriting existing pseudonyms)
|
||||
const result = await pseudonyms.update({
|
||||
pseudonym: pseudonym
|
||||
},{
|
||||
where: {
|
||||
username: instance.username
|
||||
}
|
||||
});
|
||||
|
||||
//OK
|
||||
return res.status(200).send({ pseudonym: pseudonym });
|
||||
};
|
||||
|
||||
//lazy
|
||||
const uuid = (bytes = 16) => crypto.randomBytes(bytes).toString("hex");
|
||||
|
||||
module.exports = route;
|
||||
@@ -1,3 +1,3 @@
|
||||
module.exports = {
|
||||
pseudonyms: require('./pseudonyms')
|
||||
//TODO: models
|
||||
};
|
||||
@@ -1,28 +0,0 @@
|
||||
const Sequelize = require('sequelize');
|
||||
const sequelize = require('..');
|
||||
|
||||
module.exports = sequelize.define('pseudonyms', {
|
||||
id: {
|
||||
type: Sequelize.INTEGER(11),
|
||||
allowNull: false,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
unique: true
|
||||
},
|
||||
|
||||
username: {
|
||||
type: 'varchar(320)',
|
||||
unique: true
|
||||
},
|
||||
|
||||
pseudonym: {
|
||||
type: 'varchar(320)',
|
||||
unique: true
|
||||
},
|
||||
|
||||
deletion: {
|
||||
type: 'DATETIME',
|
||||
allowNull: true,
|
||||
defaultValue: null
|
||||
}
|
||||
});
|
||||
+3
-4
@@ -5,12 +5,10 @@ require('dotenv').config();
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
const server = require('http').Server(app);
|
||||
const formidable = require('express-formidable');
|
||||
const bodyParser = require('body-parser');
|
||||
const cors = require('cors');
|
||||
|
||||
//config
|
||||
app.use(formidable());
|
||||
app.use(bodyParser.json());
|
||||
app.use(cors());
|
||||
|
||||
@@ -26,6 +24,7 @@ app.get('*', (req, res) => {
|
||||
});
|
||||
|
||||
//startup
|
||||
server.listen(process.env.WEB_PORT || 3200, (err) => {
|
||||
console.log(`listening to localhost:${process.env.WEB_PORT || 3200}`);
|
||||
server.listen(process.env.WEB_PORT || 3300, async (err) => {
|
||||
await database.sync();
|
||||
console.log(`listening to localhost:${process.env.WEB_PORT || 3300}`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user