whitelist funcs, passesWhitelistByUserID(), check disk and db

This commit is contained in:
Ryan Tharp 2020-02-17 08:53:02 +00:00
parent cbe85fa8fe
commit d5bde350a2
1 changed files with 79 additions and 5 deletions

View File

@ -10,11 +10,6 @@ module.exports = {
// maybe only needed in dialog_token
passesWhitelist: async (pubKey) => {
const disk_config = config.getDiskConfig();
// if we have a whitelist
if (disk_config.whitelist && !disk_config.whitelist[pubKey]) {
// and you're not on it
return false;
}
// take an id return a user object
const getUserByUsernamePromise = pubKey => {
@ -26,6 +21,24 @@ module.exports = {
});
}
// handle whitelist mode
if (disk_config.whitelist) {
// in whitelist mode
if (disk_config.whitelist[pubKey]) {
return true;
}
// check whitelist db
const user = await getUserByUsernamePromise(pubKey);
if (user !== null) {
if (await storage.isWhitelisted(user.id)) {
return true;
}
}
// by default everyone is not allowed
return false;
}
// in blacklist mode
const user = await getUserByUsernamePromise(pubKey);
if (user !== null) {
const alreadyBlacklisted = await storage.isBlacklisted(user.id);
@ -36,6 +49,28 @@ module.exports = {
// by default everyone is allowed
return true;
},
passesWhitelistByUserID: async (userid) => {
const disk_config = config.getDiskConfig();
if (disk_config.whitelist) {
if (config.whitelistAllow(userid)) {
// if there's a whitelist, you're not on it
return true;
}
// check db
if (await storage.isWhitelisted(userid)) {
return true;
}
// by default everyone is not allowed
return false;
}
// blacklist mode
if (await storage.isBlacklisted(userid)) {
return false;
}
// by default everyone is allowed
return true;
},
// FIXME: should return a promise
getPermissionsByUser: (pubKey, entity, entityId) => {
// get userID
@ -193,5 +228,44 @@ module.exports = {
console.warn('logic:::permissions::unblacklistUserFromServer - failed to blacklist');
return false;
}
},
whitelistUserForServer: async userid => {
if (userid === undefined) {
console.error('logic::permission:whitelistUserForServer - given a user_id that is undefined');
return false;
}
if (config.whitelistAllow(userid)) {
// no whitelist or already on it
console.warn('logic:::permissions::whitelistUserForServer - ', userid, 'already whitelisted');
return false;
}
const alreadyWhitelisted = await storage.isWhitelisted(userid);
if (alreadyWhitelisted) {
console.warn('logic:::permissions::whitelistUserForServer - ', userid, 'already whitelisted');
return true;
}
// mark the database as such, so they can't get any new tokens
const result = await storage.whitelistUserForServer(userid);
if (!result) {
console.warn('logic:::permissions::whitelistUserFromServer - failed to whitelist', result);
return false;
}
},
unwhitelistUserFromServer: async userid => {
if (userid === undefined) {
console.error('logic::permission:unwhitelistUserFromServer - given a user_id that is undefined');
return false;
}
const alreadyWhitelisted = await storage.isWhitelisted(userid);
if (!alreadyWhitelisted) {
console.warn('logic:::permissions::unwhitelistUserFromServer - ', userid, 'is not whitelisted');
return true;
}
// mark the database as such, so they can get new tokens
const result = await storage.unwhitelistUserFromServer(userid);
if (!result) {
console.warn('logic:::permissions::unwhitelistUserFromServer - failed to whitelist');
return false;
}
}
}