Matteo Scandolo | 43ffb67 | 2016-12-02 14:49:58 -0800 | [diff] [blame] | 1 | /// <reference path="../../../../typings/index.d.ts"/> |
| 2 | |
| 3 | // Imports |
| 4 | import {AppConfig} from '../../config/app.config'; |
| 5 | import {Injectable} from '@angular/core'; |
Matteo Scandolo | 0f77c50 | 2016-12-06 16:46:00 -0800 | [diff] [blame^] | 6 | import {Http, Response, Headers} from '@angular/http'; |
Matteo Scandolo | 43ffb67 | 2016-12-02 14:49:58 -0800 | [diff] [blame] | 7 | import {Observable} from 'rxjs/Rx'; |
| 8 | import {IAuthRequest, IAuthResponse} from '../../interfaces/auth.interface'; |
| 9 | import {CookieService} from 'angular2-cookie/core'; |
| 10 | |
| 11 | // Import RxJs required methods |
| 12 | import 'rxjs/add/operator/map'; |
| 13 | import 'rxjs/add/operator/catch'; |
| 14 | |
| 15 | @Injectable() |
| 16 | export class AuthService { |
Matteo Scandolo | 8b9f164 | 2016-12-05 17:08:26 -0800 | [diff] [blame] | 17 | private xosToken: string; |
| 18 | private xosSessionId: string; |
| 19 | // resolve HTTP using the constructor |
| 20 | constructor (private http: Http, private cookieService: CookieService) { |
Matteo Scandolo | 43ffb67 | 2016-12-02 14:49:58 -0800 | [diff] [blame] | 21 | } |
| 22 | |
| 23 | // check if the user is authenticated |
Matteo Scandolo | 8b9f164 | 2016-12-05 17:08:26 -0800 | [diff] [blame] | 24 | isAuthenticated(): string { |
Matteo Scandolo | 43ffb67 | 2016-12-02 14:49:58 -0800 | [diff] [blame] | 25 | this.xosToken = this.cookieService.get('xoscsrftoken'); |
| 26 | this.xosSessionId = this.cookieService.get('xossessionid'); |
Matteo Scandolo | 0f77c50 | 2016-12-06 16:46:00 -0800 | [diff] [blame^] | 27 | return this.xosToken && this.xosSessionId; |
| 28 | } |
| 29 | |
| 30 | // get auth info to authenticate API |
| 31 | getUserHeaders(): Headers{ |
| 32 | 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 Scandolo | 43ffb67 | 2016-12-02 14:49:58 -0800 | [diff] [blame] | 36 | } |
| 37 | |
| 38 | // save cookies |
Matteo Scandolo | 0f77c50 | 2016-12-06 16:46:00 -0800 | [diff] [blame^] | 39 | private storeAuth(auth: IAuthResponse): void { |
Matteo Scandolo | 43ffb67 | 2016-12-02 14:49:58 -0800 | [diff] [blame] | 40 | this.cookieService.put('xoscsrftoken', auth.xoscsrftoken); |
| 41 | this.cookieService.put('xossessionid', auth.xossessionid); |
| 42 | } |
| 43 | |
Matteo Scandolo | 8b9f164 | 2016-12-05 17:08:26 -0800 | [diff] [blame] | 44 | // remove cookies |
Matteo Scandolo | 0f77c50 | 2016-12-06 16:46:00 -0800 | [diff] [blame^] | 45 | private removeAuth(): void { |
Matteo Scandolo | 8b9f164 | 2016-12-05 17:08:26 -0800 | [diff] [blame] | 46 | this.cookieService.remove('xoscsrftoken'); |
| 47 | this.cookieService.remove('xossessionid'); |
| 48 | } |
| 49 | |
| 50 | // log the user in |
| 51 | login(auth: IAuthRequest): Observable<IAuthResponse> { |
Matteo Scandolo | 43ffb67 | 2016-12-02 14:49:58 -0800 | [diff] [blame] | 52 | return this.http.post(`${AppConfig.apiEndpoint}/utility/login/`, auth) |
Matteo Scandolo | 8b9f164 | 2016-12-05 17:08:26 -0800 | [diff] [blame] | 53 | .map((res: Response) => res.json()) |
| 54 | .map((auth: IAuthResponse) => { |
Matteo Scandolo | 43ffb67 | 2016-12-02 14:49:58 -0800 | [diff] [blame] | 55 | this.storeAuth(auth); |
| 56 | auth.user = JSON.parse(auth.user); |
| 57 | return auth; |
| 58 | }) |
| 59 | .catch((error:any) => Observable.throw(error.json().error || 'Server error')); |
| 60 | } |
Matteo Scandolo | 8b9f164 | 2016-12-05 17:08:26 -0800 | [diff] [blame] | 61 | |
| 62 | // logout the user |
| 63 | logout(): Observable<any> { |
| 64 | return this.http.post(`${AppConfig.apiEndpoint}/utility/logout/`, {xossessionid: this.xosSessionId}) |
| 65 | .map((res: Response) => { |
| 66 | this.removeAuth(); |
| 67 | return res.text(); |
| 68 | }) |
| 69 | .catch((error: any) => Observable.throw(error.json().error || 'Server error')); |
| 70 | } |
Matteo Scandolo | 43ffb67 | 2016-12-02 14:49:58 -0800 | [diff] [blame] | 71 | } |
| 72 | |