modoboa 2.6.2__py3-none-any.whl → 2.6.4__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 (294) hide show
  1. modoboa/admin/api/v1/tests.py +5 -0
  2. modoboa/admin/api/v1/viewsets.py +19 -5
  3. modoboa/admin/api/v2/serializers.py +7 -2
  4. modoboa/admin/api/v2/tests.py +23 -1
  5. modoboa/admin/api/v2/viewsets.py +23 -4
  6. modoboa/admin/handlers.py +8 -13
  7. modoboa/admin/management/commands/subcommands/_import.py +1 -1
  8. modoboa/admin/management/commands/subcommands/_repair.py +1 -1
  9. modoboa/admin/models/alias.py +1 -1
  10. modoboa/admin/models/domain.py +1 -1
  11. modoboa/admin/tests/test_alias_targets.py +12 -0
  12. modoboa/admin/tests/test_data/import_accounts.csv +1 -0
  13. modoboa/admin/tests/test_import_.py +8 -0
  14. modoboa/admin/tests/test_repair.py +2 -2
  15. modoboa/calendars/backends/caldav_.py +3 -1
  16. modoboa/core/checks.py +5 -0
  17. modoboa/core/commands/templates/settings.py.tpl +4 -0
  18. modoboa/core/tests/test_checks.py +27 -0
  19. modoboa/frontend_dist/assets/AccountAliasForm-tLHotdIR.js +1 -0
  20. modoboa/frontend_dist/assets/AccountEditView-DnQIIg47.js +1 -0
  21. modoboa/frontend_dist/assets/AccountLayout-B2HptJzY.js +1 -0
  22. modoboa/frontend_dist/assets/{AccountPasswordSubForm-DtqTon2C.js → AccountPasswordSubForm-DpADntAL.js} +1 -1
  23. modoboa/frontend_dist/assets/AccountView-CJBGh9Oe.js +1 -0
  24. modoboa/frontend_dist/assets/AddressBook-CrFqzlzZ.js +1 -0
  25. modoboa/frontend_dist/assets/AdminLayout-BbCt7YxX.js +1 -0
  26. modoboa/frontend_dist/assets/AlarmsView-CIlt_IKQ.js +1 -0
  27. modoboa/frontend_dist/assets/AliasEditView-n75NEN_s.js +1 -0
  28. modoboa/frontend_dist/assets/AliasRecipientForm-jjj5yJJw.js +1 -0
  29. modoboa/frontend_dist/assets/{AliasView-nnu5M-6u.js → AliasView-DFIvPeIm.js} +1 -1
  30. modoboa/frontend_dist/assets/AuditTrailView-sWnED3E9.js +1 -0
  31. modoboa/frontend_dist/assets/CalendarView-DSCBIvef.js +1 -0
  32. modoboa/frontend_dist/assets/{ChoiceField-k5nIk4ck.js → ChoiceField-RDT6XcnX.js} +1 -1
  33. modoboa/frontend_dist/assets/ComposeEmailForm-D3yUbBJX.css +1 -0
  34. modoboa/frontend_dist/assets/ComposeEmailForm-G3sXQAwI.js +1 -0
  35. modoboa/frontend_dist/assets/ComposeEmailView-Ce1CtFjD.js +1 -0
  36. modoboa/frontend_dist/assets/{ConfirmDialog-B0TjtODh.js → ConfirmDialog-Du7aqKbR.js} +1 -1
  37. modoboa/frontend_dist/assets/ConnectedLayout-BHWaBAzH.js +1 -0
  38. modoboa/frontend_dist/assets/ConnectedLayout-C6HNXWkp.css +1 -0
  39. modoboa/frontend_dist/assets/CreationForm-CjtILq0_.js +1 -0
  40. modoboa/frontend_dist/assets/{CreationForm-HaiQhqwK.css → CreationForm-NOzzyspA.css} +1 -1
  41. modoboa/frontend_dist/assets/DashboardView-DFNwusDZ.js +1 -0
  42. modoboa/frontend_dist/assets/DomainAdminList-BjtfbhRj.js +1 -0
  43. modoboa/frontend_dist/assets/DomainEditView-Cq5Ea4RW.js +1 -0
  44. modoboa/frontend_dist/assets/{DomainTransportForm-DflFVeEo.js → DomainTransportForm-DAXJGNLA.js} +1 -1
  45. modoboa/frontend_dist/assets/DomainView-BfpK7U14.js +4 -0
  46. modoboa/frontend_dist/assets/DomainsView-CYxLy-3Y.js +1 -0
  47. modoboa/frontend_dist/assets/EmailField-DmPc4pyP.js +1 -0
  48. modoboa/frontend_dist/assets/EmailView-BE3vYZtJ.js +1 -0
  49. modoboa/frontend_dist/assets/EmptyLayout-DMwKNHfI.js +1 -0
  50. modoboa/frontend_dist/assets/FiltersView-Dps3_fAh.js +1 -0
  51. modoboa/frontend_dist/assets/ForwardEmailView-C0I00eXf.js +1 -0
  52. modoboa/frontend_dist/assets/HtmlEditor-D753fIAJ.js +140 -0
  53. modoboa/frontend_dist/assets/{IdentitiesView-Cl2lbfkM.css → IdentitiesView-C93He_db.css} +1 -1
  54. modoboa/frontend_dist/assets/IdentitiesView-CoGBVhZx.js +1 -0
  55. modoboa/frontend_dist/assets/InformationView-eB2ayeLD.js +1 -0
  56. modoboa/frontend_dist/assets/{LoadingData-1iXkFEpZ.js → LoadingData-Tm56XNwj.js} +1 -1
  57. modoboa/frontend_dist/assets/{LoginCallbackView-wq3vJcja.js → LoginCallbackView-DjCHUgz5.js} +1 -1
  58. modoboa/frontend_dist/assets/{LoginView-DZQijPLC.js → LoginView-D0r4XBEl.js} +1 -1
  59. modoboa/frontend_dist/assets/MailboxView-DIVABvk5.css +1 -0
  60. modoboa/frontend_dist/assets/MailboxView-DNokO2WZ.js +5 -0
  61. modoboa/frontend_dist/assets/MenuItems-dl38msRA.js +1 -0
  62. modoboa/frontend_dist/assets/MessageView-BWh9BqzS.js +1 -0
  63. modoboa/frontend_dist/assets/MessagesView-BZ7NUOwo.js +1 -0
  64. modoboa/frontend_dist/assets/MigrationsView-DcOVgmcH.js +1 -0
  65. modoboa/frontend_dist/assets/{ParametersForm-CPrKRznO.js → ParametersForm-y02-GM0r.js} +1 -1
  66. modoboa/frontend_dist/assets/ParametersView-B6abt-LH.js +1 -0
  67. modoboa/frontend_dist/assets/ParametersView-v0YS6WU4.js +1 -0
  68. modoboa/frontend_dist/assets/ProviderEditView-BaL9mKxJ.js +1 -0
  69. modoboa/frontend_dist/assets/ProviderGeneralForm-eoHMDO5v.js +1 -0
  70. modoboa/frontend_dist/assets/ProvidersView-DE17nfOl.css +1 -0
  71. modoboa/frontend_dist/assets/ProvidersView-Zu-G35u7.js +1 -0
  72. modoboa/frontend_dist/assets/QuarantineLayout-BHiiksnP.js +1 -0
  73. modoboa/frontend_dist/assets/QuarantineView-BOXSobRz.js +1 -0
  74. modoboa/frontend_dist/assets/ReplyEmailView-JmSiNWPy.js +1 -0
  75. modoboa/frontend_dist/assets/{ResourcesForm-D5G8hixZ.js → ResourcesForm-D0YBapCG.js} +1 -1
  76. modoboa/frontend_dist/assets/SelfServiceLayout-DUmQzUDk.js +1 -0
  77. modoboa/frontend_dist/assets/SettingsView-DMuaKagM.js +6 -0
  78. modoboa/frontend_dist/assets/StatisticsView-CyY_CNcI.js +1 -0
  79. modoboa/frontend_dist/assets/TimeSerieChart-BTDBH33K.js +1 -0
  80. modoboa/frontend_dist/assets/TimeSerieChart-C3XHmlRd.css +1 -0
  81. modoboa/frontend_dist/assets/UserLayout-DwxcQr4L.js +1 -0
  82. modoboa/frontend_dist/assets/{VAlert-iGJ3gOzk.css → VAlert-Bkuw9MFB.css} +1 -1
  83. modoboa/frontend_dist/assets/VAlert-CNys_LUS.js +1 -0
  84. modoboa/frontend_dist/assets/VApp-B0vRc3-6.js +1 -0
  85. modoboa/frontend_dist/assets/VApp-C9NK-Gu6.css +1 -0
  86. modoboa/frontend_dist/assets/VAutocomplete-Huaz_-hf.js +1 -0
  87. modoboa/frontend_dist/assets/VAutocomplete-hzGuLlUI.css +1 -0
  88. modoboa/frontend_dist/assets/VAvatar-BPhnln71.css +1 -0
  89. modoboa/frontend_dist/assets/VAvatar-JdJfoK0C.js +1 -0
  90. modoboa/frontend_dist/assets/{VBadge-BQrRJ9S0.css → VBadge-Bqx6XeRo.css} +1 -1
  91. modoboa/frontend_dist/assets/VBadge-Cg5iu5LG.js +1 -0
  92. modoboa/frontend_dist/assets/{VCard-BNvk7mV7.css → VCard-BdSLQNRY.css} +1 -1
  93. modoboa/frontend_dist/assets/VCard-BoH6kjPa.js +1 -0
  94. modoboa/frontend_dist/assets/VCheckbox-CCLOJFKF.js +1 -0
  95. modoboa/frontend_dist/assets/{VCheckboxBtn-B35nMyHy.js → VCheckboxBtn-Ccl786Rg.js} +1 -1
  96. modoboa/frontend_dist/assets/VColorPicker-452uc3tY.js +1 -0
  97. modoboa/frontend_dist/assets/VColorPicker-B_lVDaYR.css +1 -0
  98. modoboa/frontend_dist/assets/{VContainer-CTzYfsVd.js → VContainer-DKMcKasC.js} +1 -1
  99. modoboa/frontend_dist/assets/VDataTable-BkLLfcQK.js +1 -0
  100. modoboa/frontend_dist/assets/VDataTable-CLcLRj9B.css +1 -0
  101. modoboa/frontend_dist/assets/VDataTableServer-B_6fWBA3.js +1 -0
  102. modoboa/frontend_dist/assets/VDataTableVirtual-Ike7oqcC.js +1 -0
  103. modoboa/frontend_dist/assets/VDialog-DIUeAIpw.js +1 -0
  104. modoboa/frontend_dist/assets/VExpansionPanels-BeMgiS7A.js +1 -0
  105. modoboa/frontend_dist/assets/VExpansionPanels-Dyw0hWW-.css +1 -0
  106. modoboa/frontend_dist/assets/VFileInput-Dvj95FL5.js +1 -0
  107. modoboa/frontend_dist/assets/{VFileInput-VtUg4zpy.css → VFileInput-Dwzvf-gD.css} +1 -1
  108. modoboa/frontend_dist/assets/VForm-DkphQD3e.js +1 -0
  109. modoboa/frontend_dist/assets/VGrid-GYROgRMo.css +1 -0
  110. modoboa/frontend_dist/assets/VInput-CbqehdOu.js +1 -0
  111. modoboa/frontend_dist/assets/VMenu-B6SCtOwT.js +1 -0
  112. modoboa/frontend_dist/assets/VMenu-BEipA1lw.css +1 -0
  113. modoboa/frontend_dist/assets/VPicker-BUx70Wjg.js +1 -0
  114. modoboa/frontend_dist/assets/VPicker-ClSXs6kv.css +1 -0
  115. modoboa/frontend_dist/assets/VProgressCircular-C6u34DRJ.css +1 -0
  116. modoboa/frontend_dist/assets/VProgressCircular-DTDGzl2O.js +1 -0
  117. modoboa/frontend_dist/assets/VRadioGroup-CS9ULZ1c.js +1 -0
  118. modoboa/frontend_dist/assets/{VRow-Dnsej546.js → VRow-CuVZGqBj.js} +1 -1
  119. modoboa/frontend_dist/assets/VSelect-D5IXDPEX.js +1 -0
  120. modoboa/frontend_dist/assets/VSelect-DQzySRN1.css +1 -0
  121. modoboa/frontend_dist/assets/VSelectionControl-uKY9Zull.js +1 -0
  122. modoboa/frontend_dist/assets/VSheet-HeHw6g5_.js +1 -0
  123. modoboa/frontend_dist/assets/VSpacer-BUxSSJbH.js +1 -0
  124. modoboa/frontend_dist/assets/{VSwitch-Mm7Rd7At.css → VSwitch-C6REVr_Y.css} +1 -1
  125. modoboa/frontend_dist/assets/VSwitch-Dh_dserW.js +1 -0
  126. modoboa/frontend_dist/assets/VTable-BsI6FsWH.css +1 -0
  127. modoboa/frontend_dist/assets/VTable-gDsAUSLX.js +1 -0
  128. modoboa/frontend_dist/assets/VTabs-5XSICLQP.js +1 -0
  129. modoboa/frontend_dist/assets/VTabs-NzpINroH.css +1 -0
  130. modoboa/frontend_dist/assets/VTextField-Cow3HZvI.css +1 -0
  131. modoboa/frontend_dist/assets/VTextField-QXQFhKxm.js +1 -0
  132. modoboa/frontend_dist/assets/VTextarea-Bdy4UKmV.js +1 -0
  133. modoboa/frontend_dist/assets/VTextarea-DyGjqrlm.css +1 -0
  134. modoboa/frontend_dist/assets/VToolbar-CB2GrZpA.css +1 -0
  135. modoboa/frontend_dist/assets/VToolbar-CyrYSqJZ.js +1 -0
  136. modoboa/frontend_dist/assets/VWindowItem-DqNaT6b1.css +1 -0
  137. modoboa/frontend_dist/assets/VWindowItem-kZpArwK1.js +1 -0
  138. modoboa/frontend_dist/assets/WebmailLayout-BzW0LWYp.css +1 -0
  139. modoboa/frontend_dist/assets/WebmailLayout-CNUHODnw.js +1 -0
  140. modoboa/frontend_dist/assets/{accounts-CxGXJgEh.js → accounts-DqbBlaLK.js} +1 -1
  141. modoboa/frontend_dist/assets/{admin-COcAacoq.js → admin-D36m_nXq.js} +1 -1
  142. modoboa/frontend_dist/assets/{aliases-DJbDT92U.js → aliases-BtyF8GC8.js} +1 -1
  143. modoboa/frontend_dist/assets/{amavis-CbsMYC6e.js → amavis-B4QhM5Fa.js} +1 -1
  144. modoboa/frontend_dist/assets/{amavis-BqfDWEXM.js → amavis-DySmsCJQ.js} +1 -1
  145. modoboa/frontend_dist/assets/{contacts-BqHRqWBy.js → contacts-Df8ptuMn.js} +1 -1
  146. modoboa/frontend_dist/assets/{domains-FSnyP8bd.js → domains-CSxtTvUh.js} +1 -1
  147. modoboa/frontend_dist/assets/{domains.store-GfcrCBY7.js → domains.store-D4ZqCQ-O.js} +1 -1
  148. modoboa/frontend_dist/assets/filter-DHKXX97M.js +1 -0
  149. modoboa/frontend_dist/assets/{global.store-DrPrIa_j.js → global.store-DYMmGKpn.js} +1 -1
  150. modoboa/frontend_dist/assets/{importExport-D12RGpG8.js → importExport-C-adpHJX.js} +1 -1
  151. modoboa/frontend_dist/assets/index-B1bntsLR.js +995 -0
  152. modoboa/frontend_dist/assets/{index-B1bJH8Ti.css → index-B9q1vO3K.css} +1 -1
  153. modoboa/frontend_dist/assets/index-Bp9Fb67E.js +1 -0
  154. modoboa/frontend_dist/assets/language.store-_-zrrEiS.js +1 -0
  155. modoboa/frontend_dist/assets/languages-CxjoT69j.js +1 -0
  156. modoboa/frontend_dist/assets/layout-CjSP_k58.js +1 -0
  157. modoboa/frontend_dist/assets/{layout.store-ZOCP2JtQ.js → layout.store-CF5WRevH.js} +1 -1
  158. modoboa/frontend_dist/assets/{logos-DY4N2P_F.js → logos-95XYS6uH.js} +1 -1
  159. modoboa/frontend_dist/assets/{logs-CgQS5lzy.js → logs-CyU_PIDh.js} +1 -1
  160. modoboa/frontend_dist/assets/{parameters-BOf7j4fc.js → parameters-BxAXBXU1.js} +1 -1
  161. modoboa/frontend_dist/assets/{parameters.store-6D12J_uw.js → parameters.store-CATOSoQZ.js} +1 -1
  162. modoboa/frontend_dist/assets/{permissions-DxMzIhgI.js → permissions-cSkGqV3M.js} +1 -1
  163. modoboa/frontend_dist/assets/{ssrBoot-BbpCPk1A.js → ssrBoot-05WtbG6H.js} +1 -1
  164. modoboa/frontend_dist/assets/{tag-D-_IsM8n.js → tag-BmV84V2s.js} +1 -1
  165. modoboa/frontend_dist/assets/{theme-B2lOH8MT.js → theme-myV4ekXo.js} +1 -1
  166. modoboa/frontend_dist/assets/transports-ChdHV5hX.js +1 -0
  167. modoboa/frontend_dist/assets/webmail-B7MNMkv_.js +1 -0
  168. modoboa/frontend_dist/assets/webmail.store-Cm-h6hhE.js +1 -0
  169. modoboa/frontend_dist/index.html +2 -2
  170. modoboa/locale/fr/LC_MESSAGES/django.mo +0 -0
  171. modoboa/locale/fr/LC_MESSAGES/django.po +131 -391
  172. modoboa/sievefilters/api/v2/tests.py +6 -0
  173. modoboa/sievefilters/api/v2/viewsets.py +10 -0
  174. modoboa/webmail/serializers.py +2 -1
  175. modoboa/webmail/tests/test_viewsets.py +16 -4
  176. modoboa/webmail/viewsets.py +17 -3
  177. {modoboa-2.6.2.dist-info → modoboa-2.6.4.dist-info}/METADATA +5 -5
  178. {modoboa-2.6.2.dist-info → modoboa-2.6.4.dist-info}/RECORD +183 -183
  179. modoboa/frontend_dist/assets/AccountAliasForm-BzwhK9cz.js +0 -1
  180. modoboa/frontend_dist/assets/AccountEditView-Dujx5Scp.js +0 -1
  181. modoboa/frontend_dist/assets/AccountLayout-BDiVTbNa.js +0 -1
  182. modoboa/frontend_dist/assets/AccountView-D8vnHee_.js +0 -1
  183. modoboa/frontend_dist/assets/AddressBook-DWGt9xIC.js +0 -1
  184. modoboa/frontend_dist/assets/AdminLayout-GPLTQAzV.js +0 -1
  185. modoboa/frontend_dist/assets/AlarmsView-DDN5FZ4i.js +0 -1
  186. modoboa/frontend_dist/assets/AliasEditView-BeXQf1Ja.js +0 -1
  187. modoboa/frontend_dist/assets/AliasRecipientForm-CGPKUJVF.js +0 -1
  188. modoboa/frontend_dist/assets/AuditTrailView-Bysr09YT.js +0 -1
  189. modoboa/frontend_dist/assets/CalendarView-CGdVWsxp.js +0 -1
  190. modoboa/frontend_dist/assets/ComposeEmailForm-DHFthaP6.css +0 -1
  191. modoboa/frontend_dist/assets/ComposeEmailForm-DUyJM2FF.js +0 -1
  192. modoboa/frontend_dist/assets/ComposeEmailView-Byvgy2YX.js +0 -1
  193. modoboa/frontend_dist/assets/ConnectedLayout-Bxh21hcH.css +0 -1
  194. modoboa/frontend_dist/assets/ConnectedLayout-C-YqPGtT.js +0 -1
  195. modoboa/frontend_dist/assets/CreationForm-oDKUwmFm.js +0 -1
  196. modoboa/frontend_dist/assets/DashboardView-D_WPdBgH.js +0 -1
  197. modoboa/frontend_dist/assets/DomainAdminList-Bv43h5YQ.js +0 -1
  198. modoboa/frontend_dist/assets/DomainEditView-wXBS3A63.js +0 -1
  199. modoboa/frontend_dist/assets/DomainView-DZn2Rzef.js +0 -5
  200. modoboa/frontend_dist/assets/DomainsView-BJIxWiDj.js +0 -1
  201. modoboa/frontend_dist/assets/EmailField-CFNREcuM.js +0 -1
  202. modoboa/frontend_dist/assets/EmailView-CAukleod.js +0 -1
  203. modoboa/frontend_dist/assets/EmptyLayout-CgltY47x.js +0 -1
  204. modoboa/frontend_dist/assets/FiltersView-COwmHjdx.js +0 -1
  205. modoboa/frontend_dist/assets/ForwardEmailView-DxNEqmlZ.js +0 -1
  206. modoboa/frontend_dist/assets/HtmlEditor-CSRAxVCo.js +0 -93
  207. modoboa/frontend_dist/assets/IdentitiesView-ChlrCGeN.js +0 -1
  208. modoboa/frontend_dist/assets/InformationView-Cq0mfs4D.js +0 -1
  209. modoboa/frontend_dist/assets/MailboxView-CfStlWhk.css +0 -1
  210. modoboa/frontend_dist/assets/MailboxView-Xo1djG8R.js +0 -1
  211. modoboa/frontend_dist/assets/MenuItems-Cm9c9dyI.js +0 -1
  212. modoboa/frontend_dist/assets/MessageView-D0810wvi.js +0 -1
  213. modoboa/frontend_dist/assets/MessagesView-D-BBhhOJ.js +0 -1
  214. modoboa/frontend_dist/assets/MigrationsView-B-OvKVxP.js +0 -1
  215. modoboa/frontend_dist/assets/ParametersView-CMunpHG1.js +0 -1
  216. modoboa/frontend_dist/assets/ParametersView-jdeMts_I.js +0 -1
  217. modoboa/frontend_dist/assets/ProviderEditView-CFm5-K3j.js +0 -1
  218. modoboa/frontend_dist/assets/ProviderGeneralForm-jpkQRqL5.js +0 -1
  219. modoboa/frontend_dist/assets/ProvidersView-D5UWPOH9.js +0 -1
  220. modoboa/frontend_dist/assets/ProvidersView-D_ER4F1h.css +0 -1
  221. modoboa/frontend_dist/assets/QuarantineLayout-DbM_Wx4I.js +0 -1
  222. modoboa/frontend_dist/assets/QuarantineView-B2tBwskg.js +0 -1
  223. modoboa/frontend_dist/assets/ReplyEmailView-Deogiaa7.js +0 -1
  224. modoboa/frontend_dist/assets/SelfServiceLayout-De0pXOuH.js +0 -1
  225. modoboa/frontend_dist/assets/SettingsView-BUd1HmFo.js +0 -6
  226. modoboa/frontend_dist/assets/StatisticsView-DYzFg6_F.js +0 -1
  227. modoboa/frontend_dist/assets/TimeSerieChart-DeItUg1R.js +0 -1
  228. modoboa/frontend_dist/assets/TimeSerieChart-Dn6Wznn8.css +0 -1
  229. modoboa/frontend_dist/assets/UserLayout-CzNQqfm5.js +0 -1
  230. modoboa/frontend_dist/assets/VAlert-mUmhR_lW.js +0 -1
  231. modoboa/frontend_dist/assets/VApp-D-widb3i.js +0 -1
  232. modoboa/frontend_dist/assets/VApp-DwhR0sAF.css +0 -1
  233. modoboa/frontend_dist/assets/VAutocomplete-6cfcsvjI.js +0 -1
  234. modoboa/frontend_dist/assets/VAutocomplete-CPd3yAvV.css +0 -1
  235. modoboa/frontend_dist/assets/VAvatar-BAW2MRci.js +0 -1
  236. modoboa/frontend_dist/assets/VAvatar-DXG1YGB5.css +0 -1
  237. modoboa/frontend_dist/assets/VBadge-D1u6z0HB.js +0 -1
  238. modoboa/frontend_dist/assets/VCard-DI9bqjLN.js +0 -1
  239. modoboa/frontend_dist/assets/VCheckbox-CFYky8Vk.js +0 -1
  240. modoboa/frontend_dist/assets/VChip-C2Lh9BaB.js +0 -1
  241. modoboa/frontend_dist/assets/VChip-D0iltsFo.css +0 -1
  242. modoboa/frontend_dist/assets/VColorPicker-C-5tY_au.js +0 -1
  243. modoboa/frontend_dist/assets/VColorPicker-C5_3l312.css +0 -1
  244. modoboa/frontend_dist/assets/VDataTable-CJyX7uj5.css +0 -1
  245. modoboa/frontend_dist/assets/VDataTable-ClNLUB1Q.js +0 -1
  246. modoboa/frontend_dist/assets/VDataTableServer-DnuQ8rkQ.js +0 -1
  247. modoboa/frontend_dist/assets/VDataTableVirtual-CbOL_PbK.js +0 -1
  248. modoboa/frontend_dist/assets/VDialog-CqMQCPwz.js +0 -1
  249. modoboa/frontend_dist/assets/VExpansionPanels-Cf4WPRqX.js +0 -1
  250. modoboa/frontend_dist/assets/VExpansionPanels-RsCANmDP.css +0 -1
  251. modoboa/frontend_dist/assets/VFileInput-CvKkPeTl.js +0 -1
  252. modoboa/frontend_dist/assets/VForm-DUC3-Taa.js +0 -1
  253. modoboa/frontend_dist/assets/VGrid-Cb7FdSrp.css +0 -1
  254. modoboa/frontend_dist/assets/VInput-B6b2s-5B.js +0 -1
  255. modoboa/frontend_dist/assets/VMenu-CxE66Rh1.css +0 -1
  256. modoboa/frontend_dist/assets/VMenu-sBFHa2zz.js +0 -1
  257. modoboa/frontend_dist/assets/VPicker-CfsXFhHv.css +0 -1
  258. modoboa/frontend_dist/assets/VPicker-DTZ3WsV_.js +0 -1
  259. modoboa/frontend_dist/assets/VProgressCircular-BOPNpUlJ.js +0 -1
  260. modoboa/frontend_dist/assets/VProgressCircular-BPJdTVu4.css +0 -1
  261. modoboa/frontend_dist/assets/VRadioGroup-G9uvkWom.js +0 -1
  262. modoboa/frontend_dist/assets/VSelect-BdxqTzW5.js +0 -1
  263. modoboa/frontend_dist/assets/VSelect-SEzwNEUK.css +0 -1
  264. modoboa/frontend_dist/assets/VSelectionControl-BHD9kDEZ.js +0 -1
  265. modoboa/frontend_dist/assets/VSheet-DRQqJmTV.js +0 -1
  266. modoboa/frontend_dist/assets/VSpacer-Cxcym55r.js +0 -1
  267. modoboa/frontend_dist/assets/VSwitch-bLRfr5zT.js +0 -1
  268. modoboa/frontend_dist/assets/VTable-CHRVGI94.css +0 -1
  269. modoboa/frontend_dist/assets/VTable-CLV2Uv-1.js +0 -1
  270. modoboa/frontend_dist/assets/VTabs-Bv8FUb0o.css +0 -1
  271. modoboa/frontend_dist/assets/VTabs-GZimpcz5.js +0 -1
  272. modoboa/frontend_dist/assets/VTextField-BzBVKKob.css +0 -1
  273. modoboa/frontend_dist/assets/VTextField-Dt3N956g.js +0 -1
  274. modoboa/frontend_dist/assets/VTextarea-BTR7f0gW.css +0 -1
  275. modoboa/frontend_dist/assets/VTextarea-PA2LHtN4.js +0 -1
  276. modoboa/frontend_dist/assets/VToolbar-BxjAEfSk.css +0 -1
  277. modoboa/frontend_dist/assets/VToolbar-Du_s_183.js +0 -1
  278. modoboa/frontend_dist/assets/VWindowItem-CBUkz4P7.js +0 -1
  279. modoboa/frontend_dist/assets/VWindowItem-CWBhiE_Y.css +0 -1
  280. modoboa/frontend_dist/assets/WebmailLayout-BnRwSunS.js +0 -1
  281. modoboa/frontend_dist/assets/WebmailLayout-UlftFiiT.css +0 -1
  282. modoboa/frontend_dist/assets/filter-fudwgMWN.js +0 -1
  283. modoboa/frontend_dist/assets/forwardRefs-DDY5bVRf.js +0 -1
  284. modoboa/frontend_dist/assets/forwardRefs-i-22bMcD.css +0 -1
  285. modoboa/frontend_dist/assets/index-Be6X7UaJ.js +0 -982
  286. modoboa/frontend_dist/assets/index-DuzUMVLM.js +0 -1
  287. modoboa/frontend_dist/assets/layout-DD534hN7.js +0 -1
  288. modoboa/frontend_dist/assets/transports-K6Dg3jL3.js +0 -1
  289. modoboa/frontend_dist/assets/webmail-Dtit1NLT.js +0 -1
  290. {modoboa-2.6.2.data → modoboa-2.6.4.data}/scripts/modoboa-admin.py +0 -0
  291. {modoboa-2.6.2.dist-info → modoboa-2.6.4.dist-info}/WHEEL +0 -0
  292. {modoboa-2.6.2.dist-info → modoboa-2.6.4.dist-info}/entry_points.txt +0 -0
  293. {modoboa-2.6.2.dist-info → modoboa-2.6.4.dist-info}/licenses/LICENSE +0 -0
  294. {modoboa-2.6.2.dist-info → modoboa-2.6.4.dist-info}/top_level.txt +0 -0
