api keycloak setup
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user