import { Injectable } from '@nestjs/common'; import { KeycloakUser } from 'src/models/main.model'; import urlcat from 'urlcat'; @Injectable() export class AuthService { public async getAccessToken() { try { const params = new URLSearchParams(); params.append('grant_type', 'password'); params.append('username', process.env.KEYCLOAK_ADMIN_USER); params.append('password', process.env.KEYCLOAK_ADMIN_PASSWORD); const URL = `${process.env.KEYCLOAK_HOST}${process.env.KEYCLOAK_TOKEN_URL}`; const response = await fetch(URL, { method: 'POST', body: params.toString(), headers: { 'Content-Type': 'application/x-www-form-urlencoded', Authorization: process.env.KEYCLOAK_ADMIN_TOKEN, }, }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); return (data).access_token; } catch (error) { if (error.name === 'HTTPError') { const errorJson = await error.response.json(); console.error('Fehlerantwort vom Server:', errorJson); } else { console.error('Allgemeiner Fehler:', error); } } } public async getUsers(): Promise { const token = await this.getAccessToken(); const URL = `${process.env.KEYCLOAK_HOST}${process.env.KEYCLOAK_ADMIN_REALM}${process.env.REALM}${process.env.KEYCLOAK_USERS_URL}`; const response = await fetch(URL, { method: 'GET', headers: { 'Content-Type': 'application/x-www-form-urlencoded', Authorization: `Bearer ${token}`, }, }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); return data as KeycloakUser[]; } public async getUser(userid: string): Promise { const token = await this.getAccessToken(); const URLPATH = `${process.env.KEYCLOAK_ADMIN_REALM}${process.env.REALM}${process.env.KEYCLOAK_USER_URL}`; const URL = urlcat(process.env.KEYCLOAK_HOST, URLPATH, { userid }); const response = await fetch(URL, { method: 'GET', headers: { 'Content-Type': 'application/x-www-form-urlencoded', Authorization: `Bearer ${token}`, }, }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); return data as KeycloakUser; } public async updateKeycloakUser(keycloakUser: KeycloakUser): Promise { const token = await this.getAccessToken(); const userid = keycloakUser.id; const URLPATH = `${process.env.KEYCLOAK_ADMIN_REALM}${process.env.REALM}${process.env.KEYCLOAK_USER_URL}`; const URL = urlcat(process.env.KEYCLOAK_HOST, URLPATH, { userid }); const response = await fetch(URL, { method: 'PUT', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }, body: JSON.stringify(keycloakUser), }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } } // public async getLastLogin(userid: string) { // const token = await this.getAccessToken(); // const URLPATH = `${process.env.KEYCLOAK_ADMIN_REALM}${process.env.REALM}${process.env.KEYCLOAK_LASTLOGIN_URL}`; // const URL = urlcat(process.env.KEYCLOAK_HOST, URLPATH, { userid }); // const response = await ky // .get(URL, { // headers: { // 'Content-Type': 'application/x-www-form-urlencoded', // Authorization: `Bearer ${token}`, // }, // }) // .json(); // return response; // } }