modoboa 2.5.1__py3-none-any.whl → 2.6.1__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.
Files changed (202) hide show
  1. modoboa/admin/api/v2/serializers.py +6 -1
  2. modoboa/admin/api/v2/tests.py +16 -0
  3. modoboa/admin/api/v2/viewsets.py +11 -1
  4. modoboa/admin/app_settings.py +39 -0
  5. modoboa/admin/lib.py +8 -3
  6. modoboa/admin/models/alias.py +22 -0
  7. modoboa/admin/models/domain.py +1 -1
  8. modoboa/admin/models/mixins.py +3 -1
  9. modoboa/admin/tests/test_alias_targets.py +68 -0
  10. modoboa/admin/tests/test_mx.py +12 -12
  11. modoboa/autoconfig/__init__.py +0 -0
  12. modoboa/autoconfig/apps.py +6 -0
  13. modoboa/autoconfig/templates/autoconfig/autoconfig.xml +24 -0
  14. modoboa/autoconfig/templates/autoconfig/autodiscover.xml +27 -0
  15. modoboa/autoconfig/tests.py +38 -0
  16. modoboa/autoconfig/urls.py +21 -0
  17. modoboa/autoconfig/views.py +109 -0
  18. modoboa/autoreply/api/v2/tests.py +4 -4
  19. modoboa/autoreply/models.py +2 -2
  20. modoboa/calendars/tests.py +8 -8
  21. modoboa/contacts/tests.py +5 -7
  22. modoboa/core/commands/templates/settings.py.tpl +25 -2
  23. modoboa/core/models.py +1 -1
  24. modoboa/core/tests/test_ldap.py +2 -0
  25. modoboa/core/views/auth.py +27 -8
  26. modoboa/frontend_dist/assets/{AccountAliasForm-C0oHHyZL.js → AccountAliasForm-CqtTlaTr.js} +1 -1
  27. modoboa/frontend_dist/assets/{AccountEditView-lgSJ2Se8.js → AccountEditView-vbG3aNZy.js} +1 -1
  28. modoboa/frontend_dist/assets/AccountLayout-Dr0kIVYn.js +1 -0
  29. modoboa/frontend_dist/assets/{AccountPasswordSubForm-YsaE_cDx.js → AccountPasswordSubForm-KRg2Sc3j.js} +1 -1
  30. modoboa/frontend_dist/assets/{AccountView-1jfKFDwb.js → AccountView-ojD2hYFN.js} +1 -1
  31. modoboa/frontend_dist/assets/{AddressBook-CwN64Zls.js → AddressBook-UKBKm1mQ.js} +1 -1
  32. modoboa/frontend_dist/assets/AdminLayout-Dj4_-niL.js +1 -0
  33. modoboa/frontend_dist/assets/AlarmsView-CdHVE0Hh.js +1 -0
  34. modoboa/frontend_dist/assets/AlarmsView-Dal0VD8U.css +1 -0
  35. modoboa/frontend_dist/assets/AliasEditView-CYDSiX8l.css +1 -0
  36. modoboa/frontend_dist/assets/AliasEditView-DmAxOjKB.js +1 -0
  37. modoboa/frontend_dist/assets/AliasRecipientForm-BrTdirrM.js +1 -0
  38. modoboa/frontend_dist/assets/{AliasView-DMzA10eD.js → AliasView-Sr8AZcUK.js} +1 -1
  39. modoboa/frontend_dist/assets/{AuditTrailView-5dnGX5El.js → AuditTrailView-B0U4QZw5.js} +1 -1
  40. modoboa/frontend_dist/assets/{CalendarView-DZONeDA9.js → CalendarView-5ZhvN1XU.js} +1 -1
  41. modoboa/frontend_dist/assets/{ChoiceField-DnwXRkht.js → ChoiceField-APLYjZCH.js} +1 -1
  42. modoboa/frontend_dist/assets/{ComposeEmailForm-kghmfNuE.js → ComposeEmailForm-DkLwcddN.js} +1 -1
  43. modoboa/frontend_dist/assets/ComposeEmailView-Du9di9mX.js +1 -0
  44. modoboa/frontend_dist/assets/ConfirmDialog-CnWM982L.js +1 -0
  45. modoboa/frontend_dist/assets/ConnectedLayout-CiKHST8t.js +1 -0
  46. modoboa/frontend_dist/assets/{CreationForm-CW4lxnPg.js → CreationForm-BDQpHM1l.js} +1 -1
  47. modoboa/frontend_dist/assets/DashboardView-nIp1bBh1.js +1 -0
  48. modoboa/frontend_dist/assets/{DomainAdminList-C3jcDDc3.js → DomainAdminList-CzY3elnc.js} +1 -1
  49. modoboa/frontend_dist/assets/{DomainEditView-ph8AaElX.js → DomainEditView-B_vQgqL-.js} +1 -1
  50. modoboa/frontend_dist/assets/{DomainTransportForm-NCz6Bl-h.js → DomainTransportForm-HOsP56gy.js} +1 -1
  51. modoboa/frontend_dist/assets/{DomainView-BgMSSuU-.js → DomainView-CPDvROg8.js} +3 -3
  52. modoboa/frontend_dist/assets/DomainsView-WlF6IHNs.css +1 -0
  53. modoboa/frontend_dist/assets/DomainsView-haCsU12U.js +1 -0
  54. modoboa/frontend_dist/assets/{EmailField-DeqDPm5j.js → EmailField-Cjy8TitF.js} +1 -1
  55. modoboa/frontend_dist/assets/{EmailView-DczVhVO0.js → EmailView-dnVoHho7.js} +1 -1
  56. modoboa/frontend_dist/assets/EmptyLayout-Deh2_dQt.js +1 -0
  57. modoboa/frontend_dist/assets/{FiltersView-nJj_gSCx.js → FiltersView-Csn8N70V.js} +1 -1
  58. modoboa/frontend_dist/assets/ForwardEmailView-CUBLqaN5.js +1 -0
  59. modoboa/frontend_dist/assets/{HtmlEditor-BWRdelVw.js → HtmlEditor-CXZVsQx7.js} +1 -1
  60. modoboa/frontend_dist/assets/IdentitiesView-Cl2lbfkM.css +1 -0
  61. modoboa/frontend_dist/assets/IdentitiesView-lIu0dkk7.js +1 -0
  62. modoboa/frontend_dist/assets/{InformationView-BBWKSX8D.js → InformationView-DQqhhU9V.js} +1 -1
  63. modoboa/frontend_dist/assets/{LoadingData-G57nJ_JV.js → LoadingData-fbGWs7ji.js} +1 -1
  64. modoboa/frontend_dist/assets/LoginCallbackView-3Hv94z-r.js +1 -0
  65. modoboa/frontend_dist/assets/{LoginView-CqCCXYLo.js → LoginView-BUbinhV5.js} +1 -1
  66. modoboa/frontend_dist/assets/MailboxView-CYPFkxfT.js +1 -0
  67. modoboa/frontend_dist/assets/{MenuItems-BqIZW5av.js → MenuItems-Dg2GGDq6.js} +1 -1
  68. modoboa/frontend_dist/assets/{MessageView-D_6tx_gd.js → MessageView-Dz7CnObf.js} +1 -1
  69. modoboa/frontend_dist/assets/{MessagesView-BH7JIR03.js → MessagesView-BJAKsy9_.js} +1 -1
  70. modoboa/frontend_dist/assets/{MigrationsView-Cv_So9T-.js → MigrationsView-6k4E9C53.js} +1 -1
  71. modoboa/frontend_dist/assets/ParametersForm-Bfv6vx6R.js +1 -0
  72. modoboa/frontend_dist/assets/ParametersForm-t6-3GMDS.css +1 -0
  73. modoboa/frontend_dist/assets/ParametersView-BOIkKJtp.js +1 -0
  74. modoboa/frontend_dist/assets/ParametersView-BcyDgfqX.css +1 -0
  75. modoboa/frontend_dist/assets/ParametersView-BnQQOUOX.js +1 -0
  76. modoboa/frontend_dist/assets/{ProviderEditView-zh7CY832.js → ProviderEditView-DIc_KMp4.js} +1 -1
  77. modoboa/frontend_dist/assets/{ProviderGeneralForm-BQU7t3ma.js → ProviderGeneralForm-VpYAY2D4.js} +1 -1
  78. modoboa/frontend_dist/assets/{ProvidersView-CoF_ZkZA.js → ProvidersView-CgNIFDfD.js} +1 -1
  79. modoboa/frontend_dist/assets/QuarantineLayout-aTeFWNaK.js +1 -0
  80. modoboa/frontend_dist/assets/{QuarantineView-DNvpoycb.js → QuarantineView-n30IFBjf.js} +1 -1
  81. modoboa/frontend_dist/assets/ReplyEmailView-To3fx256.js +1 -0
  82. modoboa/frontend_dist/assets/ResourcesForm-Dy_SbQPT.js +1 -0
  83. modoboa/frontend_dist/assets/SelfServiceLayout-CsOvD1_L.js +1 -0
  84. modoboa/frontend_dist/assets/{SettingsView-gQiJ2NVb.js → SettingsView-oiWlLNP2.js} +2 -2
  85. modoboa/frontend_dist/assets/{StatisticsView-DYalet_q.js → StatisticsView-CTON4fgZ.js} +1 -1
  86. modoboa/frontend_dist/assets/{TimeSerieChart-BZ2htbFk.js → TimeSerieChart-DR0-ujj7.js} +1 -1
  87. modoboa/frontend_dist/assets/{TimeSerieChart-CxiwMzE8.css → TimeSerieChart-Dn6Wznn8.css} +1 -1
  88. modoboa/frontend_dist/assets/UserLayout-BBz6nSHf.js +1 -0
  89. modoboa/frontend_dist/assets/{VAlert-4r6LxKtg.js → VAlert-BWUQvs3i.js} +1 -1
  90. modoboa/frontend_dist/assets/{VApp-CX_C7AUN.js → VApp-1CFpPM0s.js} +1 -1
  91. modoboa/frontend_dist/assets/{VAutocomplete-DNKmBvyZ.js → VAutocomplete-vTx-9foZ.js} +1 -1
  92. modoboa/frontend_dist/assets/{VAvatar-DbuoZWmf.js → VAvatar-Wz1UmZ2b.js} +1 -1
  93. modoboa/frontend_dist/assets/{VBadge-Bv2nvUmC.js → VBadge-C08Ii4Nb.js} +1 -1
  94. modoboa/frontend_dist/assets/{VCard-DzjUT5OP.js → VCard-BrQzTMsm.js} +1 -1
  95. modoboa/frontend_dist/assets/{VCheckbox-dr7UFjl4.js → VCheckbox-IdHLHDAe.js} +1 -1
  96. modoboa/frontend_dist/assets/{VCheckboxBtn-CpFdBnTv.js → VCheckboxBtn-BMf4a9DP.js} +1 -1
  97. modoboa/frontend_dist/assets/{VChip-CaQvfmkw.js → VChip-B1E7xQW1.js} +1 -1
  98. modoboa/frontend_dist/assets/VColorPicker-CuNM9hII.js +1 -0
  99. modoboa/frontend_dist/assets/{VContainer-74Dnn8Ux.js → VContainer-f9kXL-37.js} +1 -1
  100. modoboa/frontend_dist/assets/{VDataTable-CL7yHvG7.js → VDataTable-CVJjOdhF.js} +1 -1
  101. modoboa/frontend_dist/assets/{VDataTableServer-BqvNcIdw.js → VDataTableServer-BSZUbic1.js} +1 -1
  102. modoboa/frontend_dist/assets/{VDataTableVirtual--KsOP8i6.js → VDataTableVirtual-Ceu9uaGm.js} +1 -1
  103. modoboa/frontend_dist/assets/{VDialog-DmTGCGR0.js → VDialog-BF9xR7BQ.js} +1 -1
  104. modoboa/frontend_dist/assets/{VExpansionPanels-B7sSTCwd.js → VExpansionPanels-Rq8tzNGV.js} +1 -1
  105. modoboa/frontend_dist/assets/{VFileInput-SULIc6F3.js → VFileInput-CXyx9q4a.js} +1 -1
  106. modoboa/frontend_dist/assets/{VForm-DsRLc-sa.js → VForm-RVvaatfV.js} +1 -1
  107. modoboa/frontend_dist/assets/{VInput-DVKUObZe.js → VInput-ssnfbpwr.js} +1 -1
  108. modoboa/frontend_dist/assets/{VMenu-nv0XOgg0.js → VMenu-BPG7b7dT.js} +1 -1
  109. modoboa/frontend_dist/assets/{VPicker-DnDSWJHJ.js → VPicker-Cv_7ON7Q.js} +1 -1
  110. modoboa/frontend_dist/assets/{VProgressCircular-qK6p5X_Y.js → VProgressCircular-Bdwj7JuI.js} +1 -1
  111. modoboa/frontend_dist/assets/{VRadioGroup-CbiPLy0t.js → VRadioGroup-BdEZyWNi.js} +1 -1
  112. modoboa/frontend_dist/assets/{VRow-DJ0NB63-.js → VRow-DGPh2Qmm.js} +1 -1
  113. modoboa/frontend_dist/assets/{VSelect-CxCFMHyF.js → VSelect-CzmrBwOO.js} +1 -1
  114. modoboa/frontend_dist/assets/{VSelectionControl-C-6A4us5.js → VSelectionControl-BIXXUgD4.js} +1 -1
  115. modoboa/frontend_dist/assets/{VSheet-DI6SxLnG.js → VSheet-C07oo1bg.js} +1 -1
  116. modoboa/frontend_dist/assets/VSpacer-Pa16wvUF.js +1 -0
  117. modoboa/frontend_dist/assets/{VSwitch-DPnjPQuU.js → VSwitch-C8Eq78Y3.js} +1 -1
  118. modoboa/frontend_dist/assets/{VTable-ldTxgQPW.js → VTable-C08Q6ok2.js} +1 -1
  119. modoboa/frontend_dist/assets/{VTabs-aS8WSL9I.js → VTabs-CaqxP8RF.js} +1 -1
  120. modoboa/frontend_dist/assets/{VTextField-DKbr4H5w.js → VTextField-BBIziqiv.js} +1 -1
  121. modoboa/frontend_dist/assets/{VTextarea-BttkFsM4.js → VTextarea-PURjBZRs.js} +1 -1
  122. modoboa/frontend_dist/assets/{VToolbar-BxX3W2kR.js → VToolbar-CILwTR5O.js} +1 -1
  123. modoboa/frontend_dist/assets/VWindowItem-l3wU5Kto.js +1 -0
  124. modoboa/frontend_dist/assets/WebmailLayout-uF8MMy0l.js +1 -0
  125. modoboa/frontend_dist/assets/{accounts-CC2F0a0c.js → accounts-DkNidbb0.js} +1 -1
  126. modoboa/frontend_dist/assets/{admin-CHCHFGI6.js → admin-C5XWZaxP.js} +1 -1
  127. modoboa/frontend_dist/assets/{aliases-C9bUD4Ws.js → aliases-eOyMwyZV.js} +1 -1
  128. modoboa/frontend_dist/assets/{amavis-DCVJxuui.js → amavis-BOgLfXLH.js} +1 -1
  129. modoboa/frontend_dist/assets/{amavis-BhzV4rgf.js → amavis-w7390k8i.js} +1 -1
  130. modoboa/frontend_dist/assets/{contacts-Dxz6eWpf.js → contacts-Ch-bKxJM.js} +1 -1
  131. modoboa/frontend_dist/assets/domains-DEEhRTFJ.js +1 -0
  132. modoboa/frontend_dist/assets/{domains.store-BLKRipG8.js → domains.store-BhRRATEd.js} +1 -1
  133. modoboa/frontend_dist/assets/{filter-rmxrcjKk.js → filter-CfvL3jIf.js} +1 -1
  134. modoboa/frontend_dist/assets/{forwardRefs-CpzzjgpX.js → forwardRefs-GE5Osi9V.js} +1 -1
  135. modoboa/frontend_dist/assets/{global.store-DndbMXYb.js → global.store-CxPrtY0_.js} +1 -1
  136. modoboa/frontend_dist/assets/importExport-C1_milrO.js +1 -0
  137. modoboa/frontend_dist/assets/index-D9OmnhdE.js +982 -0
  138. modoboa/frontend_dist/assets/{layout-DbjDe3Wl.js → layout-CuwY6Rle.js} +1 -1
  139. modoboa/frontend_dist/assets/{layout.store-Vq5mvIp7.js → layout.store-uEYOXtgD.js} +1 -1
  140. modoboa/frontend_dist/assets/{logos-Bvcy0usu.js → logos-BOVDV-my.js} +1 -1
  141. modoboa/frontend_dist/assets/{logs-BuItINky.js → logs-DT7l7Npx.js} +1 -1
  142. modoboa/frontend_dist/assets/{parameters-C8IYEP7q.js → parameters-DlTg3gyZ.js} +1 -1
  143. modoboa/frontend_dist/assets/{parameters.store-1cwSP2JP.js → parameters.store-eTs-B-pe.js} +1 -1
  144. modoboa/frontend_dist/assets/{permissions-DQjAcO9S.js → permissions-B-P8ks2E.js} +1 -1
  145. modoboa/frontend_dist/assets/{ssrBoot-BxIQ9ccA.js → ssrBoot-DaeAGyhc.js} +1 -1
  146. modoboa/frontend_dist/assets/{tag-3cfI1_f7.js → tag-jImTUiWx.js} +1 -1
  147. modoboa/frontend_dist/assets/theme-tqh89n3L.js +1 -0
  148. modoboa/frontend_dist/assets/transports-BnIcB3M9.js +1 -0
  149. modoboa/frontend_dist/assets/{webmail-B2IUjaxM.js → webmail-Dqo8FjAw.js} +1 -1
  150. modoboa/frontend_dist/index.html +1 -1
  151. modoboa/locale/ja_JP/LC_MESSAGES/django.mo +0 -0
  152. modoboa/locale/ja_JP/LC_MESSAGES/django.po +1 -1
  153. modoboa/relaydomains/tests.py +1 -1
  154. modoboa/static/css/offline.css +7 -20
  155. modoboa/templates/registration/base.html +18 -0
  156. modoboa/templates/registration/login.html +1 -1
  157. modoboa/urls.py +1 -5
  158. {modoboa-2.5.1.dist-info → modoboa-2.6.1.dist-info}/METADATA +9 -9
  159. {modoboa-2.5.1.dist-info → modoboa-2.6.1.dist-info}/RECORD +164 -156
  160. {modoboa-2.5.1.dist-info → modoboa-2.6.1.dist-info}/licenses/LICENSE +1 -1
  161. modoboa/core/api/v1/tests.py +0 -26
  162. modoboa/frontend_dist/assets/AccountLayout-U386K8zy.js +0 -1
  163. modoboa/frontend_dist/assets/AdminLayout-Cxm1lggg.js +0 -1
  164. modoboa/frontend_dist/assets/AlarmsView-9yKGbmkC.css +0 -1
  165. modoboa/frontend_dist/assets/AlarmsView-Bcjsicac.js +0 -1
  166. modoboa/frontend_dist/assets/AliasEditView-Cx9410JP.css +0 -1
  167. modoboa/frontend_dist/assets/AliasEditView-k3rVt1tG.js +0 -1
  168. modoboa/frontend_dist/assets/AliasRecipientForm-IehUzKok.js +0 -1
  169. modoboa/frontend_dist/assets/ComposeEmailView-DLv3wk1k.js +0 -1
  170. modoboa/frontend_dist/assets/ConfirmDialog-CcPrCKuI.js +0 -1
  171. modoboa/frontend_dist/assets/ConnectedLayout-CWlBK7Hf.js +0 -1
  172. modoboa/frontend_dist/assets/DashboardView-DXVZMbMo.js +0 -1
  173. modoboa/frontend_dist/assets/DomainsView-CEEU9btK.js +0 -1
  174. modoboa/frontend_dist/assets/DomainsView-DZ-ss9bI.css +0 -1
  175. modoboa/frontend_dist/assets/EmptyLayout-BXgcfMLH.js +0 -1
  176. modoboa/frontend_dist/assets/ForwardEmailView-Bgv3JQb6.js +0 -1
  177. modoboa/frontend_dist/assets/IdentitiesView-DPrrRMS5.css +0 -1
  178. modoboa/frontend_dist/assets/IdentitiesView-Dld9IloZ.js +0 -1
  179. modoboa/frontend_dist/assets/LoginCallbackView-DjyE2SG_.js +0 -1
  180. modoboa/frontend_dist/assets/MailboxView-DRrs9eLO.js +0 -1
  181. modoboa/frontend_dist/assets/ParametersForm-3qXttTuQ.js +0 -1
  182. modoboa/frontend_dist/assets/ParametersForm-Dk-qwlRm.css +0 -1
  183. modoboa/frontend_dist/assets/ParametersView-3Ns04cpQ.js +0 -1
  184. modoboa/frontend_dist/assets/ParametersView-B5B5Dt6K.js +0 -1
  185. modoboa/frontend_dist/assets/ParametersView-DaKFNERg.css +0 -1
  186. modoboa/frontend_dist/assets/QuarantineLayout-CYBsrbJM.js +0 -1
  187. modoboa/frontend_dist/assets/ReplyEmailView-D1XTcglu.js +0 -1
  188. modoboa/frontend_dist/assets/ResourcesForm-BW8rUGgZ.js +0 -1
  189. modoboa/frontend_dist/assets/SelfServiceLayout-DfDHiYeX.js +0 -1
  190. modoboa/frontend_dist/assets/UserLayout-zUtHi-z-.js +0 -1
  191. modoboa/frontend_dist/assets/VColorPicker-ByGpCW5O.js +0 -1
  192. modoboa/frontend_dist/assets/VSpacer-CoJVmx8k.js +0 -1
  193. modoboa/frontend_dist/assets/VWindowItem-Cvqvdegd.js +0 -1
  194. modoboa/frontend_dist/assets/WebmailLayout-BT2k6U7q.js +0 -1
  195. modoboa/frontend_dist/assets/domains-C2cornvL.js +0 -1
  196. modoboa/frontend_dist/assets/importExport-C3uqrcok.js +0 -1
  197. modoboa/frontend_dist/assets/index-LhNzkzAh.js +0 -984
  198. modoboa/frontend_dist/assets/transports-D4Jk4-AP.js +0 -1
  199. {modoboa-2.5.1.data → modoboa-2.6.1.data}/scripts/modoboa-admin.py +0 -0
  200. {modoboa-2.5.1.dist-info → modoboa-2.6.1.dist-info}/WHEEL +0 -0
  201. {modoboa-2.5.1.dist-info → modoboa-2.6.1.dist-info}/entry_points.txt +0 -0
  202. {modoboa-2.5.1.dist-info → modoboa-2.6.1.dist-info}/top_level.txt +0 -0
