import { Component, inject, OnDestroy, OnInit } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatButtonModule } from '@angular/material/button'; import EventService from '../../shared/services/EventService'; import { HttpClient } from '@angular/common/http'; import { ActivatedRoute, Router } from '@angular/router'; import { first, Subscription, timeout } from 'rxjs'; import { HermesClientService } from '../../hermes-client.service'; import { MatCardModule } from '@angular/material/card'; import { ApiKeyService } from '../../shared/services/api/api-key.service'; @Component({ selector: 'tts-login', standalone: true, imports: [MatButtonModule, MatCardModule, MatFormFieldModule, MatSelectModule, MatInputModule, FormsModule], templateUrl: './tts-login.component.html', styleUrl: './tts-login.component.scss' }) export class TtsLoginComponent implements OnInit, OnDestroy { keyService = inject(ApiKeyService); route = inject(ActivatedRoute); api_keys: { id: string, label: string }[] = []; selected_api_key: string | undefined; private subscriptions: Subscription[] = []; constructor(private hermes: HermesClientService, private events: EventService, private http: HttpClient, private router: Router) { } ngOnInit(): void { 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.selected_api_key = undefined; await this.router.navigate(['tts-login']) })); this.subscriptions.push(this.events.listen('impersonation', _ => { this.selected_api_key = undefined; this.keyService.fetch(true) .pipe(timeout(3000), first()) .subscribe(d => this.api_keys = d); })); } ngOnDestroy(): void { if (!this.hermes.logged_in) this.subscriptions.forEach(s => s.unsubscribe()); } login() { if (!this.selected_api_key) return; this.hermes.login(this.selected_api_key); } }