homepage/src/utils/auth/auth-helpers.js
2024-02-06 20:52:24 -05:00

64 lines
2.2 KiB
JavaScript

import ProxyAuthProvider from "./proxy";
import NullAuthProvider from "./null";
const AuthProviders = {
null: NullAuthProvider,
proxy: ProxyAuthProvider,
};
function getProviderByKey(key) {
return AuthProviders[key] || NullAuthProvider;
}
function authAllow({ user, groups }, item) {
const groupAllow = "allowGroups" in item && groups.some((group) => item.allowGroups.includes(group));
const userAllow = "allowUsers" in item && item.allowUsers.includes(user);
const allowAll = !("allowGroups" in item) && !("allowUsers" in item);
return userAllow || groupAllow || allowAll;
}
export function checkAllowedGroup(perms, authGroups, groupName) {
const testGroup = authGroups.find((group) => group.name === groupName);
return testGroup ? authAllow(perms, testGroup) : true;
}
function filterAllowedItems(perms, authGroups, groups, groupKey) {
return groups
.filter((group) => checkAllowedGroup(perms, authGroups, group.name))
.map((group) => ({
name: group.name,
[groupKey]: group[groupKey].filter((item) => authAllow(perms, item)),
}))
.filter((group) => group[groupKey].length);
}
export function readAuthSettings({ provider, groups } = {}) {
return {
provider: provider ? getProviderByKey(provider.type).create(provider) : NullAuthProvider.create(),
groups: groups
? Array.isArray(groups)
? groups.map((group) => ({
name: Object.keys(group)[0],
allowUsers: group.allowUsers,
allowGroups: group.allowGroups,
}))
: Object.keys(groups).map((group) => ({
name: group,
allowUsers: groups[group].allowUsers,
allowGroups: groups[group].allowGroups,
}))
: [],
};
}
export async function fetchWithAuth(key, context) {
return getProviderByKey(context.provider).fetch([key, context]);
}
export const filterAllowedServices = (perms, authGroups, services) =>
filterAllowedItems(perms, authGroups, services, "services");
export const filterAllowedBookmarks = (perms, authGroups, bookmarks) =>
filterAllowedItems(perms, authGroups, bookmarks, "bookmarks");
export const filterAllowedWidgets = (perms, widgets) => widgets.filter((widget) => authAllow(perms, widget.options));