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

rfellows pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new ab5025c652 NIFI-13140: (#8743)
ab5025c652 is described below

commit ab5025c652182a67730037b3d28bb75fbd363cde
Author: Matt Gilman <matt.c.gil...@gmail.com>
AuthorDate: Fri May 3 18:09:55 2024 -0400

    NIFI-13140: (#8743)
    
    - Cleaning up error handling in guards.
    
    This closes #8743
---
 .../nifi/src/app/service/error-helper.service.ts   |  3 ++-
 .../src/app/service/guard/authorization.guard.ts   | 17 +++++++++++++--
 .../app/service/guard/flow-configuration.guard.ts  | 25 ++++++++++++++++------
 .../main/nifi/src/app/state/error/error.actions.ts |  5 ++++-
 .../main/nifi/src/app/state/error/error.effects.ts | 10 +++++++--
 5 files changed, 47 insertions(+), 13 deletions(-)

diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/error-helper.service.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/error-helper.service.ts
index 1d6a9940ac..82b2c856e6 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/error-helper.service.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/error-helper.service.ts
@@ -25,7 +25,7 @@ import { NiFiCommon } from './nifi-common.service';
 export class ErrorHelper {
     constructor(private nifiCommon: NiFiCommon) {}
 
-    fullScreenError(errorResponse: HttpErrorResponse): Action {
+    fullScreenError(errorResponse: HttpErrorResponse, skipReplaceUrl?: 
boolean): Action {
         let title: string;
         let message: string;
 
@@ -56,6 +56,7 @@ export class ErrorHelper {
         }
 
         return ErrorActions.fullScreenError({
+            skipReplaceUrl,
             errorDetail: {
                 title,
                 message
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/guard/authorization.guard.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/guard/authorization.guard.ts
index 3de1b625e5..ab8a1e8fa5 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/guard/authorization.guard.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/guard/authorization.guard.ts
@@ -21,6 +21,7 @@ import { map } from 'rxjs';
 import { Store } from '@ngrx/store';
 import { CurrentUser, CurrentUserState } from '../../state/current-user';
 import { selectCurrentUser } from 
'../../state/current-user/current-user.selectors';
+import { fullScreenError } from '../../state/error/error.actions';
 
 export const authorizationGuard = (
     authorizationCheck: (user: CurrentUser) => boolean,
@@ -36,8 +37,20 @@ export const authorizationGuard = (
                     return true;
                 }
 
-                // TODO - replace with 403 error page
-                return router.parseUrl(fallbackUrl || '/');
+                if (fallbackUrl) {
+                    return router.parseUrl(fallbackUrl);
+                }
+
+                store.dispatch(
+                    fullScreenError({
+                        skipReplaceUrl: true,
+                        errorDetail: {
+                            title: 'Unable to load',
+                            message: 'Authorization check failed. Contact the 
system administrator.'
+                        }
+                    })
+                );
+                return false;
             })
         );
     };
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/guard/flow-configuration.guard.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/guard/flow-configuration.guard.ts
index 70439c0daa..8bd3afde19 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/guard/flow-configuration.guard.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/guard/flow-configuration.guard.ts
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import { CanMatchFn, Router } from '@angular/router';
+import { CanMatchFn } from '@angular/router';
 import { inject } from '@angular/core';
 import { catchError, map, of, switchMap, tap } from 'rxjs';
 import { Store } from '@ngrx/store';
@@ -23,14 +23,17 @@ import { FlowConfiguration, FlowConfigurationState } from 
'../../state/flow-conf
 import { selectFlowConfiguration } from 
'../../state/flow-configuration/flow-configuration.selectors';
 import { FlowConfigurationService } from '../flow-configuration.service';
 import { loadFlowConfigurationSuccess } from 
'../../state/flow-configuration/flow-configuration.actions';
+import { fullScreenError } from '../../state/error/error.actions';
+import { HttpErrorResponse } from '@angular/common/http';
+import { ErrorHelper } from '../error-helper.service';
 
 export const checkFlowConfiguration = (
     flowConfigurationCheck: (flowConfiguration: FlowConfiguration) => boolean
 ): CanMatchFn => {
     return () => {
-        const router: Router = inject(Router);
         const store: Store<FlowConfigurationState> = 
inject(Store<FlowConfigurationState>);
         const flowConfigurationService: FlowConfigurationService = 
inject(FlowConfigurationService);
+        const errorHelper: ErrorHelper = inject(ErrorHelper);
 
         return store.select(selectFlowConfiguration).pipe(
             switchMap((flowConfiguration) => {
@@ -53,12 +56,20 @@ export const checkFlowConfiguration = (
                     return true;
                 }
 
-                // TODO - replace with error page
-                return router.parseUrl('/');
+                store.dispatch(
+                    fullScreenError({
+                        skipReplaceUrl: true,
+                        errorDetail: {
+                            title: 'Unable to load',
+                            message: 'Flow configuration check failed'
+                        }
+                    })
+                );
+                return false;
             }),
-            catchError(() => {
-                // TODO - replace with error page
-                return of(router.parseUrl('/'));
+            catchError((errorResponse: HttpErrorResponse) => {
+                store.dispatch(errorHelper.fullScreenError(errorResponse, 
true));
+                return of(false);
             })
         );
     };
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/error/error.actions.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/error/error.actions.ts
index 6278eb92fc..da4ff5a42c 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/error/error.actions.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/error/error.actions.ts
@@ -18,7 +18,10 @@
 import { createAction, props } from '@ngrx/store';
 import { ErrorDetail } from './index';
 
-export const fullScreenError = createAction('[Error] Full Screen Error', 
props<{ errorDetail: ErrorDetail }>());
+export const fullScreenError = createAction(
+    '[Error] Full Screen Error',
+    props<{ errorDetail: ErrorDetail; skipReplaceUrl?: boolean }>()
+);
 
 export const snackBarError = createAction('[Error] Snackbar Error', props<{ 
error: string }>());
 
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/error/error.effects.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/error/error.effects.ts
index 7344927e85..96ed053135 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/error/error.effects.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/error/error.effects.ts
@@ -36,9 +36,15 @@ export class ErrorEffects {
         () =>
             this.actions$.pipe(
                 ofType(ErrorActions.fullScreenError),
-                tap(() => {
+                map((action) => action.skipReplaceUrl),
+                tap((skipReplaceUrl) => {
                     this.dialog.openDialogs.forEach((dialog) => 
dialog.close('ROUTED'));
-                    this.router.navigate(['/error'], { replaceUrl: true });
+
+                    if (skipReplaceUrl) {
+                        this.router.navigate(['/error']);
+                    } else {
+                        this.router.navigate(['/error'], { replaceUrl: true });
+                    }
                 })
             ),
         { dispatch: false }

Reply via email to