@@ -96,6 +96,12 @@ class FilterSetViewSetTestCase(PatcherMixin, ModoAPITestCase):
96
96
  resp = self.client.post(url)
97
97
  self.assertEqual(resp.status_code, 200)
98
98
 
99
+ def test_deactivate_active(self):
100
+ self.authenticate()
101
+ url = reverse("v2:filterset-deactivate-active")
102
+ resp = self.client.post(url)
103
+ self.assertEqual(resp.status_code, 200)
104
+
99
105
  def test_download(self):
100
106
  self.authenticate()
101
107
  url = reverse("v2:filterset-download", args=["unknown"])
@@ -99,6 +99,16 @@ class FilterSetViewSet(viewsets.ViewSet):
99
99
  return response.Response({"error": str(err)}, status=400)
100
100
  return response.Response()
101
101
 
102
+ @action(methods=["post"], detail=False)
103
+ def deactivate_active(self, request):
104
+ """Deactivate the current active filterset."""
105
+ sclient = self.get_sieve_client(request)
106
+ try:
107
+ sclient.activatescript("")
108
+ except SieveClientError as err:
109
+ return response.Response({"error": str(err)}, status=400)
110
+ return response.Response()
111
+
102
112
  @action(methods=["get"], detail=True)
103
113
  def download(self, request, pk):
