Ripped out the pseudonym reserve system

Moving to JWT tokens in future
This commit is contained in:
2021-03-08 11:44:12 +11:00
parent 2667af503e
commit 3e31429a4f
10 changed files with 17 additions and 110 deletions
+1 -2
View File
@@ -1,4 +1,4 @@
WEB_PORT=3200 WEB_PORT=3300
DB_HOSTNAME=database DB_HOSTNAME=database
DB_DATABASE=chat DB_DATABASE=chat
@@ -6,4 +6,3 @@ DB_USERNAME=chat
DB_PASSWORD=blastoise DB_PASSWORD=blastoise
DB_TIMEZONE=Australia/Sydney DB_TIMEZONE=Australia/Sydney
CHAT_KEY=chattychattybangbang
+3
View File
@@ -2,6 +2,9 @@ name: Publish Docker image
on: on:
release: release:
types: [ published ] types: [ published ]
push:
tags:
- v1.*
jobs: jobs:
push_to_registry: push_to_registry:
name: Push Docker Image to Docker Hub name: Push Docker Image to Docker Hub
+7
View File
@@ -2,4 +2,11 @@
An API centric chat server. Uses Sequelize and mariaDB by default. 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
-33
View File
@@ -12,7 +12,6 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"express": "^4.17.1", "express": "^4.17.1",
"express-formidable": "^1.2.0",
"mariadb": "^2.5.2", "mariadb": "^2.5.2",
"sequelize": "^6.5.0" "sequelize": "^6.5.0"
}, },
@@ -667,17 +666,6 @@
"node": ">= 0.10.0" "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": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -707,14 +695,6 @@
"node": ">= 0.8" "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": { "node_modules/forwarded": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@@ -2564,14 +2544,6 @@
"vary": "~1.1.2" "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": { "fill-range": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -2595,11 +2567,6 @@
"unpipe": "~1.0.0" "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": { "forwarded": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
-1
View File
@@ -23,7 +23,6 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"express": "^4.17.1", "express": "^4.17.1",
"express-formidable": "^1.2.0",
"mariadb": "^2.5.2", "mariadb": "^2.5.2",
"sequelize": "^6.5.0" "sequelize": "^6.5.0"
}, },
+2 -2
View File
@@ -1,7 +1,7 @@
const express = require('express'); const express = require('express');
const router = express.Router(); const router = express.Router();
//reserve the name using a pseudonym //basic route management
router.post('/reserve', require('./reserve')); //TODO: import the routes
module.exports = router; module.exports = router;
-39
View File
@@ -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 -1
View File
@@ -1,3 +1,3 @@
module.exports = { module.exports = {
pseudonyms: require('./pseudonyms') //TODO: models
}; };
-28
View File
@@ -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
View File
@@ -5,12 +5,10 @@ require('dotenv').config();
const express = require('express'); const express = require('express');
const app = express(); const app = express();
const server = require('http').Server(app); const server = require('http').Server(app);
const formidable = require('express-formidable');
const bodyParser = require('body-parser'); const bodyParser = require('body-parser');
const cors = require('cors'); const cors = require('cors');
//config //config
app.use(formidable());
app.use(bodyParser.json()); app.use(bodyParser.json());
app.use(cors()); app.use(cors());
@@ -26,6 +24,7 @@ app.get('*', (req, res) => {
}); });
//startup //startup
server.listen(process.env.WEB_PORT || 3200, (err) => { server.listen(process.env.WEB_PORT || 3300, async (err) => {
console.log(`listening to localhost:${process.env.WEB_PORT || 3200}`); await database.sync();
console.log(`listening to localhost:${process.env.WEB_PORT || 3300}`);
}); });