From c2526969b15316b3a697634e7e365ccbae88000b Mon Sep 17 00:00:00 2001 From: timmy Date: Wed, 19 Aug 2026 11:37:27 +0000 Subject: [PATCH] feat: protect private work before sign out (Closes #1128) --- .gitea/workflows/ci.yml | 2 +- frontend/dashboard.css | 9 + frontend/index.html | 14 +- frontend/security-center.js | 3 +- frontend/service-worker.js | 1 + frontend/session.js | 36 ++-- frontend/sign-out-review.js | 131 +++++++++++++++ src/frontend_bundle.py | 3 +- tests/e2e/test_mobile_sign_out_release.py | 76 +++++++++ tests/test_ci_workflow.py | 1 + tests/test_frontend_bundle.py | 8 +- tests/test_service_worker.py | 1 + tests/test_sign_out_review.py | 193 ++++++++++++++++++++++ 13 files changed, 457 insertions(+), 21 deletions(-) create mode 100644 frontend/sign-out-review.js create mode 100644 tests/e2e/test_mobile_sign_out_release.py create mode 100644 tests/test_sign_out_review.py diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index b9b5012..a7a7bfa 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: pip install -r requirements-e2e.txt python3 -m playwright install --with-deps chromium - name: Exercise packaged mobile work journeys - run: python3 -m pytest tests/e2e/test_mobile_offline_issue_release.py tests/e2e/test_mobile_search_preview_navigation.py tests/e2e/test_mobile_find_work_release.py tests/e2e/test_mobile_home_bootstrap_release.py tests/e2e/test_mobile_today_handoff_release.py tests/e2e/test_mobile_today_wrap_up_release.py tests/e2e/test_mobile_today_summary_release.py tests/e2e/test_mobile_wrap_up_handoff_release.py -q + run: python3 -m pytest tests/e2e/test_mobile_offline_issue_release.py tests/e2e/test_mobile_search_preview_navigation.py tests/e2e/test_mobile_find_work_release.py tests/e2e/test_mobile_home_bootstrap_release.py tests/e2e/test_mobile_sign_out_release.py tests/e2e/test_mobile_today_handoff_release.py tests/e2e/test_mobile_today_wrap_up_release.py tests/e2e/test_mobile_today_summary_release.py tests/e2e/test_mobile_wrap_up_handoff_release.py -q release-candidate: runs-on: ubuntu-latest diff --git a/frontend/dashboard.css b/frontend/dashboard.css index 64d70f6..b63994d 100644 --- a/frontend/dashboard.css +++ b/frontend/dashboard.css @@ -6,6 +6,15 @@ header { position: sticky; top: 0; z-index: 20; padding: 12px 16px; display:flex .toolbar { display:flex; gap:10px; align-items:center; flex-wrap:wrap; } .app-brand { display:flex; align-items:center; gap:6px; white-space:nowrap; } .app-live-status { display:inline-flex; gap:6px; align-items:center; min-height:44px; padding:6px 10px; background:transparent; border-color:transparent; } +.sign-out-review-sheet { position:fixed; inset:0; z-index:112; display:flex; align-items:flex-end; justify-content:center; background:rgba(5,12,21,.82); backdrop-filter:blur(4px); } +.sign-out-review-sheet[hidden] { display:none; } +.sign-out-review-panel { box-sizing:border-box; width:min(560px,100%); max-height:100dvh; overflow:auto; overflow-x:hidden; padding:18px; padding-bottom:calc(18px + env(safe-area-inset-bottom)); border:1px solid #b45309; border-radius:18px 18px 0 0; background:#0b1526; overflow-wrap:anywhere; } +.sign-out-review-panel h2 { margin:.25rem 0; } +.sign-out-review-warning { color:#fbbf24; } +.sign-out-review-actions { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:16px; } +.sign-out-review-actions button { min-height:44px; width:100%; } +#confirm-sign-out { border-color:#b45309; } +@media (max-width:359px) { .sign-out-review-actions { grid-template-columns:1fr; } } .live-data-status-sheet { position:fixed; inset:0; z-index:96; display:flex; align-items:flex-end; justify-content:center; background:rgba(5,12,21,.82); backdrop-filter:blur(4px); } .live-data-status-sheet[hidden] { display:none; } .live-data-status-panel { box-sizing:border-box; width:min(560px,100%); max-height:100dvh; overflow:auto; overflow-x:hidden; padding:18px; padding-bottom:calc(18px + env(safe-area-inset-bottom)); border:1px solid #31577f; border-radius:18px 18px 0 0; background:#0b1526; } diff --git a/frontend/index.html b/frontend/index.html index 5fd93c6..0c5a3f1 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -27,6 +27,17 @@ +