Move some subscriptions' lifespan. Added automatic TTS login (when there's an API key)
This commit is contained in:
parent
6ee99466f8
commit
a19a7a0217
@ -1,13 +1,15 @@
|
|||||||
import { isPlatformBrowser } from '@angular/common';
|
import { isPlatformBrowser } from '@angular/common';
|
||||||
import { Component, OnInit, Inject, PLATFORM_ID, NgZone, OnDestroy } from '@angular/core';
|
import { Component, OnInit, Inject, PLATFORM_ID, NgZone, OnDestroy, inject } from '@angular/core';
|
||||||
import { Router, RouterOutlet } from '@angular/router';
|
import { Router, RouterOutlet } from '@angular/router';
|
||||||
import { HermesClientService } from './hermes-client.service';
|
import { HermesClientService } from './hermes-client.service';
|
||||||
import { AuthUserGuard } from './shared/auth/auth.user.guard'
|
import { AuthUserGuard } from './shared/auth/auth.user.guard'
|
||||||
import { Subscription } from 'rxjs';
|
import { first, Subscription, timeout } from 'rxjs';
|
||||||
import { NavigationComponent } from "./navigation/navigation.component";
|
import { NavigationComponent } from "./navigation/navigation.component";
|
||||||
import EventService from './shared/services/EventService';
|
import EventService from './shared/services/EventService';
|
||||||
import { ApiAuthenticationService } from './shared/services/api/api-authentication.service';
|
import { ApiAuthenticationService } from './shared/services/api/api-authentication.service';
|
||||||
import { AuthModule } from './auth/auth.module';
|
import { AuthModule } from './auth/auth.module';
|
||||||
|
import { ApiKeyService } from './shared/services/api/api-key.service';
|
||||||
|
import ApiKey from './shared/models/api-key';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
@ -18,6 +20,8 @@ import { AuthModule } from './auth/auth.module';
|
|||||||
styleUrl: './app.component.scss'
|
styleUrl: './app.component.scss'
|
||||||
})
|
})
|
||||||
export class AppComponent implements OnInit, OnDestroy {
|
export class AppComponent implements OnInit, OnDestroy {
|
||||||
|
private readonly keyService = inject(ApiKeyService);
|
||||||
|
|
||||||
private isBrowser: boolean;
|
private isBrowser: boolean;
|
||||||
private ngZone: NgZone;
|
private ngZone: NgZone;
|
||||||
private subscriptions: Subscription[];
|
private subscriptions: Subscription[];
|
||||||
@ -27,6 +31,13 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||||||
this.ngZone = ngZone;
|
this.ngZone = ngZone;
|
||||||
this.isBrowser = isPlatformBrowser(this.platformId);
|
this.isBrowser = isPlatformBrowser(this.platformId);
|
||||||
this.subscriptions = [];
|
this.subscriptions = [];
|
||||||
|
|
||||||
|
this.subscriptions.push(this.events.listen('tts_login_ack', async _ => {
|
||||||
|
await this.router.navigate(['policies'])
|
||||||
|
}));
|
||||||
|
this.subscriptions.push(this.events.listen('tts_logoff', async _ => {
|
||||||
|
await this.router.navigate(['tts-login'])
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
@ -47,10 +58,15 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this.addSubscription(this.events.listen('login', async (_) => {
|
this.addSubscription(this.events.listen('login', () => {
|
||||||
if (['/login', '/auth'].some(partial => document.location.href.includes(partial))) {
|
this.keyService.fetch(true)
|
||||||
await this.router.navigate(['tts-login']);
|
.pipe(timeout(3000), first())
|
||||||
}
|
.subscribe(async (d: ApiKey[]) => {
|
||||||
|
if (d.length > 0)
|
||||||
|
this.client.login(d[0].id);
|
||||||
|
else if (['/login', '/auth'].some(partial => document.location.href.includes(partial)))
|
||||||
|
await this.router.navigate(['tts-login']);
|
||||||
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this.ngZone.runOutsideAngular(() => setInterval(() => this.client.heartbeat(), 15000));
|
this.ngZone.runOutsideAngular(() => setInterval(() => this.client.heartbeat(), 15000));
|
||||||
|
@ -34,12 +34,8 @@ export class TtsLoginComponent implements OnInit, OnDestroy {
|
|||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
this.route.data.subscribe(d => this.api_keys = d['keys']);
|
this.route.data.subscribe(d => this.api_keys = d['keys']);
|
||||||
|
|
||||||
this.subscriptions.push(this.events.listen('tts_login_ack', async _ => {
|
|
||||||
await this.router.navigate(['policies'])
|
|
||||||
}));
|
|
||||||
this.subscriptions.push(this.events.listen('tts_logoff', async _ => {
|
this.subscriptions.push(this.events.listen('tts_logoff', async _ => {
|
||||||
this.selected_api_key = undefined;
|
this.selected_api_key = undefined;
|
||||||
await this.router.navigate(['tts-login'])
|
|
||||||
}));
|
}));
|
||||||
this.subscriptions.push(this.events.listen('impersonation', _ => {
|
this.subscriptions.push(this.events.listen('impersonation', _ => {
|
||||||
this.selected_api_key = undefined;
|
this.selected_api_key = undefined;
|
||||||
@ -51,8 +47,7 @@ export class TtsLoginComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy(): void {
|
ngOnDestroy(): void {
|
||||||
if (!this.hermes.logged_in)
|
this.subscriptions.forEach(s => s.unsubscribe());
|
||||||
this.subscriptions.forEach(s => s.unsubscribe());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
login() {
|
login() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user