Files
git.stella-ops.org/docs/15_UI_GUIDE.md

12 KiB
Raw Blame History

15 - PragmaticUI Guide --- StellaOps

#StellaOps Web UI

A fast, modular singlepage application for controlling scans, policies, offline updates and platformwide settings.
Built for subsecond feedback, darkmode by default, and no external CDNs everything ships inside the anonymous internal registry.


##0FastFacts

Aspect Detail
Tech Stack Angular17 + Vite dev server
Styling Tailwind CSS
State Angular Signals + RxJS
API Client OpenAPI v3 generated services (Axios)
Auth OAuth2/OIDC (tokens from backend or external IdP)
i18n JSON bundles /locales/{lang}.json (English, Russian shipped)
Offline Updates 📌 UI supports “OUK” tarball upload to refresh NVD / Trivy DB when airgapped
Build Artifacts (ui/dist/) pushed to registry.git.stella-ops.ru/ui:${SHA}

##1Navigation Map

Dashboard
└─ Scans
   ├─ Active
   ├─ History
   └─ Reports
└─ Policies 📌
   ├─ Editor (YAML / Rego) 📌
   ├─ Import / Export 📌
   └─ History
└─ Settings
   ├─ SBOM Format 📌
   ├─ Registry 📌
   ├─ Offline Updates (OUK) 📌
   ├─ Themes (Light / Dark / System) 📌
   └─ Advanced
└─ Plugins 🛠
└─ Help / About

The Offline Updates (OUK) node under Settings is new.


##2Technology Overview

###2.1Build & Deployment

  1. npm i && npm build → generates dist/ (~2.1MB gzip).
  2. A CI job tags and pushes the artifact as ui:${GIT_SHA} to the internal registry.
  3. Backend serves static assets from /srv/ui (mounted from the image layer).

No external fonts or JS true offline guarantee.

###2.2Runtime Boot

  1. AppConfigService pulls /api/v1/config/ui (contains feature flags, default theme, enabled plugins).
  2. Locale JSON fetched (/locales/{lang}.json, falls back to en).
  3. Root router mounts lazyloaded feature modules in the order supplied by backend this is how future route plugins inject pages without forking the UI.

##3Feature WalkThroughs

###3.1Dashboard RealTime Status

  • ΔSBOM heatmap 📌 shows how many scans used delta mode vs. full unpack.
  • “Feed Age” tile turns orange if NVD feed is older than 24h; reverts after an OUK upload 📌.
  • Live WebSocket updates for scans in progress (SignalR channel).
  • Quota Tile shows Scans Today /333; turns yellow at 200, red at 333.
  • Token Expiry Tile shows days left on client.jwt (offline only); turns orange at <7days.

###3.2Scans Module

View What you can do
Active Watch progress bar (ETA ≤5s) newly added Format and Δ badges appear beside each item.
History Filter by repo, tag, policy result (pass/block/softfail).
Reports Click row → HTML or PDF report rendered by backend (/report/{digest}/html).

###3.3📌Policies Module (new)

Embedded Monaco editor with YAML + Rego syntax highlighting.

Tab Capability
Editor Write or paste scan-policy.yaml or inline Rego snippet. Schema validation shown inline.
Import / Export Buttons map to /policy/import and /policy/export. Accepts .yaml, .rego, .zip (bundle).
History Immutable audit log; diff viewer highlights rule changes.

####3.3.1YAML → Rego Bridge

If you paste YAML but enable Strict Mode (toggle), backend converts to Rego under the hood, stores both representations, and shows a sidebyside diff.

###3.4📌Settings Enhancements

Setting Details
SBOM Format Dropdown Trivy JSON, SPDX JSON, CycloneDX JSON.
Registry Displays pull URL (registry.git.stella-ops.ru) and Cosign key fingerprint.
Offline Updates (OUK) 📌 Upload ouk*.tar.gz produced by the Offline Update Kit CLI. Backend unpacks, verifies SHA256 checksum & Cosign signature, then reloads Redis caches without restart.
Theme Light, Dark, or Auto (system).

####3.4.1OUK Upload Screen 📌