@@ -13,7 +13,7 @@ from modoboa.admin import factories as admin_factories
13
13
  from modoboa.admin import models as admin_models
14
14
  from modoboa.core import factories as core_factories
15
15
  from modoboa.core import models as core_models
16
- from modoboa.lib.tests import ModoTestCase, ModoAPITestCase
16
+ from modoboa.lib.tests import ModoAPITestCase
17
17
 
18
18
  from modoboa.admin.factories import populate_database
19
19
 
@@ -53,7 +53,7 @@ class TestDataMixin:
53
53
  cls.scalendar2 = factories.SharedCalendarFactory(domain=cls.domain2)
54
54
 
55
55
 
56
- class AccessRuleTestCase(ModoTestCase):
56
+ class AccessRuleTestCase(ModoAPITestCase):
57
57
 
58
58
  @classmethod
59
59
  def setUpTestData(cls):
@@ -139,7 +139,7 @@ class UserCalendarViewSetTestCase(TestDataMixin, ModoAPITestCase):
139
139
 
140
140
  def setUp(self):
141
141
  """Initiate test context."""
142
- self.client.force_login(self.account)
142
+ self.client.force_authenticate(self.account)
143
143
  self.set_global_parameter("server_location", "http://localhost:5232")
144
144
 
145
145
  def test_get_calendars(self):
@@ -214,7 +214,7 @@ class SharedCalendarViewSetTestCase(TestDataMixin, ModoAPITestCase):
214
214
 
215
215
  def setUp(self):
216
216
  """Initiate test context."""
217
- self.client.force_login(self.admin_account)
217
+ self.client.force_authenticate(self.admin_account)
218
218
  self.set_global_parameter("server_location", "http://localhost:5232")
219
219
 
220
220
  def test_get_calendars(self):
@@ -304,7 +304,7 @@ class AccessRuleViewSetTestCase(TestDataMixin, ModoAPITestCase):
304
304
 
305
305
  def setUp(self):
306
306
  """Initiate test context."""
307
- self.client.force_login(self.account)
307
+ self.client.force_authenticate(self.account)
308
308
 
309
309
  def test_get_accessrules(self):
310
310
  """Test access rule retrieval."""
@@ -383,7 +383,7 @@ class EventViewSetTestCase(TestDataMixin, ModoAPITestCase):
383
383
  self.cal_mock.return_value = mocks.Calendar(client=self.client_mock)
384
384
  self.addCleanup(patcher2.stop)
385
385
 
386
- self.client.force_login(self.account)
386
+ self.client.force_authenticate(self.account)
387
387
  self.set_global_parameter("server_location", "http://localhost")
388
388
 
389
389
  def test_get_user_events(self):
@@ -550,7 +550,7 @@ class AttendeeViewSetTestCase(ModoAPITestCase):
550
550
 
551
551
  def setUp(self):
552
552
  """Initiate test context."""
553
- self.client.force_login(self.account)
553
+ self.client.force_authenticate(self.account)
554
554
 
555
555
  def test_get_attendees(self):
556
556
  """Test attendees retrieval."""
@@ -571,7 +571,7 @@ class MailboxViewSetTestCase(ModoAPITestCase):
571
571
 
572
572
  def setUp(self):
573
573
  """Initiate test context."""
574
- self.client.force_login(self.account)
574
+ self.client.force_authenticate(self.account)
575
575
 
576
576
  def test_get_mailboxes(self):
577
577
  """Test mailbox retrieval."""
modoboa/contacts/tests.py CHANGED
@@ -11,7 +11,7 @@ from django.utils import timezone
11
11
 
12
12
  from modoboa.admin import factories as admin_factories
13
13
  from modoboa.core import models as core_models
14
- from modoboa.lib.tests import ModoAPITestCase, ModoTestCase
14
+ from modoboa.lib.tests import ModoAPITestCase
15
15
 
16
16
  from . import factories
17
17
  from . import mocks
@@ -46,7 +46,7 @@ class TestDataMixin:
46
46
 
47
47
  def setUp(self, *args, **kwargs):
48
48
  """Initiate test context."""
49
- self.client.force_login(self.user)
49
+ self.client.force_authenticate(self.user)
50
50
  self.set_global_parameter(
51
51
  "server_location", "http://example.test/radicale/", app="calendars"
52
52
  )
@@ -72,8 +72,7 @@ class ViewsTestCase(TestDataMixin, ModoAPITestCase):
72
72
  def test_user_settings(self):
73
73
  """Check that remote collection creation request is sent."""
74
74
  # 1. Addressbook with contacts must be synced manually
75
- data = {"username": self.user.username, "password": "toto"}
76
- self.client.post(reverse("core:login"), data)
75
+ self.client.force_authenticate(self.user)
77
76
  self.enable_cdav_sync()
78
77
  self.addressbook.refresh_from_db()
79
78
  self.assertIs(self.addressbook.last_sync, None)
@@ -81,8 +80,7 @@ class ViewsTestCase(TestDataMixin, ModoAPITestCase):
81
80
  # 2. Addressbook with no contacts can be considered synced
82
81
  user = core_models.User.objects.get(username="user@test2.com")
83
82
  abook = user.addressbook_set.first()
84
- data = {"username": user.username, "password": "toto"}
85
- self.client.post(reverse("core:login"), data)
83
+ self.client.force_authenticate(user)
86
84
  abook.refresh_from_db()
87
85
  self.assertIs(abook.last_sync, None)
88
86
  # Now enable sync.
@@ -312,7 +310,7 @@ class EmailAddressViewSetTestCase(TestDataMixin, ModoAPITestCase):
312
310
  self.assertEqual(len(response.data), 3)
313
311
 
314
312
 
315
- class ImportTestCase(TestDataMixin, ModoTestCase):
313
+ class ImportTestCase(TestDataMixin, ModoAPITestCase):
316
314
 
317
315
  def setUp(self):
318
316
  super().setUp()
@@ -38,6 +38,19 @@ 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
+ EMAIL_CLIENT_CONNECTION_SETTINGS = {
42
+ 'imap': {
43
+ 'HOSTNAME': '{{ allowed_host }}',
44
+ 'SOCKET_TYPE': 'SSL',
45
+ 'PORT': 993,
46
+ },
47
+ 'smtp': {
48
+ 'HOSTNAME': '{{ allowed_host }}',
49
+ 'SOCKET_TYPE': 'STARTTLS',
50
+ 'PORT': 587
51
+ }
52
+ }
53
+
41
54
  # Security settings
42
55
 
43
56
  X_FRAME_OPTIONS = "SAMEORIGIN"
