Administration/src/app/core/auth/auth.service.ts
Snoweuph a4f27ed881
All checks were successful
Quality Check / Linting (push) Successful in 24s
Build Application / build (push) Successful in 55s
Build Application / build-docker (push) Successful in 8s
Build Application / release (push) Successful in 4s
CHORE: setup
2025-02-02 19:59:34 +01:00

50 lines
1.6 KiB
TypeScript

import { Injectable } from '@angular/core';
import { CanActivate, GuardResult, MaybeAsync, Router } from '@angular/router';
import UserData from '@core/auth/UserData';
import { Configuration } from '@core/server';
import { OidcSecurityService } from 'angular-auth-oidc-client';
import { BehaviorSubject, Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class AuthService implements CanActivate {
public $user: BehaviorSubject<UserData | undefined>;
constructor(
private readonly oidcSecurityService: OidcSecurityService,
protected apiConfig: Configuration,
private router: Router
) {
this.$user = new BehaviorSubject<UserData | undefined>(undefined);
this.oidcSecurityService.checkAuth().subscribe(({ isAuthenticated, userData, accessToken }) => {
apiConfig.credentials = {JWTAuth: accessToken};
const isLoggedIn = isAuthenticated && userData != null && accessToken != '';
this.$user.next(isLoggedIn ? {
username: userData.preferred_username,
verified: userData.email_verified
} : undefined);
});
}
canActivate(): MaybeAsync<GuardResult> {
return new Observable(() => {
this.oidcSecurityService.checkAuth().subscribe(({ isAuthenticated }) => {
if (isAuthenticated) {
return true;
}
this.login();
return false;
});
});
}
login() {
this.oidcSecurityService.authorize();
}
logout() {
this.oidcSecurityService.logoff().subscribe(() => { });
}
}