api keycloak setup

This commit is contained in:
tw-blue
2025-11-29 17:58:02 +01:00
parent a9fb52fd4d
commit d6e7de09a4
27 changed files with 548 additions and 68 deletions
+42 -5
View File
@@ -1,10 +1,47 @@
import * as express from 'express';
import { type Request, type RequestHandler } from "express";
import { KC_SECURITY_NAME, keycloak } from "../services/keycloak/user/index.js";
function promisifyMiddleware(
request: Request,
middleware: RequestHandler,
response?: Response,
): Promise<any> {
return new Promise((resolve, reject) => {
middleware(request, response || ({} as any), (result: any) => {
result instanceof Error ? reject(result) : resolve(result);
});
});
}
async function doKeycloakAuth(
request: Request,
roles?: string[],
response?: Response,
): Promise<any> {
if (roles) {
return await promisifyMiddleware(
request,
keycloak.enforcer(roles?.map(role => `realm:${role}`)),
);
} else {
return await promisifyMiddleware(request, keycloak.protect(), response);
}
}
export async function expressAuthentication(
request: express.Request,
request: Request,
securityName: string,
scopes?: string[]
roles?: string[],
response?: Response,
): Promise<any> {
console.dir({ request, securityName, scopes });
return {};
console.dir({ request, securityName, roles });
switch (securityName) {
case KC_SECURITY_NAME:
return doKeycloakAuth(request, roles, response);
case undefined:
return Promise.resolve();
default:
return Promise.reject("Unknown security name");
}
}