@@ -75,6 +88,7 @@ MODOBOA_APPS = (
75
88
  'modoboa.core',
76
89
  'modoboa.lib',
77
90
  'modoboa.admin',
91
+ 'modoboa.autoconfig',
78
92
  'modoboa.transport',
79
93
  'modoboa.relaydomains',
80
94
  'modoboa.limits',
@@ -221,7 +235,6 @@ REST_FRAMEWORK = {
221
235
  'DEFAULT_AUTHENTICATION_CLASSES': (
222
236
  'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
223
237
  'rest_framework.authentication.TokenAuthentication',
224
- 'rest_framework.authentication.SessionAuthentication',
225
238
  ),
226
239
  'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
227
240
  'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning',
@@ -232,7 +245,7 @@ SPECTACULAR_SETTINGS = {
232
245
  'SCHEMA_PATH_PREFIX': r'/api/v[0-9]',
233
246
  'TITLE': 'Modoboa API',
234
247
  'VERSION': None,
235
- 'SERVE_PERMISSIONS': ['rest_framework.permissions.IsAuthenticated'],
248
+ 'SERVE_AUTHENTICATION': [],
236
249
  }
237
250
 
238
251
  # Modoboa settings
@@ -348,6 +361,11 @@ LOGGING = {
348
361
  'facility': SysLogHandler.LOG_MAIL,
349
362
  'formatter': 'syslog'
350
363
  },
364
+ 'syslog': {
365
+ 'class': 'logging.handlers.SysLogHandler',
366
+ 'facility': SysLogHandler.LOG_SYSLOG,
367
+ 'formatter': 'syslog'
368
+ },
351
369
  'modoboa': {
352
370
  'class': 'modoboa.core.loggers.SQLHandler',
353
371
  }
@@ -368,6 +386,11 @@ LOGGING = {
368
386
  'level': 'INFO',
369
387
  'propagate': False
370
388
  },
389
+ 'modoboa.dns': {
390
+ 'handlers': ['syslog'],
391
+ 'level': 'INFO',
392
+ 'propagate': False
393
+ },
371
394
  'modoboa.policyd': {
372
395
  'handlers': ['syslog-mail'],
373
396
  'level': 'INFO',
modoboa/core/models.py CHANGED
@@ -220,7 +220,7 @@ class User(AbstractUser):
220
220
  return self.email
221
221
 
222
222
  @property
223
- def tfa_enabled(self):
223
+ def tfa_enabled(self) -> bool:
224
224
  return self.totp_enabled or self.webauthn_enabled
225
225
 
226
226
  def is_owner(self, obj):
@@ -158,6 +158,8 @@ class ProfileTestCase(LDAPTestCaseMixin, ModoAPITestCase):
158
158
 
159
159
  username = "testuser@example.com"
160
160
  self.authenticate(username, "test")
161
+ user = models.User.objects.get(username=username)
162
+ self.client.force_authenticate(user)
161
163
  response = self.client.post(
162
164
  reverse("v2:account-set-me-password"),
163
165
  {"password": "test", "new_password": "Toto1234"},
@@ -37,6 +37,23 @@ from .. import signals
37
37
  logger = logging.getLogger("modoboa.auth")
38
38
 
39
39
 
40
+ class ModoboaThemeMixin:
41
+
42
+ def dispatch(self, request, *args, **kwargs):
43
+ self.parameters = dict(param_tools.get_global_parameters(app="core"))
44
+ return super().dispatch(request, *args, **kwargs)
45
+
46
+ def get_context_data(self, **kwargs):
47
+ context = super().get_context_data(**kwargs)
48
+ context.update(
49
+ {
50
+ "theme_primary_color": self.parameters["theme_primary_color"],
51
+ "theme_primary_color_dark": self.parameters["theme_primary_color_dark"],
52
+ }
53
+ )
54
+ return context
55
+
56
+
40
57
  class LoginViewMixin:
41
58
  @cached_property
42
59
  def logger(self):
@@ -74,7 +91,7 @@ class LoginViewMixin:
74
91
  return response
75
92
 
76
93
 
77
- class LoginView(LoginViewMixin, auth_views.LoginView):
94
+ class LoginView(ModoboaThemeMixin, LoginViewMixin, auth_views.LoginView):
78
95
  """Login view with 2FA support."""
79
96
 
80
97
  form_class = forms.AuthenticationForm
@@ -86,13 +103,15 @@ class LoginView(LoginViewMixin, auth_views.LoginView):
86
103
  sender="login", location="loginpage"
87
104
  )
88
105
  announcements = [announcement[1] for announcement in announcements]
89
- context.update({"announcements": announcements})
106
+ context.update(
107
+ {
108
+ "announcements": announcements,
109
+ }
110
+ )
90
111
  return context
91
112
 
92
113
  def check_password_hash(self, user, form):
93
- condition = user.is_local and param_tools.get_global_parameter(
94
- "update_scheme", raise_exception=False
95
- )
114
+ condition = user.is_local and self.parameters.get("update_scheme")
96
115
  if not condition:
97
116
  return
98
117
  # check if password scheme is correct
@@ -157,7 +176,7 @@ def dologout(request):
157
176
  return HttpResponseRedirect(reverse("core:login"))
158
177
 
159
178
 
160
- class PasswordResetView(auth_views.PasswordResetView):
179
+ class PasswordResetView(ModoboaThemeMixin, auth_views.PasswordResetView):
161
180
  """Custom view to override form."""
162
181
 
163
182
  form_class = forms.PasswordResetForm
@@ -202,7 +221,7 @@ class PasswordResetView(auth_views.PasswordResetView):
202
221
  return HttpResponseRedirect(reverse("password_reset_confirm_code"))
203
222
 
204
223
 
205
- class VerifySMSCodeView(generic.FormView):
224
+ class VerifySMSCodeView(ModoboaThemeMixin, generic.FormView):
206
225
  """View to verify a code received by SMS."""
207
226
 
208
227
  form_class = forms.VerifySMSCodeForm
@@ -254,7 +273,7 @@ class ResendSMSCodeView(generic.View):
254
273
  return JsonResponse({"status": "ok"})
255
274
 
256
275
 
257
- class TwoFactorCodeVerifyView(LoginViewMixin, generic.FormView):
276
+ class TwoFactorCodeVerifyView(ModoboaThemeMixin, LoginViewMixin, generic.FormView):
258
277
  """View to verify a 2FA code after login."""
259
278
 
260
279
  form_class = forms.Verify2FACodeForm
@@ -1 +1 @@
1
- import{C as q}from"./ChoiceField-DnwXRkht.js";import{u as M,b as S,g as V,h as f,i as _,c as R,o as y,w as h,a as d,f as s,e as U,t as x,k as N,_ as C,z as D,m as j,l as Q,F as T,s as G}from"./index-LhNzkzAh.js";import{V as H,a as L}from"./VRow-DJ0NB63-.js";import{V as B}from"./VAlert-4r6LxKtg.js";import{c as P}from"./VAvatar-DbuoZWmf.js";import{V as k,r as F}from"./VForm-DsRLc-sa.js";import{_ as z}from"./AccountPasswordSubForm-YsaE_cDx.js";import{E as I}from"./EmailField-DeqDPm5j.js";import{V as E}from"./VTextField-DKbr4H5w.js";import{V as $}from"./VSwitch-DPnjPQuU.js";import{u as K}from"./domains.store-BLKRipG8.js";import{a as Y}from"./accounts-CC2F0a0c.js";import{V as J}from"./VChip-CaQvfmkw.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
+ import{C as q}from"./ChoiceField-APLYjZCH.js";import{u as M,b as S,h as V,i as f,j as _,c as R,o as y,w as h,a as d,f as s,e as U,t as x,k as N,_ as C,z as D,m as j,l as Q,F as T,s as G}from"./index-D9OmnhdE.js";import{V as H,a as L}from"./VRow-DGPh2Qmm.js";import{V as B}from"./VAlert-BWUQvs3i.js";import{c as P}from"./VAvatar-Wz1UmZ2b.js";import{V as k,r as F}from"./VForm-RVvaatfV.js";import{_ as z}from"./AccountPasswordSubForm-KRg2Sc3j.js";import{E as I}from"./EmailField-Cjy8TitF.js";import{V as E}from"./VTextField-BBIziqiv.js";import{V as $}from"./VSwitch-C8Eq78Y3.js";import{u as K}from"./domains.store-BhRRATEd.js";import{a as Y}from"./accounts-DkNidbb0.js";import{V as J}from"./VChip-B1E7xQW1.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{b as j,u as H,B as J,q as K,g as c,h as P,i as T,d as W,z as X,c as d,l as p,o,a,e as v,w as e,m as k,f as m,k as f,t as r,F as B,_ as Y}from"./index-LhNzkzAh.js";import{b as Z,a as ee,A as ae,_ as le}from"./AccountAliasForm-C0oHHyZL.js";import{_ as te}from"./ResourcesForm-BW8rUGgZ.js";import{L as oe}from"./LoadingData-G57nJ_JV.js";import{a as q}from"./accounts-CC2F0a0c.js";import{p as se}from"./parameters-C8IYEP7q.js";import{u as ue}from"./permissions-DQjAcO9S.js";import{d as V,c as U,V as L}from"./VAvatar-DbuoZWmf.js";import{V as g,c as b,a as x,b as re}from"./VExpansionPanels-B7sSTCwd.js";import{V as _,a as n}from"./VRow-DJ0NB63-.js";import{V as ne,a as ie}from"./VToolbar-BxX3W2kR.js";import"./ChoiceField-DnwXRkht.js";import"./VAlert-4r6LxKtg.js";import"./VProgressCircular-qK6p5X_Y.js";import"./tag-3cfI1_f7.js";import"./VForm-DsRLc-sa.js";import"./VInput-DVKUObZe.js";import"./forwardRefs-CpzzjgpX.js";import"./ssrBoot-BxIQ9ccA.js";import"./AccountPasswordSubForm-YsaE_cDx.js";import"./VTextField-DKbr4H5w.js";import"./VSwitch-DPnjPQuU.js";import"./VSelectionControl-C-6A4us5.js";import"./EmailField-DeqDPm5j.js";import"./domains.store-BLKRipG8.js";import"./domains-C2cornvL.js";import"./VChip-CaQvfmkw.js";import"./VContainer-74Dnn8Ux.js";/* empty css */const de={key:1},me={key:0},fe={key:0},ce={class:"mr-2"},_e={class:"mr-2"},ve={key:0},pe={class:"mr-2"},ke={class:"mr-2"},ye={class:"mr-2"},Ve={key:0},ge={class:"mr-2"},be={key:0},xe={class:"mr-2"},Fe={class:"mr-2"},we={class:"mt-4 d-flex justify-end"},he={__name:"AccountEditForm",setup(G){const{$gettext:i}=j(),N=H(),F=J(),O=K(),{canSetRole:S}=ue(),l=c({pk:F.params.id}),w=P(()=>l.value.username&&l.value.username.indexOf("@")!==-1),$=P(()=>{const t=C.value.params&&C.value.params.enable_admin_limits&&l.value.role!==T.USER&&l.value.role!==T.SUPER_ADMIN;return t===void 0?!1:t}),C=c({}),h=c(0),y=c(!1),E=c(!1),A=c(),I=c(),M=c(),D=c(),R=c(),Q=P(()=>{const t={roleForm:A,generalForm:I};return w.value&&(t.aliasForm=D,t.mailboxForm=M),$.value&&(t.resourcesForm=R),t});async function z(){E.value=!1,h.value=[];for(const[t,s]of Object.entries(Q.value))if(s.value!=null){const{valid:u}=await s.value.vFormRef.validate();u||(E.value=!0,h.value.push(t))}if(!E.value){y.value=!0;try{const t={...l.value};w.value?t.mailbox.full_address=t.username:t.mailbox&&delete t.mailbox.full_address,t.new_password&&(t.password=t.new_password,delete t.new_password,delete t.password_confirmation),$.value&&R.value!==null&&(t.resources=R.value.getPayload()),t.aliases===null&&delete t.aliases,S.value||(l.value.pk===N.authUser.pk?t.role=N.authUser.role:t.role=T.USER),await q.patch(l.value.pk,t),O.push({name:"AccountDetail",params:{id:F.params.id}})}finally{y.value=!1}}}return W(()=>{q.get(F.params.id).then(t=>{l.value=t.data,y.value=!1}),S.value&&se.getGlobalApplication("limits").then(t=>{C.value=t.data})}),X(l,()=>{delete l.value.domains,l.value.mailbox===null&&delete l.value.mailbox},{deep:!0}),(t,s)=>y.value?(o(),d(oe,{key:0})):(o(),p("div",de,[a(re,{modelValue:h.value,"onUpdate:modelValue":s[5]||(s[5]=u=>h.value=u),multiple:E.value},{default:e(()=>[m(S)?(o(),d(g,{key:0,eager:"",value:"roleForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Role")),1)]),_:1}),a(n,{cols:"8",class:"text-medium-emphasis"},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",me)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[A.value?(o(),d(n,{key:0,cols:"6"},{default:e(()=>[f(r(A.value.roleLabel),1)]),_:1})):k("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(Z,{ref_key:"roleForm",ref:A,modelValue:l.value,"onUpdate:modelValue":s[0]||(s[0]=u=>l.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):k("",!0),a(g,{eager:"",value:"generalForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Identification")),1)]),_:1}),a(n,{cols:"8",class:""},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",fe)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[a(n,{cols:"6"},{default:e(()=>[v("div",ce,r(m(i)("Username:"))+" "+r(l.value.username),1)]),_:1}),a(n,{cols:"6"},{default:e(()=>[v("div",_e,[f(r(m(i)("Enabled"))+" ",1),l.value.is_active?(o(),d(U,{key:0,color:"success"},{default:e(()=>s[7]||(s[7]=[f("mdi-check-circle-outline")])),_:1,__:[7]})):(o(),d(U,{key:1},{default:e(()=>s[8]||(s[8]=[f("mdi-close-circle-outline")])),_:1,__:[8]}))])]),_:1})]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(ee,{ref_key:"generalForm",ref:I,modelValue:l.value,"onUpdate:modelValue":s[1]||(s[1]=u=>l.value=u),editing:""},null,8,["modelValue"])]),_:1})]),_:1}),w.value?(o(),d(g,{key:1,eager:"",value:"mailboxForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Mailbox")),1)]),_:1}),a(n,{cols:"8",class:""},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",ve)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l.value.mailbox?(o(),p(B,{key:0},[l.value.mailbox.use_domain_quota?(o(),d(n,{key:0,cols:"6"},{default:e(()=>[v("div",pe,r(m(i)("Quota: "))+" "+r(m(i)("domain's default value")),1)]),_:1})):(o(),d(n,{key:1,cols:"6"},{default:e(()=>[v("div",ke,r(m(i)("Quota: "))+" "+r(l.value.mailbox.quota),1)]),_:1})),a(n,{cols:"6"},{default:e(()=>[v("div",ye,[f(r(m(i)("Send only"))+" ",1),l.value.mailbox.is_send_only?(o(),d(U,{key:0,color:"success"},{default:e(()=>s[9]||(s[9]=[f("mdi-check-circle-outline")])),_:1,__:[9]})):(o(),d(U,{key:1},{default:e(()=>s[10]||(s[10]=[f("mdi-close-circle-outline")])),_:1,__:[10]}))])]),_:1})],64)):k("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(ae,{ref_key:"mailboxForm",ref:M,modelValue:l.value,"onUpdate:modelValue":s[2]||(s[2]=u=>l.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):k("",!0),w.value?(o(),d(g,{key:2,eager:"",value:"aliasForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Alias")),1)]),_:1}),a(n,{cols:"8",class:""},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",Ve)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l.value.aliases?(o(),d(n,{key:0,cols:"6"},{default:e(()=>[v("div",ge,r(m(i)("Number of associated alias:"))+" "+r(l.value.aliases.length),1)]),_:1})):k("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(le,{ref_key:"aliasForm",ref:D,modelValue:l.value,"onUpdate:modelValue":s[3]||(s[3]=u=>l.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):k("",!0),$.value?(o(),d(g,{key:3,eager:"",value:"resourcesForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Resources")),1)]),_:1}),a(n,{cols:"8",class:""},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",be)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l.value.resources!=null&&l.value.resources.length==2?(o(),p(B,{key:0},[a(n,{cols:"6"},{default:e(()=>[v("div",xe,r(m(i)("Number of allowed mailboxes:"))+" "+r(l.value.resources[0].max_value),1)]),_:1}),a(n,{cols:"6"},{default:e(()=>[v("div",Fe,r(m(i)("Number of allowed mailbox aliases:"))+" "+r(l.value.resources[1].max_value),1)]),_:1})],64)):k("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(te,{ref_key:"resourcesForm",ref:R,modelValue:l.value.resources,"onUpdate:modelValue":s[4]||(s[4]=u=>l.value.resources=u)},null,8,["modelValue"])]),_:1})]),_:1})):k("",!0)]),_:1},8,["modelValue","multiple"]),v("div",we,[a(L,{loading:y.value,variant:"outlined",onClick:s[6]||(s[6]=u=>t.$router.go(-1))},{default:e(()=>[f(r(m(i)("Cancel")),1)]),_:1},8,["loading"]),a(L,{class:"ml-4",color:"primary darken-1",variant:"outlined",loading:y.value,onClick:z},{default:e(()=>[f(r(m(i)("Save")),1)]),_:1},8,["loading"])])]))}},Ee={__name:"AccountEditView",setup(G){const{$gettext:i}=j();return(N,F)=>(o(),p(B,null,[a(ne,{flat:""},{default:e(()=>[a(ie,null,{default:e(()=>[f(r(m(i)("Edit account")),1)]),_:1})]),_:1}),a(he)],64))}},la=Y(Ee,[["__scopeId","data-v-4019c7f8"]]);export{la as default};
1
+ import{b as L,u as H,B as J,q as K,h as c,i as P,j as T,d as W,z as X,c as d,l as p,o,a,e as v,w as e,m as k,f as m,k as f,t as r,F as B,_ as Y}from"./index-D9OmnhdE.js";import{b as Z,a as ee,A as ae,_ as le}from"./AccountAliasForm-CqtTlaTr.js";import{_ as te}from"./ResourcesForm-Dy_SbQPT.js";import{L as oe}from"./LoadingData-fbGWs7ji.js";import{a as j}from"./accounts-DkNidbb0.js";import{p as se}from"./parameters-DlTg3gyZ.js";import{u as ue}from"./permissions-B-P8ks2E.js";import{d as V,c as U,V as q}from"./VAvatar-Wz1UmZ2b.js";import{V as g,c as b,a as x,b as re}from"./VExpansionPanels-Rq8tzNGV.js";import{V as _,a as n}from"./VRow-DGPh2Qmm.js";import{V as ne,a as ie}from"./VToolbar-CILwTR5O.js";import"./ChoiceField-APLYjZCH.js";import"./VAlert-BWUQvs3i.js";import"./VProgressCircular-Bdwj7JuI.js";import"./tag-jImTUiWx.js";import"./VForm-RVvaatfV.js";import"./VInput-ssnfbpwr.js";import"./forwardRefs-GE5Osi9V.js";import"./ssrBoot-DaeAGyhc.js";import"./AccountPasswordSubForm-KRg2Sc3j.js";import"./VTextField-BBIziqiv.js";import"./VSwitch-C8Eq78Y3.js";import"./VSelectionControl-BIXXUgD4.js";import"./EmailField-Cjy8TitF.js";import"./domains.store-BhRRATEd.js";import"./domains-DEEhRTFJ.js";import"./VChip-B1E7xQW1.js";import"./VContainer-f9kXL-37.js";/* empty css */const de={key:1},me={key:0},fe={key:0},ce={class:"mr-2"},_e={class:"mr-2"},ve={key:0},pe={class:"mr-2"},ke={class:"mr-2"},ye={class:"mr-2"},Ve={key:0},ge={class:"mr-2"},be={key:0},xe={class:"mr-2"},Fe={class:"mr-2"},we={class:"mt-4 d-flex justify-end"},he={__name:"AccountEditForm",setup(G){const{$gettext:i}=L(),N=H(),F=J(),O=K(),{canSetRole:S}=ue(),l=c({pk:F.params.id}),w=P(()=>l.value.username&&l.value.username.indexOf("@")!==-1),$=P(()=>{const t=C.value.params&&C.value.params.enable_admin_limits&&l.value.role!==T.USER&&l.value.role!==T.SUPER_ADMIN;return t===void 0?!1:t}),C=c({}),h=c(0),y=c(!1),E=c(!1),A=c(),I=c(),M=c(),D=c(),R=c(),Q=P(()=>{const t={roleForm:A,generalForm:I};return w.value&&(t.aliasForm=D,t.mailboxForm=M),$.value&&(t.resourcesForm=R),t});async function z(){E.value=!1,h.value=[];for(const[t,s]of Object.entries(Q.value))if(s.value!=null){const{valid:u}=await s.value.vFormRef.validate();u||(E.value=!0,h.value.push(t))}if(!E.value){y.value=!0;try{const t={...l.value};w.value?t.mailbox.full_address=t.username:t.mailbox&&delete t.mailbox.full_address,t.new_password&&(t.password=t.new_password,delete t.new_password,delete t.password_confirmation),$.value&&R.value!==null&&(t.resources=R.value.getPayload()),t.aliases===null&&delete t.aliases,S.value||(l.value.pk===N.authUser.pk?t.role=N.authUser.role:t.role=T.USER),await j.patch(l.value.pk,t),O.push({name:"AccountDetail",params:{id:F.params.id}})}finally{y.value=!1}}}return W(()=>{j.get(F.params.id).then(t=>{l.value=t.data,y.value=!1}),S.value&&se.getGlobalApplication("limits").then(t=>{C.value=t.data})}),X(l,()=>{delete l.value.domains,l.value.mailbox===null&&delete l.value.mailbox},{deep:!0}),(t,s)=>y.value?(o(),d(oe,{key:0})):(o(),p("div",de,[a(re,{modelValue:h.value,"onUpdate:modelValue":s[5]||(s[5]=u=>h.value=u),multiple:E.value},{default:e(()=>[m(S)?(o(),d(g,{key:0,eager:"",value:"roleForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Role")),1)]),_:1}),a(n,{cols:"8",class:"text-medium-emphasis"},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",me)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[A.value?(o(),d(n,{key:0,cols:"6"},{default:e(()=>[f(r(A.value.roleLabel),1)]),_:1})):k("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(Z,{ref_key:"roleForm",ref:A,modelValue:l.value,"onUpdate:modelValue":s[0]||(s[0]=u=>l.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):k("",!0),a(g,{eager:"",value:"generalForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Identification")),1)]),_:1}),a(n,{cols:"8",class:""},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",fe)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[a(n,{cols:"6"},{default:e(()=>[v("div",ce,r(m(i)("Username:"))+" "+r(l.value.username),1)]),_:1}),a(n,{cols:"6"},{default:e(()=>[v("div",_e,[f(r(m(i)("Enabled"))+" ",1),l.value.is_active?(o(),d(U,{key:0,color:"success"},{default:e(()=>s[7]||(s[7]=[f("mdi-check-circle-outline")])),_:1,__:[7]})):(o(),d(U,{key:1},{default:e(()=>s[8]||(s[8]=[f("mdi-close-circle-outline")])),_:1,__:[8]}))])]),_:1})]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(ee,{ref_key:"generalForm",ref:I,modelValue:l.value,"onUpdate:modelValue":s[1]||(s[1]=u=>l.value=u),editing:""},null,8,["modelValue"])]),_:1})]),_:1}),w.value?(o(),d(g,{key:1,eager:"",value:"mailboxForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Mailbox")),1)]),_:1}),a(n,{cols:"8",class:""},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",ve)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l.value.mailbox?(o(),p(B,{key:0},[l.value.mailbox.use_domain_quota?(o(),d(n,{key:0,cols:"6"},{default:e(()=>[v("div",pe,r(m(i)("Quota: "))+" "+r(m(i)("domain's default value")),1)]),_:1})):(o(),d(n,{key:1,cols:"6"},{default:e(()=>[v("div",ke,r(m(i)("Quota: "))+" "+r(l.value.mailbox.quota),1)]),_:1})),a(n,{cols:"6"},{default:e(()=>[v("div",ye,[f(r(m(i)("Send only"))+" ",1),l.value.mailbox.is_send_only?(o(),d(U,{key:0,color:"success"},{default:e(()=>s[9]||(s[9]=[f("mdi-check-circle-outline")])),_:1,__:[9]})):(o(),d(U,{key:1},{default:e(()=>s[10]||(s[10]=[f("mdi-close-circle-outline")])),_:1,__:[10]}))])]),_:1})],64)):k("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(ae,{ref_key:"mailboxForm",ref:M,modelValue:l.value,"onUpdate:modelValue":s[2]||(s[2]=u=>l.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):k("",!0),w.value?(o(),d(g,{key:2,eager:"",value:"aliasForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Alias")),1)]),_:1}),a(n,{cols:"8",class:""},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",Ve)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l.value.aliases?(o(),d(n,{key:0,cols:"6"},{default:e(()=>[v("div",ge,r(m(i)("Number of associated alias:"))+" "+r(l.value.aliases.length),1)]),_:1})):k("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(le,{ref_key:"aliasForm",ref:D,modelValue:l.value,"onUpdate:modelValue":s[3]||(s[3]=u=>l.value=u)},null,8,["modelValue"])]),_:1})]),_:1})):k("",!0),$.value?(o(),d(g,{key:3,eager:"",value:"resourcesForm"},{default:e(()=>[a(b,null,{default:e(({expanded:u})=>[a(_,{"no-gutters":""},{default:e(()=>[a(n,{cols:"4"},{default:e(()=>[f(r(m(i)("Resources")),1)]),_:1}),a(n,{cols:"8",class:""},{default:e(()=>[a(V,{"leave-absolute":""},{default:e(()=>[u?(o(),p("span",be)):(o(),d(_,{key:1,"no-gutters":"",style:{width:"100%"}},{default:e(()=>[l.value.resources!=null&&l.value.resources.length==2?(o(),p(B,{key:0},[a(n,{cols:"6"},{default:e(()=>[v("div",xe,r(m(i)("Number of allowed mailboxes:"))+" "+r(l.value.resources[0].max_value),1)]),_:1}),a(n,{cols:"6"},{default:e(()=>[v("div",Fe,r(m(i)("Number of allowed mailbox aliases:"))+" "+r(l.value.resources[1].max_value),1)]),_:1})],64)):k("",!0)]),_:1}))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1}),a(x,null,{default:e(()=>[a(te,{ref_key:"resourcesForm",ref:R,modelValue:l.value.resources,"onUpdate:modelValue":s[4]||(s[4]=u=>l.value.resources=u)},null,8,["modelValue"])]),_:1})]),_:1})):k("",!0)]),_:1},8,["modelValue","multiple"]),v("div",we,[a(q,{loading:y.value,variant:"outlined",onClick:s[6]||(s[6]=u=>t.$router.go(-1))},{default:e(()=>[f(r(m(i)("Cancel")),1)]),_:1},8,["loading"]),a(q,{class:"ml-4",color:"primary darken-1",variant:"outlined",loading:y.value,onClick:z},{default:e(()=>[f(r(m(i)("Save")),1)]),_:1},8,["loading"])])]))}},Ee={__name:"AccountEditView",setup(G){const{$gettext:i}=L();return(N,F)=>(o(),p(B,null,[a(ne,{flat:""},{default:e(()=>[a(ie,null,{default:e(()=>[f(r(m(i)("Edit account")),1)]),_:1})]),_:1}),a(he)],64))}},la=Y(Ee,[["__scopeId","data-v-4019c7f8"]]);export{la as default};
@@ -0,0 +1 @@
1
+ import{u as n,b as c,h as u,i as a,c as l,o as f}from"./index-D9OmnhdE.js";import{_}from"./ConnectedLayout-CiKHST8t.js";import{p as h}from"./parameters-DlTg3gyZ.js";import"./theme-tqh89n3L.js";import"./VContainer-f9kXL-37.js";/* empty css */import"./tag-jImTUiWx.js";import"./VApp-1CFpPM0s.js";import"./layout-CuwY6Rle.js";import"./ssrBoot-DaeAGyhc.js";import"./logos-BOVDV-my.js";import"./layout.store-uEYOXtgD.js";import"./VAvatar-Wz1UmZ2b.js";import"./VProgressCircular-Bdwj7JuI.js";import"./forwardRefs-GE5Osi9V.js";import"./VMenu-BPG7b7dT.js";import"./global.store-CxPrtY0_.js";import"./VBadge-C08Ii4Nb.js";import"./VCard-BrQzTMsm.js";import"./VRow-DGPh2Qmm.js";import"./VSheet-C07oo1bg.js";const z={__name:"AccountLayout",setup(d){const s=n(),{$gettext:e}=c(),r=u([]),m=a(()=>s.authUser),p=a(()=>{const t=[],i={contacts:"mdi-contacts-outline",webmail:"mdi-at"};if(t.push({text:e("Settings"),to:{name:"AccountSettings"},icon:"mdi-cog"}),m.value.mailbox){t.push({text:e("Filters"),to:{name:"AccountFilters"},icon:"mdi-filter"});for(const o of r.value)t.push({icon:i[o.name],text:o.label,to:{name:"AccountParametersEdit",params:{app:o.name}}})}return t});return h.getUserApplications().then(t=>{r.value=t.data}),(t,i)=>(f(),l(_,{color:"grey","menu-items":p.value},null,8,["menu-items"]))}};export{z as default};
@@ -1 +1 @@
1
- import{b as P,n as _,h as b,l as m,o as n,m 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-LhNzkzAh.js";import{a as E}from"./accounts-CC2F0a0c.js";import{r as c}from"./VForm-DsRLc-sa.js";import{V as w}from"./VTextField-DKbr4H5w.js";import{a as g,V as R}from"./VRow-DJ0NB63-.js";import{V as S}from"./VSwitch-DPnjPQuU.js";import{V as q}from"./VAlert-4r6LxKtg.js";import{V as A}from"./VAvatar-DbuoZWmf.js";const F={class:"m-label"},N={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",F,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(q,{key:0,style:{"background-color":"#515d78"},class:"ml-6",density:"compact"},{default:u(()=>[v("span",N,y(e.value.new_password),1),o(A,{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 _};
1
+ import{b as P,n as _,i as b,l as m,o as n,m 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-D9OmnhdE.js";import{a as E}from"./accounts-DkNidbb0.js";import{r as c}from"./VForm-RVvaatfV.js";import{V as w}from"./VTextField-BBIziqiv.js";import{a as g,V as R}from"./VRow-DGPh2Qmm.js";import{V as S}from"./VSwitch-C8Eq78Y3.js";import{V as q}from"./VAlert-BWUQvs3i.js";import{V as A}from"./VAvatar-Wz1UmZ2b.js";const F={class:"m-label"},N={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",F,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(q,{key:0,style:{"background-color":"#515d78"},class:"ml-6",density:"compact"},{default:u(()=>[v("span",N,y(e.value.new_password),1),o(A,{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 _};
@@ -1 +1 @@
1
- import{c as d,o,w as e,a as t,e as k,t as a,l as _,F as p,s as T,k as s,C as w,n as P,b as q,g as x,f,m as v,_ as U,B as G,i as B}from"./index-LhNzkzAh.js";import{u as z}from"./permissions-DQjAcO9S.js";import{a as Q}from"./accounts-CC2F0a0c.js";import{p as H}from"./parameters-C8IYEP7q.js";import{c as A,V,a as C}from"./VCard-DzjUT5OP.js";import{V as J}from"./VChip-CaQvfmkw.js";import{V as K}from"./VDataTable-CL7yHvG7.js";import{V as $,c as E,a as D}from"./VAvatar-DbuoZWmf.js";import{V as W}from"./VTextField-DKbr4H5w.js";import{V as g,a as c}from"./VRow-DJ0NB63-.js";import{V as X,a as Y}from"./VToolbar-BxX3W2kR.js";import"./tag-3cfI1_f7.js";import"./VProgressCircular-qK6p5X_Y.js";import"./VSelect-CxCFMHyF.js";import"./VInput-DVKUObZe.js";import"./forwardRefs-CpzzjgpX.js";import"./ssrBoot-BxIQ9ccA.js";import"./VMenu-nv0XOgg0.js";import"./VCheckboxBtn-CpFdBnTv.js";import"./VSelectionControl-C-6A4us5.js";import"./VTable-ldTxgQPW.js";import"./filter-rmxrcjKk.js";/* empty css */const Z={class:"headline"},ee={__name:"AccountAliases",props:{account:{type:Object,default:null}},setup(l){return(n,m)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",Z,a(n.$gettext("Aliases")),1)]),_:1}),t(V,null,{default:e(()=>[(o(!0),_(p,null,T(l.account.aliases,u=>(o(),d(J,{key:u,class:"mr-2 mt-2"},{default:e(()=>[s(a(u),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}/`)}},te={class:"headline"},ae={key:0},le={__name:"AccountSenderAddresses",props:{account:{type:Object,default:null}},setup(l){const n=P(),{$gettext:m}=q(),u=l,r=x([]),y=x(!1),i=x(""),F=[{title:m("Address"),key:"address"},{title:"",key:"actions",align:"end",sortable:!1}];function I(){r.value.push({}),y.value=!0}function R(){M.getAllForMailbox(u.account.mailbox.pk).then(h=>{r.value=h.data})}function L(){const h={address:i.value,mailbox:u.account.mailbox.pk};M.create(h).then(()=>{R(),i.value=null,y.value=!1,n.displayNotification({msg:m("Sender address added")})})}function O(h){M.delete(h.pk).then(()=>{R(),n.displayNotification({msg:m("Sender address deleted")})})}return R(),(h,S)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",te,a(f(m)("Sender addresses")),1)]),_:1}),t(V,null,{default:e(()=>[t(K,{headers:F,items:r.value,"no-data-text":f(m)("No sender address defined for this account")},{"item.address":e(({item:b})=>[b.pk?(o(),_("span",ae,a(b.address),1)):(o(),d(W,{key:1,modelValue:i.value,"onUpdate:modelValue":S[0]||(S[0]=j=>i.value=j),label:f(m)("Specify an email address")},{append:e(()=>[i.value?(o(),d($,{key:0,icon:"mdi-content-save",color:"primary",variant:"text",onClick:L})):v("",!0)]),_:1},8,["modelValue","label"]))]),"item.actions":e(({item:b})=>[b.pk?(o(),d($,{key:0,icon:"mdi-delete-outline",color:"red",title:f(m)("Remove this address"),variant:"text",onClick:j=>O(b)},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:I},{default:e(()=>[t(E,{size:"small",icon:"mdi-plus"}),s(" "+a(f(m)("Add sender address")),1)]),_:1}))]),_:1})]),_:1}))}},ne={class:"headline"},oe={__name:"AccountSummary",props:{account:{type:Object,default:null}},setup(l){return(n,m)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",ne,a(n.$gettext("General information")),1)]),_:1}),t(V,null,{default:e(()=>[t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Creation date")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(n.$date(l.account.date_joined)),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Last login date")),1)]),_:1}),l.account.last_login?(o(),d(c,{key:0,cols:"6"},{default:e(()=>[s(a(n.$date(l.account.last_login)),1)]),_:1})):(o(),d(c,{key:1,cols:"6"},{default:e(()=>[s(a(n.$gettext("Never logged-in")),1)]),_:1}))]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Full name")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(l.account.first_name)+" "+a(l.account.last_name),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Role")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(l.account.role),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Secondary email")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(l.account.secondary_email),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Phone number")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(l.account.phone_number),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Enabled")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[t(E,{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(),_(p,{key:0},[t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Quota")),1)]),_:1}),l.account.mailbox.quota==="0"?(o(),d(c,{key:0,cols:"6"},{default:e(()=>[s(a(n.$gettext("Unlimited")),1)]),_:1})):(o(),d(c,{key:1,cols:"6"},{default:e(()=>[t(D,{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(g,{key:0},{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Daily sending limit")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[l.account.mailbox.message_limit===0?(o(),_(p,{key:0},[s(a(n.$gettext("Sending forbidden")),1)],64)):(o(),d(D,{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}))}},se={class:"headline"},ue={key:1},ce={class:"text-disabled"},ie={__name:"DomainAdminDomains",props:{account:{type:Object,default:null}},setup(l){const{$gettext:n}=q();return(m,u)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",se,a(f(n)("Administered domains")),1)]),_:1}),t(V,null,{default:e(()=>[l.account.domains!==void 0&&l.account.domains.length?(o(!0),_(p,{key:0},T(l.account.domains,r=>(o(),d(g,{key:r},{default:e(()=>[t(c,{cols:"12"},{default:e(()=>[s(a(r),1)]),_:2},1024)]),_:2},1024))),128)):(o(),_("div",ue,a(f(n)("No domain managed")),1)),k("div",ce,a(f(n)("Add/Remove from the domain page")),1)]),_:1})]),_:1}))}},de={class:"headline"},re={__name:"ResourcesView",props:{resources:{type:Array,default:null}},setup(l){const{$gettext:n}=q(),m=r=>r.name==="quota"?n("No quota"):n("Creation denied");function u(r){return r<50?"primary":r<80?"warning":"error"}return(r,y)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",de,a(f(n)("Resources usage")),1)]),_:1}),t(V,null,{default:e(()=>[(o(!0),_(p,null,T(l.resources,i=>(o(),_("div",{key:i.name,class:"mt-4"},[i.max_value===-1?(o(),_(p,{key:0},[s(a(i.label)+" ("+a(f(n)("Unlimited"))+") ",1)],64)):i.max_value===0?(o(),_(p,{key:1},[s(a(i.label)+" ("+a(m(i))+") ",1)],64)):(o(),_(p,{key:2},[s(a(i.label)+" ("+a(Math.ceil(i.usage))+"%) ",1),t(D,{"model-value":i.usage,color:u(i.usage)},null,8,["model-value","color"])],64))]))),128))]),_:1})]),_:1}))}},me={__name:"AccountView",setup(l){const n=G(),{canSetRole:m}=z(),u=x({pk:n.params.id}),r=x({});function y(){Q.get(n.params.id).then(i=>{u.value=i.data})}return m.value&&H.getGlobalApplication("limits").then(i=>{r.value=i.data}),y(),(i,F)=>(o(),_(p,null,[t(X,{flat:""},{default:e(()=>[t(Y,null,{default:e(()=>[s(a(i.$gettext("Account"))+" "+a(u.value.username)+" ",1),t($,{color:"primary",icon:"mdi-circle-edit-outline",to:{name:"AccountEdit",params:{id:u.value.pk}}},null,8,["to"]),t($,{color:"primary",icon:"mdi-reload",onClick:y})]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[t(oe,{account:u.value},null,8,["account"]),u.value.role===f(B).DOMAIN_ADMIN?(o(),d(ie,{key:0,class:"mt-2",account:u.value},null,8,["account"])):v("",!0)]),_:1}),t(c,{cols:"6"},{default:e(()=>[r.value.params&&r.value.params.enable_admin_limits&&u.value.role!==f(B).USER&&u.value.role!==f(B).SUPER_ADMIN?(o(),d(re,{key:0,resources:u.value.resources},null,8,["resources"])):v("",!0),u.value.aliases?(o(),d(ee,{key:1,class:"mt-2",account:u.value},null,8,["account"])):v("",!0),u.value.mailbox?(o(),d(le,{key:2,class:"mt-2",account:u.value},null,8,["account"])):v("",!0)]),_:1})]),_:1})],64))}},Fe=U(me,[["__scopeId","data-v-388d62f6"]]);export{Fe as default};
1
+ import{c as d,o,w as e,a as t,e as k,t as a,l as _,F as p,s as T,k as s,C as w,n as P,b as j,h as x,f,m as v,_ as U,B as G,j as B}from"./index-D9OmnhdE.js";import{u as z}from"./permissions-B-P8ks2E.js";import{a as Q}from"./accounts-DkNidbb0.js";import{p as H}from"./parameters-DlTg3gyZ.js";import{c as A,V,a as C}from"./VCard-BrQzTMsm.js";import{V as J}from"./VChip-B1E7xQW1.js";import{V as K}from"./VDataTable-CVJjOdhF.js";import{V as $,c as E,a as D}from"./VAvatar-Wz1UmZ2b.js";import{V as W}from"./VTextField-BBIziqiv.js";import{V as g,a as c}from"./VRow-DGPh2Qmm.js";import{V as X,a as Y}from"./VToolbar-CILwTR5O.js";import"./tag-jImTUiWx.js";import"./VProgressCircular-Bdwj7JuI.js";import"./VSelect-CzmrBwOO.js";import"./VInput-ssnfbpwr.js";import"./forwardRefs-GE5Osi9V.js";import"./ssrBoot-DaeAGyhc.js";import"./VMenu-BPG7b7dT.js";import"./VCheckboxBtn-BMf4a9DP.js";import"./VSelectionControl-BIXXUgD4.js";import"./VTable-C08Q6ok2.js";import"./filter-CfvL3jIf.js";/* empty css */const Z={class:"headline"},ee={__name:"AccountAliases",props:{account:{type:Object,default:null}},setup(l){return(n,m)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",Z,a(n.$gettext("Aliases")),1)]),_:1}),t(V,null,{default:e(()=>[(o(!0),_(p,null,T(l.account.aliases,u=>(o(),d(J,{key:u,class:"mr-2 mt-2"},{default:e(()=>[s(a(u),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}/`)}},te={class:"headline"},ae={key:0},le={__name:"AccountSenderAddresses",props:{account:{type:Object,default:null}},setup(l){const n=P(),{$gettext:m}=j(),u=l,r=x([]),y=x(!1),i=x(""),q=[{title:m("Address"),key:"address"},{title:"",key:"actions",align:"end",sortable:!1}];function I(){r.value.push({}),y.value=!0}function R(){M.getAllForMailbox(u.account.mailbox.pk).then(h=>{r.value=h.data})}function L(){const h={address:i.value,mailbox:u.account.mailbox.pk};M.create(h).then(()=>{R(),i.value=null,y.value=!1,n.displayNotification({msg:m("Sender address added")})})}function O(h){M.delete(h.pk).then(()=>{R(),n.displayNotification({msg:m("Sender address deleted")})})}return R(),(h,S)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",te,a(f(m)("Sender addresses")),1)]),_:1}),t(V,null,{default:e(()=>[t(K,{headers:q,items:r.value,"no-data-text":f(m)("No sender address defined for this account")},{"item.address":e(({item:b})=>[b.pk?(o(),_("span",ae,a(b.address),1)):(o(),d(W,{key:1,modelValue:i.value,"onUpdate:modelValue":S[0]||(S[0]=F=>i.value=F),label:f(m)("Specify an email address")},{append:e(()=>[i.value?(o(),d($,{key:0,icon:"mdi-content-save",color:"primary",variant:"text",onClick:L})):v("",!0)]),_:1},8,["modelValue","label"]))]),"item.actions":e(({item:b})=>[b.pk?(o(),d($,{key:0,icon:"mdi-delete-outline",color:"red",title:f(m)("Remove this address"),variant:"text",onClick:F=>O(b)},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:I},{default:e(()=>[t(E,{size:"small",icon:"mdi-plus"}),s(" "+a(f(m)("Add sender address")),1)]),_:1}))]),_:1})]),_:1}))}},ne={class:"headline"},oe={__name:"AccountSummary",props:{account:{type:Object,default:null}},setup(l){return(n,m)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",ne,a(n.$gettext("General information")),1)]),_:1}),t(V,null,{default:e(()=>[t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Creation date")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(n.$date(l.account.date_joined)),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Last login date")),1)]),_:1}),l.account.last_login?(o(),d(c,{key:0,cols:"6"},{default:e(()=>[s(a(n.$date(l.account.last_login)),1)]),_:1})):(o(),d(c,{key:1,cols:"6"},{default:e(()=>[s(a(n.$gettext("Never logged-in")),1)]),_:1}))]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Full name")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(l.account.first_name)+" "+a(l.account.last_name),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Role")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(l.account.role),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Secondary email")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(l.account.secondary_email),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Phone number")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[s(a(l.account.phone_number),1)]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Enabled")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[t(E,{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(),_(p,{key:0},[t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Quota")),1)]),_:1}),l.account.mailbox.quota==="0"?(o(),d(c,{key:0,cols:"6"},{default:e(()=>[s(a(n.$gettext("Unlimited")),1)]),_:1})):(o(),d(c,{key:1,cols:"6"},{default:e(()=>[t(D,{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(g,{key:0},{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[s(a(n.$gettext("Daily sending limit")),1)]),_:1}),t(c,{cols:"6"},{default:e(()=>[l.account.mailbox.message_limit===0?(o(),_(p,{key:0},[s(a(n.$gettext("Sending forbidden")),1)],64)):(o(),d(D,{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}))}},se={class:"headline"},ue={key:1},ce={class:"text-disabled"},ie={__name:"DomainAdminDomains",props:{account:{type:Object,default:null}},setup(l){const{$gettext:n}=j();return(m,u)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",se,a(f(n)("Administered domains")),1)]),_:1}),t(V,null,{default:e(()=>[l.account.domains!==void 0&&l.account.domains.length?(o(!0),_(p,{key:0},T(l.account.domains,r=>(o(),d(g,{key:r},{default:e(()=>[t(c,{cols:"12"},{default:e(()=>[s(a(r),1)]),_:2},1024)]),_:2},1024))),128)):(o(),_("div",ue,a(f(n)("No domain managed")),1)),k("div",ce,a(f(n)("Add/Remove from the domain page")),1)]),_:1})]),_:1}))}},de={class:"headline"},re={__name:"ResourcesView",props:{resources:{type:Array,default:null}},setup(l){const{$gettext:n}=j(),m=r=>r.name==="quota"?n("No quota"):n("Creation denied");function u(r){return r<50?"primary":r<80?"warning":"error"}return(r,y)=>(o(),d(C,null,{default:e(()=>[t(A,null,{default:e(()=>[k("span",de,a(f(n)("Resources usage")),1)]),_:1}),t(V,null,{default:e(()=>[(o(!0),_(p,null,T(l.resources,i=>(o(),_("div",{key:i.name,class:"mt-4"},[i.max_value===-1?(o(),_(p,{key:0},[s(a(i.label)+" ("+a(f(n)("Unlimited"))+") ",1)],64)):i.max_value===0?(o(),_(p,{key:1},[s(a(i.label)+" ("+a(m(i))+") ",1)],64)):(o(),_(p,{key:2},[s(a(i.label)+" ("+a(Math.ceil(i.usage))+"%) ",1),t(D,{"model-value":i.usage,color:u(i.usage)},null,8,["model-value","color"])],64))]))),128))]),_:1})]),_:1}))}},me={__name:"AccountView",setup(l){const n=G(),{canSetRole:m}=z(),u=x({pk:n.params.id}),r=x({});function y(){Q.get(n.params.id).then(i=>{u.value=i.data})}return m.value&&H.getGlobalApplication("limits").then(i=>{r.value=i.data}),y(),(i,q)=>(o(),_(p,null,[t(X,{flat:""},{default:e(()=>[t(Y,null,{default:e(()=>[s(a(i.$gettext("Account"))+" "+a(u.value.username)+" ",1),t($,{color:"primary",icon:"mdi-circle-edit-outline",to:{name:"AccountEdit",params:{id:u.value.pk}}},null,8,["to"]),t($,{color:"primary",icon:"mdi-reload",onClick:y})]),_:1})]),_:1}),t(g,null,{default:e(()=>[t(c,{cols:"6"},{default:e(()=>[t(oe,{account:u.value},null,8,["account"]),u.value.role===f(B).DOMAIN_ADMIN?(o(),d(ie,{key:0,class:"mt-2",account:u.value},null,8,["account"])):v("",!0)]),_:1}),t(c,{cols:"6"},{default:e(()=>[r.value.params&&r.value.params.enable_admin_limits&&u.value.role!==f(B).USER&&u.value.role!==f(B).SUPER_ADMIN?(o(),d(re,{key:0,resources:u.value.resources},null,8,["resources"])):v("",!0),u.value.aliases?(o(),d(ee,{key:1,class:"mt-2",account:u.value},null,8,["account"])):v("",!0),u.value.mailbox?(o(),d(le,{key:2,class:"mt-2",account:u.value},null,8,["account"])):v("",!0)]),_:1})]),_:1})],64))}},qe=U(me,[["__scopeId","data-v-388d62f6"]]);export{qe as default};
@@ -1 +1 @@
1
- import{E as ie,g as V,c as A,o as p,w as t,a as e,e as L,t as f,k as x,h as P,l as z,f as m,m as D,F as O,b as H,z as q,p as ee,s as X,B as me,n as ae,aw as ce,v as pe,q as oe}from"./index-LhNzkzAh.js";import{c as N}from"./contacts-Dxz6eWpf.js";import{p as fe}from"./parameters-C8IYEP7q.js";import{c as K,V as Q,b as W,a as J}from"./VCard-DzjUT5OP.js";import{V as ve}from"./VAlert-4r6LxKtg.js";import{V as G}from"./VSpacer-CoJVmx8k.js";import{V as $}from"./VAvatar-DbuoZWmf.js";import{r as Y,V as te}from"./VForm-DsRLc-sa.js";import{V as w}from"./VTextField-DKbr4H5w.js";import{a as _,V as ye}from"./VRow-DJ0NB63-.js";import{V as ne}from"./VSelect-CxCFMHyF.js";import{V as le}from"./VTextarea-BttkFsM4.js";import{V as Ve}from"./VCheckbox-dr7UFjl4.js";import{_ as ge}from"./MenuItems-BqIZW5av.js";import{V as be}from"./VDataTable-CL7yHvG7.js";import{V as Ce}from"./VMenu-nv0XOgg0.js";import{V as ke}from"./VToolbar-BxX3W2kR.js";import{V as _e}from"./VChip-CaQvfmkw.js";import{V as Z}from"./VDialog-DmTGCGR0.js";import{u as $e}from"./layout.store-Vq5mvIp7.js";import"./tag-3cfI1_f7.js";import"./VProgressCircular-qK6p5X_Y.js";/* empty css */import"./VInput-DVKUObZe.js";import"./forwardRefs-CpzzjgpX.js";import"./ssrBoot-BxIQ9ccA.js";import"./VCheckboxBtn-CpFdBnTv.js";import"./VSelectionControl-C-6A4us5.js";import"./VTable-ldTxgQPW.js";import"./filter-rmxrcjKk.js";const he=ie("contacts",()=>{const y=V(null);function U(i){y.value=i}async function s(){y.value=null}return{currentCategory:y,setCurrentCategory:U,$reset:s}}),xe={class:"headline"},Ue={__name:"AddressBookInfo",props:{addressBookUrl:{type:String,default:null}},emits:["close"],setup(y,{emit:U}){return(s,i)=>(p(),A(J,null,{default:t(()=>[e(K,null,{default:t(()=>[L("span",xe,f(s.$gettext("Address book information")),1)]),_:1}),e(Q,null,{default:t(()=>[L("p",null,f(s.$gettext("To access this address book from the outside (such as Mozilla Thunderbird or your smartphone), use the following URL:")),1),e(ve,{type:"info",class:"my-4",variant:"tonal"},{default:t(()=>[x(f(y.addressBookUrl),1)]),_:1}),L("p",null,f(s.$gettext("The credentials are the same than the ones you use to access Modoboa.")),1)]),_:1}),e(W,null,{default:t(()=>[e(G),e($,{onClick:i[0]||(i[0]=a=>s.$emit("close"))},{default:t(()=>[x(f(s.$gettext("Close")),1)]),_:1})]),_:1})]),_:1}))}},we={__name:"EmailField",props:{modelValue:{type:Object,default:null},errors:{type:Object,default:null},index:{type:Number,required:!0}},emits:["add","delete","update:modelValue"],setup(y,{emit:U}){const s=y,i=U,a=P({get(){return s.modelValue},set(r){i("update:modelValue",r)}}),l=["home","work","other"];return(r,n)=>(p(),z(O,null,[e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:a.value.address,"onUpdate:modelValue":n[0]||(n[0]=c=>a.value.address=c),label:r.$gettext("Address"),variant:"outlined","prepend-icon":"mdi-email",density:"compact",rules:[m(Y).required]},null,8,["modelValue","label","rules"])]),_:1}),e(_,{cols:"4",class:"pl-4"},{default:t(()=>[e(ne,{modelValue:a.value.type,"onUpdate:modelValue":n[1]||(n[1]=c=>a.value.type=c),items:l,density:"compact",variant:"outlined",rules:[m(Y).required]},null,8,["modelValue","rules"])]),_:1}),e(_,{cols:"2",class:"pl-4"},{default:t(()=>[e($,{icon:"mdi-plus",size:"x-small",flat:"",onClick:n[2]||(n[2]=c=>r.$emit("add"))}),y.index?(p(),A($,{key:0,icon:"mdi-trash-can",color:"red",size:"x-small",flat:"",variant:"text",onClick:n[3]||(n[3]=c=>r.$emit("delete",y.index))})):D("",!0)]),_:1})],64))}},Ae={__name:"PhoneNumberField",props:{errors:{type:Object,default:null},index:{type:Number,required:!0},modelValue:{type:Object,default:null}},emits:["add","delete","update:modelValue"],setup(y,{emit:U}){const s=y,i=U,a=P({get(){return s.modelValue},set(r){i("update:modelValue",r)}}),l=["cell","fax","home","main","pager","work","other"];return(r,n)=>(p(),z(O,null,[e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:a.value.number,"onUpdate:modelValue":n[0]||(n[0]=c=>a.value.number=c),label:r.$gettext("Phone number"),variant:"outlined","prepend-icon":"mdi-phone",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"4",class:"pl-4"},{default:t(()=>[e(ne,{modelValue:a.value.type,"onUpdate:modelValue":n[1]||(n[1]=c=>a.value.type=c),items:l,density:"compact",variant:"outlined"},null,8,["modelValue"])]),_:1}),e(_,{cols:"2",class:"pl-4"},{default:t(()=>[e($,{icon:"mdi-plus",size:"x-small",flat:"",onClick:n[2]||(n[2]=c=>r.$emit("add"))}),y.index?(p(),A($,{key:0,icon:"mdi-trash-can",color:"red",size:"x-small",flat:"",variant:"text",onClick:n[3]||(n[3]=c=>r.$emit("delete",y.index))})):D("",!0)]),_:1})],64))}},Fe={class:"headline"},Se={__name:"ContactForm",props:{contact:{type:Object,required:!1}},emits:["close","added","updated"],setup(y,{emit:U}){const s=U,i=y,{$gettext:a}=H(),l=V(v()),r=V(!1),n=V(),c=V({}),d=V(!1),F=P(()=>i.contact?a("Edit contact"):a("New contact")),h=P(()=>i.contact?a("Update"):a("Add"));function v(){return{emails:[{}],phone_numbers:[{}]}}function S(){l.value.emails.push({})}function T(B){l.value.emails.splice(B,1)}function j(){l.value.phone_numbers.push({})}function E(B){l.value.phone_numbers.splice(B,1)}async function I(){var u;const{valid:B}=await n.value.validate();if(!B)return;d.value=!0;const o=JSON.parse(JSON.stringify(l.value));Object.keys(o.phone_numbers[0]).length||o.phone_numbers.splice(0,1);try{let C;i.contact?(C=await N.updateContact(i.contact.pk,o),s("updated",C.data)):(C=await N.createContact(o),s("added",C.data)),s("close")}catch(C){((u=C.response)==null?void 0:u.status)===400&&(c.value=C.response.data)}finally{d.value=!1}}return q(()=>i.contact,B=>{B?(l.value=JSON.parse(JSON.stringify(B)),l.value.phone_numbers.length||(l.value.phone_numbers=[{}])):l.value=v()},{immediate:!0}),(B,o)=>(p(),A(J,null,{default:t(()=>[e(te,{ref_key:"formRef",ref:n,onSubmit:ee(I,["prevent"])},{default:t(()=>[e(K,null,{default:t(()=>[L("span",Fe,f(F.value),1)]),_:1}),e(Q,null,{default:t(()=>[e(ye,{"no-gutters":""},{default:t(()=>[e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.first_name,"onUpdate:modelValue":o[0]||(o[0]=u=>l.value.first_name=u),label:m(a)("First name"),variant:"outlined","prepend-icon":"mdi-account",density:"compact","error-messages":c.value.first_name},null,8,["modelValue","label","error-messages"])]),_:1}),e(_,{cols:"6",class:"pl-4"},{default:t(()=>[e(w,{modelValue:l.value.last_name,"onUpdate:modelValue":o[1]||(o[1]=u=>l.value.last_name=u),label:m(a)("Last name"),variant:"outlined",density:"compact","error-messages":c.value.last_name},null,8,["modelValue","label","error-messages"])]),_:1}),e(_,{cols:"12"},{default:t(()=>[e(w,{modelValue:l.value.display_name,"onUpdate:modelValue":o[2]||(o[2]=u=>l.value.display_name=u),label:m(a)("Display name"),variant:"outlined","prepend-icon":"toto",density:"compact","error-messages":c.value.display_name},null,8,["modelValue","label","error-messages"])]),_:1}),e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.company,"onUpdate:modelValue":o[3]||(o[3]=u=>l.value.company=u),label:m(a)("Company"),variant:"outlined","prepend-icon":"mdi-office-building",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6",class:"pl-4"},{default:t(()=>[e(w,{modelValue:l.value.position,"onUpdate:modelValue":o[4]||(o[4]=u=>l.value.position=u),label:m(a)("Position"),variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),(p(!0),z(O,null,X(l.value.emails,(u,C)=>(p(),A(we,{key:`email-${C}`,modelValue:l.value.emails[C],"onUpdate:modelValue":M=>l.value.emails[C]=M,index:C,onAdd:S,onDelete:T},null,8,["modelValue","onUpdate:modelValue","index"]))),128)),(p(!0),z(O,null,X(l.value.phone_numbers,(u,C)=>(p(),A(Ae,{key:`phone-${C}`,modelValue:l.value.phone_numbers[C],"onUpdate:modelValue":M=>l.value.phone_numbers[C]=M,index:C,onAdd:j,onDelete:E},null,8,["modelValue","onUpdate:modelValue","index"]))),128)),r.value?(p(),z(O,{key:0},[e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.birth_date,"onUpdate:modelValue":o[5]||(o[5]=u=>l.value.birth_date=u),label:m(a)("Birth date"),type:"date","prepend-icon":"mdi-calendar",variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"12"},{default:t(()=>[e(le,{modelValue:l.value.address,"onUpdate:modelValue":o[6]||(o[6]=u=>l.value.address=u),label:m(a)("Address"),"prepend-icon":"mdi-location",variant:"outlined",density:"compact",rows:"2"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.zipcode,"onUpdate:modelValue":o[7]||(o[7]=u=>l.value.zipcode=u),label:m(a)("Zip code"),"prepend-icon":"toto",variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6",class:"pl-4"},{default:t(()=>[e(w,{modelValue:l.value.city,"onUpdate:modelValue":o[8]||(o[8]=u=>l.value.city=u),label:m(a)("City"),variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.country,"onUpdate:modelValue":o[9]||(o[9]=u=>l.value.country=u),label:m(a)("Country"),"prepend-icon":"toto",variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6",class:"pl-4"},{default:t(()=>[e(w,{modelValue:l.value.state,"onUpdate:modelValue":o[10]||(o[10]=u=>l.value.state=u),label:m(a)("State/Province"),variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"12"},{default:t(()=>[e(le,{modelValue:l.value.note,"onUpdate:modelValue":o[11]||(o[11]=u=>l.value.note=u),label:m(a)("Note"),"prepend-icon":"mdi-file",variant:"outlined",density:"compact",rows:"2"},null,8,["modelValue","label"])]),_:1})],64)):D("",!0)]),_:1})]),_:1}),e(W,null,{default:t(()=>[r.value?(p(),A($,{key:1,onClick:o[13]||(o[13]=u=>r.value=!1)},{default:t(()=>[x(f(m(a)("Less")),1)]),_:1})):(p(),A($,{key:0,onClick:o[12]||(o[12]=u=>r.value=!0)},{default:t(()=>[x(f(m(a)("More")),1)]),_:1})),e(G),e($,{loading:d.value,onClick:o[14]||(o[14]=u=>s("close"))},{default:t(()=>[x(f(m(a)("Close")),1)]),_:1},8,["loading"]),e($,{color:"primary",type:"submit",loading:d.value},{default:t(()=>[x(f(h.value),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1}))}},Ne={class:"headline"},Be={__name:"ContactCategoriesForm",props:{contact:{type:Object,default:null}},emits:["close"],setup(y,{emit:U}){const s=y,i=U,a=V([]),l=V([]),r=V(!1);function n(){i("close","updated")}async function c(){const d={categories:l.value};r.value=!0;try{await N.updateContact(s.contact.pk,d),i("updated"),n()}finally{r.value=!1}}return q(()=>s.contact,d=>{d?l.value=d.categories:l.value=[]},{immediate:!0}),N.getCategories().then(d=>{a.value=d.data}),(d,F)=>(p(),A(J,null,{default:t(()=>[e(te,{ref:"formRef",onSubmit:ee(c,["prevent"])},{default:t(()=>[e(K,null,{default:t(()=>[L("span",Ne,f(d.$gettext("Categories")),1)]),_:1}),e(Q,null,{default:t(()=>[(p(!0),z(O,null,X(a.value,h=>(p(),A(Ve,{key:h.pk,modelValue:l.value,"onUpdate:modelValue":F[0]||(F[0]=v=>l.value=v),label:h.name,"hide-details":"",value:h.pk,color:"primary"},null,8,["modelValue","label","value"]))),128))]),_:1}),e(W,null,{default:t(()=>[e(G),e($,{loading:r.value,onClick:n},{default:t(()=>[x(f(d.$gettext("Close")),1)]),_:1},8,["loading"]),e($,{color:"primary",type:"submit",loading:r.value},{default:t(()=>[x(f(d.$gettext("Update")),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1}))}},ze={class:"text-right"},Oe={__name:"ContactList",emits:["editCategory"],setup(y,{emit:U}){const s=U,i=me(),{$gettext:a}=H(),{displayNotification:l}=ae(),r=V({}),n=V([]),c=V(""),d=V(null),F=V(!1),h=V(!1),v=V(!1),S=V({}),T=[{key:"display_name",title:a("Display name")},{key:"emails",title:a("E-mail")},{key:"phone_numbers",title:a("Phone")},{key:"actions",title:a("Actions"),align:"end"}],j=[{label:a("Categories"),icon:"mdi-label",onClick:M},{label:a("Edit"),icon:"mdi-circle-edit-outline",onClick:u},{label:a("Delete"),icon:"mdi-delete-outline",onClick:ue,color:"red"}];let E;ce(()=>{E&&clearInterval(E)});function I(){h.value=!1,d.value=null}function B(g){return g.map(k=>k.address).join(", ")}function o(g){return g.map(k=>k.number).join(", ")}function u(g){d.value=g,h.value=!0}function C(){s("editCategory")}function M(g){d.value=g,v.value=!0}function se(){v.value=!1,d.value=null}function ue(g){N.deleteContact(g.pk).then(()=>{R()})}function R(){N.getContacts(i.params).then(g=>{n.value=g.data})}function re(){N.synchronizeToAddressBook().then(()=>{l({msg:a("Synchronization started")})})}return N.getDefaultAddressBook().then(g=>{r.value=g.data}),fe.getUserApplication("contacts").then(g=>{S.value=g.data.params}),R(),q(S,g=>{g&&(E=setInterval(N.synchronizeFromAddressBook,g.sync_frequency*1e3))}),q(()=>i.params.category,()=>{R()}),(g,k)=>(p(),z(O,null,[e(J,{class:"mt-6"},{default:t(()=>[e(be,{headers:T,items:n.value},{top:t(()=>[e(ke,{color:"white",flat:""},{default:t(()=>[e(w,{modelValue:c.value,"onUpdate:modelValue":k[0]||(k[0]=b=>c.value=b),"prepend-inner-icon":"mdi-magnify",placeholder:m(a)("Search"),variant:"outlined","single-line":"",flat:"","hide-details":"",density:"compact",class:"flex-grow-0 w-33 mr-4"},null,8,["modelValue","placeholder"]),e($,{color:"primary",variant:"outlined",onClick:k[1]||(k[1]=b=>h.value=!0)},{default:t(()=>[x(f(m(a)("Add")),1)]),_:1}),S.value.enable_carddav_sync?(p(),z(O,{key:0},[e($,{icon:"mdi-information-outline",title:m(a)("Display address book information"),class:"ml-2",onClick:k[2]||(k[2]=b=>F.value=!0)},null,8,["title"]),r.value.last_sync?D("",!0):(p(),A($,{key:0,icon:"mdi-sync",color:"success",title:m(a)("Synchronize contacts with address book"),onClick:re},null,8,["title"]))],64)):D("",!0),g.$route.params.category?(p(),A(_e,{key:1,class:"my-2 mx-4",label:"",size:"small",color:"green","prepend-icon":"mdi-label",onClick:C},{default:t(()=>[x(f(g.$route.params.category),1)]),_:1})):D("",!0),e(G)]),_:1})]),"item.display_name":t(({item:b})=>[b.display_name?(p(),z(O,{key:0},[x(f(b.display_name),1)],64)):(p(),z(O,{key:1},[x(f(b.first_name)+" "+f(b.last_name),1)],64))]),"item.emails":t(({item:b})=>[x(f(B(b.emails)),1)]),"item.phone_numbers":t(({item:b})=>[x(f(o(b.phone_numbers)),1)]),"item.actions":t(({item:b})=>[L("div",ze,[e(Ce,{"offset-y":""},{activator:t(({props:de})=>[e($,pe({icon:"mdi-dots-horizontal",variant:"text"},de),null,16)]),default:t(()=>[e(m(ge),{items:j,obj:b},null,8,["obj"])]),_:2},1024)])]),_:2},1032,["items"])]),_:1}),e(Z,{modelValue:h.value,"onUpdate:modelValue":k[3]||(k[3]=b=>h.value=b),persistent:"","max-width":"800px"},{default:t(()=>[e(Se,{contact:d.value,onClose:I,onAdded:R,onUpdated:R},null,8,["contact"])]),_:1},8,["modelValue"]),e(Z,{modelValue:v.value,"onUpdate:modelValue":k[4]||(k[4]=b=>v.value=b),persistent:"","max-width":"800px"},{default:t(()=>[e(Be,{contact:d.value,onUpdated:R,onClose:se},null,8,["contact"])]),_:1},8,["modelValue"]),e(Z,{modelValue:F.value,"onUpdate:modelValue":k[6]||(k[6]=b=>F.value=b),persistent:"","max-width":"800px"},{default:t(()=>[e(Ue,{"address-book-url":r.value.url,onClose:k[5]||(k[5]=b=>F.value=!1)},null,8,["address-book-url"])]),_:1},8,["modelValue"])],64))}},Ee={class:"headline"},je={__name:"CategoryForm",props:{category:{type:Object,default:null}},emits:["close","updated"],setup(y,{emit:U}){const s=y,i=U,a=oe(),{$gettext:l}=H(),{displayNotification:r}=ae(),n=V({}),c=V(),d=V(!1),F=P(()=>s.category?l("Edit category"):l("Add category")),h=P(()=>s.category?l("Update"):l("Add"));function v(){n.value={},i("close")}async function S(){const{valid:j}=await c.value.validate();if(j){d.value=!0;try{s.category?await N.updateCategory(s.category.pk,n.value):await N.addCategory(n.value),i("updated"),i("close")}catch(E){console.log(E)}finally{d.value=!1}}}function T(){N.deleteCategory(s.category.pk).then(()=>{v(),i("updated"),r({msg:l("Category deleted")}),a.push({name:"ContactList"})})}return q(()=>s.category,j=>{j?n.value=JSON.parse(JSON.stringify(j)):n.value={}},{immediate:!0}),(j,E)=>(p(),A(J,null,{default:t(()=>[e(te,{ref_key:"formRef",ref:c,onSubmit:ee(S,["prevent"])},{default:t(()=>[e(K,null,{default:t(()=>[L("span",Ee,f(F.value),1)]),_:1}),e(Q,null,{default:t(()=>[e(w,{modelValue:n.value.name,"onUpdate:modelValue":E[0]||(E[0]=I=>n.value.name=I),label:m(l)("Name"),variant:"outlined",density:"compact",rules:[m(Y).required]},null,8,["modelValue","label","rules"])]),_:1}),e(W,null,{default:t(()=>[y.category?(p(),A($,{key:0,color:"red",onClick:T},{default:t(()=>[x(f(m(l)("Delete")),1)]),_:1})):D("",!0),e(G),e($,{loading:d.value,onClick:v},{default:t(()=>[x(f(m(l)("Close")),1)]),_:1},8,["loading"]),e($,{color:"primary",type:"submit",loading:d.value},{default:t(()=>[x(f(h.value),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1}))}},Le={class:"text-h5 ml-4"},ft={__name:"AddressBook",setup(y){const U=oe(),{$gettext:s}=H(),i=he(),a=$e(),l=V([]),r=V(!1),n=P(()=>{const v=[{icon:"mdi-contacts",text:s("Contacts"),to:{name:"ContactList"}},{text:s("Categories"),subheader:!0}];for(const S of l.value)v.push({icon:"mdi-label",text:S.name,action:()=>F(S)});return v.push({icon:"mdi-plus",text:s("Add a category"),action:c}),v});function c(){r.value=!0}function d(){r.value=!1}function F(v){i.setCurrentCategory(v),U.push({name:"ContactList",params:{category:v.name}})}function h(){N.getCategories().then(v=>{l.value=v.data})}return h(),q(n,v=>{a.setLeftMenuItems(v)}),(v,S)=>(p(),z(O,null,[L("div",Le,f(m(s)("Contacts")),1),e(Oe,{onEditCategory:c}),e(Z,{modelValue:r.value,"onUpdate:modelValue":S[0]||(S[0]=T=>r.value=T),persistent:"","max-width":"800px"},{default:t(()=>[e(je,{category:m(i).currentCategory,onClose:d,onAdded:h,onUpdated:h},null,8,["category"])]),_:1},8,["modelValue"])],64))}};export{ft as default};
1
+ import{E as ie,h as V,c as A,o as p,w as t,a as e,e as L,t as f,k as x,i as P,l as z,f as m,m as D,F as O,b as H,z as q,p as ee,s as X,B as me,n as ae,aw as ce,v as pe,q as oe}from"./index-D9OmnhdE.js";import{c as N}from"./contacts-Ch-bKxJM.js";import{p as fe}from"./parameters-DlTg3gyZ.js";import{c as K,V as Q,b as W,a as J}from"./VCard-BrQzTMsm.js";import{V as ve}from"./VAlert-BWUQvs3i.js";import{V as G}from"./VSpacer-Pa16wvUF.js";import{V as $}from"./VAvatar-Wz1UmZ2b.js";import{r as Y,V as te}from"./VForm-RVvaatfV.js";import{V as w}from"./VTextField-BBIziqiv.js";import{a as _,V as ye}from"./VRow-DGPh2Qmm.js";import{V as ne}from"./VSelect-CzmrBwOO.js";import{V as le}from"./VTextarea-PURjBZRs.js";import{V as Ve}from"./VCheckbox-IdHLHDAe.js";import{_ as ge}from"./MenuItems-Dg2GGDq6.js";import{V as be}from"./VDataTable-CVJjOdhF.js";import{V as Ce}from"./VMenu-BPG7b7dT.js";import{V as ke}from"./VToolbar-CILwTR5O.js";import{V as _e}from"./VChip-B1E7xQW1.js";import{V as Z}from"./VDialog-BF9xR7BQ.js";import{u as $e}from"./layout.store-uEYOXtgD.js";import"./tag-jImTUiWx.js";import"./VProgressCircular-Bdwj7JuI.js";/* empty css */import"./VInput-ssnfbpwr.js";import"./forwardRefs-GE5Osi9V.js";import"./ssrBoot-DaeAGyhc.js";import"./VCheckboxBtn-BMf4a9DP.js";import"./VSelectionControl-BIXXUgD4.js";import"./VTable-C08Q6ok2.js";import"./filter-CfvL3jIf.js";const he=ie("contacts",()=>{const y=V(null);function U(i){y.value=i}async function s(){y.value=null}return{currentCategory:y,setCurrentCategory:U,$reset:s}}),xe={class:"headline"},Ue={__name:"AddressBookInfo",props:{addressBookUrl:{type:String,default:null}},emits:["close"],setup(y,{emit:U}){return(s,i)=>(p(),A(J,null,{default:t(()=>[e(K,null,{default:t(()=>[L("span",xe,f(s.$gettext("Address book information")),1)]),_:1}),e(Q,null,{default:t(()=>[L("p",null,f(s.$gettext("To access this address book from the outside (such as Mozilla Thunderbird or your smartphone), use the following URL:")),1),e(ve,{type:"info",class:"my-4",variant:"tonal"},{default:t(()=>[x(f(y.addressBookUrl),1)]),_:1}),L("p",null,f(s.$gettext("The credentials are the same than the ones you use to access Modoboa.")),1)]),_:1}),e(W,null,{default:t(()=>[e(G),e($,{onClick:i[0]||(i[0]=a=>s.$emit("close"))},{default:t(()=>[x(f(s.$gettext("Close")),1)]),_:1})]),_:1})]),_:1}))}},we={__name:"EmailField",props:{modelValue:{type:Object,default:null},errors:{type:Object,default:null},index:{type:Number,required:!0}},emits:["add","delete","update:modelValue"],setup(y,{emit:U}){const s=y,i=U,a=P({get(){return s.modelValue},set(r){i("update:modelValue",r)}}),l=["home","work","other"];return(r,n)=>(p(),z(O,null,[e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:a.value.address,"onUpdate:modelValue":n[0]||(n[0]=c=>a.value.address=c),label:r.$gettext("Address"),variant:"outlined","prepend-icon":"mdi-email",density:"compact",rules:[m(Y).required]},null,8,["modelValue","label","rules"])]),_:1}),e(_,{cols:"4",class:"pl-4"},{default:t(()=>[e(ne,{modelValue:a.value.type,"onUpdate:modelValue":n[1]||(n[1]=c=>a.value.type=c),items:l,density:"compact",variant:"outlined",rules:[m(Y).required]},null,8,["modelValue","rules"])]),_:1}),e(_,{cols:"2",class:"pl-4"},{default:t(()=>[e($,{icon:"mdi-plus",size:"x-small",flat:"",onClick:n[2]||(n[2]=c=>r.$emit("add"))}),y.index?(p(),A($,{key:0,icon:"mdi-trash-can",color:"red",size:"x-small",flat:"",variant:"text",onClick:n[3]||(n[3]=c=>r.$emit("delete",y.index))})):D("",!0)]),_:1})],64))}},Ae={__name:"PhoneNumberField",props:{errors:{type:Object,default:null},index:{type:Number,required:!0},modelValue:{type:Object,default:null}},emits:["add","delete","update:modelValue"],setup(y,{emit:U}){const s=y,i=U,a=P({get(){return s.modelValue},set(r){i("update:modelValue",r)}}),l=["cell","fax","home","main","pager","work","other"];return(r,n)=>(p(),z(O,null,[e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:a.value.number,"onUpdate:modelValue":n[0]||(n[0]=c=>a.value.number=c),label:r.$gettext("Phone number"),variant:"outlined","prepend-icon":"mdi-phone",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"4",class:"pl-4"},{default:t(()=>[e(ne,{modelValue:a.value.type,"onUpdate:modelValue":n[1]||(n[1]=c=>a.value.type=c),items:l,density:"compact",variant:"outlined"},null,8,["modelValue"])]),_:1}),e(_,{cols:"2",class:"pl-4"},{default:t(()=>[e($,{icon:"mdi-plus",size:"x-small",flat:"",onClick:n[2]||(n[2]=c=>r.$emit("add"))}),y.index?(p(),A($,{key:0,icon:"mdi-trash-can",color:"red",size:"x-small",flat:"",variant:"text",onClick:n[3]||(n[3]=c=>r.$emit("delete",y.index))})):D("",!0)]),_:1})],64))}},Fe={class:"headline"},Se={__name:"ContactForm",props:{contact:{type:Object,required:!1}},emits:["close","added","updated"],setup(y,{emit:U}){const s=U,i=y,{$gettext:a}=H(),l=V(v()),r=V(!1),n=V(),c=V({}),d=V(!1),F=P(()=>i.contact?a("Edit contact"):a("New contact")),h=P(()=>i.contact?a("Update"):a("Add"));function v(){return{emails:[{}],phone_numbers:[{}]}}function S(){l.value.emails.push({})}function T(B){l.value.emails.splice(B,1)}function j(){l.value.phone_numbers.push({})}function E(B){l.value.phone_numbers.splice(B,1)}async function I(){var u;const{valid:B}=await n.value.validate();if(!B)return;d.value=!0;const o=JSON.parse(JSON.stringify(l.value));Object.keys(o.phone_numbers[0]).length||o.phone_numbers.splice(0,1);try{let C;i.contact?(C=await N.updateContact(i.contact.pk,o),s("updated",C.data)):(C=await N.createContact(o),s("added",C.data)),s("close")}catch(C){((u=C.response)==null?void 0:u.status)===400&&(c.value=C.response.data)}finally{d.value=!1}}return q(()=>i.contact,B=>{B?(l.value=JSON.parse(JSON.stringify(B)),l.value.phone_numbers.length||(l.value.phone_numbers=[{}])):l.value=v()},{immediate:!0}),(B,o)=>(p(),A(J,null,{default:t(()=>[e(te,{ref_key:"formRef",ref:n,onSubmit:ee(I,["prevent"])},{default:t(()=>[e(K,null,{default:t(()=>[L("span",Fe,f(F.value),1)]),_:1}),e(Q,null,{default:t(()=>[e(ye,{"no-gutters":""},{default:t(()=>[e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.first_name,"onUpdate:modelValue":o[0]||(o[0]=u=>l.value.first_name=u),label:m(a)("First name"),variant:"outlined","prepend-icon":"mdi-account",density:"compact","error-messages":c.value.first_name},null,8,["modelValue","label","error-messages"])]),_:1}),e(_,{cols:"6",class:"pl-4"},{default:t(()=>[e(w,{modelValue:l.value.last_name,"onUpdate:modelValue":o[1]||(o[1]=u=>l.value.last_name=u),label:m(a)("Last name"),variant:"outlined",density:"compact","error-messages":c.value.last_name},null,8,["modelValue","label","error-messages"])]),_:1}),e(_,{cols:"12"},{default:t(()=>[e(w,{modelValue:l.value.display_name,"onUpdate:modelValue":o[2]||(o[2]=u=>l.value.display_name=u),label:m(a)("Display name"),variant:"outlined","prepend-icon":"toto",density:"compact","error-messages":c.value.display_name},null,8,["modelValue","label","error-messages"])]),_:1}),e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.company,"onUpdate:modelValue":o[3]||(o[3]=u=>l.value.company=u),label:m(a)("Company"),variant:"outlined","prepend-icon":"mdi-office-building",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6",class:"pl-4"},{default:t(()=>[e(w,{modelValue:l.value.position,"onUpdate:modelValue":o[4]||(o[4]=u=>l.value.position=u),label:m(a)("Position"),variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),(p(!0),z(O,null,X(l.value.emails,(u,C)=>(p(),A(we,{key:`email-${C}`,modelValue:l.value.emails[C],"onUpdate:modelValue":M=>l.value.emails[C]=M,index:C,onAdd:S,onDelete:T},null,8,["modelValue","onUpdate:modelValue","index"]))),128)),(p(!0),z(O,null,X(l.value.phone_numbers,(u,C)=>(p(),A(Ae,{key:`phone-${C}`,modelValue:l.value.phone_numbers[C],"onUpdate:modelValue":M=>l.value.phone_numbers[C]=M,index:C,onAdd:j,onDelete:E},null,8,["modelValue","onUpdate:modelValue","index"]))),128)),r.value?(p(),z(O,{key:0},[e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.birth_date,"onUpdate:modelValue":o[5]||(o[5]=u=>l.value.birth_date=u),label:m(a)("Birth date"),type:"date","prepend-icon":"mdi-calendar",variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"12"},{default:t(()=>[e(le,{modelValue:l.value.address,"onUpdate:modelValue":o[6]||(o[6]=u=>l.value.address=u),label:m(a)("Address"),"prepend-icon":"mdi-location",variant:"outlined",density:"compact",rows:"2"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.zipcode,"onUpdate:modelValue":o[7]||(o[7]=u=>l.value.zipcode=u),label:m(a)("Zip code"),"prepend-icon":"toto",variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6",class:"pl-4"},{default:t(()=>[e(w,{modelValue:l.value.city,"onUpdate:modelValue":o[8]||(o[8]=u=>l.value.city=u),label:m(a)("City"),variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6"},{default:t(()=>[e(w,{modelValue:l.value.country,"onUpdate:modelValue":o[9]||(o[9]=u=>l.value.country=u),label:m(a)("Country"),"prepend-icon":"toto",variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"6",class:"pl-4"},{default:t(()=>[e(w,{modelValue:l.value.state,"onUpdate:modelValue":o[10]||(o[10]=u=>l.value.state=u),label:m(a)("State/Province"),variant:"outlined",density:"compact"},null,8,["modelValue","label"])]),_:1}),e(_,{cols:"12"},{default:t(()=>[e(le,{modelValue:l.value.note,"onUpdate:modelValue":o[11]||(o[11]=u=>l.value.note=u),label:m(a)("Note"),"prepend-icon":"mdi-file",variant:"outlined",density:"compact",rows:"2"},null,8,["modelValue","label"])]),_:1})],64)):D("",!0)]),_:1})]),_:1}),e(W,null,{default:t(()=>[r.value?(p(),A($,{key:1,onClick:o[13]||(o[13]=u=>r.value=!1)},{default:t(()=>[x(f(m(a)("Less")),1)]),_:1})):(p(),A($,{key:0,onClick:o[12]||(o[12]=u=>r.value=!0)},{default:t(()=>[x(f(m(a)("More")),1)]),_:1})),e(G),e($,{loading:d.value,onClick:o[14]||(o[14]=u=>s("close"))},{default:t(()=>[x(f(m(a)("Close")),1)]),_:1},8,["loading"]),e($,{color:"primary",type:"submit",loading:d.value},{default:t(()=>[x(f(h.value),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1}))}},Ne={class:"headline"},Be={__name:"ContactCategoriesForm",props:{contact:{type:Object,default:null}},emits:["close"],setup(y,{emit:U}){const s=y,i=U,a=V([]),l=V([]),r=V(!1);function n(){i("close","updated")}async function c(){const d={categories:l.value};r.value=!0;try{await N.updateContact(s.contact.pk,d),i("updated"),n()}finally{r.value=!1}}return q(()=>s.contact,d=>{d?l.value=d.categories:l.value=[]},{immediate:!0}),N.getCategories().then(d=>{a.value=d.data}),(d,F)=>(p(),A(J,null,{default:t(()=>[e(te,{ref:"formRef",onSubmit:ee(c,["prevent"])},{default:t(()=>[e(K,null,{default:t(()=>[L("span",Ne,f(d.$gettext("Categories")),1)]),_:1}),e(Q,null,{default:t(()=>[(p(!0),z(O,null,X(a.value,h=>(p(),A(Ve,{key:h.pk,modelValue:l.value,"onUpdate:modelValue":F[0]||(F[0]=v=>l.value=v),label:h.name,"hide-details":"",value:h.pk,color:"primary"},null,8,["modelValue","label","value"]))),128))]),_:1}),e(W,null,{default:t(()=>[e(G),e($,{loading:r.value,onClick:n},{default:t(()=>[x(f(d.$gettext("Close")),1)]),_:1},8,["loading"]),e($,{color:"primary",type:"submit",loading:r.value},{default:t(()=>[x(f(d.$gettext("Update")),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1}))}},ze={class:"text-right"},Oe={__name:"ContactList",emits:["editCategory"],setup(y,{emit:U}){const s=U,i=me(),{$gettext:a}=H(),{displayNotification:l}=ae(),r=V({}),n=V([]),c=V(""),d=V(null),F=V(!1),h=V(!1),v=V(!1),S=V({}),T=[{key:"display_name",title:a("Display name")},{key:"emails",title:a("E-mail")},{key:"phone_numbers",title:a("Phone")},{key:"actions",title:a("Actions"),align:"end"}],j=[{label:a("Categories"),icon:"mdi-label",onClick:M},{label:a("Edit"),icon:"mdi-circle-edit-outline",onClick:u},{label:a("Delete"),icon:"mdi-delete-outline",onClick:ue,color:"red"}];let E;ce(()=>{E&&clearInterval(E)});function I(){h.value=!1,d.value=null}function B(g){return g.map(k=>k.address).join(", ")}function o(g){return g.map(k=>k.number).join(", ")}function u(g){d.value=g,h.value=!0}function C(){s("editCategory")}function M(g){d.value=g,v.value=!0}function se(){v.value=!1,d.value=null}function ue(g){N.deleteContact(g.pk).then(()=>{R()})}function R(){N.getContacts(i.params).then(g=>{n.value=g.data})}function re(){N.synchronizeToAddressBook().then(()=>{l({msg:a("Synchronization started")})})}return N.getDefaultAddressBook().then(g=>{r.value=g.data}),fe.getUserApplication("contacts").then(g=>{S.value=g.data.params}),R(),q(S,g=>{g&&(E=setInterval(N.synchronizeFromAddressBook,g.sync_frequency*1e3))}),q(()=>i.params.category,()=>{R()}),(g,k)=>(p(),z(O,null,[e(J,{class:"mt-6"},{default:t(()=>[e(be,{headers:T,items:n.value},{top:t(()=>[e(ke,{color:"white",flat:""},{default:t(()=>[e(w,{modelValue:c.value,"onUpdate:modelValue":k[0]||(k[0]=b=>c.value=b),"prepend-inner-icon":"mdi-magnify",placeholder:m(a)("Search"),variant:"outlined","single-line":"",flat:"","hide-details":"",density:"compact",class:"flex-grow-0 w-33 mr-4"},null,8,["modelValue","placeholder"]),e($,{color:"primary",variant:"outlined",onClick:k[1]||(k[1]=b=>h.value=!0)},{default:t(()=>[x(f(m(a)("Add")),1)]),_:1}),S.value.enable_carddav_sync?(p(),z(O,{key:0},[e($,{icon:"mdi-information-outline",title:m(a)("Display address book information"),class:"ml-2",onClick:k[2]||(k[2]=b=>F.value=!0)},null,8,["title"]),r.value.last_sync?D("",!0):(p(),A($,{key:0,icon:"mdi-sync",color:"success",title:m(a)("Synchronize contacts with address book"),onClick:re},null,8,["title"]))],64)):D("",!0),g.$route.params.category?(p(),A(_e,{key:1,class:"my-2 mx-4",label:"",size:"small",color:"green","prepend-icon":"mdi-label",onClick:C},{default:t(()=>[x(f(g.$route.params.category),1)]),_:1})):D("",!0),e(G)]),_:1})]),"item.display_name":t(({item:b})=>[b.display_name?(p(),z(O,{key:0},[x(f(b.display_name),1)],64)):(p(),z(O,{key:1},[x(f(b.first_name)+" "+f(b.last_name),1)],64))]),"item.emails":t(({item:b})=>[x(f(B(b.emails)),1)]),"item.phone_numbers":t(({item:b})=>[x(f(o(b.phone_numbers)),1)]),"item.actions":t(({item:b})=>[L("div",ze,[e(Ce,{"offset-y":""},{activator:t(({props:de})=>[e($,pe({icon:"mdi-dots-horizontal",variant:"text"},de),null,16)]),default:t(()=>[e(m(ge),{items:j,obj:b},null,8,["obj"])]),_:2},1024)])]),_:2},1032,["items"])]),_:1}),e(Z,{modelValue:h.value,"onUpdate:modelValue":k[3]||(k[3]=b=>h.value=b),persistent:"","max-width":"800px"},{default:t(()=>[e(Se,{contact:d.value,onClose:I,onAdded:R,onUpdated:R},null,8,["contact"])]),_:1},8,["modelValue"]),e(Z,{modelValue:v.value,"onUpdate:modelValue":k[4]||(k[4]=b=>v.value=b),persistent:"","max-width":"800px"},{default:t(()=>[e(Be,{contact:d.value,onUpdated:R,onClose:se},null,8,["contact"])]),_:1},8,["modelValue"]),e(Z,{modelValue:F.value,"onUpdate:modelValue":k[6]||(k[6]=b=>F.value=b),persistent:"","max-width":"800px"},{default:t(()=>[e(Ue,{"address-book-url":r.value.url,onClose:k[5]||(k[5]=b=>F.value=!1)},null,8,["address-book-url"])]),_:1},8,["modelValue"])],64))}},Ee={class:"headline"},je={__name:"CategoryForm",props:{category:{type:Object,default:null}},emits:["close","updated"],setup(y,{emit:U}){const s=y,i=U,a=oe(),{$gettext:l}=H(),{displayNotification:r}=ae(),n=V({}),c=V(),d=V(!1),F=P(()=>s.category?l("Edit category"):l("Add category")),h=P(()=>s.category?l("Update"):l("Add"));function v(){n.value={},i("close")}async function S(){const{valid:j}=await c.value.validate();if(j){d.value=!0;try{s.category?await N.updateCategory(s.category.pk,n.value):await N.addCategory(n.value),i("updated"),i("close")}catch(E){console.log(E)}finally{d.value=!1}}}function T(){N.deleteCategory(s.category.pk).then(()=>{v(),i("updated"),r({msg:l("Category deleted")}),a.push({name:"ContactList"})})}return q(()=>s.category,j=>{j?n.value=JSON.parse(JSON.stringify(j)):n.value={}},{immediate:!0}),(j,E)=>(p(),A(J,null,{default:t(()=>[e(te,{ref_key:"formRef",ref:c,onSubmit:ee(S,["prevent"])},{default:t(()=>[e(K,null,{default:t(()=>[L("span",Ee,f(F.value),1)]),_:1}),e(Q,null,{default:t(()=>[e(w,{modelValue:n.value.name,"onUpdate:modelValue":E[0]||(E[0]=I=>n.value.name=I),label:m(l)("Name"),variant:"outlined",density:"compact",rules:[m(Y).required]},null,8,["modelValue","label","rules"])]),_:1}),e(W,null,{default:t(()=>[y.category?(p(),A($,{key:0,color:"red",onClick:T},{default:t(()=>[x(f(m(l)("Delete")),1)]),_:1})):D("",!0),e(G),e($,{loading:d.value,onClick:v},{default:t(()=>[x(f(m(l)("Close")),1)]),_:1},8,["loading"]),e($,{color:"primary",type:"submit",loading:d.value},{default:t(()=>[x(f(h.value),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1}))}},Le={class:"text-h5 ml-4"},ft={__name:"AddressBook",setup(y){const U=oe(),{$gettext:s}=H(),i=he(),a=$e(),l=V([]),r=V(!1),n=P(()=>{const v=[{icon:"mdi-contacts",text:s("Contacts"),to:{name:"ContactList"}},{text:s("Categories"),subheader:!0}];for(const S of l.value)v.push({icon:"mdi-label",text:S.name,action:()=>F(S)});return v.push({icon:"mdi-plus",text:s("Add a category"),action:c}),v});function c(){r.value=!0}function d(){r.value=!1}function F(v){i.setCurrentCategory(v),U.push({name:"ContactList",params:{category:v.name}})}function h(){N.getCategories().then(v=>{l.value=v.data})}return h(),q(n,v=>{a.setLeftMenuItems(v)}),(v,S)=>(p(),z(O,null,[L("div",Le,f(m(s)("Contacts")),1),e(Oe,{onEditCategory:c}),e(Z,{modelValue:r.value,"onUpdate:modelValue":S[0]||(S[0]=T=>r.value=T),persistent:"","max-width":"800px"},{default:t(()=>[e(je,{category:m(i).currentCategory,onClose:d,onAdded:h,onUpdated:h},null,8,["category"])]),_:1},8,["modelValue"])],64))}};export{ft as default};
@@ -0,0 +1 @@
1
+ import{b as D,u as g,h as l,i as p,j as t,g as c,c as b,o as x}from"./index-D9OmnhdE.js";import{p as _}from"./parameters-DlTg3gyZ.js";import{_ as N}from"./ConnectedLayout-CiKHST8t.js";import{u as h}from"./parameters.store-eTs-B-pe.js";import{u as f}from"./global.store-CxPrtY0_.js";import"./theme-tqh89n3L.js";import"./VContainer-f9kXL-37.js";/* empty css */import"./tag-jImTUiWx.js";import"./VApp-1CFpPM0s.js";import"./layout-CuwY6Rle.js";import"./ssrBoot-DaeAGyhc.js";import"./logos-BOVDV-my.js";import"./layout.store-uEYOXtgD.js";import"./VAvatar-Wz1UmZ2b.js";import"./VProgressCircular-Bdwj7JuI.js";import"./forwardRefs-GE5Osi9V.js";import"./VMenu-BPG7b7dT.js";import"./VBadge-C08Ii4Nb.js";import"./VCard-BrQzTMsm.js";import"./VRow-DGPh2Qmm.js";import"./VSheet-C07oo1bg.js";const X={__name:"AdminLayout",async setup(L){let a,e;const{$gettext:i}=D(),A=g(),s=f(),r=h(),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)=>(x(),b(N,{"menu-items":I.value},null,8,["menu-items"]))}};export{X as default};
@@ -0,0 +1 @@
1
+ import{d as G}from"./index-DuzUMVLM.js";import{C as b,_ as E,b as H,n as J,h as d,B as K,c as A,w as a,a as s,e as Q,f as p,v as D,k as n,t as c,l as w,F as N,j as x,o as f}from"./index-D9OmnhdE.js";import{_ as M}from"./MenuItems-Dg2GGDq6.js";import{V as L}from"./VMenu-BPG7b7dT.js";import{V as T,c as W}from"./VAvatar-Wz1UmZ2b.js";import{V as B}from"./VChip-B1E7xQW1.js";import{V as O,a as X}from"./VToolbar-CILwTR5O.js";import{V as Y}from"./VTextField-BBIziqiv.js";import{V as Z}from"./forwardRefs-GE5Osi9V.js";import{V as ee}from"./VDataTableServer-BSZUbic1.js";import{a as te}from"./VCard-BrQzTMsm.js";import"./VProgressCircular-Bdwj7JuI.js";import"./tag-jImTUiWx.js";import"./VInput-ssnfbpwr.js";import"./ssrBoot-DaeAGyhc.js";import"./VDataTable-CVJjOdhF.js";import"./VSelect-CzmrBwOO.js";import"./VCheckboxBtn-BMf4a9DP.js";import"./VSelectionControl-BIXXUgD4.js";import"./VTable-C08Q6ok2.js";import"./filter-CfvL3jIf.js";const y="alarms",h={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(),v=J(),C=d([]),$=d([{key:"status",order:"desc"}]),k=d(!1),u=d(""),g=d([]),S=d(0),R=[{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"}],z=[{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:U,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:j,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 _={page:o||1,page_size:l||10};t&&t.length&&(_.ordering=t.map(m=>m.order!=="asc"?`-${m.key}`:m.key).join(",")),u.value!==""&&(_.search=u.value),k.value=!0,h.getAll(_).then(m=>{C.value=m.data.results,S.value=m.data.count,k.value=!1})}async function j(o,l=!0){h.delete(o.id).then(()=>{l&&(v.displayNotification({msg:e("Alarm deleted")}),r({}))})}async function U(){await h.bulkDelete(g.value),v.displayNotification({msg:e("Alarms deleted")}),g.value=[],r({})}async function F(o){h.switchStatus(o.id,{status:x.ALARM_CLOSED}).then(()=>{v.displayNotification({msg:e("Alarm closed")}),r({})})}async function q(o){h.switchStatus(o.id,{status:x.ALARM_OPENED}).then(()=>{v.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:R,items:C.value,search:u.value,"item-value":"id","items-length":S.value,"items-per-page-options":z,loading:k.value,elevation:"0","show-select":"","onUpdate:options":r},{top:a(()=>[s(O,{color:"white",flat:""},{default:a(()=>[s(Y,{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(L,{location:"bottom"},{activator:a(({props:t})=>[s(T,D(t,{size:"small"}),{default:a(()=>[n(c(p(e)("Actions"))+" ",1),s(W,{right:""},{default:a(()=>l[3]||(l[3]=[n("mdi-chevron-down")])),_:1,__:[3]})]),_:2},1040)]),default:a(()=>[s(Z,{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(B,{key:0,color:"warning",size:"small"},{default:a(()=>[n(c(p(e)("Opened")),1)]),_:1})):(f(),A(B,{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(L,{location:"bottom"},{activator:a(({props:_})=>[s(T,D({icon:"mdi-dots-horizontal"},_,{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=E(le,[["__scopeId","data-v-4fccec74"]]),se={__name:"AlarmsView",setup(i){return(e,V)=>(f(),w("div",null,[s(O,{flat:""},{default:a(()=>[s(X,null,{default:a(()=>[n(c(e.$gettext("Opened alarms")),1)]),_:1})]),_:1}),s(oe)]))}},$e=E(se,[["__scopeId","data-v-eeff1c15"]]);export{$e as default};
@@ -0,0 +1 @@
1
+ .v-text-field--outlined[data-v-4fccec74] fieldset{border-color:#bfc5d2}.v-input--checkbox[data-v-4fccec74] .v-label{font-size:.875rem!important}.v-toolbar[data-v-eeff1c15]{background-color:#f7f8fa!important}
@@ -0,0 +1 @@
1
+ .v-toolbar[data-v-0edc6d33]{background-color:#f7f8fa!important}