diff --git a/frontend/src/api/account.js b/frontend/src/api/account.js index a3c2f17a5..fd56250e5 100644 --- a/frontend/src/api/account.js +++ b/frontend/src/api/account.js @@ -6,8 +6,24 @@ export default { getMe () { return repository.get(`/${resource}/me/`) }, + checkPassword (value) { + return repository.post(`/${resource}/me/password/`, { password: value }) + }, verifyTFACode (code) { const payload = { code } return repository.post(`${resource}/tfa/verify/`, payload) + }, + startTFASetup () { + return repository.post(`${resource}/tfa/setup/`) + }, + getQRCodeForTFASetup () { + return repository.get(`${resource}/tfa/setup/qr_code/`) + }, + finalizeTFASetup (pinCode) { + const payload = { pin_code: pinCode } + return repository.post(`${resource}/tfa/setup/check/`, payload) + }, + disableTFA () { + return repository.post(`${resource}/tfa/disable/`) } } diff --git a/frontend/src/api/languages.js b/frontend/src/api/languages.js new file mode 100644 index 000000000..0c45bf824 --- /dev/null +++ b/frontend/src/api/languages.js @@ -0,0 +1,9 @@ +import repository from './repository' + +const resource = 'languages' + +export default { + getAll () { + return repository.get(`/${resource}/`) + } +} diff --git a/frontend/src/components/domains/DomainDNSConfig.vue b/frontend/src/components/domains/DomainDNSConfig.vue index 30ef13b89..363f932ee 100644 --- a/frontend/src/components/domains/DomainDNSConfig.vue +++ b/frontend/src/components/domains/DomainDNSConfig.vue @@ -31,6 +31,19 @@ mail.{{ domain.name }}. IN A [IP address of your Modoboa serv @ IN TXT "v=spf1 mx ~all" + +
DKIM
+
+{{ domain.dkim_key_selector }}._domain_key.{{ domain.name }}. IN TXT (
+  {{ splitKey(`v=DKIM1;k=rsa;p=${domain.dkim_public_key}`) }}
+
dense >
Auto configuration
-
-    autoconfig.{{ domain.name }}. IN CNAME [hostname of your automx server]
+      
+autoconfig.{{ domain.name }}. IN CNAME [hostname of your automx server]
 autodiscover.{{ domain.name }}. IN CNAME [hostname of your automx server]
@@ -70,6 +83,19 @@ export default { methods: { close () { this.$emit('close') + }, + splitKey (value) { + let key = value + const result = [] + while (key.length > 0) { + if (key.length > 74) { + result.push(` "${key.substring(0, 74)}"`) + key = key.substring(74) + } else { + result.push(` "${key}"`) + } + } + return result.join('\n') } } } diff --git a/frontend/src/components/identities/AccountForm.vue b/frontend/src/components/identities/AccountForm.vue index f54ced640..fda9b4dea 100644 --- a/frontend/src/components/identities/AccountForm.vue +++ b/frontend/src/components/identities/AccountForm.vue @@ -139,7 +139,7 @@ export default { methods: { async save () { if (this.$refs.generalForm !== undefined) { - const valid = await this.$refs.generalForm.$refs.observer.validate() + const valid = await this.$refs.generalForm.validateForm() if (!valid) { return } diff --git a/frontend/src/components/identities/AccountGeneralForm.vue b/frontend/src/components/identities/AccountGeneralForm.vue index d3344ef2d..61c44007a 100644 --- a/frontend/src/components/identities/AccountGeneralForm.vue +++ b/frontend/src/components/identities/AccountGeneralForm.vue @@ -28,51 +28,13 @@ outlined dense /> -
- - -
- - - - - - - - + + + diff --git a/frontend/src/components/layout/Navbar.vue b/frontend/src/components/layout/Navbar.vue index 6923b709b..f32a6295a 100644 --- a/frontend/src/components/layout/Navbar.vue +++ b/frontend/src/components/layout/Navbar.vue @@ -3,7 +3,7 @@ v-model="drawer" :mini-variant.sync="mini" permanent - color="primary" + :color="mainColor" app dark > @@ -11,6 +11,8 @@