From 0b2d69d1fff6716b9e2ca3b3cf7d2ac31e8564aa Mon Sep 17 00:00:00 2001
From: Pascal Bleser
Date: Wed, 15 Oct 2025 12:24:19 +0200
Subject: [PATCH] groupware: fix NPE when one of the accounts is a group
account
---
.../pkg/groupware/groupware_api_index.go | 54 ++++++++++++-------
1 file changed, 35 insertions(+), 19 deletions(-)
diff --git a/services/groupware/pkg/groupware/groupware_api_index.go b/services/groupware/pkg/groupware/groupware_api_index.go
index d3fd2d0e4e..3045139c0d 100644
--- a/services/groupware/pkg/groupware/groupware_api_index.go
+++ b/services/groupware/pkg/groupware/groupware_api_index.go
@@ -174,12 +174,14 @@ func (g *Groupware) Index(w http.ResponseWriter, r *http.Request) {
}
func buildIndexLimits(session *jmap.Session) IndexLimits {
- return IndexLimits{
- MaxSizeUpload: session.Capabilities.Core.MaxSizeUpload,
- MaxConcurrentUpload: session.Capabilities.Core.MaxConcurrentUpload,
- MaxSizeRequest: session.Capabilities.Core.MaxSizeRequest,
- MaxConcurrentRequests: session.Capabilities.Core.MaxConcurrentRequests,
+ result := IndexLimits{}
+ if core := session.Capabilities.Core; core != nil {
+ result.MaxSizeUpload = core.MaxSizeUpload
+ result.MaxConcurrentUpload = core.MaxConcurrentUpload
+ result.MaxSizeRequest = core.MaxSizeRequest
+ result.MaxConcurrentRequests = core.MaxConcurrentRequests
}
+ return result
}
func buildIndexPrimaryAccounts(session *jmap.Session) IndexPrimaryAccounts {
@@ -200,20 +202,8 @@ func buildIndexAccount(session *jmap.Session, boot map[string]jmap.AccountBootst
IsPersonal: account.IsPersonal,
IsReadOnly: account.IsReadOnly,
Capabilities: IndexAccountCapabilities{
- Mail: IndexAccountMailCapabilities{
- MaxMailboxDepth: account.AccountCapabilities.Mail.MaxMailboxDepth,
- MaxSizeMailboxName: account.AccountCapabilities.Mail.MaxSizeMailboxName,
- MaxMailboxesPerEmail: account.AccountCapabilities.Mail.MaxMailboxesPerEmail,
- MaxSizeAttachmentsPerEmail: account.AccountCapabilities.Mail.MaxSizeAttachmentsPerEmail,
- MayCreateTopLevelMailbox: account.AccountCapabilities.Mail.MayCreateTopLevelMailbox,
- MaxDelayedSend: account.AccountCapabilities.Submission.MaxDelayedSend,
- },
- Sieve: IndexAccountSieveCapabilities{
- MaxSizeScriptName: account.AccountCapabilities.Sieve.MaxSizeScript,
- MaxSizeScript: account.AccountCapabilities.Sieve.MaxSizeScript,
- MaxNumberScripts: account.AccountCapabilities.Sieve.MaxNumberScripts,
- MaxNumberRedirects: account.AccountCapabilities.Sieve.MaxNumberRedirects,
- },
+ Mail: buildIndexAccountMailCapabilities(account),
+ Sieve: buildIndexAccountSieveCapabilities(account),
},
}
if b, ok := boot[accountId]; ok {
@@ -224,3 +214,29 @@ func buildIndexAccount(session *jmap.Session, boot map[string]jmap.AccountBootst
}
return accounts
}
+
+func buildIndexAccountMailCapabilities(account jmap.Account) IndexAccountMailCapabilities {
+ result := IndexAccountMailCapabilities{}
+ if mail := account.AccountCapabilities.Mail; mail != nil {
+ result.MaxMailboxDepth = mail.MaxMailboxDepth
+ result.MaxSizeMailboxName = mail.MaxSizeMailboxName
+ result.MaxMailboxesPerEmail = mail.MaxMailboxesPerEmail
+ result.MaxSizeAttachmentsPerEmail = mail.MaxSizeAttachmentsPerEmail
+ result.MayCreateTopLevelMailbox = mail.MayCreateTopLevelMailbox
+ }
+ if subm := account.AccountCapabilities.Submission; subm != nil {
+ result.MaxDelayedSend = subm.MaxDelayedSend
+ }
+ return result
+}
+
+func buildIndexAccountSieveCapabilities(account jmap.Account) IndexAccountSieveCapabilities {
+ result := IndexAccountSieveCapabilities{}
+ if sieve := account.AccountCapabilities.Sieve; sieve != nil {
+ result.MaxSizeScriptName = sieve.MaxSizeScriptName
+ result.MaxSizeScript = sieve.MaxSizeScript
+ result.MaxNumberScripts = sieve.MaxNumberScripts
+ result.MaxNumberRedirects = sieve.MaxNumberRedirects
+ }
+ return result
+}