From e339e17bd4263043c3732b3ba076e948fd9d8994 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Fri, 23 Jan 2026 16:06:06 -0300 Subject: [PATCH] portal: refine onboarding guides and account access --- backend/atlas_portal/keycloak.py | 2 + .../atlas_portal/routes/access_requests.py | 2 + backend/atlas_portal/routes/account.py | 16 +++++++ frontend/src/views/AccountView.vue | 19 ++++---- frontend/src/views/OnboardingView.vue | 45 ++++++++++-------- ...me and password you set in VaultWarden.png | Bin 0 -> 246139 bytes ...ew demo if you want but start a budget.png | Bin 0 -> 366682 bytes ...data - storre your key in VaultWarden.png} | Bin ...s a username and copy the new password.png | Bin 0 -> 241502 bytes ...rd tell it to remember you and sign in.png | Bin 0 -> 26992 bytes .../3_You now have access to firefly III.png | Bin 0 -> 106325 bytes ...us for Firefly III and add credentials.jpg | Bin 0 -> 27204 bytes ...the redirect url and go to the website.jpg | Bin 0 -> 106255 bytes ...s on your Account Page for Firefly III.jpg | Bin 0 -> 43192 bytes ... new oauth credentials for Firefly III.jpg | Bin 0 -> 89995 bytes ...Abacus for the app is appropriate and .jpg | Bin 0 -> 94305 bytes ...mart to save these in VaultWarden too).jpg | Bin 0 -> 93241 bytes .../step2_mobile_app/7_Authorize Access.jpg | Bin 0 -> 54966 bytes ...aste the secret and then finally login.jpg | Bin 0 -> 104124 bytes ... in but lets give it thumbprint access.jpg | Bin 0 -> 56908 bytes .../9_Toggle on biometric access.jpg | Bin 0 -> 84151 bytes .../10_Go to the SMTP settings.jpg | Bin 0 -> 128228 bytes ...connected to the IMAP you just created.jpg | Bin 0 -> 52626 bytes ...hoose Advanced options and scroll down.jpg | Bin 0 -> 71118 bytes ...dress and again paste in your password.jpg | Bin 0 -> 101555 bytes ...croll down and save your SMTP settings.jpg | Bin 0 -> 62965 bytes ...SMTP settings as your account is setup.jpg | Bin 0 -> 46411 bytes .../1_On your PHONE login to the portal.png | Bin 0 -> 189906 bytes ... your account information and controls.png | Bin 0 -> 400075 bytes ...py the mailu password for your account.png | Bin 0 -> 232909 bytes ...e account section to add a new account.jpg | Bin 0 -> 136016 bytes .../5_Add a new IMAP account.jpg | Bin 0 -> 60112 bytes ... these settings from your Account page.jpg | Bin 0 -> 89465 bytes ...n your password from your Account page.jpg | Bin 0 -> 100404 bytes ... down more and save your IMAP settings.jpg | Bin 0 -> 84566 bytes ...t settings page to enter SMTP settings.jpg | Bin 0 -> 54901 bytes ...cloud through the keycloak Atlas realm.png | Bin 0 -> 56704 bytes ...ocation and view your storage capacity.png | Bin 0 -> 147361 bytes ...the status first and Sync if not ready.png | Bin 0 -> 326942 bytes ...nstall the Nextcloud Files application.png | Bin 0 -> 512485 bytes .../2_Login to nextcloud.png | Bin 0 -> 77844 bytes .../3_Set the server to cloud.bstein.dev.png | Bin 0 -> 67857 bytes ...n through the webpage that just opened.png | Bin 0 -> 223338 bytes .../5_Grant Access.png | Bin 0 -> 262832 bytes .../6_Close the page that just opened.png | Bin 0 -> 243505 bytes ...oose your preferences and then Connect.png | Bin 0 -> 84335 bytes ...es between the server and your desktop.png | Bin 0 -> 102842 bytes ...ll the Nextcloud Files App then Log in.jpg | Bin 0 -> 42977 bytes ...loud.bstein.dev and click on the arrow.jpg | Bin 0 -> 38457 bytes .../3_Again choose log in.jpg | Bin 0 -> 82983 bytes ... your saved credentials in VaultWarden.jpg | Bin 0 -> 36267 bytes .../step4_mobile_app/5_Grant Access.jpg | Bin 0 -> 69784 bytes ...ose the webpage and go back to the app.jpg | Bin 0 -> 59858 bytes ...cing between the server and your phone.jpg | Bin 0 -> 81136 bytes ...m. Use the username and password above.png | Bin 0 -> 56704 bytes ...2_Accept the VaultWarden email invite.png} | Bin ..._Create a VaultWarden master password.png} | Bin ...tWarden.png => 4_Login to VaultWarden.png} | Bin ...png => 5_Use your new master password.png} | Bin ..._Add your first username and password.png} | Bin ...rd - TEMPORARY - you WILL change this.png} | Bin 61 files changed, 57 insertions(+), 27 deletions(-) create mode 100644 media/onboarding/budget/step1_encrypt_data/1_Sign in using your keycloak username and password you set in VaultWarden.png create mode 100644 media/onboarding/budget/step1_encrypt_data/2_View demo if you want but start a budget.png rename media/onboarding/budget/step1_encrypt_data/{1_Encrypt your financial data - storre your key in VaultWarden.png => 3_Encrypt your financial data - storre your key in VaultWarden.png} (100%) create mode 100644 media/onboarding/firefly/step1_web_access/1_Go to the Accounts page and reset your password and copy your email to use as a username and copy the new password.png create mode 100644 media/onboarding/firefly/step1_web_access/2_Paste in your email as username and the new password tell it to remember you and sign in.png create mode 100644 media/onboarding/firefly/step1_web_access/3_You now have access to firefly III.png create mode 100644 media/onboarding/firefly/step2_mobile_app/1_Download and Install Abacus for Firefly III and add credentials.jpg create mode 100644 media/onboarding/firefly/step2_mobile_app/2_Enter the service URL and copy the redirect url and go to the website.jpg create mode 100644 media/onboarding/firefly/step2_mobile_app/3_Login with the credentials on your Account Page for Firefly III.jpg create mode 100644 media/onboarding/firefly/step2_mobile_app/4_Create new oauth credentials for Firefly III.jpg create mode 100644 media/onboarding/firefly/step2_mobile_app/5_Give the credentials a name of your choice Abacus for the app is appropriate and .jpg create mode 100644 media/onboarding/firefly/step2_mobile_app/6_Remember the Client ID and copy the secret credentials for Firefly III by double tapping to highlight and get the copy popup menu (It would be smart to save these in VaultWarden too).jpg create mode 100644 media/onboarding/firefly/step2_mobile_app/7_Authorize Access.jpg create mode 100644 media/onboarding/firefly/step2_mobile_app/7_Enter the Client ID from memory and paste the secret and then finally login.jpg create mode 100644 media/onboarding/firefly/step2_mobile_app/8_You are in but lets give it thumbprint access.jpg create mode 100644 media/onboarding/firefly/step2_mobile_app/9_Toggle on biometric access.jpg create mode 100644 media/onboarding/mail/step1_mail_app/10_Go to the SMTP settings.jpg create mode 100644 media/onboarding/mail/step1_mail_app/11_Add a new SMTP identity connected to the IMAP you just created.jpg create mode 100644 media/onboarding/mail/step1_mail_app/12_Choose Advanced options and scroll down.jpg create mode 100644 media/onboarding/mail/step1_mail_app/13_Set your settings from your Accounts page with your User Name being your email address and again paste in your password.jpg create mode 100644 media/onboarding/mail/step1_mail_app/14_Scroll down and save your SMTP settings.jpg create mode 100644 media/onboarding/mail/step1_mail_app/15_Back out of SMTP settings as your account is setup.jpg create mode 100644 media/onboarding/mail/step1_mail_app/1_On your PHONE login to the portal.png create mode 100644 media/onboarding/mail/step1_mail_app/2_Go to your account page and scroll down to the Mail section for your account information and controls.png create mode 100644 media/onboarding/mail/step1_mail_app/3_Still on your phone reset the password and resync nextcloud then copy the mailu password for your account.png create mode 100644 media/onboarding/mail/step1_mail_app/4_Download FairMail or your client of choice and go to the account section to add a new account.jpg create mode 100644 media/onboarding/mail/step1_mail_app/5_Add a new IMAP account.jpg create mode 100644 media/onboarding/mail/step1_mail_app/6_Choose custom provider and set these settings from your Account page.jpg create mode 100644 media/onboarding/mail/step1_mail_app/7_Scroll down make sure your email address is correct and paste in your password from your Account page.jpg create mode 100644 media/onboarding/mail/step1_mail_app/8_Scroll down more and save your IMAP settings.jpg create mode 100644 media/onboarding/mail/step1_mail_app/9_Go back to the account settings page to enter SMTP settings.jpg create mode 100644 media/onboarding/nextcloud/step1_web_access/1_Log into nextcloud through the keycloak Atlas realm.png create mode 100644 media/onboarding/nextcloud/step1_web_access/2_Access the file storage location and view your storage capacity.png create mode 100644 media/onboarding/nextcloud/step2_mail_integration/1_If your mail is not integrated though it should be you can manually integrate it on the Accounts page. Check the status first and Sync if not ready.png create mode 100644 media/onboarding/nextcloud/step3_desktop_storage_app/1_Download and Install the Nextcloud Files application.png create mode 100644 media/onboarding/nextcloud/step3_desktop_storage_app/2_Login to nextcloud.png create mode 100644 media/onboarding/nextcloud/step3_desktop_storage_app/3_Set the server to cloud.bstein.dev.png create mode 100644 media/onboarding/nextcloud/step3_desktop_storage_app/4_Login through the webpage that just opened.png create mode 100644 media/onboarding/nextcloud/step3_desktop_storage_app/5_Grant Access.png create mode 100644 media/onboarding/nextcloud/step3_desktop_storage_app/6_Close the page that just opened.png create mode 100644 media/onboarding/nextcloud/step3_desktop_storage_app/7_Choose where the cloud should sync on your local machine and choose your preferences and then Connect.png create mode 100644 media/onboarding/nextcloud/step3_desktop_storage_app/8_Now Nextcloud syncs files between the server and your desktop.png create mode 100644 media/onboarding/nextcloud/step4_mobile_app/1_Download and Install the Nextcloud Files App then Log in.jpg create mode 100644 media/onboarding/nextcloud/step4_mobile_app/2_Set the server to cloud.bstein.dev and click on the arrow.jpg create mode 100644 media/onboarding/nextcloud/step4_mobile_app/3_Again choose log in.jpg create mode 100644 media/onboarding/nextcloud/step4_mobile_app/4_Log in through keycloak using your saved credentials in VaultWarden.jpg create mode 100644 media/onboarding/nextcloud/step4_mobile_app/5_Grant Access.jpg create mode 100644 media/onboarding/nextcloud/step4_mobile_app/6_Close the webpage and go back to the app.jpg create mode 100644 media/onboarding/nextcloud/step4_mobile_app/7_You now have file syncing between the server and your phone.jpg create mode 100644 media/onboarding/vaultwarden/step1_website/1_Log into nextcloud to get to the mail invite through the keycloak Atlas realm. Use the username and password above.png rename media/onboarding/vaultwarden/step1_website/{1_Accept the VaultWarden email invite.png => 2_Accept the VaultWarden email invite.png} (100%) rename media/onboarding/vaultwarden/step1_website/{2_Create a VaultWarden master password.png => 3_Create a VaultWarden master password.png} (100%) rename media/onboarding/vaultwarden/step1_website/{3_Login to VaultWarden.png => 4_Login to VaultWarden.png} (100%) rename media/onboarding/vaultwarden/step1_website/{4_Use your new master password.png => 5_Use your new master password.png} (100%) rename media/onboarding/vaultwarden/step1_website/{5_Add your first username and password.png => 6_Add your first username and password.png} (100%) rename media/onboarding/vaultwarden/step1_website/{6_Store your temporary keycloak password - TEMPORARY - you WILL change this.png => 7_Store your temporary keycloak password - TEMPORARY - you WILL change this.png} (100%) diff --git a/backend/atlas_portal/keycloak.py b/backend/atlas_portal/keycloak.py index 1aed9c4..88076ee 100644 --- a/backend/atlas_portal/keycloak.py +++ b/backend/atlas_portal/keycloak.py @@ -396,6 +396,8 @@ def require_account_access() -> tuple[bool, Any]: if not settings.ACCOUNT_ALLOWED_GROUPS: return True, None groups = set(getattr(g, "keycloak_groups", []) or []) + if not groups: + return True, None if groups.intersection(settings.ACCOUNT_ALLOWED_GROUPS): return True, None return False, (jsonify({"error": "forbidden"}), 403) diff --git a/backend/atlas_portal/routes/access_requests.py b/backend/atlas_portal/routes/access_requests.py index 6842966..3a25eaa 100644 --- a/backend/atlas_portal/routes/access_requests.py +++ b/backend/atlas_portal/routes/access_requests.py @@ -160,6 +160,7 @@ ONBOARDING_STEPS: tuple[str, ...] = ( "nextcloud_mobile_app", "budget_encryption_ack", "firefly_password_rotated", + "firefly_mobile_app", "wger_password_rotated", "jellyfin_web_access", "jellyfin_mobile_app", @@ -170,6 +171,7 @@ ONBOARDING_OPTIONAL_STEPS: set[str] = { "element_mobile_app", "nextcloud_desktop_app", "nextcloud_mobile_app", + "firefly_mobile_app", "jellyfin_web_access", "jellyfin_mobile_app", "jellyfin_tv_setup", diff --git a/backend/atlas_portal/routes/account.py b/backend/atlas_portal/routes/account.py index 1e124b6..99c5c4a 100644 --- a/backend/atlas_portal/routes/account.py +++ b/backend/atlas_portal/routes/account.py @@ -54,6 +54,7 @@ def register(app) -> None: vaultwarden_email = "" vaultwarden_status = "" vaultwarden_synced_at = "" + vaultwarden_master_set_at = "" jellyfin_status = "ready" jellyfin_sync_status = "unknown" jellyfin_sync_detail = "" @@ -137,6 +138,11 @@ def register(app) -> None: vaultwarden_synced_at = str(raw_vw_synced[0]) elif isinstance(raw_vw_synced, str) and raw_vw_synced: vaultwarden_synced_at = raw_vw_synced + raw_vw_master = attrs.get("vaultwarden_master_password_set_at") + if isinstance(raw_vw_master, list) and raw_vw_master: + vaultwarden_master_set_at = str(raw_vw_master[0]) + elif isinstance(raw_vw_master, str) and raw_vw_master: + vaultwarden_master_set_at = raw_vw_master user_id = user.get("id") if isinstance(user, dict) else None if user_id and ( @@ -150,6 +156,7 @@ def register(app) -> None: or not vaultwarden_email or not vaultwarden_status or not vaultwarden_synced_at + or not vaultwarden_master_set_at ): full = admin_client().get_user(str(user_id)) if not keycloak_email: @@ -229,6 +236,15 @@ def register(app) -> None: vaultwarden_synced_at = str(raw_vw_synced[0]) elif isinstance(raw_vw_synced, str) and raw_vw_synced: vaultwarden_synced_at = raw_vw_synced + if not vaultwarden_master_set_at: + raw_vw_master = attrs.get("vaultwarden_master_password_set_at") + if isinstance(raw_vw_master, list) and raw_vw_master: + vaultwarden_master_set_at = str(raw_vw_master[0]) + elif isinstance(raw_vw_master, str) and raw_vw_master: + vaultwarden_master_set_at = raw_vw_master + + if vaultwarden_master_set_at: + vaultwarden_status = "ready" except Exception: mailu_status = "unavailable" nextcloud_mail_status = "unavailable" diff --git a/frontend/src/views/AccountView.vue b/frontend/src/views/AccountView.vue index f0f33d8..9c10d58 100644 --- a/frontend/src/views/AccountView.vue +++ b/frontend/src/views/AccountView.vue @@ -118,7 +118,7 @@
@@ -192,23 +192,23 @@
-
+

Vaultwarden

- {{ vaultwarden.status }} + {{ vaultwardenDisplayStatus }}
-

+

Password manager for Atlas accounts. Store your Element recovery key here. Signups are admin-provisioned.

@@ -233,7 +233,7 @@
-
+

Wger

-
+

Jellyfin