Administration/src/app/core/auth/auth.service.ts
Snoweuph 888f218811
Some checks failed
Build Application / build (push) Failing after 16s
Build Application / build-docker (push) Has been skipped
Build Application / release (push) Has been skipped
Quality Check / Linting (push) Successful in 22s
CHORE: setup
2025-02-02 15:58:18 +01:00

46 lines
1.6 KiB
TypeScript

import { Injectable } from '@angular/core';
import { CanActivate, GuardResult, MaybeAsync, RedirectCommand, 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((publish) => {
this.oidcSecurityService.checkAuth().subscribe(({ isAuthenticated }) => {
publish.next(isAuthenticated ? true : new RedirectCommand(this.router.parseUrl('/')));
});
});
}
login() {
this.oidcSecurityService.authorize();
}
logout() {
this.oidcSecurityService.logoff().subscribe(() => { });
}
}