diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 5baf77b..3ed9012 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,67 +1,72 @@ -import { CommonModule, isPlatformBrowser } from '@angular/common'; +import { isPlatformBrowser } from '@angular/common'; import { Component, OnInit, Inject, PLATFORM_ID, NgZone, OnDestroy } from '@angular/core'; import { Router, RouterOutlet } from '@angular/router'; -import { FormsModule } from '@angular/forms' import { HermesClientService } from './hermes-client.service'; import { AuthUserGuard } from './shared/auth/auth.user.guard' import { Subscription } from 'rxjs'; import { NavigationComponent } from "./navigation/navigation.component"; import EventService from './shared/services/EventService'; import { ApiAuthenticationService } from './shared/services/api/api-authentication.service'; -import { PoliciesModule } from './policies/policies.module'; -import { TtsFiltersModule } from './tts-filters/tts-filters.module'; import { AuthModule } from './auth/auth.module'; @Component({ - selector: 'app-root', - standalone: true, - imports: [RouterOutlet, CommonModule, FormsModule, PoliciesModule, TtsFiltersModule, AuthModule, NavigationComponent], - providers: [AuthUserGuard], - templateUrl: './app.component.html', - styleUrl: './app.component.scss' + selector: 'app-root', + standalone: true, + imports: [RouterOutlet, AuthModule, NavigationComponent], + providers: [AuthUserGuard], + templateUrl: './app.component.html', + styleUrl: './app.component.scss' }) export class AppComponent implements OnInit, OnDestroy { - private isBrowser: boolean; - private ngZone: NgZone; - private subscriptions: Subscription[]; + private isBrowser: boolean; + private ngZone: NgZone; + private subscriptions: Subscription[]; - constructor(private auth: ApiAuthenticationService, private client: HermesClientService, private events: EventService, private router: Router, ngZone: NgZone, @Inject(PLATFORM_ID) private platformId: Object) { - this.ngZone = ngZone; - this.isBrowser = isPlatformBrowser(this.platformId); - this.subscriptions = []; + constructor(private auth: ApiAuthenticationService, private client: HermesClientService, private events: EventService, private router: Router, ngZone: NgZone, @Inject(PLATFORM_ID) private platformId: Object) { + this.ngZone = ngZone; + this.isBrowser = isPlatformBrowser(this.platformId); + this.subscriptions = []; + } + + ngOnInit(): void { + if (!this.isBrowser) + return; + + this.auth.update(); + + this.addSubscription(this.events.listen('logoff', async (message) => { + localStorage.removeItem('jwt'); + if (!document.location.href.includes('/login')) { + if (message) + await this.router.navigate(['login'], { + queryParams: { message: message } + }); + else + await this.router.navigate(['login']); + } + })); + + this.addSubscription(this.events.listen('login', async (_) => { + if (['/login', '/auth'].some(partial => document.location.href.includes(partial))) { + await this.router.navigate(['tts-login']); + } + })); + + const connection = this.client.connect(); + if (connection) { + this.addSubscription(connection); } + this.ngZone.runOutsideAngular(() => setInterval(() => this.client.heartbeat(), 15000)); + } - ngOnInit(): void { - if (!this.isBrowser) - return; - - this.auth.update(); - - this.addSubscription(this.events.listen('logoff', (message) => { - localStorage.removeItem('jwt'); - if (!document.location.href.includes('/login')) { - this.router.navigate(['/login?warning=' + message]); - } - })); - - this.addSubscription(this.events.listen('login', (_) => { - if (document.location.href.includes('/login')) { - this.router.navigate(['/tts-login']); - } - })); - - this.client.connect(); - this.ngZone.runOutsideAngular(() => setInterval(() => this.client.heartbeat(), 15000)); + ngOnDestroy() { + for (let s of this.subscriptions) { + s.unsubscribe(); } + } - ngOnDestroy() { - for (let s of this.subscriptions) { - s.unsubscribe(); - } - } - - private addSubscription(s: Subscription) { - this.subscriptions.push(s); - } + private addSubscription(s: Subscription) { + this.subscriptions.push(s); + } } \ No newline at end of file diff --git a/src/app/auth/impersonation/impersonation.component.ts b/src/app/auth/impersonation/impersonation.component.ts index f6eb2b1..bada955 100644 --- a/src/app/auth/impersonation/impersonation.component.ts +++ b/src/app/auth/impersonation/impersonation.component.ts @@ -59,10 +59,10 @@ export class ImpersonationComponent implements OnInit { body: { impersonation: e.value } - }).subscribe((data: any) => { + }).subscribe(async (data: any) => { this.hermes.disconnect(); this.events.emit('impersonation', e.value); - this.router.navigate(['/tts-login']); + await this.router.navigate(['tts-login']); }); } else { this.http.put(environment.API_HOST + '/admin/impersonate', { @@ -71,10 +71,10 @@ export class ImpersonationComponent implements OnInit { headers: { 'Authorization': 'Bearer ' + localStorage.getItem('jwt') } - }).subscribe((data: any) => { + }).subscribe(async (data: any) => { this.hermes.disconnect(); this.events.emit('impersonation', e.value); - this.router.navigate(['/tts-login']); + await this.router.navigate(['tts-login']); }); } } diff --git a/src/app/auth/login/login.component.html b/src/app/auth/login/login.component.html index 02669bf..6a9f5a0 100644 --- a/src/app/auth/login/login.component.html +++ b/src/app/auth/login/login.component.html @@ -1,21 +1,19 @@
Log in with your favorite livestream service
+Log in with your favorite livestream service
- -