From af196f7333f8a6a83bca4d49896e917c447a9b42 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 25 Mar 2025 08:51:03 +0100 Subject: [PATCH 01/22] WIP: Webmail --- .gitignore | 1 + frontend/package.json | 1 + frontend/src/api/webmail.js | 25 + frontend/src/components/shared/NavBar.vue | 9 +- frontend/src/components/webmail/EmailList.vue | 113 +++ .../src/components/webmail/MailboxList.vue | 103 +++ .../src/layouts/connected/ConnectedLayout.vue | 4 +- .../src/layouts/webmail/WebmailLayout.vue | 59 ++ frontend/src/plugins/filters.js | 4 + frontend/src/router/index.js | 28 +- frontend/src/stores/layout.store.js | 3 + frontend/src/views/webmail/EmailView.vue | 50 ++ frontend/src/views/webmail/MailboxView.vue | 10 + frontend/yarn.lock | 5 + modoboa/calendars/apps.py | 2 +- modoboa/core/api/v2/viewsets.py | 14 +- modoboa/lib/email_utils.py | 4 +- modoboa/urls_api_v2.py | 1 + modoboa/webmail/__init__.py | 1 + modoboa/webmail/app_settings.py | 268 ++++++ modoboa/webmail/apps.py | 15 + modoboa/webmail/constants.py | 32 + modoboa/webmail/exceptions.py | 33 + modoboa/webmail/lib/__init__.py | 32 + modoboa/webmail/lib/attachments.py | 135 +++ modoboa/webmail/lib/fetch_parser.py | 286 ++++++ modoboa/webmail/lib/imapemail.py | 335 +++++++ modoboa/webmail/lib/imapheader.py | 139 +++ modoboa/webmail/lib/imaputils.py | 828 ++++++++++++++++++ modoboa/webmail/lib/rfc6266.py | 108 +++ modoboa/webmail/lib/sendmail.py | 66 ++ modoboa/webmail/lib/signature.py | 28 + modoboa/webmail/lib/utils.py | 22 + modoboa/webmail/serializers.py | 94 ++ modoboa/webmail/urls.py | 12 + modoboa/webmail/viewsets.py | 49 ++ test_project/test_project/settings.py | 5 + 37 files changed, 2910 insertions(+), 14 deletions(-) create mode 100644 frontend/src/api/webmail.js create mode 100644 frontend/src/components/webmail/EmailList.vue create mode 100644 frontend/src/components/webmail/MailboxList.vue create mode 100644 frontend/src/layouts/webmail/WebmailLayout.vue create mode 100644 frontend/src/views/webmail/EmailView.vue create mode 100644 frontend/src/views/webmail/MailboxView.vue create mode 100644 modoboa/webmail/__init__.py create mode 100644 modoboa/webmail/app_settings.py create mode 100644 modoboa/webmail/apps.py create mode 100644 modoboa/webmail/constants.py create mode 100644 modoboa/webmail/exceptions.py create mode 100644 modoboa/webmail/lib/__init__.py create mode 100644 modoboa/webmail/lib/attachments.py create mode 100644 modoboa/webmail/lib/fetch_parser.py create mode 100644 modoboa/webmail/lib/imapemail.py create mode 100644 modoboa/webmail/lib/imapheader.py create mode 100644 modoboa/webmail/lib/imaputils.py create mode 100644 modoboa/webmail/lib/rfc6266.py create mode 100644 modoboa/webmail/lib/sendmail.py create mode 100644 modoboa/webmail/lib/signature.py create mode 100644 modoboa/webmail/lib/utils.py create mode 100644 modoboa/webmail/serializers.py create mode 100644 modoboa/webmail/urls.py create mode 100644 modoboa/webmail/viewsets.py diff --git a/.gitignore b/.gitignore index 6bfe34914..cb42ae62f 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ modoboa.kdev4 .kateproject test_project/cert.crt test_project/cert.key +test_project/envfile diff --git a/frontend/package.json b/frontend/package.json index 68347ab85..ca4a9b004 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -26,6 +26,7 @@ "axios": "^1.8.2", "core-js": "^3.37.1", "debounce": "^2.1.0", + "filesize": "^10.1.6", "js-cookie": "^3.0.5", "luxon": "^3.4.4", "oidc-client-ts": "^3.0.1", diff --git a/frontend/src/api/webmail.js b/frontend/src/api/webmail.js new file mode 100644 index 000000000..5edbbe293 --- /dev/null +++ b/frontend/src/api/webmail.js @@ -0,0 +1,25 @@ +import repository from './repository' + +export default { + getUserMailboxes(mailbox) { + const params = {} + if (mailbox) { + params.mailbox = mailbox + } + return repository.get('/webmail/mailboxes/', { params }) + }, + getMailboxEmails(mailbox, options) { + const params = { + mailbox, + ...options, + } + return repository.get(`/webmail/emails/`, { params }) + }, + getEmailContent(mailbox, mailid) { + const params = { + mailbox, + mailid, + } + return repository.get(`/webmail/emails/content/`, { params }) + }, +} diff --git a/frontend/src/components/shared/NavBar.vue b/frontend/src/components/shared/NavBar.vue index 7628d8d0c..6cc5c4a59 100644 --- a/frontend/src/components/shared/NavBar.vue +++ b/frontend/src/components/shared/NavBar.vue @@ -21,7 +21,11 @@ - +