[GH-ISSUE #3821] WebUI does not display contacts #1921

Closed
opened 2026-02-27 11:19:54 +03:00 by kerem · 11 comments
Owner

Originally created by @danielfdickinson on GitHub (Nov 30, 2025).
Original GitHub issue: https://github.com/modoboa/modoboa/issues/3821

Impacted versions

  • OS Type: Debian
  • OS Version: 12.12 (bookworm)
  • Database Type: PostgreSQL
  • Database version: 15.14
  • Modoboa: 2.6.4
  • installer used: Yes
  • Webserver: Nginx

Steps to reproduce

  1. Install Modoboa via installer from about 2.4.4 and upgrade on each release
  2. Login to Modoboa WebUI as user with a known good contacts and calendar (based on working in Thunderbird and DavX^5.
  3. Chose the 'Contacts' app from the waffle

Current behaviour

No contacts are displayed (blank except for the search)

Expected behavior

Contacts should display in the web app

Additional notes

This has been true for several versions, but I didn't try it when I first installed, so am not sure at what version it stopped working, or if it ever worked on my setup.

Originally created by @danielfdickinson on GitHub (Nov 30, 2025). Original GitHub issue: https://github.com/modoboa/modoboa/issues/3821 # Impacted versions * OS Type: Debian * OS Version: 12.12 (bookworm) * Database Type: PostgreSQL * Database version: 15.14 * Modoboa: 2.6.4 * installer used: Yes * Webserver: Nginx # Steps to reproduce 1. Install Modoboa via installer from about 2.4.4 and upgrade on each release 2. Login to Modoboa WebUI as user with a known good contacts and calendar (based on working in Thunderbird and DavX^5. 3. Chose the 'Contacts' app from the waffle # Current behaviour No contacts are displayed (blank except for the search) # Expected behavior Contacts should display in the web app # Additional notes This has been true for several versions, but I didn't try it when I first installed, so am not sure at what version it stopped working, or if it ever worked on my setup.
kerem 2026-02-27 11:19:54 +03:00
Author
Owner

@tonioo commented on GitHub (Dec 2, 2025):

@danielfdickinson You mean that you have an existing caldav collection that you manage from another client like TB? And it does not display in Modoboa?

<!-- gh-comment-id:3602275320 --> @tonioo commented on GitHub (Dec 2, 2025): @danielfdickinson You mean that you have an existing caldav collection that you manage from another client like TB? And it does not display in Modoboa?
Author
Owner

@danielfdickinson commented on GitHub (Dec 3, 2025):

@tonioo The caldav collection works well with the fix in 2.6.4, but the CardDAV collection (contacts) does not display in Modoboa but I can manage from Thunderbird on Linux or Windows (I keep a Windows system around in case of compatibility issues) and Google Contacts through DavX^5 on Android.

<!-- gh-comment-id:3604543514 --> @danielfdickinson commented on GitHub (Dec 3, 2025): @tonioo The caldav collection works well with the fix in 2.6.4, but the CardDAV collection (contacts) does not display in Modoboa but I can manage from Thunderbird on Linux or Windows (I keep a Windows system around in case of compatibility issues) and Google Contacts through DavX^5 on Android.
Author
Owner

@tonioo commented on GitHub (Dec 3, 2025):

@danielfdickinson Indeed, right now Modoboa only support one collection per user, and it always called "contacts". By default, contacts are only stored in the database, and they are not exported to any CardDAV collection.

Modoboa will create this collection when a user enables the "Synchronize Address book using CardDAV" from his account settings (Contacts section). Then, it will keep the synchronization between the database and the CardDAV collection up-to-date.

The only scenario which is not supported at the moment is the one you describe. Let's say you have an existing CardDAV collection called "contacts", Modoboa won't be able to synchronize it with the database... Modoboa must be the creator of the collection in order to make things work as expected.

That's something we can obviously imrove.

<!-- gh-comment-id:3607688676 --> @tonioo commented on GitHub (Dec 3, 2025): @danielfdickinson Indeed, right now Modoboa only support one collection per user, and it always called "contacts". By default, contacts are only stored in the database, and they are not exported to any CardDAV collection. Modoboa will create this collection when a user enables the "Synchronize Address book using CardDAV" from his account settings (Contacts section). Then, it will keep the synchronization between the database and the CardDAV collection up-to-date. The only scenario which is not supported at the moment is the one you describe. Let's say you have an existing CardDAV collection called "contacts", Modoboa won't be able to synchronize it with the database... Modoboa must be the creator of the collection in order to make things work as expected. That's something we can obviously imrove.
Author
Owner

@danielfdickinson commented on GitHub (Dec 3, 2025):

@tonioo Thank you for that information. That would definitely explains what I have been seeing. I think with this knowledge I can get make changes to get what I want.

<!-- gh-comment-id:3609161639 --> @danielfdickinson commented on GitHub (Dec 3, 2025): @tonioo Thank you for that information. That would definitely explains what I have been seeing. I think with this knowledge I can get make changes to get what I want.
Author
Owner

@danielfdickinson commented on GitHub (Dec 5, 2025):

@tonioo It appears this isn't working quite properly (or I need to delete and recreate the user, which would lose it's mailbox and settings, which is rather a non-starter).

I tried the following:

  1. Exported my CardDAV collection from Thunderbird, so I could reimport - I used three different file formats, so that at least one should be successful.
  2. In my Thunderbird and DAVx^5 removed references to the CardDAV collection.
  3. Turned off the setting for synchronizing with CardDAV for my Modoboa user
  4. Removed /srv/radicale/collections/collection-root/<user>/contacts
  5. Verified there were no contacts visible in the Contacts app of Modoboa WebUI.
  6. Reenabled the synchronization setting.
  7. Attempted to connect Thunderbird with the collection - that failed.
  8. Checked /srv/radicale/collections/collection-root/<user>/contacts - it had not been recreated.
  9. Turned off the CardDav sync setting in Modoboa again
  10. Added a contact using the WebUI
  11. Turned on the CardDav sync setting
  12. Checked the /srv/radicale/... - the collection had not been created.
  13. Attempted to update, in the WebUI, the contact I had created. In the WebUI I got:
<!DOCTYPE html> <html lang=""> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title></title> <link rel="icon" type="image/x-icon" href="/sitestatic/css/favicon.ico" /> <link rel="stylesheet" type="text/css" href="/sitestatic/css/offline.css" /> </head> <body> <div class="column"> <div class="alert-box"> <h4>Sorry</h4> <p>An internal error occured.</p> </div> </div> </body> </html> 

In /var/log/supervisor/...radicale-stdout.../:

[2025-12-05 17:52:42 -0500] [907/Thread-1 (process_request_thread)] [INFO] OPTIONS request for '/<user>/contacts' with depth '1' received from ::1 (forwarded for 'REDACTED') using 'pyCardDAV'
[2025-12-05 17:52:42 -0500] [907/Thread-1 (process_request_thread)] [WARNING] Called by reverse proxy, cannot remove base prefix '/radicale' from path: '/<user>/contacts' as not matching
[2025-12-05 17:52:42 -0500] [907/Thread-1 (process_request_thread)] [INFO] Successful login: '<user>' (radicale_modoboa_auth_oauth2)
[2025-12-05 17:52:42 -0500] [907/Thread-1 (process_request_thread)] [INFO] OPTIONS response status for '/<user>/contacts' with depth '1' in 0.317 seconds: 200 OK
[2025-12-05 17:52:42 -0500] [907/Thread-2 (process_request_thread)] [INFO] PUT request for '/<user>/contacts/<uuid>.vcf' received from 127.0.0.1 (forwarded for 'REDACTED') using 'pyCardDAV'
[2025-12-05 17:52:42 -0500] [907/Thread-2 (process_request_thread)] [WARNING] Called by reverse proxy, cannot remove base prefix '/radicale' from path: '/<user>/contacts/<uuid>.vcf' as not matching
[2025-12-05 17:52:43 -0500] [907/Thread-2 (process_request_thread)] [INFO] Successful login: '<user>' (radicale_modoboa_auth_oauth2)
[2025-12-05 17:52:43 -0500] [907/Thread-2 (process_request_thread)] [INFO] PUT response status for '/<user>/contacts/<uuid>.vcf' in 0.311 seconds: 409 Conflict

I will now try with a different user account for which I have not previously created a contacts collection and report back.

<!-- gh-comment-id:3618916487 --> @danielfdickinson commented on GitHub (Dec 5, 2025): @tonioo It appears this isn't working quite properly (or I need to delete and recreate the user, which would lose it's mailbox and settings, which is rather a non-starter). I tried the following: 1. Exported my CardDAV collection from Thunderbird, so I could reimport - I used three different file formats, so that at least one should be successful. 2. In my Thunderbird and DAVx^5 removed references to the CardDAV collection. 3. Turned off the setting for synchronizing with CardDAV for my Modoboa user 4. Removed `/srv/radicale/collections/collection-root/<user>/contacts` 5. Verified there were no contacts visible in the Contacts app of Modoboa WebUI. 6. Reenabled the synchronization setting. 7. Attempted to connect Thunderbird with the collection - that failed. 8. Checked `/srv/radicale/collections/collection-root/<user>/contacts` - it had not been recreated. 9. Turned off the CardDav sync setting in Modoboa again 10. Added a contact using the WebUI 11. Turned on the CardDav sync setting 12. Checked the `/srv/radicale/...` - the collection had not been created. 13. Attempted to update, in the WebUI, the contact I had created. In the WebUI I got: ```html <!DOCTYPE html> <html lang=""> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title></title> <link rel="icon" type="image/x-icon" href="/sitestatic/css/favicon.ico" /> <link rel="stylesheet" type="text/css" href="/sitestatic/css/offline.css" /> </head> <body> <div class="column"> <div class="alert-box"> <h4>Sorry</h4> <p>An internal error occured.</p> </div> </div> </body> </html> ``` In `/var/log/supervisor/...radicale-stdout.../`: ```syslog [2025-12-05 17:52:42 -0500] [907/Thread-1 (process_request_thread)] [INFO] OPTIONS request for '/<user>/contacts' with depth '1' received from ::1 (forwarded for 'REDACTED') using 'pyCardDAV' [2025-12-05 17:52:42 -0500] [907/Thread-1 (process_request_thread)] [WARNING] Called by reverse proxy, cannot remove base prefix '/radicale' from path: '/<user>/contacts' as not matching [2025-12-05 17:52:42 -0500] [907/Thread-1 (process_request_thread)] [INFO] Successful login: '<user>' (radicale_modoboa_auth_oauth2) [2025-12-05 17:52:42 -0500] [907/Thread-1 (process_request_thread)] [INFO] OPTIONS response status for '/<user>/contacts' with depth '1' in 0.317 seconds: 200 OK [2025-12-05 17:52:42 -0500] [907/Thread-2 (process_request_thread)] [INFO] PUT request for '/<user>/contacts/<uuid>.vcf' received from 127.0.0.1 (forwarded for 'REDACTED') using 'pyCardDAV' [2025-12-05 17:52:42 -0500] [907/Thread-2 (process_request_thread)] [WARNING] Called by reverse proxy, cannot remove base prefix '/radicale' from path: '/<user>/contacts/<uuid>.vcf' as not matching [2025-12-05 17:52:43 -0500] [907/Thread-2 (process_request_thread)] [INFO] Successful login: '<user>' (radicale_modoboa_auth_oauth2) [2025-12-05 17:52:43 -0500] [907/Thread-2 (process_request_thread)] [INFO] PUT response status for '/<user>/contacts/<uuid>.vcf' in 0.311 seconds: 409 Conflict ``` I will now try with a different user account for which I have not previously created a contacts collection and report back.
Author
Owner

