mirror of
https://github.com/andwati/zitadel.git
synced 2026-10-25 00:32:15 +00:00
* managementservice, authservice, change all refs * refactor grpc auth * fix references * interceptor logic * new interceptor * appinitializers, environment loader, interceptors * remove circular dep * init authconfig in grpc service * authconfig * lint * update mgmt service * fix references * update clientid, fix interceptor * rm unused authconfig * todo auth interceptor
70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
import { AuthConfig, OAuthService } from 'angular-oauth2-oidc';
|
|
import { BehaviorSubject, from, Observable } from 'rxjs';
|
|
|
|
import { StatehandlerService } from './statehandler.service';
|
|
|
|
@Injectable({
|
|
providedIn: 'root',
|
|
})
|
|
export class AuthenticationService {
|
|
private authConfig!: AuthConfig;
|
|
private _authenticated: boolean = false;
|
|
private readonly _authenticationChanged: BehaviorSubject<
|
|
boolean
|
|
> = new BehaviorSubject(this.authenticated);
|
|
|
|
constructor(
|
|
private oauthService: OAuthService,
|
|
private statehandler: StatehandlerService,
|
|
) { }
|
|
|
|
public initConfig(data: AuthConfig): void {
|
|
this.authConfig = data;
|
|
}
|
|
|
|
public get authenticated(): boolean {
|
|
return this._authenticated;
|
|
}
|
|
|
|
public get authenticationChanged(): Observable<boolean> {
|
|
return this._authenticationChanged;
|
|
}
|
|
|
|
public getOIDCUser(): Observable<any> {
|
|
return from(this.oauthService.loadUserProfile());
|
|
}
|
|
|
|
public async authenticate(
|
|
config?: Partial<AuthConfig>,
|
|
setState: boolean = true,
|
|
force: boolean = false,
|
|
): Promise<boolean> {
|
|
if (config) {
|
|
this.authConfig = config;
|
|
}
|
|
console.log(this.authConfig);
|
|
this.oauthService.configure(this.authConfig);
|
|
|
|
this.oauthService.strictDiscoveryDocumentValidation = false;
|
|
await this.oauthService.loadDiscoveryDocumentAndTryLogin();
|
|
|
|
this._authenticated = this.oauthService.hasValidAccessToken();
|
|
|
|
if (!this.oauthService.hasValidIdToken() || !this.authenticated || config || force) {
|
|
const newState = setState ? await this.statehandler.createState().toPromise() : undefined;
|
|
this.oauthService.initCodeFlow(newState);
|
|
}
|
|
this._authenticationChanged.next(this.authenticated);
|
|
|
|
return this.authenticated;
|
|
}
|
|
|
|
public signout(): void {
|
|
this.oauthService.logOut();
|
|
this._authenticated = false;
|
|
this._authenticationChanged.next(false);
|
|
}
|
|
}
|
|
|