import { inject, Injectable } from '@angular/core'; import { HttpHeaders } from '@angular/common/http'; import { CookieService } from 'ngx-cookie-service'; import { Login } from '../models/auth.models'; @Injectable({ providedIn: 'root', }) export class HeadersService { private cookieSrv = inject(CookieService); private headersVal = new HttpHeaders(); setTokenCookie({ token, expire_unixtime }: Login) { this.cookieSrv.set('token', token, new Date(expire_unixtime * 1000), '/'); } getHeaders() { this.setHeaders(); return this.headersVal; } clearHeaders() { this.cookieSrv.delete('token'); this.headersVal = this.headersVal.delete('Authorization'); this.headersVal = this.headersVal.delete('X-Requested-With'); } // Verifica existencia de cookie uuid // Si no existe la cookie uuid la crea private uuidCheck() { if (!this.cookieSrv.check('uuid')) { const uuid = this.uuidGenerator(); this.cookieSrv.set('uuid', uuid, 365, '/'); return uuid; } return this.cookieSrv.get('uuid'); } // Función privada para generar un uuid aleatorio private uuidGenerator() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (character) => { const randomNum = (Math.random() * 16) | 0; const value = character === 'x' ? randomNum : (randomNum & 0x3) | 0x8; return value.toString(16); }); } // Función que establece los headers http private setHeaders() { this.headersVal = this.headersVal.set('Content-Type', 'application/json; charset=utf-8'); this.headersVal = this.headersVal.set('X-Requested-With', this.uuidCheck()); this.headersVal = this.headersVal.set('Authorization', `Bearer ${this.cookieSrv.get('token')}`); } } export const injectHeadersService = () => inject(HeadersService);