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 *