blob: c53e3f43c652f3df3d54d60e79d3e62641855651 [file] [log] [blame]
Matteo Scandolo43ffb672016-12-02 14:49:58 -08001/// <reference path="../../../../typings/index.d.ts"/>
2
3// Imports
4import {AppConfig} from '../../config/app.config';
5import {Injectable} from '@angular/core';
6import {Http, Response} from '@angular/http';
7import {Observable} from 'rxjs/Rx';
8import {IAuthRequest, IAuthResponse} from '../../interfaces/auth.interface';
9import {CookieService} from 'angular2-cookie/core';
10
11// Import RxJs required methods
12import 'rxjs/add/operator/map';
13import 'rxjs/add/operator/catch';
14
15@Injectable()
16export class AuthService {
Matteo Scandolo8b9f1642016-12-05 17:08:26 -080017 private xosToken: string;
18 private xosSessionId: string;
19 // resolve HTTP using the constructor
20 constructor (private http: Http, private cookieService: CookieService) {
Matteo Scandolo43ffb672016-12-02 14:49:58 -080021 }
22
23 // check if the user is authenticated
Matteo Scandolo8b9f1642016-12-05 17:08:26 -080024 isAuthenticated(): string {
Matteo Scandolo43ffb672016-12-02 14:49:58 -080025 this.xosToken = this.cookieService.get('xoscsrftoken');
26 this.xosSessionId = this.cookieService.get('xossessionid');
27 return this.xosToken;
28 }
29
30 // save cookies
Matteo Scandolo8b9f1642016-12-05 17:08:26 -080031 storeAuth(auth: IAuthResponse): void {
Matteo Scandolo43ffb672016-12-02 14:49:58 -080032 this.cookieService.put('xoscsrftoken', auth.xoscsrftoken);
33 this.cookieService.put('xossessionid', auth.xossessionid);
34 }
35
Matteo Scandolo8b9f1642016-12-05 17:08:26 -080036 // remove cookies
37 removeAuth(): void {
38 this.cookieService.remove('xoscsrftoken');
39 this.cookieService.remove('xossessionid');
40 }
41
42 // log the user in
43 login(auth: IAuthRequest): Observable<IAuthResponse> {
Matteo Scandolo43ffb672016-12-02 14:49:58 -080044 return this.http.post(`${AppConfig.apiEndpoint}/utility/login/`, auth)
Matteo Scandolo8b9f1642016-12-05 17:08:26 -080045 .map((res: Response) => res.json())
46 .map((auth: IAuthResponse) => {
Matteo Scandolo43ffb672016-12-02 14:49:58 -080047 this.storeAuth(auth);
48 auth.user = JSON.parse(auth.user);
49 return auth;
50 })
51 .catch((error:any) => Observable.throw(error.json().error || 'Server error'));
52 }
Matteo Scandolo8b9f1642016-12-05 17:08:26 -080053
54 // logout the user
55 logout(): Observable<any> {
56 return this.http.post(`${AppConfig.apiEndpoint}/utility/logout/`, {xossessionid: this.xosSessionId})
57 .map((res: Response) => {
58 this.removeAuth();
59 return res.text();
60 })
61 .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
62 }
Matteo Scandolo43ffb672016-12-02 14:49:58 -080063}
64