From 221179c4db1ce3ded63c5c305ecb313492a70b2c Mon Sep 17 00:00:00 2001 From: Ronni Baslund Date: Thu, 11 Jun 2026 08:00:15 +0200 Subject: [PATCH] feat(portal): Apple Mail profile download on user rows + drawer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The .mobileconfig button only lived on the transient credential dialogs (invite/create/reset results) — nowhere to fetch a profile for an existing mailbox. Row kebab menu gains 'Download Apple Mail profile' (mailbox users only) and the user drawer shows the button next to the mailbox address. --- apps/portal/pages/admin/users.vue | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/portal/pages/admin/users.vue b/apps/portal/pages/admin/users.vue index 1f5ba22..d1607d5 100644 --- a/apps/portal/pages/admin/users.vue +++ b/apps/portal/pages/admin/users.vue @@ -173,6 +173,7 @@ function bulkExport() { function rowAction(u: TenantUserDoc, id: string) { if (id === 'open') openUser.value = u else if (id === 'reset') resetTarget.value = u + else if (id === 'apple-profile' && u.mailboxAddress) downloadAppleProfile(u.mailboxAddress, u.name) else if (id === 'force') forceLogoutUser(u) else if (id === 'make-owner') makeOwnerTarget.value = u else if (id === 'suspend') suspendTarget.value = u @@ -187,6 +188,9 @@ function rowItems(u: TenantUserDoc) { return [ { id: 'open', label: 'Open profile', icon: 'external' as const }, { id: 'reset', label: 'Send password reset', icon: 'key' as const }, + ...(u.mailboxAddress + ? [{ id: 'apple-profile', label: 'Download Apple Mail profile', icon: 'download' as const }] + : []), { id: 'force', label: 'Force logout', icon: 'logout' as const }, { id: 'sep1', separator: true }, ...(canManageOwnership.value && effectiveRole(u) !== 'owner' @@ -743,7 +747,13 @@ async function submitCreateMailbox() {
Mailbox
No mailbox — sign-in only