From 4f0801ecb0d5ca6bd3ffd82b2bb83532443f7471 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Thu, 12 Sep 2024 16:33:44 +0300 Subject: [PATCH] Web UI: Strict html index fallback. Fix scadaSymbolResolver -> api handle error and navigate to scada symbols. --- msa/web-ui/server.ts | 14 ++++++++++--- .../home/pages/admin/admin-routing.module.ts | 21 ++++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/msa/web-ui/server.ts b/msa/web-ui/server.ts index 6c69e0e9bf..f5d8e7f7e3 100644 --- a/msa/web-ui/server.ts +++ b/msa/web-ui/server.ts @@ -23,6 +23,7 @@ import httpProxy from 'http-proxy'; import compression from 'compression'; import historyApiFallback from 'connect-history-api-fallback'; import { Socket } from 'net'; +import { RequestHandler } from 'serve-static'; const logger = _logger('main'); @@ -101,10 +102,17 @@ let connections: Socket[] = []; const staticServe = express.static(root); + const indexHtmlFallback: RequestHandler = (req, res, next) => { + res.sendFile(path.join(root, 'index.html')); + }; + app.use(staticServe); - app.use((req, res, next) => { - res.sendFile(path.join(root, 'index.html')); - }); + + const indexHtmlFallbackPaths = [ + /^\/resources\/scada-symbols\/(?:system|tenant)\/[^/]+$/ + ]; + + app.use(indexHtmlFallbackPaths, indexHtmlFallback); server.listen(bindPort, bindAddress, () => { logger.info('==> 🌎 Listening on port %s.', bindPort); diff --git a/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts b/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts index 7d3e9983f8..7127d98723 100644 --- a/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts +++ b/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts @@ -15,14 +15,22 @@ /// import { inject, NgModule } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, ResolveFn, RouterModule, RouterStateSnapshot, Routes } from '@angular/router'; +import { + ActivatedRouteSnapshot, + Resolve, + ResolveFn, + Router, + RouterModule, + RouterStateSnapshot, + Routes +} from '@angular/router'; import { MailServerComponent } from '@modules/home/pages/admin/mail-server.component'; import { ConfirmOnExitGuard } from '@core/guards/confirm-on-exit.guard'; import { Authority } from '@shared/models/authority.enum'; import { GeneralSettingsComponent } from '@modules/home/pages/admin/general-settings.component'; import { SecuritySettingsComponent } from '@modules/home/pages/admin/security-settings.component'; -import { forkJoin } from 'rxjs'; +import { forkJoin, of } from 'rxjs'; import { SmsProviderComponent } from '@home/pages/admin/sms-provider.component'; import { HomeSettingsComponent } from '@home/pages/admin/home-settings.component'; import { EntitiesTableComponent } from '@home/components/entity/entities-table.component'; @@ -45,17 +53,24 @@ import { ScadaSymbolComponent } from '@home/pages/scada-symbol/scada-symbol.comp import { ImageService } from '@core/http/image.service'; import { ScadaSymbolData } from '@home/pages/scada-symbol/scada-symbol-editor.models'; import { MenuId } from '@core/services/menu.models'; +import { catchError } from 'rxjs/operators'; export const scadaSymbolResolver: ResolveFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot, + router = inject(Router), imageService = inject(ImageService)) => { const type: ImageResourceType = route.params.type; const key = decodeURIComponent(route.params.key); return forkJoin({ imageResource: imageService.getImageInfo(type, key), scadaSymbolContent: imageService.getImageString(`${IMAGES_URL_PREFIX}/${type}/${encodeURIComponent(key)}`) - }); + }).pipe( + catchError(() => { + router.navigate(['/resources/scada-symbols']); + return of(null); + }) + ); }; export const scadaSymbolBreadcumbLabelFunction: BreadCrumbLabelFunction