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(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(url: string | Request, options: RequestOptionsArgs) {
69 return this.authService.refreshAccessToken()
71 this.setAuthorizationHeader(options.headers);
73 return super.request(url, options);
77 private setAuthorizationHeader(headers: Headers) {
78 headers.set('Authorization', this.authService.getRequestHeaderValue());