104
114
  """Download the content of an existing filter set."""
@@ -173,7 +173,8 @@ class EmailSerializer(serializers.Serializer):
173
173
 
174
174
  class MoveSelectionSerializer(serializers.Serializer):
175
175
 
176
- mailbox = serializers.CharField()
176
+ source = serializers.CharField()
177
+ destination = serializers.CharField(required=False)
177
178
  selection = serializers.ListField(child=serializers.CharField())
178
179
 
179
180
  def validate_selection(self, value):
@@ -173,15 +173,27 @@ class UserEmailViewSetTestCase(WebmailTestCase):
173
173
  self.assertEqual(response.status_code, 200)
174
174
  self.assertIn("Message-ID", response.json()["source"])
175
175
 
176
+ def test_move(self):
177
+ self.authenticate()
178
+ url = reverse("v2:webmail-email-move")
179
+ body = {"source": "INBOX", "destination": "Junk", "selection": [1]}
180
+ response = self.client.post(url, body, format="json")
181
+ self.assertEqual(response.status_code, 200)
182
+ self.assertEqual(response.json()["count"], 1)
183
+
184
+ body = {"source": "INBOX", "selection": [1]}
185
+ response = self.client.post(url, body, format="json")
186
+ self.assertEqual(response.status_code, 400)
187
+
176
188
  def test_delete(self):
