From cbfa68f3dca06eaa988fdc86b7e5a5faadba0ac0 Mon Sep 17 00:00:00 2001 From: Leo Vasanko Date: Wed, 18 Feb 2026 03:47:08 +0000 Subject: [PATCH] Fix HostProfile user properties access. --- frontend/src/components/HostProfileView.vue | 6 +++--- frontend/src/components/ProfileView.vue | 24 ++++++++++----------- paskia/util/userinfo.py | 4 ++++ 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/frontend/src/components/HostProfileView.vue b/frontend/src/components/HostProfileView.vue index eb88626..142fa79 100644 --- a/frontend/src/components/HostProfileView.vue +++ b/frontend/src/components/HostProfileView.vue @@ -10,9 +10,9 @@ showEditDialog.value || showRegLink.value) watch(showEditDialog, (open) => { if (!open) return - const user = authStore.userInfo?.user - editName.value = user?.display_name ?? '' - editEmail.value = user?.email ?? '' - editUsername.value = user?.preferred_username ?? '' - editTelephone.value = user?.telephone ?? '' + const user = authStore.userInfo.user + editName.value = user.display_name ?? '' + editEmail.value = user.email ?? '' + editUsername.value = user.preferred_username ?? '' + editTelephone.value = user.telephone ?? '' editError.value = '' }) @@ -341,7 +341,7 @@ const handleDelete = async (credential) => { const rpName = computed(() => authStore.settings?.rp_name || 'this service') const paskiaVersion = computed(() => authStore.settings?.version || '') -const sessions = computed(() => authStore.userInfo?.sessions || {}) +const sessions = computed(() => authStore.userInfo.sessions) const currentSessionHost = computed(() => { const currentSession = Object.values(sessions.value).find(session => session.is_current) return currentSession?.host || 'this host' @@ -365,12 +365,12 @@ const logoutEverywhere = async () => { await authStore.logoutEverywhere() } const logout = async () => { await authStore.logout() } const openEditDialog = () => { showEditDialog.value = true } const isAdmin = computed(() => { - const perms = authStore.ctx?.permissions - return perms?.includes('auth:admin') || perms?.includes('auth:org:admin') + const perms = Object.values(authStore.userInfo.permissions).map(p => p.scope) + return perms.includes('auth:admin') || perms.includes('auth:org:admin') }) const hasMultipleSessions = computed(() => Object.keys(sessions.value).length > 1) const credentials = computed(() => - Object.entries(authStore.userInfo?.credentials || {}).map(([uuid, c]) => ({ ...c, credential: uuid })) + Object.entries(authStore.userInfo.credentials).map(([uuid, c]) => ({ ...c, credential: uuid })) ) const useWideLayout = computed(() => { // Check if any single site has more than 8 sessions diff --git a/paskia/util/userinfo.py b/paskia/util/userinfo.py index 0626ed3..b01d73b 100644 --- a/paskia/util/userinfo.py +++ b/paskia/util/userinfo.py @@ -5,8 +5,10 @@ from paskia.db import SessionContext from paskia.util import hostutil from paskia.util.apistructs import ( ApiAaguidInfo, + ApiOrg, ApiOrgContext, ApiPermission, + ApiRole, ApiRoleContext, ApiSessionContext, ApiUser, @@ -64,4 +66,6 @@ async def build_user_info( permissions={p.uuid: ApiPermission.from_db(p) for p in ctx.permissions} if ctx else {}, + org=ApiOrg.from_db(ctx.org) if ctx else None, + role=ApiRole.from_db(ctx.role) if ctx else None, )