import { Inject, Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable, of } from 'rxjs'; import { AuthCheckDto } from '../models/user-management.api.models'; import { Router } from '@angular/router'; import Swal from 'sweetalert2'; @Injectable({ providedIn: 'root', }) export class AuthenticationService { constructor(private router: Router, private http: HttpClient, @Inject('LOGIN_URL') private loginUrl: string, @Inject('LOGOUT_URL') private logoutUrl: string, @Inject('LOGIN_CHECK_URL') private checkUrl: string) { } isAuthenticated(): Observable { return new Observable(observer => { this.http.get(this.checkUrl, { withCredentials: true }) .subscribe({ next: (response) => { _isLogedIn = response.isAuthenticated; observer.next(response.isAuthenticated) }, error: (error) => { this.showErrorAlert() observer.error(error) }, complete: () => observer.complete() }); }); } login(username: string, password: string): Observable { return new Observable(observer => { const userData = { username, password }; this.http.post(this.loginUrl, userData, { withCredentials: true }) .subscribe({ next: (response) => { _isLogedIn = true; observer.next(response); }, error: (error) => { this.showErrorAlert() observer.error(error); }, complete: () => { observer.complete(); } }); }); } logout(): Observable { return new Observable(observer => { this.http.post(this.logoutUrl, {}, { withCredentials: true }) .subscribe({ next: (response) => { if (response.ok) { this.router.navigate(['/']); _isLogedIn = false; observer.next(response) } }, error: (error) => observer.error(error), complete: () => observer.complete() }); }); } showErrorAlert() { Swal.fire({ icon: "error", title: "Oops...", text: "The backend application is not responding.", }); } } let _isLogedIn: boolean = false; export const IsLogedIn = () => _isLogedIn