177
189
  self.authenticate()
178
190
  url = reverse("v2:webmail-email-delete")
179
- body = {"mailbox": "INBOX", "selection": [1]}
191
+ body = {"source": "INBOX", "selection": [1]}
180
192
  response = self.client.post(url, body, format="json")
181
193
  self.assertEqual(response.status_code, 200)
182
194
  self.assertEqual(response.json()["count"], 1)
183
195
 
184
- body = {"mailbox": "INBOX", "selection": ["truc"]}
196
+ body = {"source": "INBOX", "selection": ["truc"]}
185
197
  response = self.client.post(url, body, format="json")
186
198
  self.assertEqual(response.status_code, 200)
187
199
  self.assertEqual(response.json()["count"], 0)
@@ -189,7 +201,7 @@ class UserEmailViewSetTestCase(WebmailTestCase):
189
201
  def test_mark_as_junk(self):
190
202
  self.authenticate()
191
203
  url = reverse("v2:webmail-email-mark-as-junk")
192
- body = {"mailbox": "INBOX", "selection": [1]}
204
+ body = {"source": "INBOX", "selection": [1]}
193
205
  response = self.client.post(url, body, format="json")
194
206
  self.assertEqual(response.status_code, 200)
195
207
  self.assertEqual(response.json()["count"], 1)
