]> 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 55bb501e6bbed89a2d8c1dc7da512cd1bf005ff3..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);
@@ -65,15 +66,28 @@ export class AuthHttp extends Http {
     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.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 ]
+  },
+];