-import { Injectable } from '@angular/core';
+import { Injectable } from '@angular/core'
import {
ConnectionBackend,
Headers,
RequestMethod,
RequestOptions,
RequestOptionsArgs,
- Response
-} from '@angular/http';
-import { Observable } from 'rxjs/Observable';
+ Response,
+ XHRBackend
+} from '@angular/http'
+import { Observable } from 'rxjs/Observable'
-import { AuthService } from './auth.service';
+import { AuthService } from '../../core'
@Injectable()
export class AuthHttp extends Http {
- constructor(backend: ConnectionBackend, defaultOptions: RequestOptions, private authService: AuthService) {
- super(backend, defaultOptions);
+ constructor (backend: ConnectionBackend, defaultOptions: RequestOptions, private authService: AuthService) {
+ super(backend, defaultOptions)
}
- request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
- if (!options) options = {};
+ request (url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
+ if (!options) options = {}
- options.headers = new Headers();
- this.setAuthorizationHeader(options.headers);
+ options.headers = new Headers()
+ this.setAuthorizationHeader(options.headers)
return super.request(url, options)
.catch((err) => {
if (err.status === 401) {
- return this.handleTokenExpired(err, url, options);
+ return this.handleTokenExpired(url, options)
}
- return Observable.throw(err);
- });
+ return Observable.throw(err)
+ })
}
- delete(url: string, options?: RequestOptionsArgs): Observable<Response> {
- if (!options) options = {};
- options.method = RequestMethod.Delete;
+ delete (url: string, options?: RequestOptionsArgs): Observable<Response> {
+ if (!options) options = {}
+ options.method = RequestMethod.Delete
- return this.request(url, options);
+ return this.request(url, options)
}
- get(url: string, options?: RequestOptionsArgs): Observable<Response> {
- if (!options) options = {};
- options.method = RequestMethod.Get;
+ get (url: string, options?: RequestOptionsArgs): Observable<Response> {
+ if (!options) options = {}
+ options.method = RequestMethod.Get
- return this.request(url, options);
+ return this.request(url, options)
}
- post(url: string, options?: RequestOptionsArgs): Observable<Response> {
- if (!options) options = {};
- options.method = RequestMethod.Post;
+ post (url: string, body: any, options?: RequestOptionsArgs): Observable<Response> {
+ if (!options) options = {}
+ options.method = RequestMethod.Post
+ options.body = body
- return this.request(url, options);
+ return this.request(url, options)
}
- put(url: string, options?: RequestOptionsArgs): Observable<Response> {
- if (!options) options = {};
- options.method = RequestMethod.Put;
+ put (url: string, body: any, options?: RequestOptionsArgs): Observable<Response> {
+ if (!options) options = {}
+ options.method = RequestMethod.Put
+ options.body = body
- return this.request(url, options);
+ return this.request(url, options)
}
- private handleTokenExpired(err: Response, url: string | Request, options: RequestOptionsArgs) {
- return this.authService.refreshAccessToken().flatMap(() => {
- this.setAuthorizationHeader(options.headers);
+ private handleTokenExpired (url: string | Request, options: RequestOptionsArgs) {
+ return this.authService.refreshAccessToken()
+ .flatMap(() => {
+ this.setAuthorizationHeader(options.headers)
- return super.request(url, options);
- });
+ return super.request(url, options)
+ })
}
- private setAuthorizationHeader(headers: Headers) {
- headers.set('Authorization', `${this.authService.getTokenType()} ${this.authService.getToken()}`);
+ private setAuthorizationHeader (headers: Headers) {
+ headers.set('Authorization', this.authService.getRequestHeaderValue())
}
}
+
+export function useFactory (backend: XHRBackend, defaultOptions: RequestOptions, authService: AuthService) {
+ return new AuthHttp(backend, defaultOptions, authService)
+}
+
+export const AUTH_HTTP_PROVIDERS = [
+ {
+ provide: AuthHttp,
+ useFactory,
+ deps: [ XHRBackend, RequestOptions, AuthService ]
+ }
+]