Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | 1x 31x 31x 31x 31x 31x 17x 2x 2x 2x 2x 2x 1x 1x 1x 1x 2x 2x 1x 1x 1x 1x 1x 21x 21x 2x 19x 1x 3x 3x 3x 3x 2x 2x 2x 2x 3x 3x 3x 3x 3x 3x 2x 1x | import { Injectable, inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { AuthService } from './auth.service';
import { Observable, of } from 'rxjs';
import { catchError, tap } from 'rxjs/operators';
export interface CookiePreferences {
essential: boolean; // Toujours true, ne peut pas être désactivé
analytics: boolean;
marketing: boolean;
}
@Injectable({
providedIn: 'root'
})
export class CookieService {
private http = inject(HttpClient);
private authService = inject(AuthService);
private readonly API_URL = 'http://localhost:8081/api';
private readonly COOKIE_CONSENT_KEY = 'cookie_consent';
private readonly COOKIE_PREFERENCES_KEY = 'cookie_preferences';
/**
* Vérifie si l'utilisateur a déjà donné son consentement aux cookies
*/
hasConsent(): boolean {
return localStorage.getItem(this.COOKIE_CONSENT_KEY) === 'true';
}
/**
* Enregistre le consentement de l'utilisateur
*/
setConsent(preferences: CookiePreferences): void {
localStorage.setItem(this.COOKIE_CONSENT_KEY, 'true');
localStorage.setItem(this.COOKIE_PREFERENCES_KEY, JSON.stringify(preferences));
// Appliquer les préférences
this.applyCookiePreferences(preferences);
// Si l'utilisateur est connecté, sauvegarder aussi dans le backend
const currentUser = this.authService.getCurrentUserSync();
if (currentUser && currentUser.id) {
this.savePreferencesToBackend(currentUser.id, preferences).subscribe({
next: () => console.log('Préférences de cookies sauvegardées dans le backend'),
error: (error) => console.warn('Erreur lors de la sauvegarde des préférences:', error)
});
}
}
/**
* Sauvegarde les préférences de cookies dans le backend (si utilisateur connecté)
*/
private savePreferencesToBackend(userId: number, preferences: CookiePreferences): Observable<any> {
const payload = {
cookiePreferences: JSON.stringify(preferences),
cookieConsentGiven: true
};
// Utiliser l'endpoint existant updatePartialUser
return this.http.patch(`${this.API_URL}/users/${userId}`, payload, {
headers: this.authService.getAuthHeaders()
}).pipe(
catchError(error => {
// Si erreur, continuer quand même (les préférences sont dans localStorage)
return of(null);
})
);
}
/**
* Charge les préférences de cookies depuis le backend (si utilisateur connecté)
*/
loadPreferencesFromBackend(): void {
const currentUser = this.authService.getCurrentUserSync();
if (currentUser && currentUser.cookiePreferences) {
try {
const preferences = JSON.parse(currentUser.cookiePreferences);
localStorage.setItem(this.COOKIE_PREFERENCES_KEY, JSON.stringify(preferences));
localStorage.setItem(this.COOKIE_CONSENT_KEY, 'true');
this.applyCookiePreferences(preferences);
} catch (error) {
console.warn('Erreur lors du chargement des préférences depuis le backend:', error);
}
}
}
/**
* Récupère les préférences de cookies de l'utilisateur
*/
getPreferences(): CookiePreferences {
const stored = localStorage.getItem(this.COOKIE_PREFERENCES_KEY);
if (stored) {
return JSON.parse(stored);
}
// Par défaut, seulement les cookies essentiels
return {
essential: true,
analytics: false,
marketing: false
};
}
/**
* Récupère le consentement actuel (alias pour getPreferences pour cohérence)
*/
getConsent(): CookiePreferences {
return this.getPreferences();
}
/**
* Applique les préférences de cookies
*/
private applyCookiePreferences(preferences: CookiePreferences): void {
// Cookies essentiels : toujours activés
// Ces cookies sont nécessaires au fonctionnement du site
// Cookies analytiques
if (preferences.analytics) {
// Ici vous pouvez initialiser Google Analytics, etc.
console.log('Cookies analytiques activés');
} else E{
// Désactiver les cookies analytiques
console.log('Cookies analytiques désactivés');
}
// Cookies marketing
Iif (preferences.marketing) {
// Ici vous pouvez initialiser les pixels de suivi publicitaire, etc.
console.log('Cookies marketing activés');
} else {
// Désactiver les cookies marketing
console.log('Cookies marketing désactivés');
}
}
/**
* Supprime tous les cookies (sauf les essentiels)
*/
clearNonEssentialCookies(): void {
// Supprimer les cookies analytiques et marketing
// Cette fonction peut être appelée si l'utilisateur change ses préférences
console.log('Suppression des cookies non essentiels');
}
/**
* Définit un cookie
*/
setCookie(name: string, value: string, days: number = 365): void {
const date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
const expires = `expires=${date.toUTCString()}`;
document.cookie = `${name}=${value};${expires};path=/;SameSite=Lax`;
}
/**
* Récupère un cookie
*/
getCookie(name: string): string | null {
const nameEQ = name + '=';
const ca = document.cookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
/**
* Supprime un cookie
*/
deleteCookie(name: string): void {
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;`;
}
}
|