From 2e24c6fd5d4131aa9715ce9b64de22074e105040 Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Thu, 29 May 2025 15:19:07 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20New=20"auth"=20service=20replacing?= =?UTF-8?q?=20the=20"login"=20one?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/services/auth.service.ts | 55 +++++++++++++++++++++++++++++++ src/app/services/login.service.ts | 21 ------------ 2 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 src/app/services/auth.service.ts delete mode 100644 src/app/services/login.service.ts diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts new file mode 100644 index 0000000..6dd32aa --- /dev/null +++ b/src/app/services/auth.service.ts @@ -0,0 +1,55 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { BehaviorSubject, Observable, tap } from 'rxjs'; +import { environment } from '../../environment'; +import { LocalStorageService } from './localstorage.service'; +interface LoginResponse { + access_token: string; + token_type: string; + user_id: string; + is_admin: boolean; +} + +@Injectable({ + providedIn: 'root' +}) +export class AuthService { + private isAdminSubject = new BehaviorSubject(false); + isAdmin$ = this.isAdminSubject.asObservable(); + + constructor(private http: HttpClient, private localStorageService: LocalStorageService) { + const token = this.localStorageService.getToken(); + if (token) { + this.isAdminSubject.next(this.localStorageService.getIsAdmin() === 'true'); + } + } + + login(username: string, password: string): Observable { + const payload = new HttpParams() + .set('username', username) + .set('password', password); + + return this.http.post(`${environment.apiURL}/login`, payload).pipe( + tap(response => { + this.localStorageService.setToken(response.access_token); + this.localStorageService.setIsAdmin(response.is_admin); + this.isAdminSubject.next(response.is_admin); + }) + ); + } + + logout(): void { + this.localStorageService.removeToken(); + this.localStorageService.removeIsAdmin(); + this.isAdminSubject.next(false); + } + + isAdmin(): boolean { + return this.isAdminSubject.value; + } + + getAuthHeaders(): HttpHeaders { + const token = this.localStorageService.getToken(); + return new HttpHeaders().set('Authorization', `Bearer ${token}`); + } +} \ No newline at end of file diff --git a/src/app/services/login.service.ts b/src/app/services/login.service.ts deleted file mode 100644 index 6b0f0c4..0000000 --- a/src/app/services/login.service.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { environment } from '../../environments/environment'; - -@Injectable({ - providedIn: 'root', -}) -export class LoginService { - private apiUrl = environment.apiURL; - - constructor(private http: HttpClient) {} - - login(username: string, password: string): Observable { - const payload = new HttpParams() - .set('username', username) - .set('password', password); - - return this.http.post(this.apiUrl + '/login', payload); - } -}