Home page carousel
[eliot.git] / blueprints / common / eliot-ui / frontend-src / src / app / _services / authentication.service.ts
1 import { Injectable } from '@angular/core';
2 import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
3 import { BehaviorSubject, Observable } from 'rxjs';
4 import { map } from 'rxjs/operators';
5 import { User } from '../_models/user';
6
7 @Injectable({
8   providedIn: 'root'
9 })
10 export class AuthenticationService {
11
12   private currentUserSubject: BehaviorSubject<User>;
13   public currentUser: Observable<User>;
14
15   private baseUrl = 'http://localhost:8080/';
16   private captchaUrl = this.baseUrl+'capchaverify';
17
18   constructor(private http: HttpClient) {
19     this.currentUserSubject = new BehaviorSubject<User>(JSON.parse(localStorage.getItem('currentUser')));
20     this.currentUser = this.currentUserSubject.asObservable();
21   }
22
23   httpOptions = {
24     headers: new HttpHeaders({
25       'Content-Type':'application/json'
26     })
27   }
28
29   public get currentUserValue(): User {
30     return this.currentUserSubject.value;
31   }
32
33   login(email: string, password: string) {
34     return this.http.post<any>(`auth/login`, { email, password })
35       // .subscribe(user => {
36       .pipe(map(user => {
37         if (user && user.token) {
38           // store user details in local storage to keep user logged in
39           localStorage.setItem('currentUser', JSON.stringify(user.result));
40           sessionStorage.setItem('roleName',user.roleName);
41           this.currentUserSubject.next(user);
42         }
43
44         return user;
45       }));
46   }
47
48   logout() {
49     // remove user data from local storage for log out
50     localStorage.removeItem('currentUser');
51     this.currentUserSubject.next(null);
52   }
53
54   send(data): Observable<any> {
55     return this.http.post<any>(this.captchaUrl,data,this.httpOptions);
56   }
57
58 }