43 lines
1.3 KiB
JavaScript
Executable File
43 lines
1.3 KiB
JavaScript
Executable File
const scopes = [];
|
|
const addRouteToScope = (route, scope)=>{
|
|
// console.log(route, scope)
|
|
const scopeEntry = scopes.find((entry)=>entry.scope == scope)
|
|
if(scopeEntry){
|
|
scopeEntry.routes.push(route)
|
|
}else{
|
|
scopes.push({scope, routes:[route]})
|
|
}
|
|
}
|
|
const getRequiredScopes = (route)=>{
|
|
console.log(route)
|
|
const requiredScopes = ["admin"];
|
|
// console.log(scopes)
|
|
scopes.forEach(({scope, routes})=>{
|
|
// if(scope=="pwman"){
|
|
// console.log(route)
|
|
// }
|
|
if(routes.includes(route)){
|
|
requiredScopes.push(scope)
|
|
}
|
|
})
|
|
if(route.match(/^\/files\/video\/%2f/)){
|
|
//requiredScopes.push(route.replace(/%20/g, " ").replace(/%2f/g, "/").replace("//", "/"))
|
|
requiredScopes.push("files")
|
|
}
|
|
//console.log(requiredScopes)
|
|
return requiredScopes.length>1?requiredScopes.slice(1):requiredScopes
|
|
}
|
|
const compareScopes = (route, userScopes)=>{
|
|
// console.log(route, userScopes)
|
|
const requiredScopes = getRequiredScopes(route)
|
|
// console.log(requiredScopes)
|
|
if(!userScopes.includes("admin")&&requiredScopes.filter((scope)=>!userScopes.includes(scope)).length){
|
|
return false
|
|
}
|
|
// console.log("scopes ok")
|
|
return true
|
|
}
|
|
module.exports = {
|
|
addRouteToScope, compareScopes, getRequiredScopes
|
|
}
|