proxy/routes/auth.js
2018-02-13 19:58:47 -05:00

84 lines
1.6 KiB
JavaScript

'use strict';
const router = require('express').Router();
const linuxUser = require('linux-user');
const {promisify} = require('util');
const Users = require('../models/users');
router.post('/login', async function(req, res){
let username = req.body.username;
let password = req.body.password;
let groups = await Users.login({username, password})
if(groups){
return res.json({
login: true,
token: await Users.addToken({username}),
groups: groups,
});
}else{
return res.status(401).json({
login: false
});
}
});
router.post('/verifykey', async function(req, res){
let key = req.body.key;
const verifySSHKey = promisify(linuxUser.verifySSHKey);
let isValid;
try{
isValid = await verifySSHKey(key);
return res.json({
info: isValid
});
}catch(error){
return res.status(400).json({
message: 'Key is not a public key file!'
});
}
});
router.post('/:token', async function(req, res, next) {
let username = req.body.username;
let password = req.body.password;
let token = req.params.token;
let invite = await Users.checkInviteToken({token});
console.log('invite', invite)
if(!invite || invite.invited){
return res.status(401).json({
message: 'Token not valid'
});
}
if(!username || !password){
return res.status(400).json({
message: 'Missing fields'
});
}
if(await Users.ifUserExists({username})){
return res.json({
message: 'username taken'
});
}
await Users.add({username, password, isAdmin: invite.isAdmin});
await Users.useInviteToken({token, username});
return res.json({user:username});
});
module.exports = router;