@danielfdickinson commented on GitHub (Dec 5, 2025):

With a user with no previous contacts and starting with CardDAV sync disabled:

  1. Created a test contact
  2. Enabled CardDAV sync (the collection was created)
  3. Added collection to Thunderbird
  4. Imported previously exported contacts (on the server side this took a while)
  5. Waited a while (due to logs showing activity was still occuring).
  6. Changed to the mail app on Modoboa.
  7. Switched back to contacts app in Modoboa.
  8. Success! Imported contacts appear in the Modoboa app.

Is there a way to get the contacts working with the other user (the failed one)?

<!-- gh-comment-id:3618953438 --> @danielfdickinson commented on GitHub (Dec 5, 2025): With a user with no previous contacts and starting with CardDAV sync disabled: 1. Created a test contact 2. Enabled CardDAV sync (the collection _was_ created) 3. Added collection to Thunderbird 4. Imported previously exported contacts (on the server side this took a while) 5. Waited a while (due to logs showing activity was still occuring). 6. Changed to the mail app on Modoboa. 7. Switched back to contacts app in Modoboa. 8. Success! Imported contacts appear in the Modoboa app. Is there a way to get the contacts working with the other user (the failed one)?
Author
Owner

@tonioo commented on GitHub (Dec 12, 2025):

