Fix scouthub-home-be

This commit is contained in:
Lorenzo Sanesi
2026-07-25 12:09:12 +02:00
parent ac92ca43ce
commit 5b7c82d359
39 changed files with 2116 additions and 81 deletions
+21 -12
View File
@@ -1,20 +1,29 @@
import { keycloakAdminHttp } from './httpClient';
interface RealmRoleRepresentation {
id: string;
name: string;
}
// Ruoli assegnati automaticamente da Keycloak a ogni utente (non gestiti da
// questa app): il composite "default-roles-{realm}" e i ruoli che include.
const RUOLI_DEFAULT_KEYCLOAK = new Set(['offline_access', 'uma_authorization']);
function isRuoloDefaultKeycloak(nome: string): boolean {
return RUOLI_DEFAULT_KEYCLOAK.has(nome) || nome.startsWith('default-roles-');
}
export async function assignRealmRoleToUser(userId: string, ruolo: string): Promise<void> {
// TODO: POST {adminBaseUrl}/users/{userId}/role-mappings/realm con il
// rappresentante del ruolo (richiede prima GET {adminBaseUrl}/roles/{ruolo}
// per ottenerne id e name).
throw new Error('Not implemented');
const { data: ruoloRepresentation } = await keycloakAdminHttp.get<RealmRoleRepresentation>(`/roles/${ruolo}`);
await keycloakAdminHttp.post(`/users/${userId}/role-mappings/realm`, [ruoloRepresentation]);
}
export async function removeRealmRoleFromUser(userId: string, ruolo: string): Promise<void> {
// TODO: DELETE {adminBaseUrl}/users/{userId}/role-mappings/realm con il
// rappresentante del ruolo.
throw new Error('Not implemented');
const { data: ruoloRepresentation } = await keycloakAdminHttp.get<RealmRoleRepresentation>(`/roles/${ruolo}`);
await keycloakAdminHttp.delete(`/users/${userId}/role-mappings/realm`, { data: [ruoloRepresentation] });
}
export async function getUserRealmRoles(userId: string): Promise<string[]> {
// TODO: GET {adminBaseUrl}/users/{userId}/role-mappings/realm. Il contratto
// di questa funzione è di restituire solo i ruoli scout "custom" (es. le
// voci di ruoliDefault create in POST /gruppi), escludendo i ruoli di
// default di Keycloak (offline_access, uma_authorization, ecc.).
throw new Error('Not implemented');
const response = await keycloakAdminHttp.get<RealmRoleRepresentation[]>(`/users/${userId}/role-mappings/realm`);
return response.data.map((ruolo) => ruolo.name).filter((nome) => !isRuoloDefaultKeycloak(nome));
}