mStream/src/api/auth.js
2020-12-07 21:47:15 -05:00

28 lines
997 B
JavaScript

const jwt = require('jsonwebtoken');
const Joi = require('joi');
const winston = require('winston');
const auth = require('../util/auth');
exports.setup = (mstream, program) => {
mstream.post('/api/v1/auth/login', async (req, res) => {
try {
const schema = Joi.object({
username: Joi.string().required(),
password: Joi.string().required()
});
await schema.validateAsync(req.body);
if (!program.users[req.body.username]) { throw 'user not found'; }
await auth.authenticateUser(program.users[req.body.username].password, program.users[req.body.username].salt, req.body.password)
res.json({
vpaths: program.users[req.body.username].vpaths,
token: jwt.sign({ username: req.body.username }, program.secret)
});
}catch (err) {
winston.warn(`Failed login attempt from ${req.ip}. Username: ${req.body.username}`);
setTimeout(() => { res.status(401).json({ error: 'Login Failed' }); }, 800);
}
});
}