Page path: SettingsOffline Updates (OUK)
Components:

  1. Drop Zone drag or select .tar.gz (max 1GB).
  2. Progress Bar streaming upload with chunked HTTP.
  3. Verification Step backend returns status:
    • Signature valid ✔️
    • Digestmismatch
  4. Feed Preview table shows NVD date, OUI source build tag, CVE count delta.
  5. Activate button issues /feeds/activate/{id}; on success the Dashboard “Feed Age” tile refreshes to green.
  6. History List previous OUK uploads with user, date, version; supports rollback.

All upload actions are recorded in the PoliciesHistory audit log as type ouk_update.

###3.5Plugins Panel 🛠 (ships after UI modularisation)

Lists discovered UI plugins; each can inject routes/panels. Toggle on/off without reload.

###3.6SettingsQuota & Tokens (new)

  • View current ClientJWT claims (tier, maxScansPerDay, expiry).
  • Generate Offline Token adminonly button → POST /token/offline (UI wraps the API).
  • Upload new token file for manual refresh.

##4i18n & l10n

  • JSON files under /locales.
  • Russian (ru) ships firstclass, translated security terms align with GOST RISO/IEC 270022020.
  • “Offline Update Kit” surfaces as “Оффлайн‑обновление базы уязвимостей” in Russian locale.
  • Community can add locales by uploading a new JSON via Plugins Panel once 🛠 ships.

##5Accessibility

  • WCAG 2.1 AA conformance targeted.
  • All color pairs pass contrast (checked by vite-plugin-wcag).
  • Keyboard navigation fully supported; focus outlines visible in both themes.

##6Theming 📌

Layer How to change
Tailwind Palette variables under tailwind.config.js > theme.colors.
Runtime toggle Stored in localStorage.theme, synced across tabs.
Plugin override Future route plugins may expose additional palettes 🛠.

##7Extensibility Hooks

Area Contract Example
New route window.stella.registerRoute() “Secrets” scanner plugin adds /secrets page.
External link window.stella.addMenuLink(label, href) “Docs” link opens corporate Confluence.
Theme window.stella.registerTheme() Highcontrast palette for accessibility.

##8RoadMap Tags

Feature Status
Policy Editor (YAML)
Inline Rego validation 🛠
OUK Upload UI
Plugin Marketplace UI 🚧
SLSA Verification banner 🛠
Rekor Transparency viewer 🚧

##9NonCommercial Usage Rules 📌

(Extracted & harmonised from the Russian UI help page so that English docs remain licencecomplete.)

  1. Free for internal security assessments.
  2. Commercial resale or SaaS rehosting prohibited without prior written consent under AGPL§13.
  3. If you distribute a fork with UI modifications, you must:
    • Make the complete source code (including UI assets) publicly available.
    • Retain original project attribution in footer.
  4. All dependencies listed in ui/package.json remain under their respective OSS licences (MIT, Apache2.0, ISC).
  5. Use in governmentclassified environments must comply with ФЗ187 export rules; consult your legal team.

##10Troubleshooting Tips

Symptom Cause Remedy
White page after login ui/dist/ hash mismatch Clear browser cache; backend autobusts on version change.
Policy editor shows “Unknown field” YAML schema drift Sync your policy file to latest sample in SettingsTemplates.
OUK upload fails at 99% Tarball built with outdated OUK CLI Upgrade CLI (ouk --version) and rebuild package.
Icons look broken in Safari SVG mask unsupported Use Safari17+ or switch to PNG icon set in Settings > Advanced.

##11Contributing

  • Run npm dev and open http://localhost:5173.
  • Ensure ng lint and ng test pass before PR.
  • Sign the DCO in your commit footer (Signed-off-by).

##12Change Log

| Version | Date | Highlights | | ------- | ---------- | | v2.4 | 20250715 | Added full OUK Offline Update upload flow navigation node, Settings panel, dashboard linkage, audit hooks. | | v2.3 | 20250714 | Added Policies module, SBOM Format & Registry settings, theming toggle, ΔSBOM indicators, extracted noncommercial usage rules. | | v2.2 | 20250712 | Added user tips/workflows, CI notes, DevSecOps section, troubleshooting, screenshots placeholders. | | v2.1 | 20250712 | Removed PWA/Serviceworker; added oidcclientts; simplified roadmap | | v2.0 | 20250712 | Accessibility, Storybook, perf budgets, security rules | | v1.1 | 20250711 | Original OSSonly guide |

(End of PragmaticUI Guide v2.2)