From 7e6325d3598f00d7fd8808c906c8fdaaec7c2be0 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:37:33 +0700 Subject: [PATCH] feat: delete user --- src/controllers/keycloak-controller.ts | 6 ++++++ src/services/keycloak.ts | 25 ++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/controllers/keycloak-controller.ts b/src/controllers/keycloak-controller.ts index ffc8ec9..5ebb09f 100644 --- a/src/controllers/keycloak-controller.ts +++ b/src/controllers/keycloak-controller.ts @@ -2,6 +2,7 @@ import { Body, Controller, Delete, Get, Path, Post, Put, Route, Security, Tags } import { addUserRoles, createUser, + deleteUser, editUser, getRoles, removeUserRoles, @@ -30,6 +31,11 @@ export class KeycloakController extends Controller { return await editUser(userId, body); } + @Delete("user/{userId}") + async deleteUser(@Path() userId: string) { + return await deleteUser(userId); + } + @Get("role") async getRole() { const role = await getRoles(); diff --git a/src/services/keycloak.ts b/src/services/keycloak.ts index 15089e1..a9c52bc 100644 --- a/src/services/keycloak.ts +++ b/src/services/keycloak.ts @@ -92,7 +92,7 @@ export async function createUser(username: string, password: string, opts?: Reco } /** - * Update keycloak user by given username and password with roles + * Update keycloak user by uuid * * Client must have permission to manage realm's user * @@ -125,6 +125,29 @@ export async function editUser(userId: string, opts: Record) { return id || true; } +/** + * Delete 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 deleteUser(userId: string) { + const res = await fetch(`${KC_URL}/admin/realms/${KC_REALM}/users/${userId}`, { + // prettier-ignore + headers: { + "authorization": `Bearer ${await getToken()}`, + "content-type": `application/json`, + }, + method: "DELETE", + }).catch((e) => console.log("Keycloak Error: ", e)); + + if (!res) return false; + if (!res.ok) { + return Boolean(console.error("Keycloak Error Response: ", await res.json())); + } +} + /** * Get roles list or specific role data *