1 import { Injectable } from '@angular/core';
11 } from '@angular/http';
12 import { Observable } from 'rxjs/Observable';
14 import { AuthService } from './auth.service';
17 export class AuthHttp extends Http {
18 constructor(backend: ConnectionBackend, defaultOptions: RequestOptions, private authService: AuthService) {
19 super(backend, defaultOptions);
22 request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
23 if (!options) options = {};
25 options.headers = new Headers();
26 this.setAuthorizationHeader(options.headers);
28 return super.request(url, options)
30 if (err.status === 401) {
31 return this.handleTokenExpired(err, url, options);
34 return Observable.throw(err);
38 delete(url: string, options?: RequestOptionsArgs): Observable<Response> {
39 if (!options) options = {};
40 options.method = RequestMethod.Delete;
42 return this.request(url, options);
45 get(url: string, options?: RequestOptionsArgs): Observable<Response> {
46 if (!options) options = {};
47 options.method = RequestMethod.Get;
49 return this.request(url, options);
52 post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response> {
53 if (!options) options = {};
54 options.method = RequestMethod.Post;
57 return this.request(url, options);
60 put(url: string, body: any, options?: RequestOptionsArgs): Observable<Response> {
61 if (!options) options = {};
62 options.method = RequestMethod.Put;
65 return this.request(url, options);
68 private handleTokenExpired(err: Response, url: string | Request, options: RequestOptionsArgs) {
69 return this.authService.refreshAccessToken().flatMap(() => {
70 this.setAuthorizationHeader(options.headers);
72 return super.request(url, options);
76 private setAuthorizationHeader(headers: Headers) {
77 headers.set('Authorization', this.authService.getRequestHeaderValue());