Compare commits

...

1 Commits

Author SHA1 Message Date
Kayne Ruse c63e14ddf3 Patched some holes when poking with curl 2021-07-24 20:04:35 +10:00
8 changed files with 49 additions and 26 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "auth-server", "name": "auth-server",
"version": "1.3.1", "version": "1.3.2",
"description": "An API centric auth server. Uses Sequelize and mariaDB by default.", "description": "An API centric auth server. Uses Sequelize and mariaDB by default.",
"main": "server/server.js", "main": "server/server.js",
"scripts": { "scripts": {
+11 -3
View File
@@ -9,18 +9,26 @@ const { accounts } = require('../database/models');
//auth/deletion //auth/deletion
const route = async (req, res) => { const route = async (req, res) => {
if (!req.body.password) {
return res.status(401).end('Missing password');
}
const account = await accounts.findOne({ const account = await accounts.findOne({
where: { where: {
index: req.user.index index: req.user.index || ''
} }
}); });
if (!account) {
return res.status(401).end('Missing account');
}
//compare the user's password //compare the user's password
const compare = utils.promisify(bcrypt.compare); const compare = utils.promisify(bcrypt.compare);
const match = await compare(req.body.password || '', account.hash); const match = await compare(req.body.password, account.hash);
if (!match) { if (!match) {
return res.status(401).send('incorrect password'); return res.status(401).send('Incorrect password');
} }
//set the deletion time (2 days from now) //set the deletion time (2 days from now)
+2 -2
View File
@@ -4,12 +4,12 @@ const { accounts } = require('../database/models');
const route = async (req, res) => { const route = async (req, res) => {
const account = await accounts.findOne({ const account = await accounts.findOne({
where: { where: {
index: req.user.index index: req.user.index || ''
} }
}); });
if (!account) { if (!account) {
return res.status(401).send('Unknown account'); return res.status(401).end('Unknown account');
} }
//respond with the private-facing data //respond with the private-facing data
+5 -5
View File
@@ -3,13 +3,13 @@ const { accounts } = require('../database/models');
//auth/update //auth/update
const route = async (req, res) => { const route = async (req, res) => {
//generate the password hash if (!req.body.password) {
let hash; return res.status(401).end('Missing password');
if (req.body.password) {
hash = await bcrypt.hash(req.body.password, await bcrypt.genSalt(11));
} }
//generate the password hash
let hash = await bcrypt.hash(req.body.password, await bcrypt.genSalt(11));
//update the account //update the account
await accounts.update({ await accounts.update({
contact: req.body.contact, contact: req.body.contact,
+3 -1
View File
@@ -17,6 +17,9 @@ router.post('/token', require('./token'));
//middleware //middleware
router.use(tokenAuth); router.use(tokenAuth);
//logouts allowed when banned, still needs tokens
router.delete('/logout', require('./logout'));
router.use(async (req, res, next) => { router.use(async (req, res, next) => {
const record = await accounts.findOne({ const record = await accounts.findOne({
where: { where: {
@@ -36,7 +39,6 @@ router.use(async (req, res, next) => {
}); });
//basic account management (needs a token) //basic account management (needs a token)
router.delete('/logout', require('./logout'));
router.get('/account', require('./account-query')); router.get('/account', require('./account-query'));
router.patch('/account', require('./account-update')); router.patch('/account', require('./account-update'));
router.delete('/account', require('./account-delete')); router.delete('/account', require('./account-delete'));
+11 -6
View File
@@ -13,7 +13,7 @@ const route = async (req, res) => {
//validate the given details //validate the given details
const validateErr = await validateDetails(req.body); const validateErr = await validateDetails(req.body);
if (validateErr) { if (validateErr) {
return res.status(401).send(validateErr); return res.status(401).end(validateErr);
} }
//get the existing account //get the existing account
@@ -55,13 +55,18 @@ const route = async (req, res) => {
}; };
const validateDetails = async (body) => { const validateDetails = async (body) => {
//basic formatting (with an exception for the default admin account) if (!body.email) {
if (!validateEmail(body.email) && body.email != `${process.env.ADMIN_DEFAULT_USERNAME}@${process.env.WEB_ADDRESS}`) { return 'Missing email';
return 'invalid email';
} }
//check for existing (banned) if (!body.password) {
//TODO: restore banning return 'Missing password';
}
//basic formatting (with an exception for the default admin account)
if (!validateEmail(body.email) && body.email != `${process.env.ADMIN_DEFAULT_USERNAME}@${process.env.WEB_ADDRESS}`) {
return 'Invalid email';
}
return null; return null;
} }
+14 -6
View File
@@ -46,11 +46,11 @@ const route = async (req, res) => {
const validateDetails = async (body) => { const validateDetails = async (body) => {
//basic formatting //basic formatting
if (!validateEmail(body.email)) { if (!validateEmail(body.email)) {
return 'invalid email'; return 'Invalid email';
} }
if (!validateUsername(body.username)) { if (!validateUsername(body.username)) {
return 'invalid username'; return 'Invalid username';
} }
//check for existing (banned) //check for existing (banned)
@@ -64,23 +64,31 @@ const validateDetails = async (body) => {
}); });
if (emailRecord) { if (emailRecord) {
return 'email already exists'; return 'Email already exists';
}
if (!body.username) {
return 'Missing username';
} }
//check for existing username //check for existing username
const usernameRecord = await accounts.findOne({ const usernameRecord = await accounts.findOne({
where: { where: {
username: body.username || '' username: body.username
} }
}); });
if (usernameRecord) { if (usernameRecord) {
return 'username already exists'; return 'Username already exists';
} }
//validate password //validate password
if (!body.password) {
return 'Missing password';
}
if (body.password.length < 8) { if (body.password.length < 8) {
return 'password too short'; return 'Password too short';
} }
return null; return null;
+2 -2
View File
@@ -11,11 +11,11 @@ const route = async (req, res) => {
//check the given info //check the given info
if (!info) { if (!info) {
return res.status(401).send('validation failed'); return res.status(401).send('Validation failed');
} }
if (info.token != req.query.token) { if (info.token != req.query.token) {
return res.status(401).send('tokens do not match'); return res.status(401).send('Tokens do not match');
} }
//move data to the accounts table //move data to the accounts table