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