@danielfdickinson Could you try the small fix I pushed? (with the same procedure that you ran for your existing user)
It's far from perfect but it should unblock you, and I'll work on something smarter.

<!-- gh-comment-id:3646529339 --> @tonioo commented on GitHub (Dec 12, 2025): @danielfdickinson Could you try the small fix I pushed? (with the same procedure that you ran for your existing user) It's far from perfect but it should unblock you, and I'll work on something smarter.
Author
Owner

@danielfdickinson commented on GitHub (Dec 13, 2025):

@tonioo I will try tomorrow, and let you know. Thank you for looking into it!

<!-- gh-comment-id:3648883006 --> @danielfdickinson commented on GitHub (Dec 13, 2025): @tonioo I will try tomorrow, and let you know. Thank you for looking into it!
Author
Owner

@danielfdickinson commented on GitHub (Dec 27, 2025):

@tonioo Sorry. I got pulled off on other directions. Do you need me to test this?

<!-- gh-comment-id:3693591308 --> @danielfdickinson commented on GitHub (Dec 27, 2025): @tonioo Sorry. I got pulled off on other directions. Do you need me to test this?
Author
Owner

@tonioo commented on GitHub (Jan 6, 2026):

@danielfdickinson Yes please

<!-- gh-comment-id:3713612512 --> @tonioo commented on GitHub (Jan 6, 2026): @danielfdickinson Yes please
Author
Owner

@danielfdickinson commented on GitHub (Feb 17, 2026):

I can confirm this resolves the issue for the original account that experienced it.

<!-- gh-comment-id:3913584032 --> @danielfdickinson commented on GitHub (Feb 17, 2026): I can confirm this resolves the issue for the original account that experienced it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/modoboa-modoboa#1921
No description provided.