36 lines
1.1 KiB
JavaScript
Executable File
36 lines
1.1 KiB
JavaScript
Executable File
const { getLock } = require("./arangodb");
|
|
const { checkToken } = require("./verlikifyhandler");
|
|
const { getRequiredScopes } = require("./scopes");
|
|
|
|
const verifyToken = (req, res, next) => {
|
|
const { token } = req.headers.token?req.headers:req.query;
|
|
//console.log(token)
|
|
if (!token) {
|
|
console.log("no token")
|
|
return res.status(403).json("no token received")
|
|
} else {
|
|
const { id , scopes} = JSON.parse(Buffer.from(token.split(".")[1], "base64").toString())
|
|
// console.log(scopes)
|
|
getLock({ id }).then((lock) => {
|
|
//console.log(lock)
|
|
const {valid, reason} = checkToken(token, getRequiredScopes((req.baseUrl+req.url).split("?")[0]), lock)
|
|
console.log(valid, reason)
|
|
if (valid) {
|
|
req.tokendata = {id, scopes}
|
|
next()
|
|
}else{
|
|
// console.log(reason)
|
|
return res.status(403).json(reason)
|
|
}
|
|
}, (error, message)=>{
|
|
console.log(error, message)
|
|
return res.status(error).json(message)
|
|
})
|
|
}
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
verifyToken
|
|
}
|