mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
fix: lower case role provisioning
This commit is contained in:
+3
-1
@@ -44,4 +44,6 @@ private/keys/*
|
|||||||
|
|
||||||
/.env
|
/.env
|
||||||
|
|
||||||
certificates
|
seeds/pocket-id/*.db
|
||||||
|
|
||||||
|
certificates
|
||||||
|
|||||||
@@ -1,4 +1,28 @@
|
|||||||
CLUSTER_SCRIPT=docker/entrypoints/app-dev-entrypoint.sh
|
CLUSTER_SCRIPT=docker/entrypoints/app-dev-entrypoint.sh
|
||||||
|
|
||||||
up:
|
up:
|
||||||
@bash $(CLUSTER_SCRIPT)
|
@bash $(CLUSTER_SCRIPT)
|
||||||
|
|
||||||
|
seed-keycloak:
|
||||||
|
@[ $$(ls -1 seeds/keycloak/*.json 2>/dev/null | wc -l) -gt 0 ] || (echo "No realm export found in seeds/keycloak. Add an export from Keycloak first."; exit 1)
|
||||||
|
@docker compose -f docker-compose.func.yml stop keycloak >/dev/null 2>&1 || true
|
||||||
|
@docker compose -f docker-compose.func.yml rm -f -s keycloak >/dev/null 2>&1 || true
|
||||||
|
@docker volume rm portabase-dev-func_keycloak-data >/dev/null 2>&1 || true
|
||||||
|
@docker compose -f docker-compose.func.yml up -d keycloak
|
||||||
|
@echo "Keycloak seed import triggered from seeds/keycloak/*.json"
|
||||||
|
|
||||||
|
seed-pocket:
|
||||||
|
@[ -f seeds/pocket-id/portabase.zip ] || (echo "No export found in seeds/pocket-id. Add an export from Pocket ID first."; exit 1)
|
||||||
|
@docker compose -f docker-compose.func.yml stop pocket-id >/dev/null 2>&1 || true
|
||||||
|
@docker compose -f docker-compose.func.yml rm -f -s pocket-id >/dev/null 2>&1 || true
|
||||||
|
@docker volume rm portabase-dev-func_pocket-id-data >/dev/null 2>&1 || true
|
||||||
|
@docker compose -f docker-compose.func.yml run --rm -v ./seeds/pocket-id/portabase.zip:/tmp/portabase.zip pocket-id ./pocket-id import --yes --path /tmp/portabase.zip >/dev/null
|
||||||
|
@docker compose -f docker-compose.func.yml up -d pocket-id
|
||||||
|
@sleep 2
|
||||||
|
@docker compose -f docker-compose.func.yml exec pocket-id ./pocket-id one-time-access-token admin
|
||||||
|
@echo "Pocket ID data restored from seeds/pocket-id/portabase.zip"
|
||||||
|
|
||||||
|
seed-auth: seed-keycloak seed-pocket-id
|
||||||
|
|
||||||
|
pocket-id-token:
|
||||||
|
@docker compose -f docker-compose.func.yml exec pocket-id /app/pocket-id one-time-access-token admin
|
||||||
|
|||||||
@@ -87,4 +87,3 @@ Distributed under the Apache License. See `LICENSE.txt` for more details.
|
|||||||
[ShadcnUI-url]: https://ui.shadcn.com/
|
[ShadcnUI-url]: https://ui.shadcn.com/
|
||||||
|
|
||||||
[Docker-url]: https://www.docker.com/
|
[Docker-url]: https://www.docker.com/
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ name: portabase-dev-func
|
|||||||
services:
|
services:
|
||||||
keycloak:
|
keycloak:
|
||||||
image: quay.io/keycloak/keycloak:latest
|
image: quay.io/keycloak/keycloak:latest
|
||||||
command: start-dev
|
command: start-dev --import-realm
|
||||||
environment:
|
environment:
|
||||||
KC_BOOTSTRAP_ADMIN_USERNAME: admin
|
KC_BOOTSTRAP_ADMIN_USERNAME: admin
|
||||||
KC_BOOTSTRAP_ADMIN_PASSWORD: admin
|
KC_BOOTSTRAP_ADMIN_PASSWORD: admin
|
||||||
@@ -11,6 +11,8 @@ services:
|
|||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
volumes:
|
volumes:
|
||||||
- keycloak-data:/opt/keycloak/data
|
- keycloak-data:/opt/keycloak/data
|
||||||
|
- ./seeds/keycloak:/opt/keycloak/data/import:ro
|
||||||
|
- ./export:/tmp/export
|
||||||
pocket-id:
|
pocket-id:
|
||||||
image: ghcr.io/pocket-id/pocket-id
|
image: ghcr.io/pocket-id/pocket-id
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -21,6 +23,7 @@ services:
|
|||||||
- 3055:1411
|
- 3055:1411
|
||||||
volumes:
|
volumes:
|
||||||
- pocket-id-data:/app/data
|
- pocket-id-data:/app/data
|
||||||
|
- ./seeds/pocket-id:/seed:ro
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: "curl -f http://localhost:1411/healthz"
|
test: "curl -f http://localhost:1411/healthz"
|
||||||
interval: 1m30s
|
interval: 1m30s
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
Executable
BIN
Binary file not shown.
@@ -130,6 +130,8 @@ export const env = createEnv({
|
|||||||
|
|
||||||
AUTH_SYNC_OIDC_ROLES_ON_LOGIN: process.env.AUTH_SYNC_OIDC_ROLES_ON_LOGIN,
|
AUTH_SYNC_OIDC_ROLES_ON_LOGIN: process.env.AUTH_SYNC_OIDC_ROLES_ON_LOGIN,
|
||||||
|
|
||||||
|
AUTH_ROLE_MAP: process.env.AUTH_ROLE_MAP,
|
||||||
|
|
||||||
AUTH_ALLOW_LINKING: process.env.AUTH_ALLOW_LINKING,
|
AUTH_ALLOW_LINKING: process.env.AUTH_ALLOW_LINKING,
|
||||||
AUTH_ALLOW_UNLINKING: process.env.AUTH_ALLOW_UNLINKING,
|
AUTH_ALLOW_UNLINKING: process.env.AUTH_ALLOW_UNLINKING,
|
||||||
|
|
||||||
|
|||||||
+19
-2
@@ -187,16 +187,33 @@ export const auth = betterAuth({
|
|||||||
const roleMapStr = oidcProvider?.roleMap;
|
const roleMapStr = oidcProvider?.roleMap;
|
||||||
|
|
||||||
const rawGroups = userInfo?.groups || userInfo?.roles || [];
|
const rawGroups = userInfo?.groups || userInfo?.roles || [];
|
||||||
|
|
||||||
const userGroups: string[] = Array.isArray(rawGroups)
|
const userGroups: string[] = Array.isArray(rawGroups)
|
||||||
? rawGroups
|
? rawGroups.reduce((carry: string[], group) => {
|
||||||
: [rawGroups];
|
carry.push(String(group).toLowerCase());
|
||||||
|
return carry;
|
||||||
|
}, [])
|
||||||
|
: [String(rawGroups).toLowerCase()];
|
||||||
|
|
||||||
let roleToAssign: string | undefined;
|
let roleToAssign: string | undefined;
|
||||||
|
|
||||||
if (roleMapStr) {
|
if (roleMapStr) {
|
||||||
const mappings = roleMapStr.split(",").map((m) => m.split(":"));
|
const mappings = roleMapStr.split(",").map((m) => m.split(":"));
|
||||||
for (const [group, role] of mappings) {
|
for (const [group, role] of mappings) {
|
||||||
|
console.log(
|
||||||
|
"Checking role mapping:",
|
||||||
|
group.trim(),
|
||||||
|
"against user groups:",
|
||||||
|
userGroups,
|
||||||
|
);
|
||||||
|
|
||||||
if (userGroups.includes(group.trim())) {
|
if (userGroups.includes(group.trim())) {
|
||||||
|
console.log(
|
||||||
|
"Role mapping matched for group:",
|
||||||
|
group.trim(),
|
||||||
|
"->",
|
||||||
|
role.trim(),
|
||||||
|
);
|
||||||
roleToAssign = role.trim();
|
roleToAssign = role.trim();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user