Skip to content

Fix AD-fallback name collisions, silent error paths, and frontend duplication - #10

Merged
zerox80 merged 1 commit into
mainfrom
fix/review-findings
Jul 1, 2026
Merged

Fix AD-fallback name collisions, silent error paths, and frontend duplication#10
zerox80 merged 1 commit into
mainfrom
fix/review-findings

Conversation

@zerox80

@zerox80 zerox80 commented Jul 1, 2026

Copy link
Copy Markdown
Owner

Summary

Behebt Findings aus einer vollständigen Code-Review (Rust-Backend, JS-Frontend, CI). Kein Sicherheitsfund – Injection-Schutz, CSP, Capabilities und Path-Traversal-Schutz waren bereits sauber. Fokus liegt auf Datenintegrität, Diagnostizierbarkeit und Code-Duplikation.

  • AD-Fallback-Datenverlust: fallback_users_from_devices (ad_users.rs) hat zwei unterschiedliche Personen mit identischem Anzeigenamen (z.B. zwei "Jürgen Müller" in verschiedenen Abteilungen) stillschweigend zu einem Eintrag zusammengeführt, da der synthetisierte SAM kollidierte. Kollisionen werden jetzt per Host-Suffix disambiguiert, sodass beide Nutzer sichtbar bleiben.
  • Stille Fehlerpfade: Fehlgeschlagene AD-Abfragen (commands.rs), kaputte config.json (store/config.rs) und kaputte assignments.json (store/assignments.rs) wurden bisher komplett verschluckt und lautlos durch Defaults/Cache ersetzt. Jetzt werden diese Fehler geloggt (eprintln!), das Fallback-Verhalten selbst bleibt unverändert.
  • Frontend-Duplikation: PALETTE/hashColor (dreifach) und fmtDe (zweifach) waren über mock.js, view-model.js, app-panels.js verstreut kopiert. Neue shared.js (als erstes Script geladen, window.HVShared im Browser / module.exports in Node) konsolidiert beide Helfer.
  • CI: Der build-Job hing nicht vom audit-Job ab – ein Dependency-Sicherheitsfund hätte den Release-Build nicht blockiert. Jetzt needs: [..., audit]. Zusätzlich npm audit im Frontend-Job (bisher nur cargo audit).

Ein ursprünglich vermuteter Host-Case-Mismatch bei set_assignment/known_hosts wurde geprüft und als falsch positiv verworfen: Hostnamen werden bereits bei der Aufnahme (master_csv.rs, inventory.rs) konsequent uppercased, das Invariant hält.

Test plan

  • cargo test --all (33 Tests, inkl. neuem/angepasstem Test für die SAM-Disambiguierung)
  • cargo clippy --all-targets -- -D warnings
  • cargo fmt --all -- --check
  • npm run check (Node-Syntax inkl. shared.js)
  • npm test (Parity-Tests)
  • Manuell im Browser-Preview verifiziert: Avatar-Farben (Geräteliste + Zuordnungs-Modal) und deutsche Zahlenformatierung (Alter/RAM) unverändert nach der shared.js-Konsolidierung

🤖 Generated with Claude Code

…ntend helpers

- ad_users.rs: disambiguate synthesized SAMs on collision (host suffix) instead
  of silently dropping a second user with the same display name; update the
  existing test and add coverage for real-SAM dedup vs. synthesized collision.
- commands.rs/config.rs/assignments.rs: log (eprintln!) previously silent
  AD-fetch, config.json and assignments.json failures so operators can
  diagnose stale/empty data instead of it failing invisibly.
- Frontend: extract PALETTE/hashColor/fmtDe (triplicated across mock.js,
  view-model.js, app-panels.js) into a single shared.js, loaded first and
  consumed via window.HVShared (browser) / require (Node tests).
- CI: gate the release build on the dependency-audit job passing, and add
  npm audit alongside the existing cargo audit.
@zerox80
zerox80 merged commit cd3ed12 into main Jul 1, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant