You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by an...@apache.org on 2019/10/16 10:17:01 UTC

[incubator-dlab] 05/06: [DLAB-1157]: destroy access token on unauth error handler

This is an automated email from the ASF dual-hosted git repository.

ankovalyshyn pushed a commit to branch DLAB-1157
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit bbc0b9eb949d3b7507f3dac2831745b9e9ada22b
Author: Andriana Kovalyshyn <An...@epam.com>
AuthorDate: Wed Oct 16 13:12:20 2019 +0300

    [DLAB-1157]: destroy access token on unauth error handler
---
 .../resources/webapp/src/app/core/core.module.ts   | 13 +++----
 .../src/app/core/interceptors/error.interceptor.ts | 40 +++++++++++-----------
 .../core/services/applicationSecurity.service.ts   |  4 +--
 .../src/app/core/services/storage.service.ts       |  4 +++
 4 files changed, 33 insertions(+), 28 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/src/app/core/core.module.ts b/services/self-service/src/main/resources/webapp/src/app/core/core.module.ts
index b465665..f815c70 100644
--- a/services/self-service/src/main/resources/webapp/src/app/core/core.module.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/core.module.ts
@@ -86,19 +86,20 @@ export class CoreModule {
 
         { provide: MatDialogRef, useValue: {} },
         { provide: MAT_DIALOG_DATA, useValue: [] },
-
+        {
+          provide: HTTP_INTERCEPTORS,
+          useClass: ErrorInterceptor,
+          multi: true,
+        },
         {
           provide: HTTP_INTERCEPTORS,
           useClass: HttpTokenInterceptor,
           multi: true
-        }, {
+        },
+        {
           provide: HTTP_INTERCEPTORS,
           useClass: NoCacheInterceptor,
           multi: true,
-        }, {
-          provide: HTTP_INTERCEPTORS,
-          useClass: ErrorInterceptor,
-          multi: true,
         }
       ]
     };
diff --git a/services/self-service/src/main/resources/webapp/src/app/core/interceptors/error.interceptor.ts b/services/self-service/src/main/resources/webapp/src/app/core/interceptors/error.interceptor.ts
index 7c22843..d464d16 100644
--- a/services/self-service/src/main/resources/webapp/src/app/core/interceptors/error.interceptor.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/interceptors/error.interceptor.ts
@@ -45,21 +45,24 @@ import { HTTP_STATUS_CODES } from '../util';
   ) { }
 
   intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
-    return next.handle(request).pipe(catchError(error => {
+    return next.handle(request).pipe(
+      catchError(error => {
 
-      if (error instanceof HttpErrorResponse) {
-        switch ((<HttpErrorResponse>error).status) {
-          case HTTP_STATUS_CODES.UNAUTHORIZED:
-            return this.handleUnauthorized(request, next);
-          case HTTP_STATUS_CODES.BAD_REQUEST:
-            return this.handleBadRequest(request, next);
-          default:
-            return _throw(error);
+        if (error instanceof HttpErrorResponse) {
+          switch ((<HttpErrorResponse>error).status) {
+            case HTTP_STATUS_CODES.UNAUTHORIZED:
+              return this.handleUnauthorized(request, next);
+            case HTTP_STATUS_CODES.BAD_REQUEST:
+              return this.handleBadRequest(request, next);
+            default:
+              return _throw(error);
+          }
+        } else {
+          this.routingService.redirectToLoginPage();
+          this.jwtService.destroyTokens();
+          return _throw(error);
         }
-      } else {
-        return _throw(error);
-      }
-    }));
+      }));
   }
 
   private addToken(request: HttpRequest<any>, token: string) {
@@ -67,8 +70,10 @@ import { HTTP_STATUS_CODES } from '../util';
   }
 
   private handleUnauthorized(request: HttpRequest<any>, next: HttpHandler) {
+
     if (!this.isRefreshing) {
       this.isRefreshing = true;
+      this.jwtService.destroyAccessToken();
       this.refreshTokenSubject.next(null);
 
       return this.auth.refreshToken().pipe(
@@ -87,12 +92,7 @@ import { HTTP_STATUS_CODES } from '../util';
   }
 
   private handleBadRequest(request: HttpRequest<any>, next: HttpHandler) {
-    return this.auth.logout().pipe(
-      switchMap((response: any) => {
-        const redirect_parameter = response.headers.get('Location');
-        redirect_parameter ? this.routingService.redirectToUrl(redirect_parameter) : this.routingService.redirectToLoginPage();
-        return next.handle(request);
-      })
-    );
+    this.routingService.redirectToLoginPage();
+    return next.handle(request);
   }
 }
diff --git a/services/self-service/src/main/resources/webapp/src/app/core/services/applicationSecurity.service.ts b/services/self-service/src/main/resources/webapp/src/app/core/services/applicationSecurity.service.ts
index 8b4f021..a55c667 100644
--- a/services/self-service/src/main/resources/webapp/src/app/core/services/applicationSecurity.service.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/services/applicationSecurity.service.ts
@@ -74,10 +74,10 @@ export class ApplicationSecurityService {
     const refreshTocken = `/${this.storage.getRefreshToken()}`;
     return this.serviceFacade.buildRefreshToken(refreshTocken)
       .pipe(
-        tap((tokens) => this.storage.storeTokens(tokens)))
+        tap((tokens) => this.storage.storeTokens(tokens)));
   }
 
-  public logout(): Observable<any> {
+  public logout(): Observable<boolean> {
     const authToken = this.storage.getToken();
 
     if (!!authToken) {
diff --git a/services/self-service/src/main/resources/webapp/src/app/core/services/storage.service.ts b/services/self-service/src/main/resources/webapp/src/app/core/services/storage.service.ts
index 7bec8f8..71de459 100644
--- a/services/self-service/src/main/resources/webapp/src/app/core/services/storage.service.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/services/storage.service.ts
@@ -61,6 +61,10 @@ export class StorageService {
     window.localStorage.setItem(this.REFRESH_TOKEN, tokens.refresh_token);
   }
 
+  destroyAccessToken(): void {
+    window.localStorage.removeItem(this.JWT_TOKEN);
+  }
+
   destroyTokens(): void {
     window.localStorage.removeItem(this.JWT_TOKEN);
     window.localStorage.removeItem(this.REFRESH_TOKEN);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org