modoboa 2.6.5__py3-none-any.whl → 2.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- modoboa/admin/api/v2/serializers.py +1 -0
- modoboa/admin/app_settings.py +12 -0
- modoboa/admin/{management/commands/subcommands/_mx.py → dns_checker.py} +41 -111
- modoboa/admin/jobs.py +86 -0
- modoboa/admin/management/commands/modo.py +0 -2
- modoboa/admin/tests/test_mailbox_operations.py +4 -4
- modoboa/admin/tests/test_mx.py +68 -56
- modoboa/amavis/jobs.py +11 -0
- modoboa/amavis/tests/test_jobs.py +18 -0
- modoboa/amavis/tests/test_viewsets.py +2 -3
- modoboa/autoconfig/templates/autoconfig/autoconfig.xml +2 -2
- modoboa/autoconfig/templates/autoconfig/autodiscover.xml +14 -0
- modoboa/autoconfig/tests.py +2 -1
- modoboa/autoconfig/views.py +11 -3
- modoboa/calendars/backends/caldav_.py +17 -13
- modoboa/calendars/jobs.py +7 -0
- modoboa/calendars/mocks.py +4 -1
- modoboa/calendars/serializers.py +14 -9
- modoboa/calendars/tests.py +10 -9
- modoboa/calendars/viewsets.py +3 -1
- modoboa/contacts/migrations/0008_addressbook_syncing.py +18 -0
- modoboa/contacts/models.py +1 -0
- modoboa/contacts/serializers.py +5 -2
- modoboa/contacts/tasks.py +9 -3
- modoboa/contacts/tests.py +32 -6
- modoboa/contacts/viewsets.py +7 -1
- modoboa/core/api/v2/serializers.py +0 -7
- modoboa/core/api/v2/tests.py +0 -10
- modoboa/core/app_settings.py +0 -22
- modoboa/core/commands/deploy.py +13 -0
- modoboa/core/commands/templates/cron_config.py.tpl +33 -0
- modoboa/core/commands/templates/settings.py.tpl +21 -0
- modoboa/core/jobs.py +34 -0
- modoboa/core/management/commands/load_initial_data.py +1 -1
- modoboa/core/password_hashers/base.py +4 -1
- modoboa/core/tests/test_core.py +0 -14
- modoboa/core/tests/test_jobs.py +40 -0
- modoboa/frontend_dist/assets/{AccountAliasForm-B-hTKSFr.js → AccountAliasForm-DO6DwfjE.js} +1 -1
- modoboa/frontend_dist/assets/{AccountEditView-LkP_qhf_.js → AccountEditView-CCuN9mGB.js} +1 -1
- modoboa/frontend_dist/assets/AccountLayout-Ge7fzuZg.js +1 -0
- modoboa/frontend_dist/assets/AccountPasswordSubForm-PkFPblkR.js +1 -0
- modoboa/frontend_dist/assets/AccountView-dgseekZ8.js +1 -0
- modoboa/frontend_dist/assets/AddressBook-DZWOHOJj.js +1 -0
- modoboa/frontend_dist/assets/AdminLayout-itB_mmH_.js +1 -0
- modoboa/frontend_dist/assets/AlarmsView-King6zb6.js +1 -0
- modoboa/frontend_dist/assets/{AliasEditView-BVjNJekt.js → AliasEditView-CTjrXYPf.js} +1 -1
- modoboa/frontend_dist/assets/AliasRecipientForm-CI7bXqVp.js +1 -0
- modoboa/frontend_dist/assets/{AliasView-DvvI6cV9.js → AliasView-BN13MNN_.js} +1 -1
- modoboa/frontend_dist/assets/AuditTrailView-C1jQwgoo.js +1 -0
- modoboa/frontend_dist/assets/CalendarView-juHVIHU5.css +1 -0
- modoboa/frontend_dist/assets/CalendarView-rRSzqxrH.js +1 -0
- modoboa/frontend_dist/assets/ChoiceField-DCr12shR.js +1 -0
- modoboa/frontend_dist/assets/ComposeEmailForm-BmtKwFb1.js +2 -0
- modoboa/frontend_dist/assets/ComposeEmailForm-CVNDl-Mq.css +1 -0
- modoboa/frontend_dist/assets/ComposeEmailView-JW22Phrb.js +1 -0
- modoboa/frontend_dist/assets/ConfirmDialog-CWpdwSQ6.js +1 -0
- modoboa/frontend_dist/assets/ConnectedLayout-BP8pO27H.js +1 -0
- modoboa/frontend_dist/assets/{ConnectedLayout-C6HNXWkp.css → ConnectedLayout-Ddpb_6yT.css} +1 -1
- modoboa/frontend_dist/assets/CreationForm-CzelJsVQ.js +1 -0
- modoboa/frontend_dist/assets/DashboardView-BBkBodVj.js +1 -0
- modoboa/frontend_dist/assets/{DomainAdminList-BO8_4Cwt.js → DomainAdminList-DD7p3i6F.js} +1 -1
- modoboa/frontend_dist/assets/{DomainEditView-BXylM4aB.js → DomainEditView-DoIoNYC4.js} +1 -1
- modoboa/frontend_dist/assets/{DomainTransportForm-Ccw5BXyM.js → DomainTransportForm-CbiJF9z5.js} +1 -1
- modoboa/frontend_dist/assets/{DomainView-Bd5XQI-1.js → DomainView-BXvznFYz.js} +3 -3
- modoboa/frontend_dist/assets/DomainsView-ffYjiffp.js +1 -0
- modoboa/frontend_dist/assets/EmailField-KhhJYA4D.js +1 -0
- modoboa/frontend_dist/assets/EmailSchedulingForm-CQL5Vfdr.js +1 -0
- modoboa/frontend_dist/assets/EmailView-Bq2bHZBO.js +1 -0
- modoboa/frontend_dist/assets/EmptyLayout-NrTftp18.js +1 -0
- modoboa/frontend_dist/assets/FiltersView-SOQy0U_3.js +1 -0
- modoboa/frontend_dist/assets/ForwardEmailView-kEPDjWUw.js +1 -0
- modoboa/frontend_dist/assets/{HtmlEditor-DNn3CY-w.js → HtmlEditor-CyBl5wj2.js} +15 -15
- modoboa/frontend_dist/assets/IdentitiesView-CZFf4oR9.js +1 -0
- modoboa/frontend_dist/assets/InformationView-CAtneAqM.js +1 -0
- modoboa/frontend_dist/assets/{LoadingData-CnQ_aVqa.js → LoadingData-C2txD49L.js} +1 -1
- modoboa/frontend_dist/assets/{LoginCallbackView-Nh_gmh8e.js → LoginCallbackView-DAvty3CI.js} +1 -1
- modoboa/frontend_dist/assets/{LoginView-BtC9BHuJ.js → LoginView-DHYITkn4.js} +1 -1
- modoboa/frontend_dist/assets/MailboxView-BNg2v7mi.css +1 -0
- modoboa/frontend_dist/assets/MailboxView-DHg5A78D.js +5 -0
- modoboa/frontend_dist/assets/MenuItems-C9p70bSC.js +1 -0
- modoboa/frontend_dist/assets/{MessageView-C1Goz-hY.js → MessageView-CrrEJpNI.js} +1 -1
- modoboa/frontend_dist/assets/MessagesView-CyecRd4I.js +1 -0
- modoboa/frontend_dist/assets/MigrationsView-DXGKKz2h.js +1 -0
- modoboa/frontend_dist/assets/{ParametersForm-BegEnkQM.js → ParametersForm-DFKYkPAs.js} +1 -1
- modoboa/frontend_dist/assets/ParametersView-B1wT5oyt.js +1 -0
- modoboa/frontend_dist/assets/ParametersView-CfvVzKea.js +1 -0
- modoboa/frontend_dist/assets/ProviderEditView-De-8ggBp.js +1 -0
- modoboa/frontend_dist/assets/{ProviderGeneralForm-BAELnXh6.js → ProviderGeneralForm-DO-IpJMQ.js} +1 -1
- modoboa/frontend_dist/assets/ProvidersView-Bhk7sCz4.js +1 -0
- modoboa/frontend_dist/assets/QuarantineLayout-C1YszNmP.js +1 -0
- modoboa/frontend_dist/assets/QuarantineView-cElD_rS-.js +1 -0
- modoboa/frontend_dist/assets/ReplyEmailView-BvuOZdLl.js +1 -0
- modoboa/frontend_dist/assets/ResourcesForm-FWxrmVwo.js +1 -0
- modoboa/frontend_dist/assets/SelfServiceLayout-JHRvfvQf.js +1 -0
- modoboa/frontend_dist/assets/SettingsView-SIsKAXtQ.css +1 -0
- modoboa/frontend_dist/assets/SettingsView-s2l2Xl1L.js +6 -0
- modoboa/frontend_dist/assets/StatisticsView-FiidWvad.js +1 -0
- modoboa/frontend_dist/assets/TimeSerieChart-CdqUHiO_.js +1 -0
- modoboa/frontend_dist/assets/TimeSerieChart-nLIFGI0y.css +1 -0
- modoboa/frontend_dist/assets/UserLayout-DyvI8duf.js +1 -0
- modoboa/frontend_dist/assets/{VAlert-Buv8Z5G4.js → VAlert-MDbeolOo.js} +1 -1
- modoboa/frontend_dist/assets/VApp-DM1KLQfQ.js +1 -0
- modoboa/frontend_dist/assets/VAutocomplete-C9NL5_uo.css +1 -0
- modoboa/frontend_dist/assets/VAutocomplete-CQsWYWNX.js +1 -0
- modoboa/frontend_dist/assets/VAvatar-CXV_FqpP.js +1 -0
- modoboa/frontend_dist/assets/VBadge-7tDx7aI3.js +1 -0
- modoboa/frontend_dist/assets/{VCard-D7AwBs4w.js → VCard-CBtX8JF-.js} +1 -1
- modoboa/frontend_dist/assets/VCheckbox-zY1MApOy.js +1 -0
- modoboa/frontend_dist/assets/{VCheckboxBtn-B5evxN9K.js → VCheckboxBtn-B0mIT3E0.js} +1 -1
- modoboa/frontend_dist/assets/VColorPicker-BbCHvk6K.js +1 -0
- modoboa/frontend_dist/assets/{VColorPicker-B_lVDaYR.css → VColorPicker-C9m8L-6U.css} +1 -1
- modoboa/frontend_dist/assets/{VContainer-DY9021j4.js → VContainer-Cn-vKB3s.js} +1 -1
- modoboa/frontend_dist/assets/VDataTable-CNT9KOSp.js +1 -0
- modoboa/frontend_dist/assets/VDataTableServer-_yn4Ry6U.js +1 -0
- modoboa/frontend_dist/assets/VDataTableVirtual-Csxh3Gp6.js +1 -0
- modoboa/frontend_dist/assets/VDatePicker-_OUDqShN.css +1 -0
- modoboa/frontend_dist/assets/VDatePicker-iFu13xIP.js +2 -0
- modoboa/frontend_dist/assets/VDialog-lKtBdqnp.js +1 -0
- modoboa/frontend_dist/assets/VExpansionPanels-CaIvk9iF.js +1 -0
- modoboa/frontend_dist/assets/VFileInput-C7J_qVmk.js +1 -0
- modoboa/frontend_dist/assets/VForm-fdQ5d-CH.js +1 -0
- modoboa/frontend_dist/assets/VInput-BwHvhzAe.js +1 -0
- modoboa/frontend_dist/assets/VMenu-BpmJf4X2.js +1 -0
- modoboa/frontend_dist/assets/VMenu-C5A_5Hs5.css +1 -0
- modoboa/frontend_dist/assets/VPicker-B7cB3kJg.css +1 -0
- modoboa/frontend_dist/assets/VPicker-BZho70wU.js +1 -0
- modoboa/frontend_dist/assets/VProgressCircular-DRw_-iNj.js +1 -0
- modoboa/frontend_dist/assets/VRadioGroup--eiP5xtJ.js +1 -0
- modoboa/frontend_dist/assets/{VRow-DyK_Mj7R.js → VRow-83Qnr5iB.js} +1 -1
- modoboa/frontend_dist/assets/VSelect-BcmGFGif.js +1 -0
- modoboa/frontend_dist/assets/{VSelectionControl-Dkms9_P5.js → VSelectionControl-Cqi1xt-q.js} +1 -1
- modoboa/frontend_dist/assets/VSheet-C3MaHhtw.js +1 -0
- modoboa/frontend_dist/assets/VSpacer-CuSkdJZL.js +1 -0
- modoboa/frontend_dist/assets/VSwitch-XumUl685.js +1 -0
- modoboa/frontend_dist/assets/{VTable-D8ZwwC_B.js → VTable-f7wcr2AZ.js} +1 -1
- modoboa/frontend_dist/assets/VTabs-CDfdejXj.css +1 -0
- modoboa/frontend_dist/assets/VTabs-y4wNP4im.js +1 -0
- modoboa/frontend_dist/assets/VTextField-BPIvtrn4.js +1 -0
- modoboa/frontend_dist/assets/VTextField-DjbYGlzs.css +1 -0
- modoboa/frontend_dist/assets/VTextarea-B6bGYcC3.js +1 -0
- modoboa/frontend_dist/assets/VTextarea-f6vTjzFy.css +1 -0
- modoboa/frontend_dist/assets/VToolbar-BYDPtwf0.css +1 -0
- modoboa/frontend_dist/assets/VToolbar-CB6wwtYc.js +1 -0
- modoboa/frontend_dist/assets/VWindowItem-CDtLLEkg.js +1 -0
- modoboa/frontend_dist/assets/WebmailLayout-CQQAolnl.css +1 -0
- modoboa/frontend_dist/assets/WebmailLayout-tosQSHLS.js +1 -0
- modoboa/frontend_dist/assets/{accounts-BZBqbAmd.js → accounts-KUsk6LHW.js} +1 -1
- modoboa/frontend_dist/assets/{admin-uCrKjpln.js → admin-BW9cZW0P.js} +1 -1
- modoboa/frontend_dist/assets/{aliases-CFwFkX45.js → aliases-Ge0hjIsH.js} +1 -1
- modoboa/frontend_dist/assets/{amavis-DCy0U0TD.js → amavis-BbFeFfsk.js} +1 -1
- modoboa/frontend_dist/assets/{amavis-B4ScfQsG.js → amavis-DtuzP_CS.js} +1 -1
- modoboa/frontend_dist/assets/{contacts-DKmh2q-4.js → contacts-DMJlQTe0.js} +1 -1
- modoboa/frontend_dist/assets/{domains-CDE4_LDF.js → domains-Du64lcXT.js} +1 -1
- modoboa/frontend_dist/assets/{domains.store-a9Y5UlDV.js → domains.store-1U61jeCV.js} +1 -1
- modoboa/frontend_dist/assets/events-BM3in65C.js +1 -0
- modoboa/frontend_dist/assets/filter-Dihm6o59.js +1 -0
- modoboa/frontend_dist/assets/importExport-HGcNGWOm.js +1 -0
- modoboa/frontend_dist/assets/{index-B9q1vO3K.css → index-B1EK3MQe.css} +1 -1
- modoboa/frontend_dist/assets/{index-Dwg6jPTX.js → index-Dv00bmw9.js} +1 -1
- modoboa/frontend_dist/assets/{index-BjibLozh.js → index-jui3edpn.js} +47 -41
- modoboa/frontend_dist/assets/{language.store-DGuI8jG0.js → language.store-OcfdXL_-.js} +1 -1
- modoboa/frontend_dist/assets/languages-CF8hxo7x.js +1 -0
- modoboa/frontend_dist/assets/{layout-5PvsmkGR.js → layout-DOO7TRTJ.js} +1 -1
- modoboa/frontend_dist/assets/{layout.store-DJVcXtxk.js → layout.store-C0g-piJn.js} +1 -1
- modoboa/frontend_dist/assets/{logos-CMmd0hOG.js → logos-Dz2Gzei-.js} +1 -1
- modoboa/frontend_dist/assets/{logs-D2GOydPZ.js → logs-CLm32Weu.js} +1 -1
- modoboa/frontend_dist/assets/{parameters-DJdlq9sh.js → parameters-DMIAQ7cd.js} +1 -1
- modoboa/frontend_dist/assets/{parameters.store-DH3pPlaT.js → parameters.store-DLnFzCwV.js} +1 -1
- modoboa/frontend_dist/assets/{permissions-CgFJFhCp.js → permissions-CrpE0b4w.js} +1 -1
- modoboa/frontend_dist/assets/{ssrBoot-ChTB-PYP.js → ssrBoot-B7cr7q9U.js} +1 -1
- modoboa/frontend_dist/assets/{tag-CvrHE14f.js → tag-WF93n81Q.js} +1 -1
- modoboa/frontend_dist/assets/{theme-DFzlhSh5.js → theme-_0oOYChG.js} +1 -1
- modoboa/frontend_dist/assets/transports-CS61syt-.js +1 -0
- modoboa/frontend_dist/assets/webmail-CYDXU0DS.js +1 -0
- modoboa/frontend_dist/assets/webmail.store-BvHCQSjM.js +1 -0
- modoboa/frontend_dist/index.html +2 -2
- modoboa/imap_migration/models.py +3 -3
- modoboa/imap_migration/templates/imap_migration/offlineimap.conf +2 -2
- modoboa/imap_migration/tests.py +21 -0
- modoboa/lib/cryptutils.py +2 -2
- modoboa/lib/sysutils.py +1 -1
- modoboa/lib/tests/__init__.py +0 -1
- modoboa/locale/br/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/br/LC_MESSAGES/django.po +301 -273
- modoboa/locale/cs/LC_MESSAGES/django.po +286 -269
- modoboa/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/cs_CZ/LC_MESSAGES/django.po +303 -275
- modoboa/locale/de/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/de/LC_MESSAGES/django.po +297 -269
- modoboa/locale/de_DE/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/de_DE/LC_MESSAGES/django.po +303 -275
- modoboa/locale/el_GR/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/el_GR/LC_MESSAGES/django.po +303 -275
- modoboa/locale/en/LC_MESSAGES/django.po +286 -269
- modoboa/locale/es/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/es/LC_MESSAGES/django.po +302 -274
- modoboa/locale/es_MX/LC_MESSAGES/django.po +286 -269
- modoboa/locale/fi/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/fi/LC_MESSAGES/django.po +299 -271
- modoboa/locale/fr/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/fr/LC_MESSAGES/django.po +288 -271
- modoboa/locale/hu/LC_MESSAGES/django.po +286 -269
- modoboa/locale/it/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/it/LC_MESSAGES/django.po +303 -275
- modoboa/locale/ja_JP/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/ja_JP/LC_MESSAGES/django.po +390 -413
- modoboa/locale/ka/LC_MESSAGES/django.po +286 -269
- modoboa/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/nl_NL/LC_MESSAGES/django.po +299 -271
- modoboa/locale/no/LC_MESSAGES/django.po +286 -269
- modoboa/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/pl_PL/LC_MESSAGES/django.po +297 -269
- modoboa/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/pt_BR/LC_MESSAGES/django.po +298 -270
- modoboa/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/pt_PT/LC_MESSAGES/django.po +303 -275
- modoboa/locale/ro_RO/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/ro_RO/LC_MESSAGES/django.po +299 -271
- modoboa/locale/ru/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/ru/LC_MESSAGES/django.po +993 -1096
- modoboa/locale/si/LC_MESSAGES/django.po +286 -269
- modoboa/locale/sk/LC_MESSAGES/django.po +286 -269
- modoboa/locale/sk_SK/LC_MESSAGES/django.po +286 -269
- modoboa/locale/sl_SI/LC_MESSAGES/django.po +288 -269
- modoboa/locale/sv/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/sv/LC_MESSAGES/django.po +297 -269
- modoboa/locale/tr/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/tr/LC_MESSAGES/django.po +301 -272
- modoboa/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/tr_TR/LC_MESSAGES/django.po +291 -269
- modoboa/locale/uk/LC_MESSAGES/django.po +286 -269
- modoboa/locale/zh/LC_MESSAGES/django.po +286 -269
- modoboa/locale/zh_CN/LC_MESSAGES/django.po +286 -269
- modoboa/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
- modoboa/locale/zh_TW/LC_MESSAGES/django.po +295 -273
- modoboa/maillog/jobs.py +11 -0
- modoboa/maillog/tests/test_views.py +5 -4
- modoboa/parameters/api/v2/tests.py +1 -1
- modoboa/policyd/management/commands/policy_daemon.py +5 -1
- modoboa/policyd/tests.py +4 -2
- modoboa/rspamd/tests.py +20 -0
- modoboa/templates/registration/twofactor_code_verify.html +1 -1
- modoboa/webmail/app_settings.py +37 -0
- modoboa/webmail/constants.py +21 -1
- modoboa/webmail/factories.py +19 -0
- modoboa/webmail/jobs.py +27 -0
- modoboa/webmail/lib/__init__.py +0 -2
- modoboa/webmail/lib/imapemail.py +9 -11
- modoboa/webmail/lib/imapheader.py +25 -13
- modoboa/webmail/lib/imaputils.py +51 -13
- modoboa/webmail/lib/sendmail.py +88 -105
- modoboa/webmail/lib/utils.py +109 -0
- modoboa/webmail/migrations/0001_initial.py +90 -0
- modoboa/webmail/migrations/__init__.py +0 -0
- modoboa/webmail/mocks.py +12 -3
- modoboa/webmail/models.py +102 -0
- modoboa/webmail/serializers.py +84 -4
- modoboa/webmail/tests/data.py +21 -0
- modoboa/webmail/tests/test_lib_imaputils.py +33 -0
- modoboa/webmail/tests/test_viewsets.py +108 -0
- modoboa/webmail/urls.py +5 -0
- modoboa/webmail/viewsets.py +39 -9
- {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/METADATA +16 -13
- {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/RECORD +269 -252
- {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/WHEEL +1 -1
- modoboa/admin/management/commands/handle_mailbox_operations.py +0 -103
- modoboa/core/management/commands/cleanlogs.py +0 -53
- modoboa/frontend_dist/assets/AccountLayout-APeC9bsN.js +0 -1
- modoboa/frontend_dist/assets/AccountPasswordSubForm-D4vB2yQK.js +0 -1
- modoboa/frontend_dist/assets/AccountView-CloBP1BY.js +0 -1
- modoboa/frontend_dist/assets/AddressBook-C03MXg3y.js +0 -1
- modoboa/frontend_dist/assets/AdminLayout-DFmyKOo6.js +0 -1
- modoboa/frontend_dist/assets/AlarmsView-CFhH0I5d.js +0 -1
- modoboa/frontend_dist/assets/AliasRecipientForm-CZ_SvjtG.js +0 -1
- modoboa/frontend_dist/assets/AuditTrailView-Cyq25Jle.js +0 -1
- modoboa/frontend_dist/assets/CalendarView-C_dSXRp9.js +0 -1
- modoboa/frontend_dist/assets/ChoiceField-BPhUvoyr.js +0 -1
- modoboa/frontend_dist/assets/ComposeEmailForm-D3yUbBJX.css +0 -1
- modoboa/frontend_dist/assets/ComposeEmailForm-Ns5SYs4J.js +0 -1
- modoboa/frontend_dist/assets/ComposeEmailView-DgUfiWEH.js +0 -1
- modoboa/frontend_dist/assets/ConfirmDialog-BMIg94-U.js +0 -1
- modoboa/frontend_dist/assets/ConnectedLayout-CSXdVJtV.js +0 -1
- modoboa/frontend_dist/assets/CreationForm-CaAZYATm.js +0 -1
- modoboa/frontend_dist/assets/DashboardView-DErmyUoy.js +0 -1
- modoboa/frontend_dist/assets/DomainsView-CC1EwRId.js +0 -1
- modoboa/frontend_dist/assets/EmailField-BFgga4zp.js +0 -1
- modoboa/frontend_dist/assets/EmailView-DPWTch_6.js +0 -1
- modoboa/frontend_dist/assets/EmptyLayout-DAw7fAab.js +0 -1
- modoboa/frontend_dist/assets/FiltersView-Cg9lkLw0.js +0 -1
- modoboa/frontend_dist/assets/ForwardEmailView-Dd1sxgaP.js +0 -1
- modoboa/frontend_dist/assets/IdentitiesView-CiHIQ9Qt.js +0 -1
- modoboa/frontend_dist/assets/InformationView-Cc0aBA5j.js +0 -1
- modoboa/frontend_dist/assets/MailboxView-DIVABvk5.css +0 -1
- modoboa/frontend_dist/assets/MailboxView-DplC0IXR.js +0 -5
- modoboa/frontend_dist/assets/MenuItems-efx2rqwT.js +0 -1
- modoboa/frontend_dist/assets/MessagesView-CesYYZ9f.js +0 -1
- modoboa/frontend_dist/assets/MigrationsView-DSBk8T0y.js +0 -1
- modoboa/frontend_dist/assets/ParametersView-B8W_PAiz.js +0 -1
- modoboa/frontend_dist/assets/ParametersView-Dsx2M_g9.js +0 -1
- modoboa/frontend_dist/assets/ProviderEditView-PEAr7MA1.js +0 -1
- modoboa/frontend_dist/assets/ProvidersView-CHvQf3Vv.js +0 -1
- modoboa/frontend_dist/assets/QuarantineLayout-BWEaBK48.js +0 -1
- modoboa/frontend_dist/assets/QuarantineView-BzjeDhTm.js +0 -1
- modoboa/frontend_dist/assets/ReplyEmailView-CwQ9jsce.js +0 -1
- modoboa/frontend_dist/assets/ResourcesForm-noC3AXd9.js +0 -1
- modoboa/frontend_dist/assets/SelfServiceLayout-DQgRMu0L.js +0 -1
- modoboa/frontend_dist/assets/SettingsView-DJTdIeRK.css +0 -1
- modoboa/frontend_dist/assets/SettingsView-Dgwpfd8O.js +0 -6
- modoboa/frontend_dist/assets/StatisticsView-BZkVSh5o.js +0 -1
- modoboa/frontend_dist/assets/TimeSerieChart-BXJwhTMO.js +0 -1
- modoboa/frontend_dist/assets/TimeSerieChart-C3XHmlRd.css +0 -1
- modoboa/frontend_dist/assets/UserLayout-CWK9ICfE.js +0 -1
- modoboa/frontend_dist/assets/VApp-CiIBWB_Q.js +0 -1
- modoboa/frontend_dist/assets/VAutocomplete-DcNqTIie.js +0 -1
- modoboa/frontend_dist/assets/VAutocomplete-hzGuLlUI.css +0 -1
- modoboa/frontend_dist/assets/VAvatar-BsHplcRP.js +0 -1
- modoboa/frontend_dist/assets/VBadge-CavP_E2g.js +0 -1
- modoboa/frontend_dist/assets/VCheckbox-CKW9lz5i.js +0 -1
- modoboa/frontend_dist/assets/VColorPicker-Bsrz8yif.js +0 -1
- modoboa/frontend_dist/assets/VDataTable-ocZo8ju0.js +0 -1
- modoboa/frontend_dist/assets/VDataTableServer-CJfpYXQW.js +0 -1
- modoboa/frontend_dist/assets/VDataTableVirtual-Cr8yw49k.js +0 -1
- modoboa/frontend_dist/assets/VDialog-CUMh3paI.js +0 -1
- modoboa/frontend_dist/assets/VExpansionPanels-CkwHiKsA.js +0 -1
- modoboa/frontend_dist/assets/VFileInput-D5qlksIG.js +0 -1
- modoboa/frontend_dist/assets/VForm-ClJU5x_v.js +0 -1
- modoboa/frontend_dist/assets/VInput-DhzSMFXh.js +0 -1
- modoboa/frontend_dist/assets/VMenu-B53a3gm6.js +0 -1
- modoboa/frontend_dist/assets/VMenu-BEipA1lw.css +0 -1
- modoboa/frontend_dist/assets/VPicker-B928ZVJQ.js +0 -1
- modoboa/frontend_dist/assets/VPicker-ClSXs6kv.css +0 -1
- modoboa/frontend_dist/assets/VProgressCircular-viI3jDXe.js +0 -1
- modoboa/frontend_dist/assets/VRadioGroup-C0bqFrYg.js +0 -1
- modoboa/frontend_dist/assets/VSelect-y0E5_vPn.js +0 -1
- modoboa/frontend_dist/assets/VSheet-DQkh_hsX.js +0 -1
- modoboa/frontend_dist/assets/VSpacer-CBqB9uSt.js +0 -1
- modoboa/frontend_dist/assets/VSwitch-D4xdR9jz.js +0 -1
- modoboa/frontend_dist/assets/VTabs-D2c0KeF2.js +0 -1
- modoboa/frontend_dist/assets/VTabs-NzpINroH.css +0 -1
- modoboa/frontend_dist/assets/VTextField-Cow3HZvI.css +0 -1
- modoboa/frontend_dist/assets/VTextField-DvvH1ciR.js +0 -1
- modoboa/frontend_dist/assets/VTextarea-DHtXtzqP.js +0 -1
- modoboa/frontend_dist/assets/VTextarea-DyGjqrlm.css +0 -1
- modoboa/frontend_dist/assets/VToolbar-CB2GrZpA.css +0 -1
- modoboa/frontend_dist/assets/VToolbar-pvLQtmbU.js +0 -1
- modoboa/frontend_dist/assets/VWindowItem-DErNPSH8.js +0 -1
- modoboa/frontend_dist/assets/WebmailLayout-BzW0LWYp.css +0 -1
- modoboa/frontend_dist/assets/WebmailLayout-D7J-QJ-0.js +0 -1
- modoboa/frontend_dist/assets/filter-BVvMTmPG.js +0 -1
- modoboa/frontend_dist/assets/global.store-Bha4Z76j.js +0 -1
- modoboa/frontend_dist/assets/importExport-EgijWlC1.js +0 -1
- modoboa/frontend_dist/assets/languages-Cge6pECg.js +0 -1
- modoboa/frontend_dist/assets/transports-BUSYxSF4.js +0 -1
- modoboa/frontend_dist/assets/webmail-HVg3ZHC0.js +0 -1
- modoboa/frontend_dist/assets/webmail.store-D-d88s4w.js +0 -1
- {modoboa-2.6.5.data → modoboa-2.7.0.data}/scripts/modoboa-admin.py +0 -0
- {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/entry_points.txt +0 -0
- {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/licenses/LICENSE +0 -0
- {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/top_level.txt +0 -0
modoboa/core/commands/deploy.py
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import getpass
|
|
4
4
|
import os
|
|
5
5
|
from os.path import isfile
|
|
6
|
+
import random
|
|
6
7
|
import shutil
|
|
7
8
|
import subprocess
|
|
8
9
|
import sys
|
|
@@ -259,6 +260,18 @@ class DeployCommand(Command):
|
|
|
259
260
|
shutil.copyfile(f"{self._templates_dir}/urls.py.tpl", f"{path}/urls.py")
|
|
260
261
|
os.mkdir(f"{parsed_args.name}/media")
|
|
261
262
|
|
|
263
|
+
hour = random.randint(0, 6)
|
|
264
|
+
tpl = self._render_template(
|
|
265
|
+
f"{self._templates_dir}/cron_config.py.tpl",
|
|
266
|
+
{
|
|
267
|
+
"minute": random.randint(1, 59),
|
|
268
|
+
"hour_start": hour,
|
|
269
|
+
"hour_end": hour + 12,
|
|
270
|
+
},
|
|
271
|
+
)
|
|
272
|
+
with open(f"{path}/cron_config.py", "w") as fp:
|
|
273
|
+
fp.write(tpl)
|
|
274
|
+
|
|
262
275
|
if isfile(f"{path}/settings.pyc"):
|
|
263
276
|
os.unlink(f"{path}/settings.pyc")
|
|
264
277
|
self._exec_django_command("migrate", parsed_args.name, "--noinput")
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from rq.cron import register
|
|
2
|
+
|
|
3
|
+
from django.conf import settings
|
|
4
|
+
|
|
5
|
+
from modoboa.amavis import jobs as amavis_jobs
|
|
6
|
+
from modoboa.calendars import jobs as calendars_jobs
|
|
7
|
+
from modoboa.core import jobs as core_jobs
|
|
8
|
+
from modoboa.admin import jobs as admin_jobs
|
|
9
|
+
from modoboa.maillog import jobs as maillog_jobs
|
|
10
|
+
from modoboa.webmail import jobs as webmail_jobs
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
register(core_jobs.clean_logs, queue_name="modoboa", cron="0 0 * * *")
|
|
14
|
+
|
|
15
|
+
register(
|
|
16
|
+
core_jobs.communicate_with_public_api,
|
|
17
|
+
queue_name="modoboa",
|
|
18
|
+
cron="{{ minute }} {{ hour_start }},{{ hour_end }} * * *",
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
register(admin_jobs.handle_mailbox_operations, queue_name="dovecot", cron="* * * * *")
|
|
22
|
+
register(admin_jobs.handle_dns_checks, queue_name="modoboa", cron="* * * * *")
|
|
23
|
+
|
|
24
|
+
register(maillog_jobs.logparser, queue_name="privileged", cron="*/5 * * * *")
|
|
25
|
+
register(maillog_jobs.update_statistics, queue_name="modoboa", cron="0 * * * *")
|
|
26
|
+
|
|
27
|
+
register(calendars_jobs.generate_rights, queue_name="privileged", cron="*/2 * * * *")
|
|
28
|
+
|
|
29
|
+
register(webmail_jobs.send_scheduled_messages, queue_name="modoboa", cron="* * * * *")
|
|
30
|
+
|
|
31
|
+
if "modoboa.amavis" in settings.MODOBOA_APPS:
|
|
32
|
+
register(amavis_jobs.qcleanup, queue_name="modoboa", cron="0 0 * * *")
|
|
33
|
+
register(amavis_jobs.amnotify, queue_name="modoboa", cron="0 12 * * *")
|
|
@@ -38,6 +38,14 @@ SITE_ID = 1
|
|
|
38
38
|
# The email address that error messages come from, such as those sent to ADMINS
|
|
39
39
|
#SERVER_EMAIL = 'webmaster@example.net'
|
|
40
40
|
|
|
41
|
+
# E-Mail client settings used for AutoDiscovery information served to clients
|
|
42
|
+
#
|
|
43
|
+
# Not used for Modoboa WebMail; configure that in the Modoboa admin settings.
|
|
44
|
+
#
|
|
45
|
+
# * HOSTNAME: External hostname that clients should connect to
|
|
46
|
+
# * SOCKET_TYPE: Actually the encryption settings
|
|
47
|
+
# * May be one of: 'SSL' (immediate TLS), 'STARTTLS' or 'plain' (bad)
|
|
48
|
+
# * PORT: TCP port that the client should use when connecting to the server
|
|
41
49
|
EMAIL_CLIENT_CONNECTION_SETTINGS = {
|
|
42
50
|
'imap': {
|
|
43
51
|
'HOSTNAME': '{{ allowed_host }}',
|
|
@@ -296,6 +304,19 @@ RQ_QUEUES = {
|
|
|
296
304
|
'DB': REDIS_QUOTA_DB,
|
|
297
305
|
'URL': REDIS_URL,
|
|
298
306
|
},
|
|
307
|
+
'dovecot': {
|
|
308
|
+
'HOST': REDIS_HOST,
|
|
309
|
+
'PORT': REDIS_PORT,
|
|
310
|
+
'DB': REDIS_QUOTA_DB,
|
|
311
|
+
'URL': REDIS_URL,
|
|
312
|
+
},
|
|
313
|
+
'privileged': {
|
|
314
|
+
'HOST': REDIS_HOST,
|
|
315
|
+
'PORT': REDIS_PORT,
|
|
316
|
+
'DB': REDIS_QUOTA_DB,
|
|
317
|
+
'URL': REDIS_URL,
|
|
318
|
+
},
|
|
319
|
+
|
|
299
320
|
}
|
|
300
321
|
|
|
301
322
|
# CACHE
|
modoboa/core/jobs.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""Async jobs definition."""
|
|
2
|
+
|
|
3
|
+
import datetime
|
|
4
|
+
import logging
|
|
5
|
+
|
|
6
|
+
from django.core.management import call_command
|
|
7
|
+
|
|
8
|
+
from modoboa.core.models import Log
|
|
9
|
+
from modoboa.maillog.models import Maillog
|
|
10
|
+
from modoboa.parameters import tools as param_tools
|
|
11
|
+
|
|
12
|
+
from django.utils import timezone
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger("modoboa.jobs")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def clean_logs():
|
|
18
|
+
log_maximum_age = param_tools.get_global_parameter("log_maximum_age")
|
|
19
|
+
logger.info(f"Deleting logs older than {log_maximum_age} days...")
|
|
20
|
+
limit = timezone.now() - datetime.timedelta(log_maximum_age)
|
|
21
|
+
Log.objects.filter(date_created__lt=limit).delete()
|
|
22
|
+
|
|
23
|
+
message_history_maximum_age = param_tools.get_global_parameter(
|
|
24
|
+
"message_history_maximum_age"
|
|
25
|
+
)
|
|
26
|
+
logger.info(
|
|
27
|
+
f"Deleting messages in history older than {message_history_maximum_age} days..."
|
|
28
|
+
)
|
|
29
|
+
limit = timezone.now() - datetime.timedelta(message_history_maximum_age)
|
|
30
|
+
Maillog.objects.filter(date__lt=limit).delete()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def communicate_with_public_api():
|
|
34
|
+
call_command("communicate_with_public_api")
|
|
@@ -174,7 +174,7 @@ class Command(BaseCommand):
|
|
|
174
174
|
oauth_authority_url = "/api/o"
|
|
175
175
|
if not options["relative_urls_in_config"]:
|
|
176
176
|
api_base_url = f"{base_uri}{api_base_url}"
|
|
177
|
-
api_doc_url = f"{base_uri}{
|
|
177
|
+
api_doc_url = f"{base_uri}{api_doc_url}"
|
|
178
178
|
oauth_authority_url = f"{base_uri}{oauth_authority_url}"
|
|
179
179
|
oauth_post_logout_redirect_uri = base_uri
|
|
180
180
|
else:
|
|
@@ -5,7 +5,10 @@ Contains weak hashers (the original ones) available with Modoboa.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import base64
|
|
8
|
+
|
|
8
9
|
import hashlib
|
|
10
|
+
from random import Random
|
|
11
|
+
import string
|
|
9
12
|
from typing import Optional
|
|
10
13
|
|
|
11
14
|
from django.utils.crypto import constant_time_compare
|
|
@@ -49,7 +52,7 @@ class PasswordHasher(metaclass=MetaHasher):
|
|
|
49
52
|
def __init__(self, target="local"):
|
|
50
53
|
self._target = target
|
|
51
54
|
|
|
52
|
-
def _encrypt(self, clearvalue: str, salt: Optional[str] = None) -> str:
|
|
55
|
+
def _encrypt(self, clearvalue: str, salt: Optional[str] = None) -> str:
|
|
53
56
|
raise NotImplementedError
|
|
54
57
|
|
|
55
58
|
def _b64encode(self, pwhash):
|
modoboa/core/tests/test_core.py
CHANGED
|
@@ -16,7 +16,6 @@ from django.urls import reverse
|
|
|
16
16
|
from django.utils import timezone
|
|
17
17
|
|
|
18
18
|
from modoboa.lib.tests import ModoTestCase, SimpleModoTestCase
|
|
19
|
-
from modoboa.maillog import factories as maillog_factories, models as maillog_models
|
|
20
19
|
from .. import factories, mocks, models
|
|
21
20
|
|
|
22
21
|
|
|
@@ -59,19 +58,6 @@ class ManagementCommandsTestCase(SimpleModoTestCase):
|
|
|
59
58
|
management.call_command("load_initial_data", "--admin-username", "modoadmin")
|
|
60
59
|
self.assertTrue(self.client.login(username="modoadmin", password="password"))
|
|
61
60
|
|
|
62
|
-
def test_clean_logs(self):
|
|
63
|
-
"""Run cleanlogs command."""
|
|
64
|
-
management.call_command("load_initial_data", "--no-frontend")
|
|
65
|
-
log1 = factories.LogFactory()
|
|
66
|
-
factories.LogFactory()
|
|
67
|
-
log1.date_created -= relativedelta(years=2)
|
|
68
|
-
log1.save(update_fields=["date_created"])
|
|
69
|
-
maillog_factories.MaillogFactory(date=timezone.now() - relativedelta(days=190))
|
|
70
|
-
maillog_factories.MaillogFactory()
|
|
71
|
-
management.call_command("cleanlogs")
|
|
72
|
-
self.assertEqual(models.Log.objects.count(), 1)
|
|
73
|
-
self.assertEqual(maillog_models.Maillog.objects.count(), 1)
|
|
74
|
-
|
|
75
61
|
def test_init_data_non_duplicate_client_creation(self):
|
|
76
62
|
"""Test that the load_initial_data command does not create duplicates
|
|
77
63
|
client for the frontend deployment."""
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Tests cases for RQ jobs."""
|
|
2
|
+
|
|
3
|
+
from dateutil.relativedelta import relativedelta
|
|
4
|
+
import httmock
|
|
5
|
+
|
|
6
|
+
from django.core import mail
|
|
7
|
+
from django.core import management
|
|
8
|
+
from django.utils import timezone
|
|
9
|
+
|
|
10
|
+
from modoboa.core import factories, jobs, mocks, models
|
|
11
|
+
from modoboa.lib.tests import SimpleModoTestCase
|
|
12
|
+
from modoboa.maillog import factories as maillog_factories, models as maillog_models
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class JobsTestCase(SimpleModoTestCase):
|
|
16
|
+
|
|
17
|
+
def test_clean_logs(self):
|
|
18
|
+
"""Check clean_logs job."""
|
|
19
|
+
management.call_command("load_initial_data", "--no-frontend")
|
|
20
|
+
log1 = factories.LogFactory()
|
|
21
|
+
factories.LogFactory()
|
|
22
|
+
log1.date_created -= relativedelta(years=2)
|
|
23
|
+
log1.save(update_fields=["date_created"])
|
|
24
|
+
maillog_factories.MaillogFactory(date=timezone.now() - relativedelta(days=190))
|
|
25
|
+
maillog_factories.MaillogFactory()
|
|
26
|
+
jobs.clean_logs()
|
|
27
|
+
self.assertEqual(models.Log.objects.count(), 1)
|
|
28
|
+
self.assertEqual(maillog_models.Maillog.objects.count(), 1)
|
|
29
|
+
|
|
30
|
+
def test_communicate_with_public_api(self):
|
|
31
|
+
"""Check that job starts fine."""
|
|
32
|
+
with httmock.HTTMock(
|
|
33
|
+
mocks.modo_api_instance_search,
|
|
34
|
+
mocks.modo_api_instance_create,
|
|
35
|
+
mocks.modo_api_instance_update,
|
|
36
|
+
mocks.modo_api_versions,
|
|
37
|
+
):
|
|
38
|
+
jobs.communicate_with_public_api()
|
|
39
|
+
self.assertEqual(models.LocalConfig.objects.first().api_pk, 100)
|
|
40
|
+
self.assertEqual(len(mail.outbox), 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as q}from"./ChoiceField-
|
|
1
|
+
import{C as q}from"./ChoiceField-DCr12shR.js";import{u as M,b as S,i as V,j as f,k as _,c as R,o as y,w as h,a as d,f as s,e as U,t as x,l as N,_ as C,A as D,n as j,m as Q,F as T,v as G}from"./index-jui3edpn.js";import{V as H,a as L}from"./VRow-83Qnr5iB.js";import{V as B}from"./VAlert-MDbeolOo.js";import{c as P}from"./VAvatar-CXV_FqpP.js";import{V as k,r as F}from"./VForm-fdQ5d-CH.js";import{_ as z}from"./AccountPasswordSubForm-PkFPblkR.js";import{E as I}from"./EmailField-KhhJYA4D.js";import{V as E}from"./VTextField-BPIvtrn4.js";import{V as $}from"./VSwitch-XumUl685.js";import{u as K}from"./domains.store-1U61jeCV.js";import{a as Y}from"./accounts-KUsk6LHW.js";import{V as J}from"./VSelect-BcmGFGif.js";const W={class:"headline"},X={class:"mt-4"},Ve={__name:"AccountRoleForm",props:{modelValue:{type:Object,default:null}},setup(g,{expose:w}){const i=M(),{$gettext:l}=S(),v=g,m=V(),c=f(()=>v.modelValue),a=f(()=>i.authUser),p=f(()=>{const r=b.value.find(n=>n.value===c.value.role);return r!==void 0?r.label:""}),e=f(()=>{const r=b.value.find(n=>n.value===c.value.role);return r!==void 0?r.help:""}),b=f(()=>a.value.role===_.SUPER_ADMIN?[...A,...o,...u,...t]:a.value.role===_.DOMAIN_ADMIN?[...A]:a.value.role===_.RESELLER?[...o,...A]:[]),A=[{label:l("Simple user"),value:_.USER,help:l("A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters.")}],o=[{label:l("Domain administrator"),value:_.DOMAIN_ADMIN,help:l("A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox.")}],u=[{label:l("Reseller"),value:_.RESELLER,help:l("An intermediate user who has the same privileges than a Domain administrator, plus the possibility to create domains and to assign resources.")}],t=[{label:l("Super administrator"),value:_.SUPER_ADMIN,help:l("A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features.")}];return w({vFormRef:m,roleLabel:p}),(r,n)=>(y(),R(k,{ref_key:"vFormRef",ref:m},{default:h(()=>[d(H,null,{default:h(()=>[d(L,{cols:"7"},{default:h(()=>[d(s(q),{modelValue:c.value.role,"onUpdate:modelValue":n[0]||(n[0]=O=>c.value.role=O),label:s(l)("Choose a role"),choices:b.value,"choices-per-line":2},null,8,["modelValue","label","choices"])]),_:1}),d(L,{cols:"5"},{default:h(()=>[d(B,{color:"primary",class:"mt-11 ml-4 rounded-lg"},{default:h(()=>[U("h3",W,x(p.value),1),U("p",X,x(e.value),1),d(P,{color:"white",class:"float-right",size:"large",icon:"mdi-help-circle-outline"})]),_:1})]),_:1})]),_:1})]),_:1},512))}},Z={class:"m-label"},ee={class:"m-label"},ae={class:"m-label"},he={__name:"AccountGeneralForm",props:{modelValue:{type:Object,default:null},editing:{type:Boolean,default:!1}},setup(g,{expose:w}){const{$gettext:i}=S(),l=M(),v=g,m=V(),c=V({}),a=f(()=>v.modelValue),p=f(()=>a.value.role===_.USER?i("Enter an email address"):i("Enter a simple username or an email address")),e=f(()=>a.value.role===_.USER?"email":"text");function b(){a.value.username.indexOf("@")!==-1&&(a.value.mailbox.full_address=a.value.username,a.value.mailbox.message_limit=null)}return w({vFormRef:m,formErrors:c}),(A,o)=>(y(),R(k,{ref_key:"vFormRef",ref:m},{default:h(()=>[U("label",Z,x(s(i)("Username")),1),d(I,{ref:"username",modelValue:a.value.username,"onUpdate:modelValue":[o[0]||(o[0]=u=>a.value.username=u),b],placeholder:p.value,type:e.value,rules:e.value==="email"?[s(F).required,s(F).email]:[s(F).required],role:a.value.role,"error-msg":c.value.value?c.value.value.username:[]},null,8,["modelValue","placeholder","type","rules","role","error-msg"]),U("label",ee,x(s(i)("First name")),1),d(E,{modelValue:a.value.first_name,"onUpdate:modelValue":o[1]||(o[1]=u=>a.value.first_name=u),autocomplete:"new-password",variant:"outlined",density:"compact"},null,8,["modelValue"]),U("label",ae,x(s(i)("Last name")),1),d(E,{modelValue:a.value.last_name,"onUpdate:modelValue":o[2]||(o[2]=u=>a.value.last_name=u),autocomplete:"new-password",variant:"outlined",density:"compact"},null,8,["modelValue"]),s(l).authUser.pk!==a.value.pk?(y(),R(z,{key:0,ref:"passwordForm",modelValue:a.value,"onUpdate:modelValue":o[3]||(o[3]=u=>a.value=u),editing:g.editing,"form-errors":c.value},null,8,["modelValue","editing","form-errors"])):(y(),R(B,{key:1,type:"info",variant:"tonal",class:"py-2"},{default:h(()=>[N(x(s(i)("You can update your password from the Account section")),1)]),_:1})),d($,{modelValue:a.value.is_active,"onUpdate:modelValue":o[4]||(o[4]=u=>a.value.is_active=u),label:s(i)("Enabled"),density:"compact",color:"primary"},null,8,["modelValue","label"])]),_:1},512))}},le={class:"m-label"},oe={class:"m-label"},te={__name:"AccountMailboxForm",props:{modelValue:{type:Object,default:null}},emits:["update:modelValue"],setup(g,{expose:w,emit:i}){const{$gettext:l}=S(),v=i,m=g,c=K(),a=f(()=>c.domains),p=V(),e=V({mailbox:{}});D(m.modelValue,t=>{t?(e.value={...t},e.value.role===_.USER&&(e.value.mailbox||(e.value.mailbox={}),e.value.mailbox.full_address=e.value.username),e.value.mailbox.message_limit===""&&(e.value.mailbox.message_limit=null)):e.value={mailbox:{}}},{immediate:!0}),D(e,t=>{v("update:modelValue",t)},{deep:!0});const b=f(()=>{const t=e.value.mailbox.full_address;if(t&&t.indexOf("@")!==-1){const r=a.value.find(n=>n.name===t.split("@")[1]);if(r)return parseInt(r.default_mailbox_quota)}}),A=f(()=>{let t=l("Use domain default value");return b.value!==void 0&&(b.value===0?t+=` (${l("unlimited")})`:t+=` (${b.value} MB)`),t});function o(t){t&&delete e.value.mailbox.quota}function u(t){t===""&&(e.value.mailbox.message_limit=null)}return w({vFormRef:p}),(t,r)=>(y(),R(k,{ref_key:"vFormRef",ref:p},{default:h(()=>[U("label",le,x(s(l)("Quota")),1),d($,{modelValue:e.value.mailbox.use_domain_quota,"onUpdate:modelValue":[r[0]||(r[0]=n=>e.value.mailbox.use_domain_quota=n),o],label:A.value,color:"primary"},null,8,["modelValue","label"]),e.value.mailbox.use_domain_quota?j("",!0):(y(),R(E,{key:0,modelValue:e.value.mailbox.quota,"onUpdate:modelValue":r[1]||(r[1]=n=>e.value.mailbox.quota=n),placeholder:s(l)("Ex: 10MB. Leave empty for no limit"),hint:s(l)("Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."),"persistent-hint":"",variant:"outlined",density:"compact"},null,8,["modelValue","placeholder","hint"])),U("label",oe,x(s(l)("Daily message sending limit")),1),d(E,{modelValue:e.value.mailbox.message_limit,"onUpdate:modelValue":[r[2]||(r[2]=n=>e.value.mailbox.message_limit=n),u],placeholder:s(l)("Leave empty for no limit"),hint:s(l)("Number of messages this mailbox can send per day. Leave empty for no limit."),"persistent-hint":"",variant:"outlined",density:"compact",rules:[s(F).numericOrNull]},null,8,["modelValue","placeholder","hint","rules"]),d($,{modelValue:e.value.mailbox.is_send_only,"onUpdate:modelValue":r[3]||(r[3]=n=>e.value.mailbox.is_send_only=n),label:s(l)("Send only account"),density:"compact",color:"primary"},null,8,["modelValue","label"])]),_:1},512))}},xe=C(te,[["__scopeId","data-v-41714779"]]),ye={__name:"AccountAliasForm",props:{modelValue:{type:Object,default:null}},setup(g,{expose:w}){const{$gettext:i}=S(),l=g,v=f(()=>l.modelValue),m=V(""),c=V(),a=V(),p=V(!1),e=V([]);async function b(){if(e.value=[],p.value=!0,v.value.aliases.indexOf(m.value)!==-1){e.value=[i("Alias already added")],m.value="",p.value=!1;return}try{await Y.validate({aliases:[m.value],mailbox:v.value.mailbox}),v.value.aliases.push(m.value),m.value="",a.value.resetValidation()}catch(o){o.response.data.aliases?o.response.data.aliases:o.response.data.non_field_errors&&o.response.data.non_field_errors}finally{p.value=!1}}function A(o){v.value.aliases.splice(o,1)}return w({vFormRef:a}),(o,u)=>(y(),R(k,{ref_key:"vFormRef",ref:a},{default:h(()=>[d(s(I),{ref_key:"aliasField",ref:c,modelValue:m.value,"onUpdate:modelValue":u[0]||(u[0]=t=>m.value=t),placeholder:s(i)("Start typing a name here..."),hint:s(i)("Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."),"persistent-hint":"",loading:p.value,"error-msg":e.value,onDomainSelected:b},null,8,["modelValue","placeholder","hint","loading","error-msg"]),(y(!0),Q(T,null,G(v.value.aliases,(t,r)=>(y(),R(J,{key:r,class:"mr-2 mt-2",closable:"","onClick:close":n=>A(r)},{default:h(()=>[N(x(t),1)]),_:2},1032,["onClick:close"]))),128))]),_:1},512))}};export{xe as A,ye as _,he as a,Ve as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as ee,h as c,c as m,o as t,w as e,e as _,a as l,t as s,f as n,b as W,u as le,n as ae,B as oe,q as te,i as D,j as I,d as se,z as ue,g as re,l as y,m as V,k as f,F as O,_ as ne}from"./index-BjibLozh.js";import{b as de,a as ie,A as me,_ as fe}from"./AccountAliasForm-B-hTKSFr.js";import{r as ce,V as _e}from"./VForm-ClJU5x_v.js";import{V as ve}from"./VAutocomplete-DcNqTIie.js";import{V as H}from"./VTextField-DvvH1ciR.js";import{u as X}from"./language.store-DGuI8jG0.js";import{_ as pe}from"./ResourcesForm-noC3AXd9.js";import{L as ge}from"./LoadingData-CnQ_aVqa.js";import{a as J}from"./accounts-BZBqbAmd.js";import{p as ye}from"./parameters-DJdlq9sh.js";import{u as Ve}from"./permissions-CgFJFhCp.js";import{d as w,c as C,V as K}from"./VAvatar-BsHplcRP.js";import{V as h,c as A,a as E,b as be}from"./VExpansionPanels-CkwHiKsA.js";import{V as v,a as i}from"./VRow-DyK_Mj7R.js";import{V as ke,a as xe}from"./VToolbar-pvLQtmbU.js";import"./ChoiceField-BPhUvoyr.js";import"./VAlert-Buv8Z5G4.js";import"./VProgressCircular-viI3jDXe.js";import"./tag-CvrHE14f.js";import"./AccountPasswordSubForm-D4vB2yQK.js";import"./VSwitch-D4xdR9jz.js";import"./VInput-DhzSMFXh.js";import"./VSelectionControl-Dkms9_P5.js";import"./VMenu-B53a3gm6.js";import"./ssrBoot-ChTB-PYP.js";import"./EmailField-BFgga4zp.js";import"./domains.store-a9Y5UlDV.js";import"./domains-CDE4_LDF.js";import"./VSelect-y0E5_vPn.js";import"./VCheckboxBtn-B5evxN9K.js";import"./filter-BVvMTmPG.js";import"./languages-Cge6pECg.js";import"./VContainer-DY9021j4.js";/* empty css */const Fe={class:"m-label"},we={class:"m-label"},he={class:"m-label"},Ae={__name:"AccountProfileForm",props:{modelValue:{type:Object},modelModifiers:{}},emits:["update:modelValue"],setup(T,{expose:x}){const p=ee(T,"modelValue"),d=X(),U=c(""),$=c();return x({vFormRef:$}),(b,g)=>(t(),m(_e,{ref_key:"vFormRef",ref:$},{default:e(()=>[_("label",Fe,s(b.$gettext("Language")),1),l(ve,{modelValue:p.value.language,"onUpdate:modelValue":g[0]||(g[0]=k=>p.value.language=k),items:n(d).availableLanguages,"item-title":"label","item-value":"code",variant:"outlined",density:"compact","error-messages":U.value},null,8,["modelValue","items","error-messages"]),_("label",we,s(b.$gettext("Phone number")),1),l(H,{modelValue:p.value.phone_number,"onUpdate:modelValue":g[1]||(g[1]=k=>p.value.phone_number=k),variant:"outlined",density:"compact"},null,8,["modelValue"]),_("label",he,s(b.$gettext("Secondary email")),1),l(H,{modelValue:p.value.secondary_email,"onUpdate:modelValue":g[2]||(g[2]=k=>p.value.secondary_email=k),variant:"outlined",density:"compact",rules:[n(ce).emailOrNull]},null,8,["modelValue","rules"])]),_:1},512))}},Ee={key:1},Ue={key:0},$e={key:0},Re={class:"mr-2"},Se={class:"mr-2"},Ne={key:0},Le={class:"mr-2"},Pe={key:0},Ce={class:"mr-2"},Te={class:"mr-2"},Be={class:"mr-2"},Me={key:0},je={class:"mr-2"},De={key:0},Ie={class:"mr-2"},Oe={class:"mr-2"},qe={class:"mt-4 d-flex justify-end"},Ge={__name:"AccountEditForm",async setup(T){let x,p;const{$gettext:d}=W(),U=le(),{displayNotification:$}=ae(),b=X(),g=oe(),k=te(),{canSetRole:B}=Ve(),a=c({pk:g.params.id}),R=D(()=>a.value.username&&a.value.username.indexOf("@")!==-1),M=D(()=>{const o=j.value.params&&j.value.params.enable_admin_limits&&a.value.role!==I.USER&&a.value.role!==I.SUPER_ADMIN;return o===void 0?!1:o}),j=c({}),S=c(0),F=c(!1),N=c(!1),L=c(),q=c(),G=c(),Q=c(),P=c(),z=c(),Y=D(()=>{const o={roleForm:L,generalForm:q,profileForm:z};return R.value&&(o.aliasForm=Q,o.mailboxForm=G),M.value&&(o.resourcesForm=P),o});async function Z(){N.value=!1,S.value=[];for(const[o,r]of Object.entries(Y.value))if(r.value!=null){const{valid:u}=await r.value.vFormRef.validate();u||(N.value=!0,S.value.push(o))}if(!N.value){F.value=!0;try{const o={...a.value};R.value?o.mailbox.full_address=o.username:o.mailbox&&delete o.mailbox.full_address,o.new_password&&(o.password=o.new_password,delete o.new_password,delete o.password_confirmation),M.value&&P.value!==null&&(o.resources=P.value.getPayload()),o.aliases===null&&delete o.aliases,B.value||(a.value.pk===U.authUser.pk?o.role=U.authUser.role:o.role=I.USER),await J.patch(a.value.pk,o),$({msg:d("Account updated")}),k.push({name:"AccountDetail",params:{id:g.params.id}})}finally{F.value=!1}}}return se(()=>{J.get(g.params.id).then(o=>{a.value=o.data,F.value=!1}),B.value&&ye.getGlobalApplication("limits").then(o=>{j.value=o.data})}),ue(a,()=>{delete a.value.domains,a.value.mailbox===null&&delete a.value.mailbox},{deep:!0}),b.loaded||([x,p]=re(()=>b.getLanguages()),await x,p()),(o,r)=>F.value?(t(),m(ge,{key:0})):(t(),y("div",Ee,[l(be,{modelValue:S.value,"onUpdate:modelValue":r[6]||(r[6]=u=>S.value=u),multiple:N.value},{default:e(()=>[n(B)?(t(),m(h,{key:0,eager:"",value:"roleForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(v,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Role")),1)]),_:1}),l(i,{cols:"8",class:"text-medium-emphasis"},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",Ue)):(t(),m(v,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[L.value?(t(),m(i,{key:0,cols:"6"},{default:e(()=>[f(s(L.value.roleLabel),1)]),_:1})):V("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(de,{ref_key:"roleForm",ref:L,modelValue:a.value,"onUpdate:modelValue":r[0]||(r[0]=u=>a.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):V("",!0),l(h,{eager:"",value:"generalForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(v,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Account")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",$e)):(t(),m(v,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l(i,{cols:"6"},{default:e(()=>[_("div",Re,s(n(d)("Username:"))+" "+s(a.value.username),1)]),_:1}),l(i,{cols:"6"},{default:e(()=>[_("div",Se,[f(s(n(d)("Enabled"))+" ",1),a.value.is_active?(t(),m(C,{key:0,color:"success"},{default:e(()=>[...r[8]||(r[8]=[f("mdi-check-circle-outline",-1)])]),_:1})):(t(),m(C,{key:1},{default:e(()=>[...r[9]||(r[9]=[f("mdi-close-circle-outline",-1)])]),_:1}))])]),_:1})]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(ie,{ref_key:"generalForm",ref:q,modelValue:a.value,"onUpdate:modelValue":r[1]||(r[1]=u=>a.value=u),editing:""},null,8,["modelValue"])]),_:1})]),_:1}),l(h,{eager:"",value:"profileForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(v,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Profile")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",Ne)):(t(),m(v,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l(i,{cols:"6"},{default:e(()=>[_("div",Le,s(n(d)("Language:"))+" "+s(n(b).getLanguageLabel(a.value.language)),1)]),_:1})]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(Ae,{ref_key:"profileForm",ref:z,modelValue:a.value,"onUpdate:modelValue":r[2]||(r[2]=u=>a.value=u)},null,8,["modelValue"])]),_:1})]),_:1}),R.value?(t(),m(h,{key:1,eager:"",value:"mailboxForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(v,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Mailbox")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",Pe)):(t(),m(v,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[a.value.mailbox?(t(),y(O,{key:0},[a.value.mailbox.use_domain_quota?(t(),m(i,{key:0,cols:"6"},{default:e(()=>[_("div",Ce,s(n(d)("Quota: "))+" "+s(n(d)("domain's default value")),1)]),_:1})):(t(),m(i,{key:1,cols:"6"},{default:e(()=>[_("div",Te,s(n(d)("Quota: "))+" "+s(a.value.mailbox.quota),1)]),_:1})),l(i,{cols:"6"},{default:e(()=>[_("div",Be,[f(s(n(d)("Send only"))+" ",1),a.value.mailbox.is_send_only?(t(),m(C,{key:0,color:"success"},{default:e(()=>[...r[10]||(r[10]=[f("mdi-check-circle-outline",-1)])]),_:1})):(t(),m(C,{key:1},{default:e(()=>[...r[11]||(r[11]=[f("mdi-close-circle-outline",-1)])]),_:1}))])]),_:1})],64)):V("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(me,{ref_key:"mailboxForm",ref:G,modelValue:a.value,"onUpdate:modelValue":r[3]||(r[3]=u=>a.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):V("",!0),R.value?(t(),m(h,{key:2,eager:"",value:"aliasForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(v,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Alias")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",Me)):(t(),m(v,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[a.value.aliases?(t(),m(i,{key:0,cols:"6"},{default:e(()=>[_("div",je,s(n(d)("Number of associated alias:"))+" "+s(a.value.aliases.length),1)]),_:1})):V("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(fe,{ref_key:"aliasForm",ref:Q,modelValue:a.value,"onUpdate:modelValue":r[4]||(r[4]=u=>a.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):V("",!0),M.value?(t(),m(h,{key:3,eager:"",value:"resourcesForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(v,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Resources")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",De)):(t(),m(v,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[a.value.resources!=null&&a.value.resources.length==2?(t(),y(O,{key:0},[l(i,{cols:"6"},{default:e(()=>[_("div",Ie,s(n(d)("Number of allowed mailboxes:"))+" "+s(a.value.resources[0].max_value),1)]),_:1}),l(i,{cols:"6"},{default:e(()=>[_("div",Oe,s(n(d)("Number of allowed mailbox aliases:"))+" "+s(a.value.resources[1].max_value),1)]),_:1})],64)):V("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(pe,{ref_key:"resourcesForm",ref:P,modelValue:a.value.resources,"onUpdate:modelValue":r[5]||(r[5]=u=>a.value.resources=u)},null,8,["modelValue"])]),_:1})]),_:1})):V("",!0)]),_:1},8,["modelValue","multiple"]),_("div",qe,[l(K,{loading:F.value,variant:"outlined",onClick:r[7]||(r[7]=u=>o.$router.go(-1))},{default:e(()=>[f(s(n(d)("Cancel")),1)]),_:1},8,["loading"]),l(K,{class:"ml-4",color:"primary darken-1",variant:"outlined",loading:F.value,onClick:Z},{default:e(()=>[f(s(n(d)("Save")),1)]),_:1},8,["loading"])])]))}},Qe={__name:"AccountEditView",setup(T){const{$gettext:x}=W();return(p,d)=>(t(),y(O,null,[l(ke,{flat:""},{default:e(()=>[l(xe,null,{default:e(()=>[f(s(n(x)("Edit account")),1)]),_:1})]),_:1}),l(Ge)],64))}},Al=ne(Qe,[["__scopeId","data-v-4019c7f8"]]);export{Al as default};
|
|
1
|
+
import{B as ee,i as c,c as m,o as t,w as e,e as _,a as l,t as s,f as n,b as W,u as le,p as ae,C as oe,s as te,j as D,k as I,d as se,A as ue,g as re,m as y,n as V,l as f,F as O,_ as ne}from"./index-jui3edpn.js";import{b as de,a as ie,A as me,_ as fe}from"./AccountAliasForm-DO6DwfjE.js";import{r as ce,V as _e}from"./VForm-fdQ5d-CH.js";import{V as pe}from"./VAutocomplete-CQsWYWNX.js";import{V as H}from"./VTextField-BPIvtrn4.js";import{u as X}from"./language.store-OcfdXL_-.js";import{_ as ve}from"./ResourcesForm-FWxrmVwo.js";import{L as ge}from"./LoadingData-C2txD49L.js";import{a as J}from"./accounts-KUsk6LHW.js";import{p as ye}from"./parameters-DMIAQ7cd.js";import{u as Ve}from"./permissions-CrpE0b4w.js";import{d as w,c as C,V as K}from"./VAvatar-CXV_FqpP.js";import{V as h,c as A,a as E,b as be}from"./VExpansionPanels-CaIvk9iF.js";import{V as p,a as i}from"./VRow-83Qnr5iB.js";import{V as ke,a as xe}from"./VToolbar-CB6wwtYc.js";import"./ChoiceField-DCr12shR.js";import"./VAlert-MDbeolOo.js";import"./VProgressCircular-DRw_-iNj.js";import"./tag-WF93n81Q.js";import"./AccountPasswordSubForm-PkFPblkR.js";import"./VSwitch-XumUl685.js";import"./VInput-BwHvhzAe.js";import"./VSelectionControl-Cqi1xt-q.js";import"./VMenu-BpmJf4X2.js";import"./ssrBoot-B7cr7q9U.js";import"./EmailField-KhhJYA4D.js";import"./domains.store-1U61jeCV.js";import"./domains-Du64lcXT.js";import"./VSelect-BcmGFGif.js";import"./VCheckboxBtn-B0mIT3E0.js";import"./filter-Dihm6o59.js";import"./languages-CF8hxo7x.js";import"./VContainer-Cn-vKB3s.js";/* empty css */const Fe={class:"m-label"},we={class:"m-label"},he={class:"m-label"},Ae={__name:"AccountProfileForm",props:{modelValue:{type:Object},modelModifiers:{}},emits:["update:modelValue"],setup(T,{expose:x}){const v=ee(T,"modelValue"),d=X(),U=c(""),$=c();return x({vFormRef:$}),(b,g)=>(t(),m(_e,{ref_key:"vFormRef",ref:$},{default:e(()=>[_("label",Fe,s(b.$gettext("Language")),1),l(pe,{modelValue:v.value.language,"onUpdate:modelValue":g[0]||(g[0]=k=>v.value.language=k),items:n(d).availableLanguages,"item-title":"label","item-value":"code",variant:"outlined",density:"compact","error-messages":U.value},null,8,["modelValue","items","error-messages"]),_("label",we,s(b.$gettext("Phone number")),1),l(H,{modelValue:v.value.phone_number,"onUpdate:modelValue":g[1]||(g[1]=k=>v.value.phone_number=k),variant:"outlined",density:"compact"},null,8,["modelValue"]),_("label",he,s(b.$gettext("Secondary email")),1),l(H,{modelValue:v.value.secondary_email,"onUpdate:modelValue":g[2]||(g[2]=k=>v.value.secondary_email=k),variant:"outlined",density:"compact",rules:[n(ce).emailOrNull]},null,8,["modelValue","rules"])]),_:1},512))}},Ee={key:1},Ue={key:0},$e={key:0},Re={class:"mr-2"},Se={class:"mr-2"},Ne={key:0},Le={class:"mr-2"},Pe={key:0},Ce={class:"mr-2"},Te={class:"mr-2"},Be={class:"mr-2"},Me={key:0},je={class:"mr-2"},De={key:0},Ie={class:"mr-2"},Oe={class:"mr-2"},qe={class:"mt-4 d-flex justify-end"},Ge={__name:"AccountEditForm",async setup(T){let x,v;const{$gettext:d}=W(),U=le(),{displayNotification:$}=ae(),b=X(),g=oe(),k=te(),{canSetRole:B}=Ve(),a=c({pk:g.params.id}),R=D(()=>a.value.username&&a.value.username.indexOf("@")!==-1),M=D(()=>{const o=j.value.params&&j.value.params.enable_admin_limits&&a.value.role!==I.USER&&a.value.role!==I.SUPER_ADMIN;return o===void 0?!1:o}),j=c({}),S=c(0),F=c(!1),N=c(!1),L=c(),q=c(),G=c(),Q=c(),P=c(),z=c(),Y=D(()=>{const o={roleForm:L,generalForm:q,profileForm:z};return R.value&&(o.aliasForm=Q,o.mailboxForm=G),M.value&&(o.resourcesForm=P),o});async function Z(){N.value=!1,S.value=[];for(const[o,r]of Object.entries(Y.value))if(r.value!=null){const{valid:u}=await r.value.vFormRef.validate();u||(N.value=!0,S.value.push(o))}if(!N.value){F.value=!0;try{const o={...a.value};R.value?o.mailbox.full_address=o.username:o.mailbox&&delete o.mailbox.full_address,o.new_password&&(o.password=o.new_password,delete o.new_password,delete o.password_confirmation),M.value&&P.value!==null&&(o.resources=P.value.getPayload()),o.aliases===null&&delete o.aliases,B.value||(a.value.pk===U.authUser.pk?o.role=U.authUser.role:o.role=I.USER),await J.patch(a.value.pk,o),$({msg:d("Account updated")}),k.push({name:"AccountDetail",params:{id:g.params.id}})}finally{F.value=!1}}}return se(()=>{J.get(g.params.id).then(o=>{a.value=o.data,F.value=!1}),B.value&&ye.getGlobalApplication("limits").then(o=>{j.value=o.data})}),ue(a,()=>{delete a.value.domains,a.value.mailbox===null&&delete a.value.mailbox},{deep:!0}),b.loaded||([x,v]=re(()=>b.getLanguages()),await x,v()),(o,r)=>F.value?(t(),m(ge,{key:0})):(t(),y("div",Ee,[l(be,{modelValue:S.value,"onUpdate:modelValue":r[6]||(r[6]=u=>S.value=u),multiple:N.value},{default:e(()=>[n(B)?(t(),m(h,{key:0,eager:"",value:"roleForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(p,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Role")),1)]),_:1}),l(i,{cols:"8",class:"text-medium-emphasis"},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",Ue)):(t(),m(p,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[L.value?(t(),m(i,{key:0,cols:"6"},{default:e(()=>[f(s(L.value.roleLabel),1)]),_:1})):V("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(de,{ref_key:"roleForm",ref:L,modelValue:a.value,"onUpdate:modelValue":r[0]||(r[0]=u=>a.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):V("",!0),l(h,{eager:"",value:"generalForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(p,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Account")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",$e)):(t(),m(p,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l(i,{cols:"6"},{default:e(()=>[_("div",Re,s(n(d)("Username:"))+" "+s(a.value.username),1)]),_:1}),l(i,{cols:"6"},{default:e(()=>[_("div",Se,[f(s(n(d)("Enabled"))+" ",1),a.value.is_active?(t(),m(C,{key:0,color:"success"},{default:e(()=>[...r[8]||(r[8]=[f("mdi-check-circle-outline",-1)])]),_:1})):(t(),m(C,{key:1},{default:e(()=>[...r[9]||(r[9]=[f("mdi-close-circle-outline",-1)])]),_:1}))])]),_:1})]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(ie,{ref_key:"generalForm",ref:q,modelValue:a.value,"onUpdate:modelValue":r[1]||(r[1]=u=>a.value=u),editing:""},null,8,["modelValue"])]),_:1})]),_:1}),l(h,{eager:"",value:"profileForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(p,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Profile")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",Ne)):(t(),m(p,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l(i,{cols:"6"},{default:e(()=>[_("div",Le,s(n(d)("Language:"))+" "+s(n(b).getLanguageLabel(a.value.language)),1)]),_:1})]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(Ae,{ref_key:"profileForm",ref:z,modelValue:a.value,"onUpdate:modelValue":r[2]||(r[2]=u=>a.value=u)},null,8,["modelValue"])]),_:1})]),_:1}),R.value?(t(),m(h,{key:1,eager:"",value:"mailboxForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(p,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Mailbox")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",Pe)):(t(),m(p,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[a.value.mailbox?(t(),y(O,{key:0},[a.value.mailbox.use_domain_quota?(t(),m(i,{key:0,cols:"6"},{default:e(()=>[_("div",Ce,s(n(d)("Quota: "))+" "+s(n(d)("domain's default value")),1)]),_:1})):(t(),m(i,{key:1,cols:"6"},{default:e(()=>[_("div",Te,s(n(d)("Quota: "))+" "+s(a.value.mailbox.quota),1)]),_:1})),l(i,{cols:"6"},{default:e(()=>[_("div",Be,[f(s(n(d)("Send only"))+" ",1),a.value.mailbox.is_send_only?(t(),m(C,{key:0,color:"success"},{default:e(()=>[...r[10]||(r[10]=[f("mdi-check-circle-outline",-1)])]),_:1})):(t(),m(C,{key:1},{default:e(()=>[...r[11]||(r[11]=[f("mdi-close-circle-outline",-1)])]),_:1}))])]),_:1})],64)):V("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(me,{ref_key:"mailboxForm",ref:G,modelValue:a.value,"onUpdate:modelValue":r[3]||(r[3]=u=>a.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):V("",!0),R.value?(t(),m(h,{key:2,eager:"",value:"aliasForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(p,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Alias")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",Me)):(t(),m(p,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[a.value.aliases?(t(),m(i,{key:0,cols:"6"},{default:e(()=>[_("div",je,s(n(d)("Number of associated alias:"))+" "+s(a.value.aliases.length),1)]),_:1})):V("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(fe,{ref_key:"aliasForm",ref:Q,modelValue:a.value,"onUpdate:modelValue":r[4]||(r[4]=u=>a.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):V("",!0),M.value?(t(),m(h,{key:3,eager:"",value:"resourcesForm"},{default:e(()=>[l(A,null,{default:e(({expanded:u})=>[l(p,{"no-gutters":""},{default:e(()=>[l(i,{cols:"4"},{default:e(()=>[f(s(n(d)("Resources")),1)]),_:1}),l(i,{cols:"8",class:""},{default:e(()=>[l(w,{"leave-absolute":""},{default:e(()=>[u?(t(),y("span",De)):(t(),m(p,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[a.value.resources!=null&&a.value.resources.length==2?(t(),y(O,{key:0},[l(i,{cols:"6"},{default:e(()=>[_("div",Ie,s(n(d)("Number of allowed mailboxes:"))+" "+s(a.value.resources[0].max_value),1)]),_:1}),l(i,{cols:"6"},{default:e(()=>[_("div",Oe,s(n(d)("Number of allowed mailbox aliases:"))+" "+s(a.value.resources[1].max_value),1)]),_:1})],64)):V("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),l(E,null,{default:e(()=>[l(ve,{ref_key:"resourcesForm",ref:P,modelValue:a.value.resources,"onUpdate:modelValue":r[5]||(r[5]=u=>a.value.resources=u)},null,8,["modelValue"])]),_:1})]),_:1})):V("",!0)]),_:1},8,["modelValue","multiple"]),_("div",qe,[l(K,{loading:F.value,variant:"outlined",onClick:r[7]||(r[7]=u=>o.$router.go(-1))},{default:e(()=>[f(s(n(d)("Cancel")),1)]),_:1},8,["loading"]),l(K,{class:"ml-4",color:"primary darken-1",variant:"outlined",loading:F.value,onClick:Z},{default:e(()=>[f(s(n(d)("Save")),1)]),_:1},8,["loading"])])]))}},Qe={__name:"AccountEditView",setup(T){const{$gettext:x}=W();return(v,d)=>(t(),y(O,null,[l(ke,{flat:""},{default:e(()=>[l(xe,null,{default:e(()=>[f(s(n(x)("Edit account")),1)]),_:1})]),_:1}),l(Ge)],64))}},Al=ne(Qe,[["__scopeId","data-v-4019c7f8"]]);export{Al as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as p,b as c,i as u,j as a,c as l,o as f}from"./index-jui3edpn.js";import{_}from"./ConnectedLayout-BP8pO27H.js";import{p as d}from"./parameters-DMIAQ7cd.js";import"./theme-_0oOYChG.js";import"./VContainer-Cn-vKB3s.js";/* empty css */import"./tag-WF93n81Q.js";import"./VApp-DM1KLQfQ.js";import"./layout-DOO7TRTJ.js";import"./ssrBoot-B7cr7q9U.js";import"./logos-Dz2Gzei-.js";import"./layout.store-C0g-piJn.js";import"./VAvatar-CXV_FqpP.js";import"./VProgressCircular-DRw_-iNj.js";import"./VMenu-BpmJf4X2.js";import"./VBadge-7tDx7aI3.js";import"./VCard-CBtX8JF-.js";import"./VRow-83Qnr5iB.js";import"./VSheet-C3MaHhtw.js";const P={__name:"AccountLayout",setup(h){const i=p(),{$gettext:o}=c(),r=u([]),m=a(()=>i.authUser),n=a(()=>{const t=[],s={contacts:"mdi-contacts-outline",webmail:"mdi-at",amavis:"mdi-server-security"};if(t.push({text:o("Settings"),to:{name:"AccountSettings"},icon:"mdi-cog"}),m.value.mailbox){t.push({text:o("Filters"),to:{name:"AccountFilters"},icon:"mdi-filter"});for(const e of r.value)t.push({icon:s[e.name],text:e.label,to:{name:"AccountParametersEdit",params:{app:e.name}}})}return t});return d.getUserApplications().then(t=>{r.value=t.data}),(t,s)=>(f(),l(_,{"menu-items":n.value},null,8,["menu-items"]))}};export{P as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as P,p as _,j as b,m,o as n,n as p,a as o,F as V,e as v,t as y,f as l,w as u,c as h}from"./index-jui3edpn.js";import{a as E}from"./accounts-KUsk6LHW.js";import{r as c}from"./VForm-fdQ5d-CH.js";import{V as w}from"./VTextField-BPIvtrn4.js";import{a as g,V as R}from"./VRow-83Qnr5iB.js";import{V as S}from"./VSwitch-XumUl685.js";import{V as j}from"./VAlert-MDbeolOo.js";import{V as q}from"./VAvatar-CXV_FqpP.js";const A={class:"m-label"},F={class:"text-white mr-4"},H={__name:"AccountPasswordSubForm",props:{modelValue:{type:Object,default:null},withPasswordCheck:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},editing:{type:Boolean,default:!1},formErrors:{type:Object,required:!1,default:()=>{}}},setup(s){const{$gettext:t}=P(),k=_(),r=s,e=b(()=>r.modelValue),f=b(()=>!r.disabled&&(!r.editing||e.value.password)),x=i=>i===e.value.new_password||t("Password mismatch");function C(){navigator.clipboard.writeText(e.value.new_password).then(()=>{k.displayNotification({msg:t("Password copied to clipboard")})})}function B(i){i?E.getRandomPassword().then(a=>{e.value.new_password=a.data.password}):(e.value.new_password=null,e.value.password_confirmation=null)}return(i,a)=>(n(),m("div",null,[s.withPasswordCheck?(n(),m(V,{key:0},[v("label",A,y(l(t)("Current password")),1),o(w,{modelValue:e.value.password,"onUpdate:modelValue":a[0]||(a[0]=d=>e.value.password=d),autocomplete:"new-password",variant:"outlined",type:"password",density:"compact","validate-on":"submit",rules:s.disabled?[]:[l(c).required],disabled:s.disabled,"error-messages":r.formErrors?r.formErrors.password:[]},null,8,["modelValue","rules","disabled","error-messages"])],64)):p("",!0),o(R,{justify:"center"},{default:u(()=>[o(g,{cols:"auto"},{default:u(()=>[o(S,{modelValue:e.value.random_password,"onUpdate:modelValue":[a[1]||(a[1]=d=>e.value.random_password=d),B],label:l(t)("Random password"),density:"compact",color:"primary",class:"text-center",disabled:s.disabled},null,8,["modelValue","label","disabled"])]),_:1}),o(g,null,{default:u(()=>[e.value.random_password?(n(),h(j,{key:0,style:{"background-color":"#515d78"},class:"ml-6",density:"compact"},{default:u(()=>[v("span",F,y(e.value.new_password),1),o(q,{size:"small",color:"white",variant:"text",density:"compact",disabled:s.disabled,icon:"mdi-clipboard-multiple-outline",title:l(t)("Copy to clipboard"),onClick:C},null,8,["disabled","title"])]),_:1})):p("",!0)]),_:1})]),_:1}),e.value.random_password?p("",!0):(n(),m(V,{key:1},[o(w,{modelValue:e.value.new_password,"onUpdate:modelValue":a[2]||(a[2]=d=>e.value.new_password=d),variant:"outlined",label:l(t)("Password"),type:"password",autocomplete:"new-password",density:"compact",disabled:s.disabled,rules:f.value?[l(c).required]:[]},null,8,["modelValue","label","disabled","rules"]),o(w,{modelValue:e.value.password_confirmation,"onUpdate:modelValue":a[3]||(a[3]=d=>e.value.password_confirmation=d),variant:"outlined",type:"password",label:l(t)("Confirmation"),density:"compact",disabled:s.disabled,rules:f.value?[l(c).required,x]:[],"error-messages":r.formErrors?r.formErrors.new_password:[]},null,8,["modelValue","label","disabled","rules","error-messages"])],64))]))}};export{H as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as d,o,w as e,a as t,e as b,t as a,m as g,F as p,v as D,l as s,E as w,p as P,b as T,i as x,f,n as v,g as U,_ as G,C as z,k as L}from"./index-jui3edpn.js";import{u as Q}from"./permissions-CrpE0b4w.js";import{a as H}from"./accounts-KUsk6LHW.js";import{p as J}from"./parameters-DMIAQ7cd.js";import{c as A,V,a as C}from"./VCard-CBtX8JF-.js";import{V as K}from"./VSelect-BcmGFGif.js";import{V as W}from"./VDataTable-CNT9KOSp.js";import{V as $,c as F,a as B}from"./VAvatar-CXV_FqpP.js";import{V as X}from"./VTextField-BPIvtrn4.js";import{u as Y}from"./language.store-OcfdXL_-.js";import{V as _,a as i}from"./VRow-83Qnr5iB.js";import{V as Z,a as ee}from"./VToolbar-CB6wwtYc.js";import"./tag-WF93n81Q.js";import"./VInput-BwHvhzAe.js";import"./VProgressCircular-DRw_-iNj.js";import"./VMenu-BpmJf4X2.js";import"./ssrBoot-B7cr7q9U.js";import"./VCheckboxBtn-B0mIT3E0.js";import"./VSelectionControl-Cqi1xt-q.js";import"./events-BM3in65C.js";import"./VTable-f7wcr2AZ.js";import"./filter-Dihm6o59.js";import"./languages-CF8hxo7x.js";/* empty css */const te={class:"headline"},ae={__name:"AccountAliases",props:{account:{type:Object,default:null}},setup(l){return(r,m)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[b("span",te,a(r.$gettext("Aliases")),1)]),_:1}),t(V,null,{default:e(()=>[(o(!0),g(p,null,D(l.account.aliases,c=>(o(),d(K,{key:c,class:"mr-2 mt-2"},{default:e(()=>[s(a(c),1)]),_:2},1024))),128))]),_:1})]),_:1}))}},N="senderaddresses",M={getAll(){return w.get(`${N}/`)},getAllForMailbox(l){return w.get(`${N}/`,{params:{mailbox:l}})},create(l){return w.post(`${N}/`,l)},delete(l){return w.delete(`${N}/${l}/`)}},le={class:"headline"},ne={key:0},oe={__name:"AccountSenderAddresses",props:{account:{type:Object,default:null}},setup(l){const r=P(),{$gettext:m}=T(),c=l,n=x([]),y=x(!1),u=x(""),q=[{title:m("Address"),key:"address"},{title:"",key:"actions",align:"end",sortable:!1}];function j(){n.value.push({}),y.value=!0}function R(){M.getAllForMailbox(c.account.mailbox.pk).then(h=>{n.value=h.data})}function I(){const h={address:u.value,mailbox:c.account.mailbox.pk};M.create(h).then(()=>{R(),u.value=null,y.value=!1,r.displayNotification({msg:m("Sender address added")})})}function O(h){M.delete(h.pk).then(()=>{R(),r.displayNotification({msg:m("Sender address deleted")})})}return R(),(h,S)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[b("span",le,a(f(m)("Sender addresses")),1)]),_:1}),t(V,null,{default:e(()=>[t(W,{headers:q,items:n.value,"no-data-text":f(m)("No sender address defined for this account")},{"item.address":e(({item:k})=>[k.pk?(o(),g("span",ne,a(k.address),1)):(o(),d(X,{key:1,modelValue:u.value,"onUpdate:modelValue":S[0]||(S[0]=E=>u.value=E),label:f(m)("Specify an email address")},{append:e(()=>[u.value?(o(),d($,{key:0,icon:"mdi-content-save",color:"primary",variant:"text",onClick:I})):v("",!0)]),_:1},8,["modelValue","label"]))]),"item.actions":e(({item:k})=>[k.pk?(o(),d($,{key:0,icon:"mdi-delete-outline",color:"red",title:f(m)("Remove this address"),variant:"text",onClick:E=>O(k)},null,8,["title","onClick"])):v("",!0)]),bottom:e(()=>[...S[1]||(S[1]=[])]),_:2},1032,["items","no-data-text"]),y.value?v("",!0):(o(),d($,{key:0,size:"small",color:"primary",variant:"outlined",onClick:j},{default:e(()=>[t(F,{size:"small",icon:"mdi-plus"}),s(" "+a(f(m)("Add sender address")),1)]),_:1}))]),_:1})]),_:1}))}},se={class:"headline"},ue={__name:"AccountSummary",props:{account:{type:Object,default:null}},async setup(l){let r,m;const c=Y();return[r,m]=U(()=>c.getLanguages()),await r,m(),(n,y)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[b("span",se,a(n.$gettext("General information")),1)]),_:1}),t(V,null,{default:e(()=>[t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Creation date")),1)]),_:1}),t(i,{cols:"6"},{default:e(()=>[s(a(n.$date(l.account.date_joined)),1)]),_:1})]),_:1}),t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Last login date")),1)]),_:1}),l.account.last_login?(o(),d(i,{key:0,cols:"6"},{default:e(()=>[s(a(n.$date(l.account.last_login)),1)]),_:1})):(o(),d(i,{key:1,cols:"6"},{default:e(()=>[s(a(n.$gettext("Never logged-in")),1)]),_:1}))]),_:1}),t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Full name")),1)]),_:1}),t(i,{cols:"6"},{default:e(()=>[s(a(l.account.first_name)+" "+a(l.account.last_name),1)]),_:1})]),_:1}),t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Role")),1)]),_:1}),t(i,{cols:"6"},{default:e(()=>[s(a(l.account.role),1)]),_:1})]),_:1}),t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Language")),1)]),_:1}),t(i,{cols:"6"},{default:e(()=>[s(a(f(c).getLanguageLabel(l.account.language)),1)]),_:1})]),_:1}),t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Secondary email")),1)]),_:1}),t(i,{cols:"6"},{default:e(()=>[s(a(l.account.secondary_email),1)]),_:1})]),_:1}),t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Phone number")),1)]),_:1}),t(i,{cols:"6"},{default:e(()=>[s(a(l.account.phone_number),1)]),_:1})]),_:1}),t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Enabled")),1)]),_:1}),t(i,{cols:"6"},{default:e(()=>[t(F,{color:l.account.is_active?"success":"error",icon:l.account.is_active?"mdi-check-circle":"mdi-close-circle",variant:"flat"},null,8,["color","icon"])]),_:1})]),_:1}),l.account.mailbox?(o(),g(p,{key:0},[t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Quota")),1)]),_:1}),l.account.mailbox.quota==="0"?(o(),d(i,{key:0,cols:"6"},{default:e(()=>[s(a(n.$gettext("Unlimited")),1)]),_:1})):(o(),d(i,{key:1,cols:"6"},{default:e(()=>[t(B,{color:l.account.mailbox.quota_usage<80?"primary":"warning","model-value":l.account.mailbox.quota_usage,height:"25",class:"white--text"},{default:e(({value:u})=>[s(a(Math.ceil(u))+"% ("+a(l.account.mailbox.quota)+" "+a(n.$gettext("MB"))+") ",1)]),_:1},8,["color","model-value"])]),_:1}))]),_:1}),l.account.mailbox.message_limit!==null&&l.account.mailbox.message_limit!==void 0?(o(),d(_,{key:0},{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Daily sending limit")),1)]),_:1}),t(i,{cols:"6"},{default:e(()=>[l.account.mailbox.message_limit===0?(o(),g(p,{key:0},[s(a(n.$gettext("Sending forbidden")),1)],64)):(o(),d(B,{key:1,color:l.account.mailbox.sent_messages_in_percent<80?"primary":"warning","model-value":l.account.mailbox.sent_messages_in_percent,height:"25",class:"white--text"},{default:e(({value:u})=>[s(a(Math.ceil(u))+"% ("+a(l.account.mailbox.message_limit)+" "+a(n.$gettext("messages"))+") ",1)]),_:1},8,["color","model-value"]))]),_:1})]),_:1})):v("",!0)],64)):v("",!0)]),_:1})]),_:1}))}},ce={class:"headline"},ie={key:1},de={class:"text-disabled"},re={__name:"DomainAdminDomains",props:{account:{type:Object,default:null}},setup(l){const{$gettext:r}=T();return(m,c)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[b("span",ce,a(f(r)("Administered domains")),1)]),_:1}),t(V,null,{default:e(()=>[l.account.domains!==void 0&&l.account.domains.length?(o(!0),g(p,{key:0},D(l.account.domains,n=>(o(),d(_,{key:n},{default:e(()=>[t(i,{cols:"12"},{default:e(()=>[s(a(n),1)]),_:2},1024)]),_:2},1024))),128)):(o(),g("div",ie,a(f(r)("No domain managed")),1)),b("div",de,a(f(r)("Add/Remove from the domain page")),1)]),_:1})]),_:1}))}},me={class:"headline"},fe={__name:"ResourcesView",props:{resources:{type:Array,default:null}},setup(l){const{$gettext:r}=T(),m=n=>n.name==="quota"?r("No quota"):r("Creation denied");function c(n){return n<50?"primary":n<80?"warning":"error"}return(n,y)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[b("span",me,a(f(r)("Resources usage")),1)]),_:1}),t(V,null,{default:e(()=>[(o(!0),g(p,null,D(l.resources,u=>(o(),g("div",{key:u.name,class:"mt-4"},[u.max_value===-1?(o(),g(p,{key:0},[s(a(u.label)+" ("+a(f(r)("Unlimited"))+") ",1)],64)):u.max_value===0?(o(),g(p,{key:1},[s(a(u.label)+" ("+a(m(u))+") ",1)],64)):(o(),g(p,{key:2},[s(a(u.label)+" ("+a(Math.ceil(u.usage))+"%) ",1),t(B,{"model-value":u.usage,color:c(u.usage)},null,8,["model-value","color"])],64))]))),128))]),_:1})]),_:1}))}},_e={__name:"AccountView",setup(l){const r=z(),{canSetRole:m}=Q(),c=x({pk:r.params.id}),n=x({});function y(){H.get(r.params.id).then(u=>{c.value=u.data})}return m.value&&J.getGlobalApplication("limits").then(u=>{n.value=u.data}),y(),(u,q)=>(o(),g(p,null,[t(Z,{flat:""},{default:e(()=>[t(ee,null,{default:e(()=>[s(a(u.$gettext("Account"))+" "+a(c.value.username)+" ",1),t($,{color:"primary",icon:"mdi-circle-edit-outline",to:{name:"AccountEdit",params:{id:c.value.pk}}},null,8,["to"]),t($,{color:"primary",icon:"mdi-reload",onClick:y})]),_:1})]),_:1}),t(_,null,{default:e(()=>[t(i,{cols:"6"},{default:e(()=>[t(ue,{account:c.value},null,8,["account"]),c.value.role===f(L).DOMAIN_ADMIN?(o(),d(re,{key:0,class:"mt-2",account:c.value},null,8,["account"])):v("",!0)]),_:1}),t(i,{cols:"6"},{default:e(()=>[n.value.params&&n.value.params.enable_admin_limits&&c.value.role!==f(L).USER&&c.value.role!==f(L).SUPER_ADMIN?(o(),d(fe,{key:0,resources:c.value.resources},null,8,["resources"])):v("",!0),c.value.aliases?(o(),d(ae,{key:1,class:"mt-2",account:c.value},null,8,["account"])):v("",!0),c.value.mailbox?(o(),d(oe,{key:2,class:"mt-2",account:c.value},null,8,["account"])):v("",!0)]),_:1})]),_:1})],64))}},je=G(_e,[["__scopeId","data-v-388d62f6"]]);export{je as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{G as Ae,i as p,c as w,o as c,w as t,a as e,e as T,t as y,l as h,j as G,m as P,f as m,n as j,F as R,b as ee,A as Z,q as se,v as W,C as ve,p as ye,aw as Fe,g as me,x as Se,s as ge}from"./index-jui3edpn.js";import{c as N}from"./contacts-DMJlQTe0.js";import{p as Be}from"./parameters-DMIAQ7cd.js";import{c as H,V as K,b as te,a as J}from"./VCard-CBtX8JF-.js";import{V as ze}from"./VAlert-MDbeolOo.js";import{V as X}from"./VSpacer-CuSkdJZL.js";import{V as x,c as ae}from"./VAvatar-CXV_FqpP.js";import{r as oe,V as ue}from"./VForm-fdQ5d-CH.js";import{V as S}from"./VTextField-BPIvtrn4.js";import{a as b,V as ne}from"./VRow-83Qnr5iB.js";import{a as Ve,V as le}from"./VSelect-BcmGFGif.js";import{V as ce}from"./VTextarea-B6bGYcC3.js";import{V as Ne}from"./VCheckbox-zY1MApOy.js";import{_ as Le}from"./MenuItems-C9p70bSC.js";import{V as Pe}from"./VDataTableServer-_yn4Ry6U.js";import{V as pe,a as Oe,b as fe}from"./VMenu-BpmJf4X2.js";import{V as je}from"./VToolbar-CB6wwtYc.js";import{V as Te}from"./VProgressCircular-DRw_-iNj.js";import{V as Y}from"./VDialog-lKtBdqnp.js";import{u as Ee}from"./layout.store-C0g-piJn.js";import"./tag-WF93n81Q.js";/* empty css */import"./VInput-BwHvhzAe.js";import"./VCheckboxBtn-B0mIT3E0.js";import"./VSelectionControl-Cqi1xt-q.js";import"./VDataTable-CNT9KOSp.js";import"./events-BM3in65C.js";import"./VTable-f7wcr2AZ.js";import"./filter-Dihm6o59.js";import"./ssrBoot-B7cr7q9U.js";const De=Ae("contacts",()=>{const V=p(null);function U(d){V.value=d}async function i(){V.value=null}return{currentCategory:V,setCurrentCategory:U,$reset:i}}),Ie={class:"headline"},Re={__name:"AddressBookInfo",props:{addressBookUrl:{type:String,default:null}},emits:["close"],setup(V,{emit:U}){return(i,d)=>(c(),w(J,null,{default:t(()=>[e(H,null,{default:t(()=>[T("span",Ie,y(i.$gettext("Address book information")),1)]),_:1}),e(K,null,{default:t(()=>[T("p",null,y(i.$gettext("To access this address book from the outside (such as Mozilla Thunderbird or your smartphone), use the following URL:")),1),e(ze,{type:"info",class:"my-4",variant:"tonal"},{default:t(()=>[h(y(V.addressBookUrl),1)]),_:1}),T("p",null,y(i.$gettext("The credentials are the same than the ones you use to access Modoboa.")),1)]),_:1}),e(te,null,{default:t(()=>[e(X),e(x,{onClick:d[0]||(d[0]=o=>i.$emit("close"))},{default:t(()=>[h(y(i.$gettext("Close")),1)]),_:1})]),_:1})]),_:1}))}},qe={__name:"EmailField",props:{modelValue:{type:Object,default:null},errors:{type:Object,default:null},index:{type:Number,required:!0}},emits:["add","delete","update:modelValue"],setup(V,{emit:U}){const i=V,d=U,o=G({get(){return i.modelValue},set(l){d("update:modelValue",l)}}),a=["home","work","other"];return(l,n)=>(c(),P(R,null,[e(b,{cols:"6"},{default:t(()=>[e(S,{modelValue:o.value.address,"onUpdate:modelValue":n[0]||(n[0]=r=>o.value.address=r),label:l.$gettext("Address"),variant:"outlined","prepend-icon":"mdi-email",density:"compact",rules:[m(oe).required]},null,8,["modelValue","label","rules"])]),_:1}),e(b,{cols:"4",class:"pl-4"},{default:t(()=>[e(Ve,{modelValue:o.value.type,"onUpdate:modelValue":n[1]||(n[1]=r=>o.value.type=r),items:a,density:"compact",variant:"outlined",rules:[m(oe).required]},null,8,["modelValue","rules"])]),_:1}),e(b,{cols:"2",class:"pl-4"},{default:t(()=>[e(x,{icon:"mdi-plus",size:"x-small",flat:"",onClick:n[2]||(n[2]=r=>l.$emit("add"))}),V.index?(c(),w(x,{key:0,icon:"mdi-trash-can",color:"red",size:"x-small",flat:"",variant:"text",onClick:n[3]||(n[3]=r=>l.$emit("delete",V.index))})):j("",!0)]),_:1})],64))}},Me={__name:"PhoneNumberField",props:{errors:{type:Object,default:null},index:{type:Number,required:!0},modelValue:{type:Object,default:null}},emits:["add","delete","update:modelValue"],setup(V,{emit:U}){const i=V,d=U,o=G({get(){return i.modelValue},set(l){d("update:modelValue",l)}}),a=["cell","fax","home","main","pager","work","other"];return(l,n)=>(c(),P(R,null,[e(b,{cols:"6"},{default:t(()=>[e(S,{modelValue:o.value.number,"onUpdate:modelValue":n[0]||(n[0]=r=>o.value.number=r),label:l.$gettext("Phone number"),variant:"outlined","prepend-icon":"mdi-phone",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(b,{cols:"4",class:"pl-4"},{default:t(()=>[e(Ve,{modelValue:o.value.type,"onUpdate:modelValue":n[1]||(n[1]=r=>o.value.type=r),items:a,density:"compact",variant:"outlined"},null,8,["modelValue"])]),_:1}),e(b,{cols:"2",class:"pl-4"},{default:t(()=>[e(x,{icon:"mdi-plus",size:"x-small",flat:"",onClick:n[2]||(n[2]=r=>l.$emit("add"))}),V.index?(c(),w(x,{key:0,icon:"mdi-trash-can",color:"red",size:"x-small",flat:"",variant:"text",onClick:n[3]||(n[3]=r=>l.$emit("delete",V.index))})):j("",!0)]),_:1})],64))}},Je={class:"headline"},Ge={__name:"ContactForm",props:{contact:{type:Object,required:!1}},emits:["close","added","updated"],setup(V,{emit:U}){const i=U,d=V,{$gettext:o}=ee(),a=p(A()),l=p(!1),n=p(),r=p({}),g=p(!1),L=G(()=>d.contact?o("Edit contact"):o("New contact")),F=G(()=>d.contact?o("Update"):o("Add"));function A(){return{emails:[{}],phone_numbers:[{}]}}function O(){a.value.emails.push({})}function B(z){a.value.emails.splice(z,1)}function f(){a.value.phone_numbers.push({})}function $(z){a.value.phone_numbers.splice(z,1)}async function E(){var u;const{valid:z}=await n.value.validate();if(!z)return;g.value=!0;const s=JSON.parse(JSON.stringify(a.value));Object.keys(s.phone_numbers[0]).length||s.phone_numbers.splice(0,1);try{let k;d.contact?(k=await N.updateContact(d.contact.pk,s),i("updated",k.data)):(k=await N.createContact(s),i("added",k.data)),i("close")}catch(k){((u=k.response)==null?void 0:u.status)===400&&(r.value=k.response.data)}finally{g.value=!1}}return Z(()=>d.contact,z=>{z?(a.value=JSON.parse(JSON.stringify(z)),a.value.phone_numbers.length||(a.value.phone_numbers=[{}])):a.value=A()},{immediate:!0}),(z,s)=>(c(),w(J,null,{default:t(()=>[e(ue,{ref_key:"formRef",ref:n,onSubmit:se(E,["prevent"])},{default:t(()=>[e(H,null,{default:t(()=>[T("span",Je,y(L.value),1)]),_:1}),e(K,null,{default:t(()=>[e(ne,{"no-gutters":""},{default:t(()=>[e(b,{cols:"6"},{default:t(()=>[e(S,{modelValue:a.value.first_name,"onUpdate:modelValue":s[0]||(s[0]=u=>a.value.first_name=u),label:m(o)("First name"),variant:"outlined","prepend-icon":"mdi-account",density:"compact","error-messages":r.value.first_name},null,8,["modelValue","label","error-messages"])]),_:1}),e(b,{cols:"6",class:"pl-4"},{default:t(()=>[e(S,{modelValue:a.value.last_name,"onUpdate:modelValue":s[1]||(s[1]=u=>a.value.last_name=u),label:m(o)("Last name"),variant:"outlined",density:"compact","error-messages":r.value.last_name},null,8,["modelValue","label","error-messages"])]),_:1}),e(b,{cols:"12"},{default:t(()=>[e(S,{modelValue:a.value.display_name,"onUpdate:modelValue":s[2]||(s[2]=u=>a.value.display_name=u),label:m(o)("Display name"),variant:"outlined","prepend-icon":"toto",density:"compact","error-messages":r.value.display_name},null,8,["modelValue","label","error-messages"])]),_:1}),e(b,{cols:"6"},{default:t(()=>[e(S,{modelValue:a.value.company,"onUpdate:modelValue":s[3]||(s[3]=u=>a.value.company=u),label:m(o)("Company"),variant:"outlined","prepend-icon":"mdi-office-building",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(b,{cols:"6",class:"pl-4"},{default:t(()=>[e(S,{modelValue:a.value.position,"onUpdate:modelValue":s[4]||(s[4]=u=>a.value.position=u),label:m(o)("Position"),variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),(c(!0),P(R,null,W(a.value.emails,(u,k)=>(c(),w(qe,{key:`email-${k}`,modelValue:a.value.emails[k],"onUpdate:modelValue":Q=>a.value.emails[k]=Q,index:k,onAdd:O,onDelete:B},null,8,["modelValue","onUpdate:modelValue","index"]))),128)),(c(!0),P(R,null,W(a.value.phone_numbers,(u,k)=>(c(),w(Me,{key:`phone-${k}`,modelValue:a.value.phone_numbers[k],"onUpdate:modelValue":Q=>a.value.phone_numbers[k]=Q,index:k,onAdd:f,onDelete:$},null,8,["modelValue","onUpdate:modelValue","index"]))),128)),l.value?(c(),P(R,{key:0},[e(b,{cols:"6"},{default:t(()=>[e(S,{modelValue:a.value.birth_date,"onUpdate:modelValue":s[5]||(s[5]=u=>a.value.birth_date=u),label:m(o)("Birth date"),type:"date","prepend-icon":"mdi-calendar",variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(b,{cols:"12"},{default:t(()=>[e(ce,{modelValue:a.value.address,"onUpdate:modelValue":s[6]||(s[6]=u=>a.value.address=u),label:m(o)("Address"),"prepend-icon":"mdi-location",variant:"outlined",density:"compact",rows:"2"},null,8,["modelValue","label"])]),_:1}),e(b,{cols:"6"},{default:t(()=>[e(S,{modelValue:a.value.zipcode,"onUpdate:modelValue":s[7]||(s[7]=u=>a.value.zipcode=u),label:m(o)("Zip code"),"prepend-icon":"toto",variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(b,{cols:"6",class:"pl-4"},{default:t(()=>[e(S,{modelValue:a.value.city,"onUpdate:modelValue":s[8]||(s[8]=u=>a.value.city=u),label:m(o)("City"),variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(b,{cols:"6"},{default:t(()=>[e(S,{modelValue:a.value.country,"onUpdate:modelValue":s[9]||(s[9]=u=>a.value.country=u),label:m(o)("Country"),"prepend-icon":"toto",variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(b,{cols:"6",class:"pl-4"},{default:t(()=>[e(S,{modelValue:a.value.state,"onUpdate:modelValue":s[10]||(s[10]=u=>a.value.state=u),label:m(o)("State/Province"),variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(b,{cols:"12"},{default:t(()=>[e(ce,{modelValue:a.value.note,"onUpdate:modelValue":s[11]||(s[11]=u=>a.value.note=u),label:m(o)("Note"),"prepend-icon":"mdi-file",variant:"outlined",density:"compact",rows:"2"},null,8,["modelValue","label"])]),_:1})],64)):j("",!0)]),_:1})]),_:1}),e(te,null,{default:t(()=>[l.value?(c(),w(x,{key:1,onClick:s[13]||(s[13]=u=>l.value=!1)},{default:t(()=>[h(y(m(o)("Less")),1)]),_:1})):(c(),w(x,{key:0,onClick:s[12]||(s[12]=u=>l.value=!0)},{default:t(()=>[h(y(m(o)("More")),1)]),_:1})),e(X),e(x,{loading:g.value,onClick:s[14]||(s[14]=u=>i("close"))},{default:t(()=>[h(y(m(o)("Close")),1)]),_:1},8,["loading"]),e(x,{color:"primary",type:"submit",loading:g.value},{default:t(()=>[h(y(F.value),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1}))}},Ze={class:"headline"},He={__name:"ContactCategoriesForm",props:{contact:{type:Object,default:null}},emits:["close"],setup(V,{emit:U}){const i=V,d=U,o=p([]),a=p([]),l=p(!1);function n(){d("close","updated")}async function r(){const g={categories:a.value};l.value=!0;try{await N.updateContact(i.contact.pk,g),d("updated"),n()}finally{l.value=!1}}return Z(()=>i.contact,g=>{g?a.value=g.categories:a.value=[]},{immediate:!0}),N.getCategories().then(g=>{o.value=g.data}),(g,L)=>(c(),w(J,null,{default:t(()=>[e(ue,{ref:"formRef",onSubmit:se(r,["prevent"])},{default:t(()=>[e(H,null,{default:t(()=>[T("span",Ze,y(g.$gettext("Categories")),1)]),_:1}),e(K,null,{default:t(()=>[(c(!0),P(R,null,W(o.value,F=>(c(),w(Ne,{key:F.pk,modelValue:a.value,"onUpdate:modelValue":L[0]||(L[0]=A=>a.value=A),label:F.name,"hide-details":"",value:F.pk,color:"primary"},null,8,["modelValue","label","value"]))),128))]),_:1}),e(te,null,{default:t(()=>[e(X),e(x,{loading:l.value,onClick:n},{default:t(()=>[h(y(g.$gettext("Close")),1)]),_:1},8,["loading"]),e(x,{color:"primary",type:"submit",loading:l.value},{default:t(()=>[h(y(g.$gettext("Update")),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1}))}},Ke={class:"text-right"},Qe=["colspan"],We={__name:"ContactList",emits:["editCategory"],async setup(V,{emit:U}){let i,d;const o=U,a=ve(),{$gettext:l}=ee(),{displayNotification:n}=ye(),r=p({}),g=p([]),L=p(0),F=p(""),A=p(null),O=p(!1),B=p(!1),f=p(!1),$=p({}),E=p(!1),z=p(1),s=p(10),u=p([{key:"first_name",order:"asc"}]),k=[{key:"first_name",title:l("First name")},{key:"last_name",title:l("Last name")},{width:1,key:"data-table-expand"},{key:"actions",title:l("Actions"),align:"end",sortable:!1}],Q=[{label:l("Categories"),icon:"mdi-label",onClick:ke},{label:l("Edit"),icon:"mdi-circle-edit-outline",onClick:Ce},{label:l("Delete"),icon:"mdi-delete-outline",onClick:we,color:"red"}];let q;Fe(()=>{q&&clearInterval(q)});function be(){B.value=!1,A.value=null}function Ce(C){A.value=C,B.value=!0}function _e(){o("editCategory")}function ke(C){A.value=C,f.value=!0}function he(){f.value=!1,A.value=null}async function we(C){await N.deleteContact(C.pk),n({msg:l("Contact removed")}),await M()}async function re(){const C=await N.getDefaultAddressBook();r.value=C.data}async function xe(){const C=await Be.getUserApplication("contacts");$.value=C.data.params}async function M(C){C&&(z.value=C.page,s.value=C.itemsPerPage,u.value=C.sortBy);const _={page:z.value,page_size:s.value,...a.params};u.value.length&&(_.ordering=u.value.map(v=>v.order!=="asc"?`-${v.key}`:v.key).join(",")),F.value!==""&&(_.search=F.value),E.value=!0;try{const v=await N.getContacts(_);g.value=v.data.results,L.value=v.data.count}finally{E.value=!1}}function $e(){N.synchronizeToAddressBook().then(()=>{n({msg:l("Synchronization started")})})}async function Ue(){await re(),await M(),r.value.syncing||(clearInterval(q),q=null,de())}async function ie(C){q&&clearInterval(q),await N.synchronizeFromAddressBook(),C&&n({msg:l("Synchronization started")}),r.value.syncing=!0,q=setInterval(Ue,5e3)}function de(){q=setInterval(ie,$.value.sync_frequency*1e3)}return[i,d]=me(()=>re()),await i,d(),[i,d]=me(()=>xe()),await i,d(),Z($,C=>{C&&de()}),Z(()=>a.params.category,()=>{M()}),(C,_)=>(c(),P("div",null,[e(J,{class:"mt-6"},{default:t(()=>[e(Pe,{headers:k,items:g.value,"items-length":L.value,loading:E.value,search:F.value,page:z.value,"items-per-page":s.value,"sort-by":u.value,"item-value":"pk","show-expand":"","onUpdate:options":M},{top:t(()=>[e(je,{color:"white",flat:""},{default:t(()=>[e(S,{modelValue:F.value,"onUpdate:modelValue":_[0]||(_[0]=v=>F.value=v),"prepend-inner-icon":"mdi-magnify",placeholder:m(l)("Search"),variant:"outlined","single-line":"",flat:"","hide-details":"",density:"compact",class:"flex-grow-0 w-33 mr-4"},null,8,["modelValue","placeholder"]),e(x,{color:"primary",variant:"outlined",onClick:_[1]||(_[1]=v=>B.value=!0)},{default:t(()=>[h(y(m(l)("Add")),1)]),_:1}),$.value.enable_carddav_sync?(c(),P(R,{key:0},[e(x,{class:"ml-2",variant:"tonal",icon:"",size:"small"},{default:t(()=>[e(ae,{icon:"mdi-cog"}),e(pe,{activator:"parent"},{default:t(()=>[e(Oe,{density:"compact"},{default:t(()=>[r.value.last_sync?j("",!0):(c(),w(fe,{key:0,color:"success",title:m(l)("Synchronize contacts with address book"),"prepend-icon":"mdi-sync",onClick:$e},null,8,["title"])),e(fe,{title:m(l)("Synchronize"),"prepend-icon":"mdi-sync",disabled:r.value.syncing,onClick:_[2]||(_[2]=v=>ie(!0))},null,8,["title","disabled"])]),_:1})]),_:1})]),_:1}),e(x,{icon:"mdi-information-outline",title:m(l)("Display address book information"),onClick:_[3]||(_[3]=v=>O.value=!0)},null,8,["title"])],64)):j("",!0),C.$route.params.category?(c(),w(le,{key:1,class:"my-2 mx-4",label:"",size:"small",color:"green","prepend-icon":"mdi-label",onClick:_e},{default:t(()=>[h(y(C.$route.params.category),1)]),_:1})):j("",!0),e(X),r.value.syncing?(c(),w(Te,{key:2,color:"primary",indeterminate:""})):j("",!0)]),_:1})]),"item.data-table-expand":t(({internalItem:v,isExpanded:D,toggleExpand:I})=>[e(x,{"append-icon":D(v)?"mdi-chevron-up":"mdi-chevron-down",text:D(v)?"Collapse":"More info",class:"text-none",color:"medium-emphasis",size:"small",variant:"text",width:"105",border:"",slim:"",onClick:tt=>I(v)},null,8,["append-icon","text","onClick"])]),"item.actions":t(({item:v})=>[T("div",Ke,[e(pe,{"offset-y":""},{activator:t(({props:D})=>[e(x,Se({icon:"mdi-dots-horizontal",variant:"text"},D),null,16)]),default:t(()=>[e(m(Le),{items:Q,obj:v},null,8,["obj"])]),_:2},1024)])]),"expanded-row":t(({columns:v,item:D})=>[T("tr",null,[T("td",{colspan:v.length,class:"pa-4"},[D.emails.length?(c(),w(J,{key:0,class:"mb-4"},{default:t(()=>[e(H,{class:"bg-surface-light"},{default:t(()=>[e(ae,{icon:"mdi-email",class:"mr-4"}),h(y(m(l)("Email addresses")),1)]),_:1}),e(K,{class:"pt-4"},{default:t(()=>[(c(!0),P(R,null,W(D.emails,I=>(c(),w(ne,{key:I,class:"mt-2"},{default:t(()=>[e(b,{cols:"2"},{default:t(()=>[e(le,{size:"small",color:"info"},{default:t(()=>[h(y(I.type),1)]),_:2},1024)]),_:2},1024),e(b,{cols:"10"},{default:t(()=>[h(y(I.address),1)]),_:2},1024)]),_:2},1024))),128))]),_:2},1024)]),_:2},1024)):j("",!0),D.phone_numbers.length?(c(),w(J,{key:1,class:"mb-4"},{default:t(()=>[e(H,{class:"bg-surface-light"},{default:t(()=>[e(ae,{icon:"mdi-phone",class:"mr-4"}),h(y(m(l)("Phone numbers")),1)]),_:1}),e(K,{class:"pt-4"},{default:t(()=>[(c(!0),P(R,null,W(D.phone_numbers,I=>(c(),w(ne,{key:I,class:"mt-2"},{default:t(()=>[e(b,{cols:"2"},{default:t(()=>[e(le,{size:"small",color:"info"},{default:t(()=>[h(y(I.type),1)]),_:2},1024)]),_:2},1024),e(b,{cols:"10"},{default:t(()=>[h(y(I.number),1)]),_:2},1024)]),_:2},1024))),128))]),_:2},1024)]),_:2},1024)):j("",!0)],8,Qe)])]),_:2},1032,["items","items-length","loading","search","page","items-per-page","sort-by"])]),_:1}),e(Y,{modelValue:B.value,"onUpdate:modelValue":_[4]||(_[4]=v=>B.value=v),persistent:"","max-width":"800px"},{default:t(()=>[e(Ge,{contact:A.value,onClose:be,onAdded:M,onUpdated:M},null,8,["contact"])]),_:1},8,["modelValue"]),e(Y,{modelValue:f.value,"onUpdate:modelValue":_[5]||(_[5]=v=>f.value=v),persistent:"","max-width":"800px"},{default:t(()=>[e(He,{contact:A.value,onUpdated:M,onClose:he},null,8,["contact"])]),_:1},8,["modelValue"]),e(Y,{modelValue:O.value,"onUpdate:modelValue":_[7]||(_[7]=v=>O.value=v),persistent:"","max-width":"800px"},{default:t(()=>[e(Re,{"address-book-url":r.value.url,onClose:_[6]||(_[6]=v=>O.value=!1)},null,8,["address-book-url"])]),_:1},8,["modelValue"])]))}},Xe={class:"headline"},Ye={__name:"CategoryForm",props:{category:{type:Object,default:null}},emits:["close","updated"],setup(V,{emit:U}){const i=V,d=U,o=ge(),{$gettext:a}=ee(),{displayNotification:l}=ye(),n=p({}),r=p(),g=p(!1),L=G(()=>i.category?a("Edit category"):a("Add category")),F=G(()=>i.category?a("Update"):a("Add"));function A(){n.value={},d("close")}async function O(){const{valid:f}=await r.value.validate();if(f){g.value=!0;try{i.category?await N.updateCategory(i.category.pk,n.value):await N.addCategory(n.value),d("updated"),d("close")}catch($){console.log($)}finally{g.value=!1}}}function B(){N.deleteCategory(i.category.pk).then(()=>{A(),d("updated"),l({msg:a("Category deleted")}),o.push({name:"ContactList"})})}return Z(()=>i.category,f=>{f?n.value=JSON.parse(JSON.stringify(f)):n.value={}},{immediate:!0}),(f,$)=>(c(),w(J,null,{default:t(()=>[e(ue,{ref_key:"formRef",ref:r,onSubmit:se(O,["prevent"])},{default:t(()=>[e(H,null,{default:t(()=>[T("span",Xe,y(L.value),1)]),_:1}),e(K,null,{default:t(()=>[e(S,{modelValue:n.value.name,"onUpdate:modelValue":$[0]||($[0]=E=>n.value.name=E),label:m(a)("Name"),variant:"outlined",density:"compact",rules:[m(oe).required]},null,8,["modelValue","label","rules"])]),_:1}),e(te,null,{default:t(()=>[V.category?(c(),w(x,{key:0,color:"red",onClick:B},{default:t(()=>[h(y(m(a)("Delete")),1)]),_:1})):j("",!0),e(X),e(x,{loading:g.value,onClick:A},{default:t(()=>[h(y(m(a)("Close")),1)]),_:1},8,["loading"]),e(x,{color:"primary",type:"submit",loading:g.value},{default:t(()=>[h(y(F.value),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1}))}},et={class:"text-h5 ml-4"},zt={__name:"AddressBook",setup(V){const U=ge(),i=ve(),{$gettext:d}=ee(),o=De(),a=Ee(),l=p([]),n=p(null),r=p(!1),g=G(()=>{const f=[{icon:"mdi-contacts",text:d("Contacts"),to:{name:"ContactList"}},{text:d("Categories"),subheader:!0}];for(const $ of l.value)f.push({icon:"mdi-label",text:$.name,action:()=>O($)});return f.push({icon:"mdi-plus",text:d("Add a category"),action:L}),f});function L(){r.value=!0}function F(){n.value=o.currentCategory,r.value=!0}function A(){n.value=null,r.value=!1}function O(f){o.setCurrentCategory(f),U.push({name:"ContactList",params:{category:f.name}})}function B(){return N.getCategories().then(f=>{l.value=f.data})}return B(),Z(g,f=>{a.setLeftMenuItems(f)}),Z(l,()=>{i.params.category&&!o.currentCategory&&o.setCurrentCategory(l.value.find(f=>f.name===i.params.category))}),(f,$)=>(c(),P("div",null,[T("div",et,y(m(d)("Contacts")),1),e(We,{onEditCategory:F}),e(Y,{modelValue:r.value,"onUpdate:modelValue":$[0]||($[0]=E=>r.value=E),persistent:"","max-width":"800px"},{default:t(()=>[e(Ye,{category:n.value,onClose:A,onAdded:B,onUpdated:B},null,8,["category"])]),_:1},8,["modelValue"])]))}};export{zt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as D,u as g,h as b,i as l,j as p,k as t,g as c,c as x,o as N}from"./index-jui3edpn.js";import{p as _}from"./parameters-DMIAQ7cd.js";import{_ as h}from"./ConnectedLayout-BP8pO27H.js";import{u as L}from"./parameters.store-DLnFzCwV.js";import"./theme-_0oOYChG.js";import"./VContainer-Cn-vKB3s.js";/* empty css */import"./tag-WF93n81Q.js";import"./VApp-DM1KLQfQ.js";import"./layout-DOO7TRTJ.js";import"./ssrBoot-B7cr7q9U.js";import"./logos-Dz2Gzei-.js";import"./layout.store-C0g-piJn.js";import"./VAvatar-CXV_FqpP.js";import"./VProgressCircular-DRw_-iNj.js";import"./VMenu-BpmJf4X2.js";import"./VBadge-7tDx7aI3.js";import"./VCard-CBtX8JF-.js";import"./VRow-83Qnr5iB.js";import"./VSheet-C3MaHhtw.js";const Q={__name:"AdminLayout",async setup(f){let a,e;const{$gettext:i}=D(),A=g(),s=b(),r=L(),n=l(!1),d=l("/rspamd"),u=l([]),M=p(()=>A.authUser),R=p(()=>r.imapMigrationEnabled),S=()=>{window.location=d.value},I=p(()=>{const o=[{text:i("Dashboard"),to:{name:"Dashboard"},exact:!0,icon:"mdi-view-dashboard-outline"},{text:i("Domains"),to:{name:"DomainList"},icon:"mdi-domain",roles:[t.DOMAIN_ADMIN,t.RESELLER,t.SUPER_ADMIN]},{text:i("Identities"),to:{name:"Identities"},icon:"mdi-account",roles:[t.DOMAIN_ADMIN,t.RESELLER,t.SUPER_ADMIN]},{text:i("Alarms"),to:{name:"Alarms"},icon:"mdi-bell"},{icon:"mdi-history",text:i("Monitoring"),roles:[t.SUPER_ADMIN,t.RESELLER,t.DOMAIN_ADMIN],children:[{text:i("Statistics"),to:{name:"Statistics"},roles:[t.SUPER_ADMIN]},{text:i("Audit trail"),to:{name:"AuditTrail"},roles:[t.SUPER_ADMIN]},{text:i("Messages"),to:{name:"MessageLog"},roles:[t.DOMAIN_ADMIN,t.RESELLER,t.SUPER_ADMIN]}]},{icon:"mdi-email-sync-outline",text:i("IMAP Migration"),roles:[t.SUPER_ADMIN,t.RESELLER],condition:()=>R.value,children:[{text:i("Email providers"),to:{name:"ProvidersList"},roles:[t.SUPER_ADMIN,t.RESELLER]},{text:i("Migrations"),to:{name:"MigrationsList"},roles:[t.RESELLER,t.SUPER_ADMIN]}]}],m=[];return u.value.forEach(E=>{m.push({text:E.label,to:{name:"ParametersEdit",params:{app:E.name}}})}),o.concat([{icon:"mdi-cog",text:i("Settings"),children:m,roles:[t.SUPER_ADMIN]},{icon:"mdi-email-check-outline",text:"Rspamd",action:S,roles:[t.SUPER_ADMIN],condition:()=>n.value},{icon:"mdi-information",text:i("Information"),roles:[t.SUPER_ADMIN],to:{name:"Information"},withBell:!0}])});if(M.value.role===t.SUPER_ADMIN){let o=([a,e]=c(()=>_.getGlobalApplications()),a=await a,e(),a);u.value=o.data,[a,e]=c(()=>s.fetchCapabilities()),await a,e(),s.capabilities.imap_migration&&r.imapMigrationEnabled===null&&(o=([a,e]=c(()=>_.getGlobalApplication("imap_migration")),a=await a,e(),a),r.imapMigrationEnabled=o.data.params.enabled_imapmigration),n.value="rspamd"in s.capabilities,n.value&&(d.value=s.capabilities.rspamd.location||"/rspamd")}return(o,m)=>(N(),x(h,{"menu-items":I.value},null,8,["menu-items"]))}};export{Q as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as G}from"./index-Dv00bmw9.js";import{E as b,_ as O,b as H,p as J,i as d,C as K,c as A,w as a,a as s,e as Q,f as p,x as D,l as n,t as c,m as w,F as N,k as x,o as f}from"./index-jui3edpn.js";import{_ as M}from"./MenuItems-C9p70bSC.js";import{V as E,a as W}from"./VMenu-BpmJf4X2.js";import{V as L,c as X}from"./VAvatar-CXV_FqpP.js";import{V as T}from"./VSelect-BcmGFGif.js";import{V as R,a as Y}from"./VToolbar-CB6wwtYc.js";import{V as Z}from"./VTextField-BPIvtrn4.js";import{V as ee}from"./VDataTableServer-_yn4Ry6U.js";import{a as te}from"./VCard-CBtX8JF-.js";import"./tag-WF93n81Q.js";import"./ssrBoot-B7cr7q9U.js";import"./VProgressCircular-DRw_-iNj.js";import"./VInput-BwHvhzAe.js";import"./VCheckboxBtn-B0mIT3E0.js";import"./VSelectionControl-Cqi1xt-q.js";import"./VDataTable-CNT9KOSp.js";import"./events-BM3in65C.js";import"./VTable-f7wcr2AZ.js";import"./filter-Dihm6o59.js";const y="alarms",v={getAll(i){return b.get(`${y}/`,{params:i})},switchStatus(i,e){return b.patch(`${y}/${i}/switch/`,e)},delete(i){return b.delete(`${y}/${i}/`)},bulkDelete(i){return b.post(`${y}/bulk_delete/`,{ids:i})}},ae={class:"text-right"},le={__name:"AlarmList",setup(i){const{$gettext:e}=H(),V=K(),_=J(),C=d([]),$=d([{key:"status",order:"desc"}]),k=d(!1),u=d(""),g=d([]),S=d(0),z=[{title:e("Triggered"),key:"created"},{title:e("Status"),key:"status"},{title:e("Domain"),key:"domain.name",sortable:!1},{title:e("Mailbox"),key:"mailbox",sortable:!1},{title:e("Message"),key:"title"},{title:e("Actions"),key:"actions",sortable:!1,align:"right"}],B=[{value:10,title:"10"},{value:25,title:"25"},{value:50,title:"50"},{value:100,title:"100"}];function I(){const o=[];return g.value.length>0&&o.push({label:e("Delete"),icon:"mdi-delete-outline",onClick:j,color:"red"}),o.push({label:e("Reload"),icon:"mdi-reload",onClick:r}),o}function P(o){const l=[];return l.push({label:e("Delete"),icon:"mdi-delete-outline",onClick:U,color:"red"}),o.status===x.ALARM_OPENED?l.push({label:e("Close alarm"),icon:"mdi-check",onClick:F,color:"green"}):l.push({label:e("Reopen alarm"),icon:"mdi-alert-circle-outline",onClick:q,color:"orange"}),l}function r({page:o,itemsPerPage:l,sortBy:t}){const h={page:o||1,page_size:l||10};t&&t.length&&(h.ordering=t.map(m=>m.order!=="asc"?`-${m.key}`:m.key).join(",")),u.value!==""&&(h.search=u.value),k.value=!0,v.getAll(h).then(m=>{C.value=m.data.results,S.value=m.data.count,k.value=!1})}async function U(o,l=!0){v.delete(o.id).then(()=>{l&&(_.displayNotification({msg:e("Alarm deleted")}),r({}))})}async function j(){await v.bulkDelete(g.value),_.displayNotification({msg:e("Alarms deleted")}),g.value=[],r({})}async function F(o){v.switchStatus(o.id,{status:x.ALARM_CLOSED}).then(()=>{_.displayNotification({msg:e("Alarm closed")}),r({})})}async function q(o){v.switchStatus(o.id,{status:x.ALARM_OPENED}).then(()=>{_.displayNotification({msg:e("Alarm re-opened")}),r({})})}return V.query.search&&(u.value=V.query.search),r=G(r,500),(o,l)=>(f(),A(te,{class:"mt-6"},{default:a(()=>[s(ee,{modelValue:g.value,"onUpdate:modelValue":l[1]||(l[1]=t=>g.value=t),"sort-by":$.value,"onUpdate:sortBy":l[2]||(l[2]=t=>$.value=t),headers:z,items:C.value,search:u.value,"item-value":"id","items-length":S.value,"items-per-page-options":B,loading:k.value,elevation:"0","show-select":"","onUpdate:options":r},{top:a(()=>[s(R,{color:"white",flat:""},{default:a(()=>[s(Z,{modelValue:u.value,"onUpdate:modelValue":l[0]||(l[0]=t=>u.value=t),"prepend-inner-icon":"mdi-magnify",placeholder:p(e)("Search"),density:"compact",variant:"outlined","hide-details":"",flat:"","single-line":"",class:"flex-grow-0 w-33 mr-4"},null,8,["modelValue","placeholder"]),s(E,{location:"bottom"},{activator:a(({props:t})=>[s(L,D(t,{size:"small"}),{default:a(()=>[n(c(p(e)("Actions"))+" ",1),s(X,{right:""},{default:a(()=>[...l[3]||(l[3]=[n("mdi-chevron-down",-1)])]),_:1})]),_:1},16)]),default:a(()=>[s(W,{density:"compact"},{default:a(()=>[s(p(M),{items:I()},null,8,["items"])]),_:1})]),_:1})]),_:1})]),"item.status":a(({item:t})=>[t.status===1?(f(),A(T,{key:0,color:"warning",size:"small"},{default:a(()=>[n(c(p(e)("Opened")),1)]),_:1})):(f(),A(T,{key:1,color:"info",size:"small"},{default:a(()=>[n(c(p(e)("Closed")),1)]),_:1}))]),"item.mailbox":a(({item:t})=>[t.mailbox?(f(),w(N,{key:0},[n(c(t.mailbox.address)+"@"+c(t.domain.name),1)],64)):(f(),w(N,{key:1},[n(" / ")],64))]),"item.created":a(({item:t})=>[n(c(o.$date(t.created)),1)]),"item.actions":a(({item:t})=>[Q("div",ae,[s(E,{location:"bottom"},{activator:a(({props:h})=>[s(L,D({icon:"mdi-dots-horizontal"},h,{variant:"text"}),null,16)]),default:a(()=>[s(p(M),{items:P(t),obj:t},null,8,["items","obj"])]),_:2},1024)])]),_:2},1032,["modelValue","sort-by","items","search","items-length","loading"])]),_:1}))}},oe=O(le,[["__scopeId","data-v-4fccec74"]]),se={__name:"AlarmsView",setup(i){return(e,V)=>(f(),w("div",null,[s(R,{flat:""},{default:a(()=>[s(Y,null,{default:a(()=>[n(c(e.$gettext("Opened alarms")),1)]),_:1})]),_:1}),s(oe)]))}},Ce=O(se,[["__scopeId","data-v-eeff1c15"]]);export{Ce as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as j,_ as G}from"./AliasRecipientForm-
|
|
1
|
+
import{a as j,_ as G}from"./AliasRecipientForm-CI7bXqVp.js";import{L as I}from"./LoadingData-C2txD49L.js";import{b as B,p as M,C as z,s as O,i as m,d as q,c as p,m as v,o as s,a,e as E,w as e,l as i,t as n,f as u,F as R,v as H,_ as J}from"./index-jui3edpn.js";import{a as w}from"./aliases-Ge0hjIsH.js";import{d as b,c as A,V as C}from"./VAvatar-CXV_FqpP.js";import{V as T,c as $,a as h,b as K}from"./VExpansionPanels-CaIvk9iF.js";import{V as k,a as f}from"./VRow-83Qnr5iB.js";import{V as Q}from"./VSelect-BcmGFGif.js";import{V as W,a as X}from"./VToolbar-CB6wwtYc.js";import"./EmailField-KhhJYA4D.js";import"./VTextField-BPIvtrn4.js";import"./tag-WF93n81Q.js";import"./VInput-BwHvhzAe.js";import"./VProgressCircular-DRw_-iNj.js";import"./VMenu-BpmJf4X2.js";import"./ssrBoot-B7cr7q9U.js";import"./domains.store-1U61jeCV.js";import"./domains-Du64lcXT.js";import"./VForm-fdQ5d-CH.js";import"./VSwitch-XumUl685.js";import"./VSelectionControl-Cqi1xt-q.js";import"./VTextarea-B6bGYcC3.js";import"./VContainer-Cn-vKB3s.js";/* empty css */import"./VCheckboxBtn-B0mIT3E0.js";const Y={key:1},Z={key:0},ee={class:"mr-2"},ae={key:0},te={class:"mt-4 d-flex justify-end"},le={__name:"AliasEditForm",setup(N){const{$gettext:o}=B(),{displayNotification:y}=M(),c=z(),P=O(),r=m({pk:c.params.id}),V=m(0),d=m(!0),g=m(!1),x=m(),F=m(),D={generalForm:x,recipientForm:F};async function L(){g.value=!1,V.value=[];for(const[_,t]of Object.entries(D))if(t.value!=null){const{valid:l}=await t.value.vFormRef.validate();l||(g.value=!0,V.value.push(_))}if(!g.value){d.value=!0;try{await w.patch(c.params.id,r.value),y({msg:o("Alias updated")}),P.push({name:"AliasDetail",params:{id:c.params.id}})}finally{d.value=!1}}}return q(()=>{w.get(c.params.id).then(_=>{r.value=_.data,d.value=!1})}),(_,t)=>d.value?(s(),p(I,{key:0})):(s(),v("div",Y,[a(K,{modelValue:V.value,"onUpdate:modelValue":t[2]||(t[2]=l=>V.value=l),multiple:g.value},{default:e(()=>[a(T,{eager:"",value:"generalForm"},{default:e(()=>[a($,null,{default:e(({expanded:l})=>[a(k,{"no-gutters":""},{default:e(()=>[a(f,{cols:"4"},{default:e(()=>[i(n(u(o)("General")),1)]),_:1}),a(f,{cols:"8",class:"text-medium-emphasis"},{default:e(()=>[a(b,{"leave-absolute":""},{default:e(()=>[l?(s(),v("span",Z)):(s(),p(k,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[a(f,{cols:"6"},{default:e(()=>[i(n(u(o)("Address"))+": "+n(r.value.address),1)]),_:1}),a(f,{cols:"6"},{default:e(()=>[E("div",ee,n(u(o)("Enabled")),1),r.value.enabled?(s(),p(A,{key:0,color:"success"},{default:e(()=>[...t[4]||(t[4]=[i("mdi-check-circle-outline",-1)])]),_:1})):(s(),p(A,{key:1},{default:e(()=>[...t[5]||(t[5]=[i("mdi-close-circle-outline",-1)])]),_:1}))]),_:1})]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(h,null,{default:e(()=>[a(j,{ref_key:"generalForm",ref:x,modelValue:r.value,"onUpdate:modelValue":t[0]||(t[0]=l=>r.value=l)},null,8,["modelValue"])]),_:1})]),_:1}),a(T,{eager:"",value:"recipientForm"},{default:e(()=>[a($,null,{default:e(({expanded:l})=>[a(k,{"no-gutters":""},{default:e(()=>[a(f,{cols:"4"},{default:e(()=>[i(n(u(o)("Recipients")),1)]),_:1}),a(f,{cols:"8",class:"text-medium-emphasis"},{default:e(()=>[a(b,{"leave-absolute":""},{default:e(()=>[l?(s(),v("span",ae)):(s(),p(k,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[(s(!0),v(R,null,H(r.value.recipients,(S,U)=>(s(),p(Q,{key:U,size:"small"},{default:e(()=>[i(n(S),1)]),_:2},1024))),128))]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(h,null,{default:e(()=>[a(u(G),{ref_key:"recipientForm",ref:F,modelValue:r.value.recipients,"onUpdate:modelValue":t[1]||(t[1]=l=>r.value.recipients=l)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue","multiple"]),E("div",te,[a(C,{loading:d.value,variant:"outlined",onClick:t[3]||(t[3]=l=>_.$router.go(-1))},{default:e(()=>[i(n(u(o)("Cancel")),1)]),_:1},8,["loading"]),a(C,{class:"ml-4",color:"primary darken-1",variant:"outlined",loading:d.value,onClick:L},{default:e(()=>[i(n(u(o)("Save")),1)]),_:1},8,["loading"])])]))}},se={__name:"AliasEditView",setup(N){const{$gettext:o}=B();return(y,c)=>(s(),v(R,null,[a(W,{flat:""},{default:e(()=>[a(X,null,{default:e(()=>[i(n(u(o)("Edit alias")),1)]),_:1})]),_:1}),a(le)],64))}},he=J(se,[["__scopeId","data-v-0edc6d33"]]);export{he as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as B}from"./aliases-Ge0hjIsH.js";import{E as C}from"./EmailField-KhhJYA4D.js";import{r as $,V as h}from"./VForm-fdQ5d-CH.js";import{d as E}from"./domains-Du64lcXT.js";import{V as R}from"./VSwitch-XumUl685.js";import{a as D,V as S}from"./VSelect-BcmGFGif.js";import{V as A}from"./VAvatar-CXV_FqpP.js";import{V as U}from"./VTextField-BPIvtrn4.js";import{V as T}from"./VTextarea-B6bGYcC3.js";import{j as _,i as m,c as b,o as d,w as p,n as j,m as g,a as o,e as f,F as k,t as u,f as n,b as N,B as q,v as G,l as M}from"./index-jui3edpn.js";const L={class:"m-label"},O={class:"m-label"},P={class:"m-label"},z={class:"m-label"},le={__name:"AliasGeneralForm",props:{modelValue:{type:Object,default:null}},setup(y,{expose:x}){const r=y,e=_(()=>r.modelValue),s=m([]),c=m();function i(){e.value.address!=null&&navigator.clipboard.writeText(e.value.address)}async function v(){e.value.domain!=null&&B.getRandomAddress().then(t=>{e.value.address=`${t.data.address}@${e.value.domain.name}`})}return E.getDomains().then(t=>{s.value=t.data}),x({vFormRef:c}),(t,a)=>(d(),b(h,{ref_key:"vFormRef",ref:c},{default:p(()=>[e.value.pk?j("",!0):(d(),b(R,{key:0,modelValue:e.value.random,"onUpdate:modelValue":a[0]||(a[0]=l=>e.value.random=l),label:t.$gettext("Random address"),color:"primary"},null,8,["modelValue","label"])),e.value.random?(d(),g(k,{key:2},[f("label",O,u(t.$gettext("Domain")),1),o(D,{modelValue:e.value.domain,"onUpdate:modelValue":[a[2]||(a[2]=l=>e.value.domain=l),v],items:s.value,"item-title":"name","return-object":"",variant:"outlined",density:"compact",rules:[n($).required]},{append:p(()=>[o(A,{variant:"flat",icon:"mdi-reload",onClick:v})]),_:1},8,["modelValue","items","rules"]),o(U,{modelValue:e.value.address,"onUpdate:modelValue":a[3]||(a[3]=l=>e.value.address=l),label:t.$gettext("Generated address"),variant:"outlined",readonly:""},{"append-inner":p(()=>[o(A,{variant:"flat",icon:"mdi-clipboard-outline",onClick:i})]),_:1},8,["modelValue","label"])],64)):(d(),g(k,{key:1},[f("label",L,u(t.$gettext("Email address")),1),o(n(C),{ref:"address",modelValue:e.value.address,"onUpdate:modelValue":a[1]||(a[1]=l=>e.value.address=l),type:"email",variant:"outlined",density:"compact",rules:[n($).required]},null,8,["modelValue","rules"])],64)),o(R,{modelValue:e.value.enabled,"onUpdate:modelValue":a[4]||(a[4]=l=>e.value.enabled=l),label:t.$gettext("Enabled"),color:"primary"},null,8,["modelValue","label"]),f("label",P,u(t.$gettext("Expire at")),1),o(U,{modelValue:e.value.expire,"onUpdate:modelValue":a[5]||(a[5]=l=>e.value.expire=l),variant:"outlined",density:"compact"},null,8,["modelValue"]),f("label",z,u(t.$gettext("Description")),1),o(T,{modelValue:e.value.description,"onUpdate:modelValue":a[6]||(a[6]=l=>e.value.description=l),rows:"2",variant:"outlined",density:"compact"},null,8,["modelValue"])]),_:1},512))}},te={__name:"AliasRecipientForm",props:{modelValue:{type:Array,default:()=>[]},modelModifiers:{}},emits:["update:modelValue"],setup(y,{expose:x}){const{$gettext:r}=N(),e=q(y,"modelValue"),s=m(""),c=m(),i=m();async function v(){e.value.push(s.value),s.value="",i.value.resetValidation()}function t(l){e.value.splice(l,1)}const a=[()=>e.value.length>0||r("Please add at least one recipient.")];return x({vFormRef:i}),(l,F)=>(d(),b(h,{ref_key:"vFormRef",ref:i},{default:p(()=>[o(n(C),{ref_key:"recipientField",ref:c,modelValue:s.value,"onUpdate:modelValue":F[0]||(F[0]=V=>s.value=V),placeholder:n(r)("Start typing a name here..."),hint:n(r)("Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."),"persistent-hint":"","allow-add":"",rules:a,onDomainSelected:v},null,8,["modelValue","placeholder","hint"]),(d(!0),g(k,null,G(e.value,(V,w)=>(d(),b(S,{key:V,class:"mr-2 mt-2",closable:"","onClick:close":H=>t(w)},{default:p(()=>[M(u(V),1)]),_:2},1032,["onClick:close"]))),128))]),_:1},512))}};export{te as _,le as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as
|
|
1
|
+
import{c as v,V as g,a as y}from"./VCard-CBtX8JF-.js";import{c,o as n,w as e,a,e as k,t as l,m as f,F as x,v as h,n as V,l as o,_ as C,b,i as A,C as T,f as w}from"./index-jui3edpn.js";import{V as u,a as s}from"./VRow-83Qnr5iB.js";import{c as B,V as $}from"./VAvatar-CXV_FqpP.js";import{a as E}from"./aliases-Ge0hjIsH.js";import{V as N,a as R}from"./VToolbar-CB6wwtYc.js";import"./tag-WF93n81Q.js";/* empty css */import"./VProgressCircular-DRw_-iNj.js";const S={class:"headline"},j={__name:"AliasRecipientsSummary",props:{alias:{type:Object,default:null}},setup(i){return(t,d)=>(n(),c(y,null,{default:e(()=>[a(v,null,{default:e(()=>[k("div",S,l(t.$gettext("Recipients")),1)]),_:1}),a(g,null,{default:e(()=>[(n(!0),f(x,null,h(i.alias.recipients,r=>(n(),f("p",{key:r},l(r),1))),128))]),_:1})]),_:1}))}},D={class:"headline"},F={__name:"AliasSummary",props:{alias:{type:Object,default:null}},setup(i){return(t,d)=>(n(),c(y,null,{default:e(()=>[a(v,null,{default:e(()=>[k("div",D,l(t.$gettext("General information")),1)]),_:1}),a(g,null,{default:e(()=>[a(u,null,{default:e(()=>[a(s,{cols:"6"},{default:e(()=>[o(l(t.$gettext("Creation date")),1)]),_:1}),a(s,{cols:"6"},{default:e(()=>[o(l(t.$date(i.alias.creation)),1)]),_:1})]),_:1}),a(u,null,{default:e(()=>[a(s,{cols:"6"},{default:e(()=>[o(l(t.$gettext("Modified")),1)]),_:1}),a(s,{cols:"6"},{default:e(()=>[o(l(t.$date(i.alias.last_modification)),1)]),_:1})]),_:1}),a(u,null,{default:e(()=>[a(s,{cols:"6"},{default:e(()=>[o(l(t.$gettext("Enabled")),1)]),_:1}),a(s,{cols:"6"},{default:e(()=>[a(B,{color:i.alias.enabled?"success":"error",icon:i.alias.enabled?"mdi-check-circle":"mdi-close-circle",variant:"flat"},null,8,["color","icon"])]),_:1})]),_:1}),i.alias.expiry?(n(),c(u,{key:0},{default:e(()=>[a(s,{cols:"6"},{default:e(()=>[o(l(t.$gettext("Expire at")),1)]),_:1}),a(s,{cols:"6"})]),_:1})):V("",!0),i.alias.description?(n(),c(u,{key:1},{default:e(()=>[a(s,{cols:"6"},{default:e(()=>[o(l(t.$gettext("Description")),1)]),_:1}),a(s,{cols:"6"},{default:e(()=>[o(l(i.alias.description),1)]),_:1})]),_:1})):V("",!0)]),_:1})]),_:1}))}},G={__name:"AliasView",setup(i){const{$gettext:t}=b(),d=T(),r=A({pk:d.params.id});function m(){E.get(d.params.id).then(_=>{r.value=_.data})}return m(),(_,p)=>(n(),f("div",null,[a(N,{flat:""},{default:e(()=>[a(R,null,{default:e(()=>[o(l(w(t)("Alias"))+" "+l(r.value.address)+" ",1),a($,{color:"primary",icon:"mdi-circle-edit-outline",to:{name:"AliasEdit",params:{id:r.value.pk}}},null,8,["to"]),a($,{color:"primary",icon:"mdi-reload",onClick:p[0]||(p[0]=I=>m())})]),_:1})]),_:1}),a(u,null,{default:e(()=>[a(s,{cols:"6"},{default:e(()=>[a(F,{alias:r.value},null,8,["alias"]),a(j,{alias:r.value,class:"mt-2"},null,8,["alias"])]),_:1})]),_:1})]))}},Q=C(G,[["__scopeId","data-v-ad04a3d2"]]);export{Q as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as A,i,c as y,o as f,w as r,a as o,l as g,t as _,f as C,_ as L,m as b,F as I}from"./index-jui3edpn.js";import{l as N}from"./logs-CLm32Weu.js";import{d as R}from"./index-Dv00bmw9.js";import{V as F}from"./VDataTableServer-_yn4Ry6U.js";import{V as D}from"./VSelect-BcmGFGif.js";import{V as v,a as O}from"./VToolbar-CB6wwtYc.js";import{V as S}from"./VTextField-BPIvtrn4.js";import{a as $}from"./VCard-CBtX8JF-.js";import"./VDataTable-CNT9KOSp.js";import"./VAvatar-CXV_FqpP.js";import"./tag-WF93n81Q.js";import"./VProgressCircular-DRw_-iNj.js";import"./VCheckboxBtn-B0mIT3E0.js";import"./VSelectionControl-Cqi1xt-q.js";import"./VInput-BwHvhzAe.js";import"./events-BM3in65C.js";import"./VTable-f7wcr2AZ.js";import"./filter-Dihm6o59.js";import"./VMenu-BpmJf4X2.js";import"./ssrBoot-B7cr7q9U.js";const z={__name:"AuditTrailList",setup(h){const{$gettext:t}=A(),s=i(!1),p=i([]),n=i(""),u=i(0),V=[{title:t("Date"),key:"date_created"},{title:t("Level"),key:"level"},{title:t("Logger"),key:"logger"},{title:t("Message"),key:"message"}],x=[{value:10,title:"10"},{value:25,title:"25"},{value:50,title:"50"},{value:100,title:"100"}];function T(a){return a==="INFO"?"primary":a==="WARNING"?"orange":a==="CRITICAL"||a==="ERROR"?"red":""}function m({page:a,itemsPerPage:l,sortBy:e,search:k}){let c;e.length&&(c=(e[0].order==="desc"?"-":"")+e[0].key);const w={ordering:c,page:a,page_size:l,search:k};s.value=!0,N.getAuditTrail(w).then(d=>{p.value=d.data.results,u.value=d.data.count,s.value=!1})}return m=R(m,500),(a,l)=>(f(),y($,{class:"mt-6"},{default:r(()=>[o(F,{headers:V,items:p.value,search:n.value,class:"elevation-0","items-length":u.value,"items-per-page-options":x,"onUpdate:options":m},{top:r(()=>[o(v,{flat:"",color:"white"},{default:r(()=>[o(S,{modelValue:n.value,"onUpdate:modelValue":l[0]||(l[0]=e=>n.value=e),"prepend-inner-icon":"mdi-magnify",placeholder:C(t)("Search"),variant:"outlined","hide-details":"",density:"compact",class:"flex-grow-0 w-33"},null,8,["modelValue","placeholder"])]),_:1})]),"item.level":r(({item:e})=>[o(D,{color:T(e.level),"text-color":"white",size:"small"},{default:r(()=>[g(_(e.level),1)]),_:2},1032,["color"])]),_:2},1032,["items","search","items-length"])]),_:1}))}},E={__name:"AuditTrailView",setup(h){return(t,s)=>(f(),b(I,null,[o(v,{flat:""},{default:r(()=>[o(O,null,{default:r(()=>[g(_(t.$gettext("Audit trail")),1)]),_:1})]),_:1}),o(z)],64))}},le=L(E,[["__scopeId","data-v-5d9f29af"]]);export{le as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.v-event-draggable[data-v-3431ff62]{padding-left:6px}.v-event-timed[data-v-3431ff62]{user-select:none;-webkit-user-select:none}.v-event-drag-bottom[data-v-3431ff62]{position:absolute;left:0;right:0;bottom:4px;height:4px;cursor:ns-resize}.v-event-drag-bottom[data-v-3431ff62]:after{display:none;position:absolute;left:50%;height:4px;border-top:1px solid white;border-bottom:1px solid white;width:16px;margin-left:-8px;opacity:.8;content:""}.v-event-drag-bottom[data-v-3431ff62]:hover:after{display:block}.v-calendar-category .v-calendar-category__column,.v-calendar-category .v-calendar-category__column-header{border-right:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-category .v-calendar-daily__head,.v-calendar-category .v-calendar-daily__intervals-head,.v-calendar-category .v-calendar-daily__intervals-body{background:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface))}.v-calendar-category{overflow:auto;position:relative}.v-calendar-category .v-calendar-category__category{text-align:center}.v-calendar-category .v-calendar-daily__day-container{width:min-content}.v-calendar-category .v-calendar-daily__day-container .v-calendar-category__columns{position:absolute;height:100%;width:100%;top:0}.v-calendar-category .v-calendar-daily__day-body{display:flex;flex:1;width:100%;height:100%}.v-calendar-category .v-calendar-daily__head{flex-direction:row;width:min-content;min-width:100%;position:sticky;top:0;z-index:2}.v-calendar-category .v-calendar-daily_head-day{width:auto;position:unset}.v-calendar-category .v-calendar-daily__intervals-head{position:sticky;left:0;top:0;z-index:2}.v-calendar-category .v-calendar-daily_head-weekday{position:sticky;left:50%;width:50px}.v-calendar-category .v-calendar-daily_head-day-label{width:56px;position:sticky;left:50%}.v-calendar-category .v-calendar-daily__day{min-width:200px}.v-calendar-category .v-calendar-daily__intervals-body{position:sticky;left:0;z-index:1}.v-calendar-category .v-calendar-daily__interval:last-of-type:after{display:none}.v-calendar-category .v-calendar-daily__body{overflow:visible}.v-calendar-category .v-calendar-daily__body .v-calendar-daily__scroll-area{overflow-y:visible;flex:none}.v-calendar-category .v-calendar-daily__pane{overflow-y:visible}.v-calendar-category .v-calendar-category__columns{display:flex;width:min-content;min-width:100%}.v-calendar-category .v-calendar-category__columns .v-calendar-category__column,.v-calendar-category .v-calendar-category__columns .v-calendar-category__column-header{flex:1 1 auto;width:0;position:relative}.v-calendar-category .v-calendar-category__columns .v-calendar-category__column-header{min-width:200px}.v-calendar-daily{background-color:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface));border-left:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid;border-top:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-daily .v-calendar-daily__intervals-head{border-right:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-daily .v-calendar-daily__intervals-head:after{background:rgba(var(--v-border-color),var(--v-border-opacity));background:linear-gradient(90deg,transparent,rgba(var(--v-border-color),var(--v-border-opacity)))}.v-calendar-daily .v-calendar-daily_head-day{border-right:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid;border-bottom:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-daily .v-calendar-daily_head-day.v-past .v-calendar-daily_head-weekday,.v-calendar-daily .v-calendar-daily_head-day.v-past .v-calendar-daily_head-day-label{color:rgb(var(--v-theme-on-surface))}.v-calendar-daily .v-calendar-daily__intervals-body{border-right:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-daily .v-calendar-daily__intervals-body .v-calendar-daily__interval-text{color:rgb(var(--v-theme-on-surface))}.v-calendar-daily .v-calendar-daily__day{border-right:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid;border-bottom:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-daily .v-calendar-daily__day-interval{border-top:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-daily .v-calendar-daily__day-interval:first-child{border-top:none!important}.v-calendar-daily .v-calendar-daily__interval:after{border-top:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-daily{display:flex;flex-direction:column;overflow:hidden;height:100%}.v-calendar-daily__head{flex:none;display:flex}.v-calendar-daily__intervals-head{flex:none;position:relative}.v-calendar-daily__intervals-head:after{position:absolute;bottom:0;height:1px;left:0;right:0;content:""}.v-calendar-daily_head-day{flex:1 1 auto;width:0;position:relative}.v-calendar-daily_head-weekday{-webkit-user-select:none;user-select:none;padding:3px 0 0;font-size:11px;text-align:center;text-transform:uppercase}.v-calendar-daily_head-day-label{-webkit-user-select:none;user-select:none;padding:0 0 3px;cursor:pointer;text-align:center}.v-calendar-daily__body{flex:1 1 60%;overflow:hidden;display:flex;position:relative;flex-direction:column}.v-calendar-daily__scroll-area{overflow-y:scroll;flex:1 1 auto;display:flex;align-items:flex-start}.v-calendar-daily__pane{width:100%;overflow-y:hidden;flex:none;display:flex;align-items:flex-start}.v-calendar-daily__day-container{display:flex;flex:1;width:100%;height:100%}.v-calendar-daily__intervals-body{flex:none;-webkit-user-select:none;user-select:none}.v-calendar-daily__interval{text-align:right;padding-right:8px;border-bottom:none;position:relative}.v-calendar-daily__interval:after{width:8px;position:absolute;height:1px;display:block;content:"";right:0;bottom:-1px}.v-calendar-daily__interval-text{display:block;position:relative;top:-6px;font-size:10px;padding-right:4px}.v-calendar-daily__day{flex:1;width:0;position:relative}.v-calendar-weekly{background-color:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface));border-top:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid;border-left:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-weekly .v-calendar-weekly__head-weekday{border-right:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-weekly .v-calendar-weekly__head-weekday.v-past{color:rgb(var(--v-theme-on-surface))}.v-calendar-weekly .v-calendar-weekly__head-weekday.v-outside{background-color:rgb(var(--v-theme-surface-light));color:rgb(var(--v-theme-on-surface-light))}.v-calendar-weekly .v-calendar-weekly__head-weeknumber{background-color:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface));border-right:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-weekly .v-calendar-weekly__day{border-right:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid;border-bottom:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-weekly .v-calendar-weekly__day.v-outside{background-color:rgb(var(--v-theme-surface-light));color:rgb(var(--v-theme-on-surface-light))}.v-calendar-weekly .v-calendar-weekly__weeknumber{background-color:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface));border-right:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid;border-bottom:rgba(var(--v-border-color),var(--v-border-opacity)) 1px solid}.v-calendar-weekly{width:100%;height:100%;display:flex;flex-direction:column;min-height:0}.v-calendar-weekly__head{display:flex;-webkit-user-select:none;user-select:none}.v-calendar-weekly__head-weekday{flex:1 0 20px;-webkit-user-select:none;user-select:none;padding:0 4px;font-size:11px;overflow:hidden;text-align:center;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.v-calendar-weekly__head-weeknumber{position:relative;flex:0 0 24px}.v-calendar-weekly__week{display:flex;flex:1;height:unset;min-height:0}.v-calendar-weekly__weeknumber{display:flex;flex:0 0 24px;height:unset;min-height:0;padding-top:14.5px;text-align:center}.v-calendar-weekly__weeknumber>small{width:100%!important}.v-calendar-weekly__day{flex:1;width:0;overflow:hidden;-webkit-user-select:none;user-select:none;position:relative;padding:0;min-width:0}.v-calendar-weekly__day.v-present .v-calendar-weekly__day-month{color:currentColor}.v-calendar-weekly__day-label{text-decoration:none;-webkit-user-select:none;user-select:none;cursor:pointer;box-shadow:none;text-align:center;margin:4px 0 0}.v-calendar-weekly__day-label .v-icon-btn{font-size:12px}.v-calendar-weekly__day-month{position:absolute;text-decoration:none;-webkit-user-select:none;user-select:none;box-shadow:none;top:0;left:36px;height:32px;line-height:32px}.v-icon-btn{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-icon-btn--border{border-width:thin;box-shadow:none}.v-icon-btn{border-radius:50%}.v-icon-btn:hover>.v-icon-btn__overlay{opacity:calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier))}.v-icon-btn:focus-visible>.v-icon-btn__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-icon-btn:focus>.v-icon-btn__overlay{opacity:calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier))}}.v-icon-btn--active>.v-icon-btn__overlay,.v-icon-btn[aria-haspopup=menu][aria-expanded=true]>.v-icon-btn__overlay{opacity:calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier))}.v-icon-btn--active:hover>.v-icon-btn__overlay,.v-icon-btn[aria-haspopup=menu][aria-expanded=true]:hover>.v-icon-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier))}.v-icon-btn--active:focus-visible>.v-icon-btn__overlay,.v-icon-btn[aria-haspopup=menu][aria-expanded=true]:focus-visible>.v-icon-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}@supports not selector(:focus-visible){.v-icon-btn--active:focus>.v-icon-btn__overlay,.v-icon-btn[aria-haspopup=menu][aria-expanded=true]:focus>.v-icon-btn__overlay{opacity:calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier))}}.v-icon-btn--variant-plain,.v-icon-btn--variant-outlined,.v-icon-btn--variant-text,.v-icon-btn--variant-tonal{background:transparent;color:inherit}.v-icon-btn--variant-plain{opacity:.62}.v-icon-btn--variant-plain:focus,.v-icon-btn--variant-plain:hover{opacity:1}.v-icon-btn--variant-plain .v-icon-btn__overlay{display:none}.v-icon-btn--variant-elevated,.v-icon-btn--variant-flat{background:rgb(var(--v-theme-surface));color:inherit}.v-icon-btn--variant-elevated{box-shadow:0 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 2px 2px 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 1px 5px 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-icon-btn--variant-flat{box-shadow:0 0 0 0 var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, .2)),0 0 0 0 var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, .14)),0 0 0 0 var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, .12))}.v-icon-btn--variant-outlined{border:thin solid currentColor}.v-icon-btn--variant-text .v-icon-btn__overlay{background:currentColor}.v-icon-btn--variant-tonal .v-icon-btn__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;top:0;right:0;bottom:0;left:0;pointer-events:none}.v-icon-btn .v-icon-btn__underlay{position:absolute}.v-icon-btn{align-items:center;cursor:pointer;display:inline-flex;flex:none;font-size:.875rem;font-weight:500;line-height:normal;height:var(--v-icon-btn-height);justify-content:center;outline:none;position:relative;transition-property:width,height,transform;transition:.2s cubic-bezier(.4,0,.2,1);vertical-align:middle;width:var(--v-icon-btn-width)}@supports selector(:focus-visible){.v-icon-btn:after{pointer-events:none;border:2px solid currentColor;border-radius:inherit;opacity:0;transition:opacity .2s ease-in-out}.v-icon-btn:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.v-icon-btn:focus-visible:after{opacity:calc(.25 * var(--v-theme-overlay-multiplier))}}.v-icon-btn--disabled,.v-icon-btn--loading,.v-icon-btn--readonly{pointer-events:none}.v-icon-btn--disabled{opacity:.26}.v-icon-btn--start{margin-inline-end:8px}.v-icon-btn--end{margin-inline-start:8px}.v-icon-btn__content{align-items:center;justify-content:center;display:inline-flex;transition:inherit;transition-property:transform;transform:rotate(var(--v-icon-btn-rotate, 0deg))}.v-icon-btn--loading .v-icon-btn__content{opacity:0}.v-icon-btn__content .v-icon{transition:.2s cubic-bezier(.4,0,.2,1);transition-property:opacity,font-size,width,height;transform-origin:center}.v-icon-btn__loader{align-items:center;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.v-icon-btn__overlay,.v-icon-btn__underlay{border-radius:inherit;pointer-events:none}.v-icon-btn__overlay,.v-icon-btn__underlay{position:absolute;top:0;left:0;width:100%;height:100%}.v-icon-btn__overlay{background-color:currentColor;opacity:0;transition:opacity .2s ease-in-out}.v-icon-btn--active:not(:hover) .v-icon-btn__overlay{--v-activated-opacity: 0}@media(forced-colors:active){.v-icon-btn:focus-visible{outline:2px solid;outline-offset:2px}.v-icon-btn:not(.v-icon-btn--active):hover,.v-icon-btn:not(.v-icon-btn--active):focus{color:highlight!important}.v-icon-btn--active:not(.v-icon-btn--disabled),.v-icon-btn--active:not(.v-icon-btn--disabled)[class*=bg-]{outline-color:canvastext!important;background:highlight!important;color:highlighttext!important}.v-icon-btn--disabled{color:graytext}.v-icon-btn__overlay,.v-icon-btn__underlay,.v-icon-btn .v-icon{forced-color-adjust:preserve-parent-color}}.v-calendar-events .v-event-more{background-color:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface))}.v-calendar-events .v-event-more.v-outside{background-color:rgb(var(--v-theme-surface-light));color:rgb(var(--v-theme-on-surface-light))}.v-calendar .v-event{position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;cursor:pointer;line-height:20px;margin-right:-1px;z-index:1;border-radius:4px}.v-calendar .v-event-more{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;cursor:pointer;font-weight:700;z-index:1;position:relative}.v-calendar .v-event-timed-container{position:absolute;top:0;bottom:0;left:0;right:0;margin-right:10px;pointer-events:none}.v-calendar .v-event-timed{position:absolute;white-space:nowrap;text-overflow:ellipsis;font-size:12px;cursor:pointer;border:1px solid rgb(var(--v-theme-surface));border-radius:4px;pointer-events:all}.v-calendar .v-event-summary{display:inline-block;overflow:hidden;text-overflow:ellipsis;width:100%;white-space:nowrap}.v-calendar.v-calendar-events .v-calendar-weekly__head-weekday{margin-right:-1px}.v-calendar.v-calendar-events .v-calendar-weekly__day{overflow:visible;margin-right:-1px}
|