]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/auth/auth-http.service.ts
Client: check token valitidy at startup
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / auth / auth-http.service.ts
index ff8099a4636c5c3f31d7624b1cbac70065c69d1b..c4114aa023c5e555e5db47c8cb4fc39e35649f43 100644 (file)
@@ -7,11 +7,12 @@ import {
   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 {
@@ -28,7 +29,7 @@ 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);
@@ -49,29 +50,44 @@ export class AuthHttp extends Http {
     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 ]
+  },
+];