raspi-back/app/user.js

76 lines
2.3 KiB
JavaScript
Executable File

const route = require("express").Router();
const { newUser, getUsers, login, logout, patchUser, blockUser, getUser } = require("../arangodb");
const {createToken} = require("../verlikifyhandler")
const {verifyToken} = require("../checkToken");
const { addRouteToScope } = require("../scopes");
addRouteToScope("/user/logout", "default")
addRouteToScope("/user/patch", "default")
route.post("/register", (req, res)=>{
getUsers(["scopes", "blocked"]).then((users)=>{
if(!users.length||!users.find((user)=>user.scopes&&user.scopes.includes("admin")&&!user.blocked)){
req.body.admin = true
}
// console.log(req.body)
newUser(req.body).then(()=>{
res.end()
}, ({error, message})=>{
res.status(error).json(message)
})
})
})
route.post("/login", (req, res)=>{
login(req.body).then(({id, scopes})=>{
if(!scopes){
scopes=["default"]
}else if(!scopes.includes("default")){
scopes.push("default")
}
const token = createToken(id, scopes)
res.json({token})
}, ({error, message})=>{
res.status(error).json(message)
})
})
route.get("/logout", verifyToken, (req, res)=>{
logout(req.tokendata).then(()=>{
res.end()
}, ({error, message})=>{
res.status(error).json(message)
})
})
route.post("/patch", verifyToken, (req, res)=>{
patchUser({id: req.tokendata.id, name: req.body.name, passHint:req.body.passHint, passwort: req.body.passwort}).then(()=>{
res.end()
}, ({error, message})=>{
res.status(error).json(message)
})
})
route.post("/forgotpw", (req, res)=>{
getUser(req.tokendata, ["id"]).then(({id})=>{
blockUser({id, blocked:"forgot password"}).then(()=>{
res.end()
}, ({error, message})=>{
res.status(error).json(message)
})
}, rej)
})
route.get("/lock", (req, res)=>{
function resplant(res){
this.statusCode = 200;
this.status = (code)=>{
this.statusCode = code;
return this
}
this.json = (content)=>{
this.content = content;
res.json(this.statusCode<400)
return this
}
}
const thisresplant = new resplant(res);
verifyToken(req, thisresplant, ()=>{
res.json(true)
})
})
module.exports = route