79 lines
2.3 KiB
TypeScript
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 |