@@ -197,7 +209,7 @@ class UserEmailViewSetTestCase(WebmailTestCase):
197
209
  def test_mark_as_not_junk(self):
198
210
  self.authenticate()
199
211
  url = reverse("v2:webmail-email-mark-as-not-junk")
200
- body = {"mailbox": "INBOX", "selection": [1]}
212
+ body = {"source": "INBOX", "selection": [1]}
201
213
  response = self.client.post(url, body, format="json")
202
214
  self.assertEqual(response.status_code, 200)
203
215
  self.assertEqual(response.json()["count"], 1)
@@ -9,6 +9,7 @@ from rest_framework import parsers, response, viewsets
9
9
  from rest_framework.decorators import action
10
10
  from rest_framework.permissions import IsAuthenticated
11
11
 
12
+ from modoboa.lib import exceptions
12
13
  from modoboa.lib.paginator import Paginator
13
14
  from modoboa.lib.viewsets import HasMailbox
14
15
  from modoboa.webmail import lib, serializers
@@ -123,7 +124,7 @@ class UserEmailViewSet(viewsets.GenericViewSet):
123
124
  def get_serializer_class(self):
124
125
  if self.action == "list":
125
126
  return serializers.PaginatedEmailListSerializer
126
- if self.action in ["delete", "mark_as_junk", "mark_as_not_junk"]:
127
+ if self.action in ["move", "delete", "mark_as_junk", "mark_as_not_junk"]:
127
128
  return serializers.MoveSelectionSerializer
