feat(store): trust gate before every module install
Some checks failed
Security / Security check (push) Failing after 2s

One-click installs showed no trust signal at all (top security
finding of the usertest panel). Every install path — store card,
detail sheet, and the flow list's quick fix — now routes through
one confirmation dialog showing what the hub actually knows
before download: origin store, version, license, maturity, and
required services/capabilities, plus the sandbox model and an
honest note that per-entry signature status is not in the store
index yet (verification happens hub-side at install). Widget
tests cover content and confirm/cancel semantics.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-17 23:44:14 +02:00
parent c253f5d23e
commit 039f11b6bc
10 changed files with 477 additions and 0 deletions

View file

@ -193,6 +193,11 @@ class _StorePageState extends State<StorePage> {
Future<void> _install(StoreItem item) async {
if (!mounted) return;
// Trust gate: provenance + sandbox/signature context BEFORE
// anything is downloaded (usertest: one-click install with
// no visible trust signal was the top security finding).
final confirmed = await ChainInstallConfirmDialog.show(context, item);
if (!confirmed || !mounted) return;
final outcome = await showDialog<bool>(
context: context,
barrierDismissible: false,
@ -2293,6 +2298,11 @@ class _StoreDetailSheetState extends State<_StoreDetailSheet> {
}
Future<void> _install() async {
// Same trust gate as the store card the detail sheet's
// install button must not be a quieter bypass.
final confirmed =
await ChainInstallConfirmDialog.show(context, widget.item);
if (!confirmed || !mounted) return;
setState(() {
_busy = true;
_toast = null;