102 lines
3.6 KiB
TypeScript
102 lines
3.6 KiB
TypeScript
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 (<any>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<KeycloakUser[]> {
|
|
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<KeycloakUser> {
|
|
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<void> {
|
|
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;
|
|
// }
|
|
}
|