finalize migration (yay)
This commit is contained in:
@@ -1,39 +1,30 @@
|
||||
import { type Request, type RequestHandler } from "express";
|
||||
import { type Request, type Response } from "express";
|
||||
|
||||
import { KC_SECURITY_NAME, keycloak } from "../services/keycloak/user/index.js";
|
||||
import { inject } from "../infrastructure/di/index.js";
|
||||
import {
|
||||
KC_SECURITY_NAME,
|
||||
KeycloakUser,
|
||||
} 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), (next_result: any) => {
|
||||
console.dir(next_result);
|
||||
next_result instanceof Error
|
||||
? reject(next_result)
|
||||
: resolve(next_result);
|
||||
});
|
||||
});
|
||||
}
|
||||
const keycloak = inject(KeycloakUser);
|
||||
|
||||
async function doKeycloakAuth(
|
||||
request: Request,
|
||||
roles?: string[],
|
||||
response?: Response,
|
||||
): Promise<any> {
|
||||
if (roles && roles.length > 0) {
|
||||
const grant = await keycloak.getGrant(request, response ?? ({} as any));
|
||||
const allowed = roles.every(role =>
|
||||
grant.access_token?.hasRealmRole(role),
|
||||
);
|
||||
if (allowed) {
|
||||
return Promise.resolve();
|
||||
} else {
|
||||
return Promise.reject(httpError(403, "Forbidden"));
|
||||
}
|
||||
if (!roles || roles.length < 1) {
|
||||
roles = ["default-roles-taekwondo"];
|
||||
}
|
||||
const allowed = await keycloak.checkRoles(
|
||||
roles,
|
||||
request,
|
||||
response ?? ({} as any),
|
||||
);
|
||||
if (allowed) {
|
||||
return Promise.resolve();
|
||||
} else {
|
||||
return await promisifyMiddleware(request, keycloak.protect(), response);
|
||||
return Promise.reject(httpError(403, "Forbidden"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user