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