76 lines
2.3 KiB
JavaScript
Executable File
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 |