smolnar82 opened a new pull request, #1444:
URL: https://github.com/apache/knox/pull/1444

   [KNOX-3508](https://issues.apache.org/jira/browse/KNOX-3508) - Bundle UI 
icons locally so they render in air-gapped networks
   
   ## What changes were proposed in this pull request?
   
   The Angular 21 UI upgrade 
([KNOX-3234](https://issues.apache.org/jira/browse/KNOX-3234)) and the newer 
`mat-icon`-based UIs reintroduced external font `<link>` tags pointing at 
`fonts.googleapis.com` / `fonts.gstatic.com` for Material Icons (and Roboto in 
admin-ui), **regressing 
[KNOX-1731](https://issues.apache.org/jira/browse/KNOX-1731)** ("Gateway Admin 
UI should not include external js/css").
   
   In air-gapped environments this fails two ways:
   
   1. **Runtime** — the browser can't reach Google Fonts, so icons render as 
literal ligature text (e.g. the gear and pin show as the words `settings` / 
`push_pin`).
   2. **Build-time** — the production build's Beasties critical-CSS inlining 
fetches the fonts from Google and inlines them, so the build itself required 
internet access. The previously-built `admin-ui/index.html` embedded the exact 
`fonts.gstatic.com/.../materialicons...woff2` URL from the bug report plus 27 
Roboto glyph-range URLs.
   
   This PR vendors every icon used by the UIs as **local inline SVGs** (Google 
[Material Symbols Outlined](https://github.com/google/material-design-icons), 
Apache-2.0), removes all external font links, and drops the Roboto web font in 
favor of the system font stack. Nothing is fetched from the network at build or 
runtime.
   
   - **gateway-admin-ui**: new standalone `<app-icon>` component + 
`icon.data.ts` render the SVGs inline; the host keeps the `material-icons` 
class so all existing `styles.scss` theming (color-by-action, hover, sizing) 
applies unchanged. The inline-edit hover pencil (formerly the `\e254` icon-font 
glyph) now uses a vendored `assets/icons/edit.svg` via CSS `mask`.
   - **knox-homepage-ui, knox-token-generation-ui, knox-token-management-ui**: 
register inline SVGs with `MatIconRegistry.addSvgIconLiteral` through a 
per-module `provideIconRegistry()` and switch templates to `<mat-icon 
svgIcon="…">`.
   - Removed the Google font `<link>` / `preconnect` tags from all four 
`index.html` files; added a system-font fallback (`-apple-system, …, Roboto, …, 
sans-serif`) for the dropped Roboto web font.
   - Cleaned up two pre-existing dead icon references found during analysis: an 
`<i class="icon-warning">` with no backing CSS/font, and a Bootstrap-3 
`glyphicon-info-sign` that Bootstrap 5 no longer renders.
   - Deleted orphaned `fontawesome` and `fontopensans` font binaries (zero 
references).
   - Added a Material Symbols attribution paragraph to the repo-root `NOTICE` 
(Apache-2.0, same license as Knox — no LICENSE grant required), plus per-file 
provenance comments and a short `README.md` beside the icon data.
   
   `knox-webshell-ui` is unaffected (no icons/fonts) and left untouched.
   
   ## How was this patch tested?
   
   - **Offline build:** `mvn package` on 
`gateway-admin-ui,knox-homepage-ui,knox-token-generation-ui,knox-token-management-ui`
 — all four modules build successfully (lint + production bundle), with no 
fetch/timeout, proving Beasties no longer reaches Google.
   - **No external references in built output:** grepped the built `index.html` 
and hashed `*.css`/`*.js` under each `target/classes/*/app` for 
`googleapis`/`gstatic` → **zero matches** (down from 30 references previously). 
Confirmed the inline SVG path data is bundled in the JS and `edit.svg` is 
copied into the built assets.
   - **Lint:** `npm run lint` passes in all four modules.
   - **Manual, offline:** disabled networking on the machine and loaded the UIs 
— all icons render as glyphs (not text), with correct admin-ui color/hover 
theming and working expand/collapse chevron toggles; DevTools shows no requests 
to `fonts.g*`.
   
   ## Integration Tests
   
   N/A
   
   ## UI changes
   
   This patch restores icon glyphs that were rendering as literal text in 
air-gapped networks. Screenshots (air-gapped) of the UIs with the new icons:
   <img width="376" height="542" alt="image" 
src="https://github.com/user-attachments/assets/00fb0284-9abd-42c9-b76b-ba7901bb4fc9";
 />
   <img width="1727" height="704" alt="image" 
src="https://github.com/user-attachments/assets/eb686eea-ce5a-4235-b4f4-a66efea1cb67";
 />
   <img width="1719" height="518" alt="image" 
src="https://github.com/user-attachments/assets/3d8b2be1-a00b-42c6-ba0d-c2c91d507196";
 />
   <img width="1718" height="949" alt="image" 
src="https://github.com/user-attachments/assets/2454532d-dcb4-4630-a0dc-4c78ab314cfb";
 />
   <img width="1717" height="752" alt="image" 
src="https://github.com/user-attachments/assets/f913b346-b2b0-473b-8ae5-45d148f77028";
 />
   <img width="1716" height="856" alt="image" 
src="https://github.com/user-attachments/assets/8b4a927c-0814-4169-b7ce-01cf1c9ec75a";
 />
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to