Working version

This commit is contained in:
Aaron Dalton 2024-02-07 18:08:55 -05:00 committed by Aaron Dalton
parent b28c9c4f26
commit 84b85008be
6 changed files with 14 additions and 10 deletions

View File

@ -526,8 +526,8 @@ section. For example:
```yaml ```yaml
auth: auth:
groups: groups:
My Service Group: - My Service Group:
allowGroups: ["Group1", "Group2"] allowGroups: ["Group1", "Group2"]
My Other Group: - My Other Group:
allowGroups: ["Group1"] allowGroups: ["Group1"]
``` ```

View File

@ -6,7 +6,7 @@ export default async function handler(req, res) {
const { provider, groups } = readAuthSettings(getSettings().auth); const { provider, groups } = readAuthSettings(getSettings().auth);
try { try {
if (checkAllowedGroup(provider.permissions(req), groups, group)) { if (checkAllowedGroup(provider.authorize(req), groups, group)) {
res.json({ group }); res.json({ group });
} else { } else {
res.status(401).json({ message: "Group unathorized" }); res.status(401).json({ message: "Group unathorized" });

View File

@ -4,5 +4,5 @@ import { getSettings } from "utils/config/config";
export default async function handler(req, res) { export default async function handler(req, res) {
const { provider, groups } = readAuthSettings(getSettings().auth); const { provider, groups } = readAuthSettings(getSettings().auth);
res.send(await bookmarksResponse(provider.permissions(req), groups)); res.send(await bookmarksResponse(provider.authorize(req), groups));
} }

View File

@ -4,5 +4,5 @@ import { getSettings } from "utils/config/config";
export default async function handler(req, res) { export default async function handler(req, res) {
const { provider, groups } = readAuthSettings(getSettings().auth); const { provider, groups } = readAuthSettings(getSettings().auth);
res.send(await servicesResponse(provider.permissions(req), groups)); res.send(await servicesResponse(provider.authorize(req), groups));
} }

View File

@ -4,5 +4,5 @@ import { getSettings } from "utils/config/config";
export default async function handler(req, res) { export default async function handler(req, res) {
const { provider } = readAuthSettings(getSettings().auth); const { provider } = readAuthSettings(getSettings().auth);
res.send(await widgetsResponse(provider.permissions(req))); res.send(await widgetsResponse(provider.authorize(req)));
} }

View File

@ -1,8 +1,10 @@
// 'proxy' auth provider is meant to be used by a reverse proxy that injects permission headers into the origin // 'proxy' auth provider is meant to be used by a reverse proxy that injects permission headers into the origin
// request. In this case we are relying on our proxy to authenitcate our users and validate. // request. In this case we are relying on our proxy to authenitcate our users and validate.
function getProxyPermissions(userHeader, groupHeader, request) { function getProxyPermissions(userHeader, groupHeader, request) {
const user = userHeader ? request.headers[userHeader] : null; const user =
const groupsString = groupHeader ? request.headers[groupHeader] : ""; userHeader && request.headers[userHeader.toLowerCase()] ? request.headers[userHeader.toLowerCase()] : null;
const groupsString =
groupHeader && request.headers[groupHeader.toLowerCase()] ? request.headers[groupHeader.toLowerCase()] : "";
return { user, groups: groupsString ? groupsString.split(",").map((v) => v.trimStart()) : [] }; return { user, groups: groupsString ? groupsString.split(",").map((v) => v.trimStart()) : [] };
} }
@ -11,8 +13,10 @@ function createProxyAuth({ groupHeader, userHeader }) {
return { return {
getContext: (request) => ({ getContext: (request) => ({
provider: "proxy", provider: "proxy",
...(userHeader && { [userHeader]: request.headers[userHeader] }), ...(userHeader &&
...(groupHeader && { [groupHeader]: request.headers[groupHeader] }), request.headers[userHeader] && { [userHeader.toLowerCase()]: request.headers[userHeader.toLowerCase()] }),
...(groupHeader &&
request.headers[groupHeader] && { [groupHeader.toLowerCase()]: request.headers[groupHeader.toLowerCase()] }),
}), }),
authorize: (request) => getProxyPermissions(userHeader, groupHeader, request), authorize: (request) => getProxyPermissions(userHeader, groupHeader, request),
}; };