128
129
  if self.action == "flag":
129
130
  return serializers.FlagSelectionSerializer
@@ -167,18 +168,31 @@ class UserEmailViewSet(viewsets.GenericViewSet):
167
168
  )
168
169
  return response.Response(serializer.data)
169
170
 
170
- def move_selection(self, request, destination: str) -> int:
171
+ def move_selection(self, request, destination: str | None = None) -> int:
171
172
  """Move selected messages to the given mailbox."""
172
173
  serializer = self.get_serializer(data=request.data)
173
174
  serializer.is_valid(raise_exception=True)
175
+ if destination is None:
176
+ if "destination" not in serializer.validated_data:
177
+ raise exceptions.BadRequest("No destination provided")
178
+ destination = serializer.validated_data["destination"]
174
179
  with lib.get_imapconnector(request) as mbc:
175
180
  mbc.move(
176
181
  ",".join(serializer.validated_data["selection"]),
177
- serializer.validated_data["mailbox"],
182
+ serializer.validated_data["source"],
178
183
  destination,
179
184
  )
180
185
  return len(serializer.validated_data["selection"])
181
186
 
187
+ @action(
188
+ methods=["post"],
189
+ detail=False,
190
+ serializer_class=serializers.MoveSelectionSerializer,
191
+ )
192
+ def move(self, request):
193
+ count = self.move_selection(request)
194
+ return response.Response({"count": count})
195
+
182
196
  @action(
183
197
  methods=["post"],
184
198
  detail=False,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modoboa
3
- Version: 2.6.2
3
+ Version: 2.6.4
4
4
  Summary: Mail hosting made simple
5
5
  Author-email: Antoine Nguyen <tonio@ngyn.org>
6
6
  License: ISC License
@@ -40,11 +40,11 @@ Classifier: Topic :: Internet :: WWW/HTTP
40
40
  Requires-Python: >=3.10
41
41
  Description-Content-Type: text/x-rst
42
42
  License-File: LICENSE
43
- Requires-Dist: django==5.2.7
44
- Requires-Dist: django-phonenumber-field[phonenumbers]==8.3.0
43
+ Requires-Dist: django==5.2.8
44
+ Requires-Dist: django-phonenumber-field[phonenumbers]==8.4.0
45
45
  Requires-Dist: django-reversion==6.0.0
46
46
  Requires-Dist: django-xforwardedfor-middleware==2.0
47
- Requires-Dist: django-otp==1.6.2
47
+ Requires-Dist: django-otp==1.6.3
48
48
  Requires-Dist: django-filter
49
49
  Requires-Dist: django-rename-app==0.1.7
50
50
  Requires-Dist: django-environ
@@ -84,7 +84,7 @@ Requires-Dist: django-rq
84
84
  Requires-Dist: sievelib>=1.4.1
85
85
  Requires-Dist: drf-nested-routers
86
86
  Requires-Dist: vobject
87
- Requires-Dist: caldav==2.0.1
87
+ Requires-Dist: caldav==2.1.2
88
88
  Requires-Dist: html2text
89
89
  Requires-Dist: idna
90
90
  Provides-Extra: dev