79 lines
2.3 KiB
TypeScript

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<boolean> {
return new Observable(observer => {
this.http.get<AuthCheckDto>(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<any> {
return new Observable(observer => {
const userData = { username, password };
this.http.post<any>(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<any> {
return new Observable(observer => {
this.http.post<any>(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