diff --git a/src/controllers/UserController.ts b/src/controllers/UserController.ts index 306d0e61..35198770 100644 --- a/src/controllers/UserController.ts +++ b/src/controllers/UserController.ts @@ -29,6 +29,7 @@ import { removeUserRoles, getRoleMappings, getUserCount, + enableStatus, } from "../keycloak"; import { AppDataSource } from "../database/data-source"; import { Profile } from "../entities/Profile"; @@ -50,7 +51,6 @@ function stripLeadingSlash(str: string) { @Tags("Single-Sign On") @Security("bearerAuth") export class KeycloakController extends Controller { - private profileRepo = AppDataSource.getRepository(Profile); private profileEmpRepo = AppDataSource.getRepository(ProfileEmployee); @@ -148,7 +148,7 @@ export class KeycloakController extends Controller { }, }); - if (profile) { + if (profile) { profile.keycloak = userId; await this.profileRepo.save(profile); } @@ -191,9 +191,9 @@ export class KeycloakController extends Controller { id: userId, }, }); - + if (profile) { - const null_:any = null; + const null_: any = null; profile.keycloak = null_; await this.profileRepo.save(profile); } @@ -254,6 +254,7 @@ export class KeycloakController extends Controller { lastname: x.lastName, email: x.email, roles: roles, + enabled: x.enabled, }; }), ); @@ -314,4 +315,10 @@ export class KeycloakController extends Controller { } return result; } + + @Put("user/{userId}/enableStatus/{status}") + async changeEnableStatus(@Path() userId: string, @Path() status: boolean) { + const result = await enableStatus(userId, status); + if (!result) throw new Error("Failed. Cannot change enable status."); + } } diff --git a/src/keycloak/index.ts b/src/keycloak/index.ts index e9c82848..ab6f765d 100644 --- a/src/keycloak/index.ts +++ b/src/keycloak/index.ts @@ -147,6 +147,7 @@ export async function getUserList(first = "", max = "", search = "") { firstName: v.firstName, lastName: v.lastName, email: v.email, + enabled: v.enabled, })); } @@ -233,9 +234,7 @@ export async function updateName( lastName, }), }).catch((e) => console.log("Keycloak Error: ", e)); - console.log("firstName: ", firstName); - console.log("lastName: ", lastName); - + if (!res) return false; if (!res.ok) { // return Boolean(console.error("Keycloak Error Response: ", await res.json())); @@ -247,6 +246,39 @@ export async function updateName( return id || true; } +/** + * enable keycloak user by uuid + * + * Client must have permission to manage realm's user + * + * @returns user uuid or true if success, false otherwise. + */ +export async function enableStatus( + userId: string, + status: boolean, +) { + + const res = await fetch(`${KC_URL}/admin/realms/${KC_REALM}/users/${userId}`, { + headers: { + authorization: `Bearer ${await getToken()}`, + "content-type": `application/json`, + }, + method: "PUT", + body: JSON.stringify({ + enabled: status, + }), + }).catch((e) => console.log("Keycloak Error: ", e)); + + if (!res) return false; + if (!res.ok) { + return await res.json(); + } + + const path = res.headers.get("Location"); + const id = path?.split("/").at(-1); + return id || true; +} + /** * Delete keycloak user by uuid *