homepage/src/utils/auth/auth-helpers.js
2024-01-19 06:50:44 -08:00

44 lines
1.5 KiB
JavaScript

import { ProxyAuthProvider} from "./proxy";
import { NullAuthProvider} from "./null";
const AuthProviders = {
NullAuthProvider,
ProxyAuthProvider
};
function getProviderByKey(key) {
return AuthProviders.find((provider) => provider.key == key) ?? NullAuthProvider;
}
export function createAuthorizer({auth}) {
if (auth) {
getProviderByKey(Object.keys(auth)[0]).create(auth[ProxyAuthKey]);
}
return NullAuthProvider.create();
}
export async function fetchWithAuth(key, context) {
return getProviderByKey(context.provider).fetch([key, context]);
}
export const filterAllowedServices = (perms, services) => filterAllowedItems(perms, services, 'services');
export const filterAllowedBookmarks = (perms, bookmarks) => filterAllowedItems(perms, bookmarks, 'bookmarks');
export const filterAllowedWidgets = (perms, widgets) => {
return widgets.filter((widget) => authItemFilter(perms, widget.options) )
}
function filterAllowedItems({user, groups}, itemGroups, groupKey) {
return itemGroups.map((group) => ({
name: group.name,
[groupKey]: group[groupKey].filter((item) => authItemFilter({user, groups}, item))
})).filter((group) => !group[groupKey].length);
}
function authItemFilter({user, groups}, item) {
const groupAllow = (!('allowGroups' in item)) || groups.some(group => item.allowGroups.includes(group));
const userAllow = (!('allowUsers' in item)) || item.allowUsers.includes(user);
return userAllow || groupAllow;
}