Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.   intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  2.     let url = request.url;
  3.  
  4.     // build out full url if necessary
  5.     if (url.startsWith('/')) url = `${this.baseUrl}${url}`;
  6.  
  7.     // pass through if not an api request
  8.     if (!url.startsWith(this.baseUrl + '/api')) return next.handle(request.clone({url}));
  9.  
  10.     this.auth = this.auth || this.injector.get(AuthService);
  11.  
  12.     return this.auth.oidcUser$.take(1)
  13.       .mergeMap((user) => next.handle(
  14.         request.clone({url, setHeaders: {'Content-Type': `application/json`, Authorization: `Bearer ${user.access_token}`}})))
  15.       .catch((err: HttpErrorResponse) => {
  16.         // rerequest after 401 error
  17.         switch (err.status) {
  18.           case 401:
  19.             console.log('Received unauthorized response for ' + request.url + ' with query params ' + JSON.stringify(request.params));
  20.             // logout if endpoint is misbehaving
  21.             console.log(this.retryAttempts[err.url], ' attempts made');
  22.             if (typeof this.retryAttempts[err.url] === 'undefined') this.retryAttempts[err.url] = 0;
  23.             if (this.retryAttempts[err.url]++ > 5) {
  24.               console.log('start signout');
  25.               this.auth.startSignoutMainWindow();
  26.               return Observable.never();
  27.             }
  28.  
  29.             // retry
  30.             console.log('retrying');
  31.             return Observable.fromPromise(this.auth.update()).mergeMap(() => this.intercept(request.clone(), next));
  32.         }
  33.  
  34.         return Observable.throw(err);
  35.       });
  36.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement