blob: 978825f0bb06b2821aaf7841d963b04d9439eb19 [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';
Matteo Scandolo40f8fa92016-12-07 09:21:35 -08005import {Injectable} from '@angular/core';
Matteo Scandolo0f77c502016-12-06 16:46:00 -08006import {Http, Response, Headers} from '@angular/http';
Matteo Scandolo43ffb672016-12-02 14:49:58 -08007import {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');
Matteo Scandolo0f77c502016-12-06 16:46:00 -080027 return this.xosToken && this.xosSessionId;
28 }
29
30 // get auth info to authenticate API
Matteo Scandolo40f8fa92016-12-07 09:21:35 -080031 getUserHeaders(): Headers {
Matteo Scandolo0f77c502016-12-06 16:46:00 -080032 const headers = new Headers();
33 headers.append('x-csrftoken', this.cookieService.get('xoscsrftoken'));
34 headers.append('x-sessionid', this.cookieService.get('xossessionid'));
35 return headers;
Matteo Scandolo43ffb672016-12-02 14:49:58 -080036 }
37
Matteo Scandolo40f8fa92016-12-07 09:21:35 -080038 // log the user in
39 login(auth: IAuthRequest): Observable<IAuthResponse> {
40 return this.http.post(`${AppConfig.apiEndpoint}/utility/login/`, auth)
41 .map((res: Response) => res.json())
42 .map((auth: IAuthResponse) => {
43 this.storeAuth(auth);
44 auth.user = JSON.parse(auth.user);
45 return auth;
46 })
47 .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
48 }
49
50 // logout the user
51 logout(): Observable<any> {
52 return this.http.post(`${AppConfig.apiEndpoint}/utility/logout/`, {xossessionid: this.xosSessionId})
53 .map((res: Response) => {
54 this.removeAuth();
55 return res.text();
56 })
57 .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
58 }
59
Matteo Scandolo43ffb672016-12-02 14:49:58 -080060 // save cookies
Matteo Scandolo0f77c502016-12-06 16:46:00 -080061 private storeAuth(auth: IAuthResponse): void {
Matteo Scandolo43ffb672016-12-02 14:49:58 -080062 this.cookieService.put('xoscsrftoken', auth.xoscsrftoken);
63 this.cookieService.put('xossessionid', auth.xossessionid);
64 }
65
Matteo Scandolo8b9f1642016-12-05 17:08:26 -080066 // remove cookies
Matteo Scandolo0f77c502016-12-06 16:46:00 -080067 private removeAuth(): void {
Matteo Scandolo8b9f1642016-12-05 17:08:26 -080068 this.cookieService.remove('xoscsrftoken');
69 this.cookieService.remove('xossessionid');
70 }
Matteo Scandolo43ffb672016-12-02 14:49:58 -080071}
72