import {Injectable} from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {BehaviorSubject, Observable} from 'rxjs'; import {Router} from "@angular/router"; import {environment} from '@environments/environment'; import {OauthToken, User} from '@app/_models'; @Injectable({providedIn: 'root'}) export class AuthenticationService { public token: BehaviorSubject; public user: BehaviorSubject; constructor(private http: HttpClient, private router: Router) { this.token = new BehaviorSubject(JSON.parse(localStorage.getItem('oauthToken'))); this.user = new BehaviorSubject(null); } get oauthTokenValue() { return this.token.value; } public get privileges() { return this.user.value?.privileges; } get isSuperAdmin() { return this.privileges?.superAdmin; } get isAdmin() { return this.privileges?.admin; } get isExpert() { return this.privileges?.expert; } get isMainCompanyMember() { return this.privileges?.mainCompanyMember; } signup(data: any): Observable { return this.http.post(`${environment.apiUrl}/api/signup`, data); } getToken(username: string, password: string): Observable { let data = {grant_type: 'password', client_id: environment.clientId, client_secret: environment.clientSecret, username: username, password: password}; return this.http.post(`${environment.apiUrl}/oauth/token`, data); } saveToken(token: OauthToken) { localStorage.setItem('oauthToken', JSON.stringify(token)); this.token.next(token); this.checkUser(); } checkUser(params?: any) { console.log('checkUser',params) if (this.token.value) { if (!params) params = {include: 'avatar,privileges'}; console.log('URL',environment.apiUrl) this.http.get(`${environment.apiUrl}/api/me`, {params: params}).subscribe((res: any) => { this.user.next(res?.data); }); } } logout() { localStorage.removeItem('oauthToken'); this.token.next(null); this.user.next(null); } forget(email: string): Observable { return this.http.post(`${environment.apiUrl}/api/passwords/reset`, {email}); } restore(data: any): Observable { return this.http.put(`${environment.apiUrl}/api/passwords/reset`, data); } popup(path: any) { this.router.navigate([ {outlets: {auth: path}}], {skipLocationChange: true}).then(); } }