From fa099382d1c5cde202c344abad2dbd0905ddcb81 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Thu, 18 Jul 2024 12:13:31 +0200 Subject: [PATCH 1/3] Fixes after review of beta2 --- doc/upgrade.rst | 2 +- .../admin/dmarc/DmarcAligmentChart.vue | 6 +- .../src/layouts/dashboard/DashboardLayout.vue | 6 + frontend/src/views/admin/ParametersView.vue | 108 +++++++++--------- .../views/admin/domains/DomainEditView.vue | 15 ++- .../src/views/admin/domains/DomainView.vue | 7 ++ .../admin/identities/AccountEditView.vue | 11 +- .../views/admin/identities/AliasEditView.vue | 15 ++- .../core/commands/templates/settings.py.tpl | 2 +- requirements.txt | 2 +- 10 files changed, 103 insertions(+), 71 deletions(-) diff --git a/doc/upgrade.rst b/doc/upgrade.rst index bec3a4c56..06e648e06 100644 --- a/doc/upgrade.rst +++ b/doc/upgrade.rst @@ -269,7 +269,7 @@ by default. 'OIDC_ENABLED': True, 'OIDC_RP_INITIATED_LOGOUT_ENABLED': True, 'OIDC_RP_INITIATED_LOGOUT_ALWAYS_PROMPT': True, - 'OIDC_RSA_PRIVATE_KEY': env('OIDC_RSA_PRIVATE_KEY'), + 'OIDC_RSA_PRIVATE_KEY': env.str('OIDC_RSA_PRIVATE_KEY', multiline=True), 'SCOPES': { 'openid': 'OpenID Connect scope', 'read': 'Read scope', diff --git a/frontend/src/components/admin/dmarc/DmarcAligmentChart.vue b/frontend/src/components/admin/dmarc/DmarcAligmentChart.vue index 83d418ab8..7a470d98a 100644 --- a/frontend/src/components/admin/dmarc/DmarcAligmentChart.vue +++ b/frontend/src/components/admin/dmarc/DmarcAligmentChart.vue @@ -2,7 +2,7 @@
- $gettext('Alignment') + {{ $gettext('Alignment') }} @@ -153,8 +153,8 @@ const boxes = ref([ ]) const now = DateTime.now() -const currentWeek = ref(now.year) -const currentYear = ref(now.weekNumber) +const currentYear = ref(now.year) +const currentWeek = ref(now.weekNumber) const dmarcDisabled = ref(false) const loading = ref(false) const panel = ref(null) diff --git a/frontend/src/layouts/dashboard/DashboardLayout.vue b/frontend/src/layouts/dashboard/DashboardLayout.vue index 00b805f6c..97b80fb29 100644 --- a/frontend/src/layouts/dashboard/DashboardLayout.vue +++ b/frontend/src/layouts/dashboard/DashboardLayout.vue @@ -42,3 +42,9 @@ busStore.$onAction(({ name, after }) => { } }, true) + + diff --git a/frontend/src/views/admin/ParametersView.vue b/frontend/src/views/admin/ParametersView.vue index 6998a9cb4..8fce86ec7 100644 --- a/frontend/src/views/admin/ParametersView.vue +++ b/frontend/src/views/admin/ParametersView.vue @@ -19,59 +19,61 @@ v-for="element in displayableElements" :key="element.label" > - - - - - + + + + + + + -
- {{ $gettext('Edit domain') }} -
- -
+ + {{ $gettext('Edit domain') }} + + + + diff --git a/frontend/src/views/admin/domains/DomainView.vue b/frontend/src/views/admin/domains/DomainView.vue index 4f22feb10..4568f254e 100644 --- a/frontend/src/views/admin/domains/DomainView.vue +++ b/frontend/src/views/admin/domains/DomainView.vue @@ -27,6 +27,7 @@ {{ $gettext('DMARC') }} + @@ -117,3 +118,9 @@ function refreshDomain() { background-color: #f7f8fa !important; } + + diff --git a/frontend/src/views/admin/identities/AccountEditView.vue b/frontend/src/views/admin/identities/AccountEditView.vue index 3b9869e7a..d60489ff2 100644 --- a/frontend/src/views/admin/identities/AccountEditView.vue +++ b/frontend/src/views/admin/identities/AccountEditView.vue @@ -1,6 +1,7 @@ @@ -10,3 +11,9 @@ import { useGettext } from 'vue3-gettext' const { $gettext } = useGettext() + + diff --git a/frontend/src/views/admin/identities/AliasEditView.vue b/frontend/src/views/admin/identities/AliasEditView.vue index 31ba106b6..2eb69ed3c 100644 --- a/frontend/src/views/admin/identities/AliasEditView.vue +++ b/frontend/src/views/admin/identities/AliasEditView.vue @@ -1,9 +1,8 @@ + + diff --git a/modoboa/core/commands/templates/settings.py.tpl b/modoboa/core/commands/templates/settings.py.tpl index 9513eceb5..bb1d941b5 100644 --- a/modoboa/core/commands/templates/settings.py.tpl +++ b/modoboa/core/commands/templates/settings.py.tpl @@ -206,7 +206,7 @@ OAUTH2_PROVIDER = { 'OIDC_ENABLED': True, 'OIDC_RP_INITIATED_LOGOUT_ENABLED': True, 'OIDC_RP_INITIATED_LOGOUT_ALWAYS_PROMPT': True, - 'OIDC_RSA_PRIVATE_KEY': env('OIDC_RSA_PRIVATE_KEY'), + 'OIDC_RSA_PRIVATE_KEY': env.str('OIDC_RSA_PRIVATE_KEY', multiline=True), 'SCOPES': { 'openid': 'OpenID Connect scope', 'read': 'Read scope', diff --git a/requirements.txt b/requirements.txt index 28451ce11..e6d86cba9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -53,4 +53,4 @@ rq>=1.13.0 django-rq # Sieve -sievelib>=1.4 +sievelib>=1.4.1 From f4036af90e601b9e942fe4efef76d5ab4905d4a3 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Thu, 18 Jul 2024 13:15:30 +0200 Subject: [PATCH 2/3] Cleanup and fixes --- .../src/components/admin/alarms/AlarmList.vue | 6 +- .../login/PasswordRecoveryChangeForm.vue | 141 ------------------ .../components/login/PasswordRecoveryForm.vue | 130 ---------------- .../login/PasswordRecoverySmsTotpForm.vue | 140 ----------------- frontend/src/components/login/TwofaForm.vue | 78 ---------- frontend/src/router/index.js | 22 --- frontend/src/views/account/SettingsView.vue | 6 + frontend/src/views/admin/ParametersView.vue | 6 + .../login/PasswordRecoveryChangeView.vue | 26 ---- .../src/views/login/PasswordRecoveryForm.vue | 129 ---------------- .../login/PasswordRecoverySmsTotpView.vue | 26 ---- .../src/views/login/PasswordRecoveryView.vue | 26 ---- frontend/src/views/login/TwoFA.vue | 26 ---- 13 files changed, 15 insertions(+), 747 deletions(-) delete mode 100644 frontend/src/components/login/PasswordRecoveryChangeForm.vue delete mode 100644 frontend/src/components/login/PasswordRecoveryForm.vue delete mode 100644 frontend/src/components/login/PasswordRecoverySmsTotpForm.vue delete mode 100644 frontend/src/components/login/TwofaForm.vue delete mode 100644 frontend/src/views/login/PasswordRecoveryChangeView.vue delete mode 100644 frontend/src/views/login/PasswordRecoveryForm.vue delete mode 100644 frontend/src/views/login/PasswordRecoverySmsTotpView.vue delete mode 100644 frontend/src/views/login/PasswordRecoveryView.vue delete mode 100644 frontend/src/views/login/TwoFA.vue diff --git a/frontend/src/components/admin/alarms/AlarmList.vue b/frontend/src/components/admin/alarms/AlarmList.vue index ae90785c4..6c022dec0 100644 --- a/frontend/src/components/admin/alarms/AlarmList.vue +++ b/frontend/src/components/admin/alarms/AlarmList.vue @@ -151,9 +151,9 @@ function fetchAlarms({ page, itemsPerPage, sortBy }) { page: page || 1, page_size: itemsPerPage || 10, } - if (sortBy) { + if (sortBy && sortBy.length) { params.ordering = sortBy - .map((item) => (this.options.sortDesc[0] ? `-${item}` : item)) + .map((item) => (item.order !== 'asc' ? `-${item.key}` : item.key)) .join(',') } if (search.value !== '') { @@ -177,7 +177,7 @@ async function deleteAlarm(alarm, single = true) { } async function deleteAlarms() { await alarmsApi.bulkDelete(selected.value.map((alarm) => alarm.id)) - busStore.displayNotification({ msg: this.$gettext('Alarms deleted') }) + busStore.displayNotification({ msg: $gettext('Alarms deleted') }) selected.value = [] fetchAlarms({}) } diff --git a/frontend/src/components/login/PasswordRecoveryChangeForm.vue b/frontend/src/components/login/PasswordRecoveryChangeForm.vue deleted file mode 100644 index 9d071c342..000000000 --- a/frontend/src/components/login/PasswordRecoveryChangeForm.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - - - diff --git a/frontend/src/components/login/PasswordRecoveryForm.vue b/frontend/src/components/login/PasswordRecoveryForm.vue deleted file mode 100644 index 8cdbdcddc..000000000 --- a/frontend/src/components/login/PasswordRecoveryForm.vue +++ /dev/null @@ -1,130 +0,0 @@ - - - diff --git a/frontend/src/components/login/PasswordRecoverySmsTotpForm.vue b/frontend/src/components/login/PasswordRecoverySmsTotpForm.vue deleted file mode 100644 index e771816ea..000000000 --- a/frontend/src/components/login/PasswordRecoverySmsTotpForm.vue +++ /dev/null @@ -1,140 +0,0 @@ - - - diff --git a/frontend/src/components/login/TwofaForm.vue b/frontend/src/components/login/TwofaForm.vue deleted file mode 100644 index 020f658fb..000000000 --- a/frontend/src/components/login/TwofaForm.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 5420cd0d6..c5bb5076d 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -12,33 +12,11 @@ const routes = [ name: 'Login', component: () => import('@/views/login/LoginView.vue'), }, - { - path: 'twofa', - name: 'TwoFA', - component: () => import('@/views/login/TwoFA.vue'), - }, { path: 'logged', name: 'LoginCallback', component: () => import('@/views/login/LoginCallbackView.vue'), }, - { - path: 'password_recovery', - name: 'PasswordRecovery', - component: () => import('../views/login/PasswordRecoveryView.vue'), - }, - { - path: 'password_recovery/confirm/:id?/:token?/', - name: 'PasswordRecoveryChangeForm', - component: () => - import('../views/login/PasswordRecoveryChangeView.vue'), - }, - { - path: 'password_recovery/sms_confirm', - name: 'PasswordRecoverySms', - component: () => - import('../views/login/PasswordRecoverySmsTotpView.vue'), - }, ], }, { diff --git a/frontend/src/views/account/SettingsView.vue b/frontend/src/views/account/SettingsView.vue index 4669c0e35..1c2047581 100644 --- a/frontend/src/views/account/SettingsView.vue +++ b/frontend/src/views/account/SettingsView.vue @@ -65,3 +65,9 @@ const tab = ref() background-color: #f7f8fa !important; } + + diff --git a/frontend/src/views/admin/ParametersView.vue b/frontend/src/views/admin/ParametersView.vue index 8fce86ec7..c47e49f2f 100644 --- a/frontend/src/views/admin/ParametersView.vue +++ b/frontend/src/views/admin/ParametersView.vue @@ -195,3 +195,9 @@ loadParams(route.params.app) color: #ff5252 !important; } + + diff --git a/frontend/src/views/login/PasswordRecoveryChangeView.vue b/frontend/src/views/login/PasswordRecoveryChangeView.vue deleted file mode 100644 index 1aa56e03f..000000000 --- a/frontend/src/views/login/PasswordRecoveryChangeView.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/frontend/src/views/login/PasswordRecoveryForm.vue b/frontend/src/views/login/PasswordRecoveryForm.vue deleted file mode 100644 index b405d81f3..000000000 --- a/frontend/src/views/login/PasswordRecoveryForm.vue +++ /dev/null @@ -1,129 +0,0 @@ - - - diff --git a/frontend/src/views/login/PasswordRecoverySmsTotpView.vue b/frontend/src/views/login/PasswordRecoverySmsTotpView.vue deleted file mode 100644 index 88cef341a..000000000 --- a/frontend/src/views/login/PasswordRecoverySmsTotpView.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/frontend/src/views/login/PasswordRecoveryView.vue b/frontend/src/views/login/PasswordRecoveryView.vue deleted file mode 100644 index ccf11a50b..000000000 --- a/frontend/src/views/login/PasswordRecoveryView.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/frontend/src/views/login/TwoFA.vue b/frontend/src/views/login/TwoFA.vue deleted file mode 100644 index 462146614..000000000 --- a/frontend/src/views/login/TwoFA.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - From bf488dc536896b86f768f33bc493fef525b5d0ff Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Thu, 18 Jul 2024 13:26:29 +0200 Subject: [PATCH 3/3] Apply menu permissions also to subitems --- frontend/src/layouts/dashboard/NavBar.vue | 34 +++++++++++++---------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/frontend/src/layouts/dashboard/NavBar.vue b/frontend/src/layouts/dashboard/NavBar.vue index b8a951b26..a88c1603c 100644 --- a/frontend/src/layouts/dashboard/NavBar.vue +++ b/frontend/src/layouts/dashboard/NavBar.vue @@ -46,14 +46,15 @@ > - + @@ -176,7 +177,7 @@ const mainMenuItems = [ text: $gettext('Dashboard'), to: { name: 'Dashboard' }, exact: true, - icon: 'mdi-view-dashboard-outline' + icon: 'mdi-view-dashboard-outline', }, { text: $gettext('Domains'), @@ -245,7 +246,7 @@ const mainMenuItems = [ text: $gettext('Information'), roles: ['SuperAdmins'], to: { name: 'Information' }, - } + }, ] const userMenuItems = [ @@ -262,11 +263,11 @@ const userMenuItems = [ }, ] -if (isAuthenticated && authUser.value.role !== 'SimpleUsers') { +if (isAuthenticated.value && authUser.value.role !== 'SimpleUsers') { userMenuItems.unshift({ text: $gettext('Admin'), to: { name: 'Dashboard' }, - icon: 'mdi-view-dashboard-outline' + icon: 'mdi-view-dashboard-outline', }) } @@ -277,13 +278,13 @@ function getUserSettingsMenuItems() { result.push({ text: $gettext('Filters'), to: { name: 'AccountFilters' }, - icon: 'mdi-filter' + icon: 'mdi-filter', }) } result.push({ text: $gettext('Settings'), to: { name: 'AccountSettings' }, - icon: 'mdi-cog' + icon: 'mdi-cog', }) return result } @@ -318,7 +319,10 @@ onMounted(() => { }) }) } - if (authUser.value.role === 'SuperAdmins' && parametersStore.imapMigrationEnabled === null) { + if ( + authUser.value.role === 'SuperAdmins' && + parametersStore.imapMigrationEnabled === null + ) { parametersApi.getApplication('imap_migration').then((response) => { parametersStore.imapMigrationEnabled = response.data.params.enabled_imapmigration