RequestMethod,
RequestOptions,
RequestOptionsArgs,
- Response
+ 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 {
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 this.request(url, options);
}
- post(url: string, options?: RequestOptionsArgs): Observable<Response> {
+ post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response> {
if (!options) options = {};
options.method = RequestMethod.Post;
+ options.body = body;
return this.request(url, options);
}
- put(url: string, options?: RequestOptionsArgs): Observable<Response> {
+ put(url: string, body: any, options?: RequestOptionsArgs): Observable<Response> {
if (!options) options = {};
options.method = RequestMethod.Put;
+ options.body = body;
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()}`);
+ 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 ]
+ },
+];