diff --git a/.github/workflows/modoboa.yml b/.github/workflows/modoboa.yml index 84e420314..5752b645f 100644 --- a/.github/workflows/modoboa.yml +++ b/.github/workflows/modoboa.yml @@ -101,7 +101,7 @@ jobs: run: | python ./tests.py cd test_project - python3 manage.py test modoboa.core modoboa.lib modoboa.admin modoboa.limits modoboa.transport modoboa.relaydomains modoboa.dnstools modoboa.ldapsync modoboa.policyd modoboa.maillog modoboa.parameters + python3 manage.py test modoboa.core modoboa.lib modoboa.admin modoboa.limits modoboa.transport modoboa.relaydomains modoboa.dnstools modoboa.ldapsync modoboa.policyd modoboa.maillog modoboa.parameters modoboa.dmarc env: # use localhost for the host here because we are running the job on the VM. # If we were running the job on in a container this would be postgres @@ -117,7 +117,7 @@ jobs: run: | python ./tests.py cd test_project - coverage run manage.py test modoboa.core modoboa.lib modoboa.admin modoboa.limits modoboa.transport modoboa.relaydomains modoboa.dnstools modoboa.ldapsync modoboa.policyd modoboa.maillog modoboa.parameters + coverage run manage.py test modoboa.core modoboa.lib modoboa.admin modoboa.limits modoboa.transport modoboa.relaydomains modoboa.dnstools modoboa.ldapsync modoboa.policyd modoboa.maillog modoboa.parameters modoboa.dmarc coverage combine env: # use localhost for the host here because we are running the job on the VM. diff --git a/doc/upgrade.rst b/doc/upgrade.rst index 004db6392..4422d2244 100644 --- a/doc/upgrade.rst +++ b/doc/upgrade.rst @@ -66,7 +66,7 @@ New admin interface won't update by itself. Run the following commands to update > rm -rf frontend > cp -R /lib/pythonX.X/site-packages/modoboa/frontend_dist/ frontend/ > cp ./config.json frontend/config.json - + Extensions ********** @@ -108,7 +108,40 @@ Rebuild Virtual Environment Specific instructions ********************* -2.0.4 +2.1.0 +===== + +The ``modoboa-dmarc`` plugin has been merged into the core. + +Add ``'modoboa.dmarc'`` to ``MODOBOA_APPS``: + +.. sourcecode:: python + + MODOBOA_APPS = ( + 'modoboa', + 'modoboa.core', + 'modoboa.lib', + 'modoboa.admin', + 'modoboa.transport', + 'modoboa.relaydomains', + 'modoboa.limits', + 'modoboa.parameters', + 'modoboa.dnstools', + 'modoboa.policyd', + 'modoboa.maillog', + 'modoboa.dmarc', + ) + +And remove any reference to ``modoboa_dmarc`` in this same variable. + +FIXME: INSTALLATION django-rename-app + +.. sourcecode:: bash + + python manage.py rename_app modoboa_dmarc dmarc + + +2.0.4t ===== The following modifications must be applied to the :file:`settings.py` file: @@ -159,7 +192,7 @@ The following modifications must be applied to the :file:`settings.py` file: }, -* You now have the possibility to customize the url of the new-admin interface. +* You now have the possibility to customize the url of the new-admin interface. To do so please head up to :ref:`the custom configuration chapter ` (advanced user). * Add ``DEFAULT_THROTTLE_RATES`` to ``REST_FRAMEWORK``: @@ -187,7 +220,7 @@ The following modifications must be applied to the :file:`settings.py` file: * You can edit the ``DEFAULT_THROTTLE_RATES`` to whatever value suits you. - `user` is for every endpoint, it is per user or per ip if not logged. - - `ddos` is per api endpoint and per user or per ip if not logged. + - `ddos` is per api endpoint and per user or per ip if not logged. - `ddos_lesser` is for per api endpoint and per user or per ip if not logged. This is for api endpoint that are lighter. - `login` the number of time an ip can attempt to log. The counter will reset on login success. - `password_` is for the recovery, it is divided per step in the recovery process. diff --git a/frontend/locale/br/LC_MESSAGES/app.po b/frontend/locale/br/LC_MESSAGES/app.po index 18de642fd..84bae4cca 100644 --- a/frontend/locale/br/LC_MESSAGES/app.po +++ b/frontend/locale/br/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:17+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:17+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -27,22 +27,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -165,7 +172,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -181,6 +190,10 @@ msgstr "" msgid "Aliases" msgstr "Aliasoù" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "API" @@ -269,9 +282,12 @@ msgstr "Cheñch ger-tremen" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" -msgstr "Kochit an dibarzh ma ne vez ket kriptet ar gerioù-tremen endalc'het en ho restr" +msgstr "" +"Kochit an dibarzh ma ne vez ket kriptet ar gerioù-tremen endalc'het en ho " +"restr" #: src/components/domains/DomainAliasForm.vue:56 #: src/components/domains/DomainAliasForm.vue:26 @@ -282,7 +298,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -291,7 +308,8 @@ msgstr "" msgid "Close" msgstr "Serriñ" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "Serriñ" @@ -306,7 +324,8 @@ msgstr "Kadarnadur" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -362,7 +381,8 @@ msgstr "" msgid "Creation date" msgstr "Deiziad krouidigezh" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "Kriptañ ar gerioù-tremen" @@ -404,8 +424,12 @@ msgid "Default mailbox quota" msgstr "Kota boest-posteloù dre-ziouer" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Kota arloet d'ar boestoù-postel. Gellout a ra bezañ ezpleget e Ko, Mo (diouer) pe Go c'hoazh. Un dalvoudegezh \"0\" a dalvez kota ebet." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." +msgstr "" +"Kota arloet d'ar boestoù-postel. Gellout a ra bezañ ezpleget e Ko, Mo " +"(diouer) pe Go c'hoazh. Un dalvoudegezh \"0\" a dalvez kota ebet." #: src/components/domains/DomainAliasForm.vue:24 #: src/components/domains/DomainList.vue:115 @@ -431,6 +455,10 @@ msgstr "" msgid "Description" msgstr "Deskrivadur" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -460,7 +488,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -481,6 +510,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -491,6 +524,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -682,7 +719,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -719,6 +758,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "C'hwitet" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -740,13 +786,27 @@ msgstr "Treuzkas" #: src/components/user/ForwardForm.vue:6 msgid "Forward messages and store copies into your local mailbox" -msgstr "Treuzkas kemennadennoù ha stokiñ eiladennoù e-barzh ar voest-posteloù lec'hel" +msgstr "" +"Treuzkas kemennadennoù ha stokiñ eiladennoù e-barzh ar voest-posteloù " +"lec'hel" #: src/components/user/ForwardForm.vue:19 #: src/components/user/ForwardForm.vue:52 msgid "Forward updated" msgstr "Treuzkas hizivaet" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +#, fuzzy +msgid "Forwarded" +msgstr "Treuzkas" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -762,13 +822,21 @@ msgstr "Anv klok" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +#, fuzzy +msgid "Fully aligned" +msgstr "Linennet penn-da-benn" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -806,7 +874,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -829,7 +899,15 @@ msgstr "Identelezhioù" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1050,7 +1128,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1101,11 +1180,13 @@ msgid "Not generated" msgstr "Neket ganet" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1122,7 +1203,8 @@ msgstr "" msgid "One or more updates are available" msgstr "Hegerz ez eus un hizivadenn pe muioc'h" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1142,6 +1224,17 @@ msgstr "Dibarzhioù" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "Linennet dre an hanter" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1219,7 +1312,8 @@ msgstr "Profil hizivaet" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1237,12 +1331,23 @@ msgid "Quota" msgstr "Kota" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." -msgstr "Kota evit ar voest-posteloù-mañ. Gellout a ra bezañ ezpleget e Ko, Mo (diouer) pe Go c'hoazh. Termeniñ un dalvoudegezh ispisial pe implijit talvoudegezh an domani. Laoskit goullo evit termeniñ un dalvoudegezh divevenn (berzet evit ar verourien zomani)." +msgid "" +"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)." +msgstr "" +"Kota evit ar voest-posteloù-mañ. Gellout a ra bezañ ezpleget e Ko, Mo " +"(diouer) pe Go c'hoazh. Termeniñ un dalvoudegezh ispisial pe implijit " +"talvoudegezh an domani. Laoskit goullo evit termeniñ un dalvoudegezh " +"divevenn (berzet evit ar verourien zomani)." #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Kota rannet kenetre ar boestoù-postel. Gellout a ra bezañ ezpleget e Ko, Mo (diouer) pe Go c'hoazh. Un dalvoudegezh \"0\" a dalvez kota ebet." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." +msgstr "" +"Kota rannet kenetre ar boestoù-postel. Gellout a ra bezañ ezpleget e Ko, Mo " +"(diouer) pe Go c'hoazh. Un dalvoudegezh \"0\" a dalvez kota ebet." #: src/components/domains/DomainForm.vue:68 #: src/components/identities/AccountForm.vue:64 @@ -1469,7 +1574,13 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +#, fuzzy +msgid "Statistics" +msgstr "Statud" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1497,7 +1608,9 @@ msgid "Tags" msgstr "Balizoù" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1540,6 +1653,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "Hollad" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1553,17 +1673,25 @@ msgstr "" msgid "Transport" msgstr "Treuzdougen" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +#, fuzzy +msgid "Trusted sources" +msgstr "Mammennoù fizius" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1585,6 +1713,10 @@ msgstr "" msgid "Unknown" msgstr "Dizanv" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "Mammennoù dizanv/Gourdrouzioù" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/cs/LC_MESSAGES/app.po b/frontend/locale/cs/LC_MESSAGES/app.po index 795650a8e..def0af8b5 100644 --- a/frontend/locale/cs/LC_MESSAGES/app.po +++ b/frontend/locale/cs/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -270,7 +283,8 @@ msgstr "" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -307,7 +323,8 @@ msgstr "" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -363,7 +380,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -405,7 +423,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -432,6 +452,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +485,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +507,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +521,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +716,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +755,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +790,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +816,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +867,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +892,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1121,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1173,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1196,8 @@ msgstr "" msgid "One or more updates are available" msgstr "" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1217,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1305,8 @@ msgstr "" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,11 +1324,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1470,7 +1561,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1594,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1639,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1659,24 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1586,6 +1698,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/de/LC_MESSAGES/app.po b/frontend/locale/de/LC_MESSAGES/app.po index 5f04b282e..9f679df92 100644 --- a/frontend/locale/de/LC_MESSAGES/app.po +++ b/frontend/locale/de/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:17+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:17+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "Aliase" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "API" @@ -270,7 +283,8 @@ msgstr "Passwort ändern" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "Auswählen, wenn Kennwörter in Datei nicht verschlüsselt sind" @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "Schließen" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "Schließen" @@ -307,8 +323,11 @@ msgstr "Bestätigung" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." -msgstr "Glückwunsch! Die Zwei-Faktor-Authentifizierung ist nun für diesen Account aktiviert." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." +msgstr "" +"Glückwunsch! Die Zwei-Faktor-Authentifizierung ist nun für diesen Account " +"aktiviert." #: src/views/Login.vue:23 msgid "Connect" @@ -363,7 +382,8 @@ msgstr "" msgid "Creation date" msgstr "Erstellungsdatum" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "Passwörter verschlüsseln" @@ -405,8 +425,12 @@ msgid "Default mailbox quota" msgstr "Standard Postfach Kontingent" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Auf Postfächer angewendete Quota. Kann in KB, MB (Voreinstellung) oder GB angegeben werden. 0 eingeben, um keine Quota zu verwenden." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." +msgstr "" +"Auf Postfächer angewendete Quota. Kann in KB, MB (Voreinstellung) oder GB " +"angegeben werden. 0 eingeben, um keine Quota zu verwenden." #: src/components/domains/DomainAliasForm.vue:24 #: src/components/domains/DomainList.vue:115 @@ -432,6 +456,10 @@ msgstr "" msgid "Description" msgstr "Beschreibung" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +489,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +511,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +525,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +720,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +759,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "Fehlgeschlagen" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +794,18 @@ msgstr "Nachricht weiterleiten und Kopie in Mailbox ablegen" msgid "Forward updated" msgstr "Weiterleitung aktualisiert" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +#, fuzzy +msgid "Forwarded" +msgstr "Weiterleiten" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +821,21 @@ msgstr "Vollständiger Name" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +#, fuzzy +msgid "Fully aligned" +msgstr "Voll zugeordnet" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +873,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +898,15 @@ msgstr "Identitäten" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1127,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1179,13 @@ msgid "Not generated" msgstr "Nicht generiert" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1202,8 @@ msgstr "" msgid "One or more updates are available" msgstr "Eine oder mehrere Aktualisierungen sind verfügbar" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1223,17 @@ msgstr "Optionen" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "Teilweise zugeordnet" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1311,8 @@ msgstr "Profil aktualisiert" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,12 +1330,24 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." -msgstr "Quota dieses Postfachs. Kann in KB, MB (Voreinstellung) oder GB angegeben werden. Eigenen Wert eingeben oder Voreinstellung der Domain verwenden lassen. Frei lassen, um Quota auf unlimitiert zu setzen (nur Super-Administratoren)." +msgid "" +"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)." +msgstr "" +"Quota dieses Postfachs. Kann in KB, MB (Voreinstellung) oder GB angegeben " +"werden. Eigenen Wert eingeben oder Voreinstellung der Domain verwenden " +"lassen. Frei lassen, um Quota auf unlimitiert zu setzen (nur Super-" +"Administratoren)." #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Von Postfächern gemeinsam genutzte Quota/Speicherplatz. Kann in KB, MB (Voreinstellung) oder GB angegeben werden. 0 eingeben, um keine Quota zu verwenden." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." +msgstr "" +"Von Postfächern gemeinsam genutzte Quota/Speicherplatz. Kann in KB, MB " +"(Voreinstellung) oder GB angegeben werden. 0 eingeben, um keine Quota zu " +"verwenden." #: src/components/domains/DomainForm.vue:68 #: src/components/identities/AccountForm.vue:64 @@ -1470,7 +1574,13 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +#, fuzzy +msgid "Statistics" +msgstr "Statistiken" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1608,9 @@ msgid "Tags" msgstr "Tags" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1653,13 @@ msgstr "Bis" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "Total" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1673,25 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +#, fuzzy +msgid "Trusted sources" +msgstr "Vertraute Quellen" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" "Zwei-Faktor-Authentifizierung (2FA) ist noch nicht für diesen Account aktiviert.\n" "Aktiviere dieses Feature, um die Account-Sicherheit zu erhöhen." @@ -1588,6 +1715,10 @@ msgstr "" msgid "Unknown" msgstr "Unbekannt" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "Unbekannte Quellen / Bedrohungen" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/el/LC_MESSAGES/app.po b/frontend/locale/el/LC_MESSAGES/app.po index af478d36a..65e2a1562 100644 --- a/frontend/locale/el/LC_MESSAGES/app.po +++ b/frontend/locale/el/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -270,7 +283,8 @@ msgstr "" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -307,7 +323,8 @@ msgstr "" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -363,7 +380,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -405,7 +423,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -432,6 +452,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +485,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +507,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +521,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +716,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +755,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +790,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +816,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +867,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +892,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1121,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1173,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1196,8 @@ msgstr "" msgid "One or more updates are available" msgstr "" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1217,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1305,8 @@ msgstr "" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,11 +1324,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1470,7 +1561,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1594,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1639,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1659,24 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1586,6 +1698,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/en/LC_MESSAGES/app.po b/frontend/locale/en/LC_MESSAGES/app.po index 8e3205bcf..dd9047bd4 100644 --- a/frontend/locale/en/LC_MESSAGES/app.po +++ b/frontend/locale/en/LC_MESSAGES/app.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-22 19:25+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en\n" @@ -177,6 +177,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -427,6 +431,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -477,6 +485,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -487,6 +499,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -715,6 +731,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -743,6 +766,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -758,13 +792,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -828,6 +869,10 @@ msgstr "" msgid "If you close this form now, your modifications won't be saved. Do you confirm?" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "If you configured it recently, please wait for the first report to be received and processed." +msgstr "" + #: src/components/tools/ImportForm.vue:29 msgid "Import" msgstr "" @@ -1138,6 +1183,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1465,6 +1521,10 @@ msgstr "" msgid "Start typing a name here..." msgstr "" +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + #: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 @@ -1536,6 +1596,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1553,6 +1620,10 @@ msgstr "" msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" @@ -1581,6 +1652,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/es/LC_MESSAGES/app.po b/frontend/locale/es/LC_MESSAGES/app.po index fc1f5302e..3bd1ece2a 100644 --- a/frontend/locale/es/LC_MESSAGES/app.po +++ b/frontend/locale/es/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "Alias" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "API" @@ -270,9 +283,12 @@ msgstr "Cambiar contraseña" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" -msgstr "Marque esta opción si las contraseñas que contiene su fichero no están cifradas" +msgstr "" +"Marque esta opción si las contraseñas que contiene su fichero no están " +"cifradas" #: src/components/domains/DomainAliasForm.vue:56 #: src/components/domains/DomainAliasForm.vue:26 @@ -283,7 +299,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +309,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -307,7 +325,8 @@ msgstr "Confirmación" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -363,7 +382,8 @@ msgstr "" msgid "Creation date" msgstr "Fecha de creación" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "Contraseñas cifradas" @@ -405,8 +425,11 @@ msgid "Default mailbox quota" msgstr "Cuota de mailbox por defecto" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Cuota de mailbox predeterminda en MB. Un valor de 0 significa ningún limite." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." +msgstr "" +"Cuota de mailbox predeterminda en MB. Un valor de 0 significa ningún limite." #: src/components/domains/DomainAliasForm.vue:24 #: src/components/domains/DomainList.vue:115 @@ -432,6 +455,10 @@ msgstr "" msgid "Description" msgstr "Descripción" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +488,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +510,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +524,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +719,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +758,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +793,18 @@ msgstr "Reenvía mensajes y guarda copias en su mailbox local" msgid "Forward updated" msgstr "Reenvío actualizado" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +#, fuzzy +msgid "Forwarded" +msgstr "Siguiente" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +820,21 @@ msgstr "Nombre completo" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +#, fuzzy +msgid "Fully aligned" +msgstr "Nombre completo" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +872,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +897,15 @@ msgstr "Identidades" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1126,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1178,13 @@ msgid "Not generated" msgstr "Sin definir" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1201,8 @@ msgstr "" msgid "One or more updates are available" msgstr "Una o más actualizaciones están disponibles" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1222,17 @@ msgstr "Opciones" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1310,8 @@ msgstr "Perfil actualizado" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,12 +1329,21 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." -msgstr "Cuota en MB para este mailbox. Defina un valor por defecto o use el del dominio por defecto. Déjelo vacío para definir un valor ilimitado (no permitido para los administradores del dominio)" +msgid "" +"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)." +msgstr "" +"Cuota en MB para este mailbox. Defina un valor por defecto o use el del " +"dominio por defecto. Déjelo vacío para definir un valor ilimitado (no " +"permitido para los administradores del dominio)" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Cuota de mailbox predeterminda en MB. Un valor de 0 significa ningún limite." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." +msgstr "" +"Cuota de mailbox predeterminda en MB. Un valor de 0 significa ningún limite." #: src/components/domains/DomainForm.vue:68 #: src/components/identities/AccountForm.vue:64 @@ -1470,7 +1570,13 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +#, fuzzy +msgid "Statistics" +msgstr "Estadísticas" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1604,9 @@ msgid "Tags" msgstr "Tags" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1649,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1669,25 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +#, fuzzy +msgid "Trusted sources" +msgstr "Recursos" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1586,6 +1709,10 @@ msgstr "" msgid "Unknown" msgstr "Desconocido" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/fi/LC_MESSAGES/app.po b/frontend/locale/fi/LC_MESSAGES/app.po index cdeb5fe91..895930353 100644 --- a/frontend/locale/fi/LC_MESSAGES/app.po +++ b/frontend/locale/fi/LC_MESSAGES/app.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:17+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: \n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -26,23 +26,39 @@ msgstr "API:n dokumentaatio on saatavilla" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "Uusi avain luodaan pian. Päivitä sivu hetken kuluttua nähdäksesi sen." #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." -msgstr "Käyttäjä, jolla on kaikki oikeudet, voi tehdä mitä tahansa. Oletusarvoisesti tällaisella käyttäjällä ei ole postilaatikkoa, joten hän ei voi käyttää loppukäyttäjän ominaisuuksia." +msgid "" +"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." +msgstr "" +"Käyttäjä, jolla on kaikki oikeudet, voi tehdä mitä tahansa. Oletusarvoisesti" +" tällaisella käyttäjällä ei ole postilaatikkoa, joten hän ei voi käyttää " +"loppukäyttäjän ominaisuuksia." #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." -msgstr "Käyttäjä, jolla ei ole oikeuksia mutta jolla on postilaatikko. Hän saa käyttää kaikkia loppukäyttäjän ominaisuuksia: webmail, kalenteri, yhteystiedot, suodattimet." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." +msgstr "" +"Käyttäjä, jolla ei ole oikeuksia mutta jolla on postilaatikko. Hän saa " +"käyttää kaikkia loppukäyttäjän ominaisuuksia: webmail, kalenteri, " +"yhteystiedot, suodattimet." #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." -msgstr "Käyttäjä, jolla on oikeuksia yhdessä tai useammassa verkkotunnuksessa. Hänellä on oikeus hallinnoida postilaatikoita ja hänellä voi myös olla postilaatikko." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." +msgstr "" +"Käyttäjä, jolla on oikeuksia yhdessä tai useammassa verkkotunnuksessa. " +"Hänellä on oikeus hallinnoida postilaatikoita ja hänellä voi myös olla " +"postilaatikko." #: src/components/tools/TimeSerieChart.vue:16 msgid "Absolute time range" @@ -164,8 +180,12 @@ msgstr "Alias päivitetty" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." -msgstr "Tämän postilaatikon alias-nimet. Jos haluat luoda catchall-aliaksen, kirjoita vain verkkotunnus (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." +msgstr "" +"Tämän postilaatikon alias-nimet. Jos haluat luoda catchall-aliaksen, " +"kirjoita vain verkkotunnus (@domain.tld)." #: src/components/domains/DomainList.vue:25 #: src/components/domains/DomainSummary.vue:31 @@ -180,6 +200,10 @@ msgstr "Tämän postilaatikon alias-nimet. Jos haluat luoda catchall-aliaksen, k msgid "Aliases" msgstr "Aliakset" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "API" @@ -269,9 +293,12 @@ msgstr "Vaihda salasana" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" -msgstr "Valitse tämä vaihtoehto, jos tiedostosi sisältämiä salasanoja ei ole salakirjoitettu" +msgstr "" +"Valitse tämä vaihtoehto, jos tiedostosi sisältämiä salasanoja ei ole " +"salakirjoitettu" #: src/components/domains/DomainAliasForm.vue:56 #: src/components/domains/DomainAliasForm.vue:26 @@ -282,7 +309,8 @@ msgstr "Valitse verkkotunnus" msgid "Choose a role" msgstr "Valitse käyttäjätyyppisi" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -291,7 +319,8 @@ msgstr "Valitse käyttäjätyyppisi" msgid "Close" msgstr "Sulje" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 #, fuzzy msgid "Closed" msgstr "Suljettu" @@ -307,7 +336,8 @@ msgstr "Vahvistus" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "Onnittelut! Kaksivaiheinen tunnistus on nyt käytössä tililläsi." #: src/views/Login.vue:23 @@ -363,7 +393,8 @@ msgstr "Luo verkkotunnuksen tavanomaiset aliakset." msgid "Creation date" msgstr "Luontipäivä" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "Salakirjoita salasanat" @@ -405,8 +436,13 @@ msgid "Default mailbox quota" msgstr "Oletuspostilaatikkokiintiö" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Postilaatikoihin sovellettava oletuskiintiö. Voidaan ilmaista kilotavuina, megatavuina (oletus) tai gigatavuina. Arvo 0 tarkoittaa, ettei kiintiötä ole." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." +msgstr "" +"Postilaatikoihin sovellettava oletuskiintiö. Voidaan ilmaista kilotavuina, " +"megatavuina (oletus) tai gigatavuina. Arvo 0 tarkoittaa, ettei kiintiötä " +"ole." #: src/components/domains/DomainAliasForm.vue:24 #: src/components/domains/DomainList.vue:115 @@ -432,6 +468,10 @@ msgstr "Poista avain" msgid "Description" msgstr "Kuvaus" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,8 +501,10 @@ msgstr "DKIM-avaimen valitsin-tietue" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" -msgstr "DKIM-avaimet ovat jo olemassa tälle verkkotunnukselle. Haluatko korvata ne?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" +msgstr "" +"DKIM-avaimet ovat jo olemassa tälle verkkotunnukselle. Haluatko korvata ne?" #: src/components/domains/DomainDKIMKey.vue:4 msgid "DKIM public key for" @@ -482,6 +524,10 @@ msgstr "DKIM-tietuetta ei löydy" msgid "DKIM signing" msgstr "DKIM-allekirjoitus" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +538,10 @@ msgstr "DMARC-tietue löydetty" msgid "DMARC record not found" msgstr "DMARC-tietuetta ei löydy" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,8 +733,12 @@ msgid "Enter an email address" msgstr "Syötä oikean muotoinen sähköpostiosoite" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." -msgstr "Syötä koodi mobiililaitteesi kaksivaiheisen tunnistuksen sovelluksesta. Jos olet hukannut laitteesi, voit syöttää yhden palautuskoodeistasi." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." +msgstr "" +"Syötä koodi mobiililaitteesi kaksivaiheisen tunnistuksen sovelluksesta. Jos " +"olet hukannut laitteesi, voit syöttää yhden palautuskoodeistasi." #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 msgid "Enter the code you've just received by SMS" @@ -720,6 +774,13 @@ msgstr "Vie tilit ja aliakset CSV-tiedostoon" msgid "Export domains and aliases to CSV" msgstr "Vie verkkotunnukset ja aliakset CSV-tiedostoon" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +809,18 @@ msgstr "Välitä viestit ja tallenna kopiot paikalliseen postilaatikkoon" msgid "Forward updated" msgstr "Välitystieto päivitetty" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +#, fuzzy +msgid "Forwarded" +msgstr "Välitä" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +836,21 @@ msgstr "Koko nimi" msgid "Fullname/recipient" msgstr "Koko nimi/saaja" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +#, fuzzy +msgid "Fully aligned" +msgstr "Koko nimi" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,8 +888,12 @@ msgid "help" msgstr "ohje" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." -msgstr "Tässä on esimerkki DNS-määrityksistä (bind-muodossa). Korvaa [ ]:n välissä olevat arvot sopivilla arvoilla." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." +msgstr "" +"Tässä on esimerkki DNS-määrityksistä (bind-muodossa). Korvaa [ ]:n välissä " +"olevat arvot sopivilla arvoilla." #: src/components/domains/DomainDNSConfig.vue:33 #: src/components/domains/DomainDNSConfig.vue:34 @@ -830,8 +915,17 @@ msgstr "Identiteetit" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" -msgstr "Jos suljet tämän lomakkeen nyt, muutokset eivät tallennu. Vahvistatko?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" +"Jos suljet tämän lomakkeen nyt, muutokset eivät tallennu. Vahvistatko?" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." +msgstr "" #: src/components/tools/ImportForm.vue:29 msgid "Import" @@ -1057,7 +1151,8 @@ msgid "Never logged-in" msgstr "Ei koskaan kirjautunut sisään" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "Uusi" @@ -1108,12 +1203,18 @@ msgid "Not generated" msgstr "Ei luotu" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." -msgstr "Viestien määrä, jonka tämä verkkotunnus voi lähettää päivässä. Jätä tyhjäksi, jos et halua rajoitusta." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." +msgstr "" +"Viestien määrä, jonka tämä verkkotunnus voi lähettää päivässä. Jätä " +"tyhjäksi, jos et halua rajoitusta." #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." -msgstr "Viestien määrä, jonka tämä postilaatikko voi lähettää päivässä. Jätä tyhjäksi, jos et halua rajoitusta." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." +msgstr "" +"Viestien määrä, jonka tämä postilaatikko voi lähettää päivässä. Jätä " +"tyhjäksi, jos et halua rajoitusta." #: src/views/user/PasswordRecoveryForm.vue:31 #: src/views/user/PasswordRecoveryForm.vue:77 @@ -1129,7 +1230,8 @@ msgstr "OK" msgid "One or more updates are available" msgstr "Yksi tai useampi päivitys on saatavilla" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 #, fuzzy msgid "Opened" msgstr "Avattu" @@ -1150,6 +1252,17 @@ msgstr "Vaihtoehdot" msgid "Parameters updated" msgstr "Parametrit päivitetty" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1226,9 +1339,11 @@ msgstr "Profiili päivitetty" #: src/components/tools/ImportForm.vue:7 msgid "Provide a CSV file where lines respect one of the following formats:" -msgstr "Toimita CSV-tiedosto, jonka rivit ovat jossakin seuraavista muodoista:" +msgstr "" +"Toimita CSV-tiedosto, jonka rivit ovat jossakin seuraavista muodoista:" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "Jonon ID" @@ -1246,12 +1361,24 @@ msgid "Quota" msgstr "Verkkotunnuksen oletuskiintiö" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." -msgstr "Tämän postilaatikon kiintiö, joka voidaan ilmaista kilotavuina, megatavuina (oletus) tai gigatavuina. Määritä oma arvo tai käytä toimialueen oletusarvoa. Jätä tyhjäksi, jos haluat määrittää rajoittamattoman arvon (ei sallittu toimialueen ylläpitäjille)." +msgid "" +"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)." +msgstr "" +"Tämän postilaatikon kiintiö, joka voidaan ilmaista kilotavuina, megatavuina " +"(oletus) tai gigatavuina. Määritä oma arvo tai käytä toimialueen " +"oletusarvoa. Jätä tyhjäksi, jos haluat määrittää rajoittamattoman arvon (ei " +"sallittu toimialueen ylläpitäjille)." #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Postilaatikoiden kesken jaettu kiintiö. Voidaan ilmaista kilotavuina (KB), megatavuina (MB) (oletus) tai gigatavuina (GB). Arvo 0 tarkoittaa, ettei kiintiötä ole." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." +msgstr "" +"Postilaatikoiden kesken jaettu kiintiö. Voidaan ilmaista kilotavuina (KB), " +"megatavuina (MB) (oletus) tai gigatavuina (GB). Arvo 0 tarkoittaa, ettei " +"kiintiötä ole." #: src/components/domains/DomainForm.vue:68 #: src/components/identities/AccountForm.vue:64 @@ -1478,7 +1605,13 @@ msgstr "SPF-tietuetta ei löydy" msgid "Start typing a name here..." msgstr "Aloita nimen kirjoittaminen tästä..." -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +#, fuzzy +msgid "Statistics" +msgstr "Tilastot" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1506,8 +1639,12 @@ msgid "Tags" msgstr "Tunnisteet" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." -msgstr "Kunkin rivin ensimmäinen elementti on pakollinen, ja sen on oltava yhtä suuri kuin jokin edellisistä arvoista." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." +msgstr "" +"Kunkin rivin ensimmäinen elementti on pakollinen, ja sen on oltava yhtä " +"suuri kuin jokin edellisistä arvoista." #: src/components/user/TwoFactorAuthForm.vue:39 #: src/components/user/TwoFactorAuthForm.vue:7 @@ -1557,6 +1694,13 @@ msgstr "Vastaanottaja" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1570,18 +1714,28 @@ msgstr "" msgid "Transport" msgstr "Siirto" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +#, fuzzy +msgid "Trusted sources" +msgstr "Resurssit" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "Kaksivaiheinent tunnistus" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." -msgstr "Kaksivaiheista tunnistusta (2FA) ei ole vielä aktivoitu tilillesi. Tämän ominaisuuden käyttöönotto lisää tilisi turvallisuutta." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." +msgstr "" +"Kaksivaiheista tunnistusta (2FA) ei ole vielä aktivoitu tilillesi. Tämän " +"ominaisuuden käyttöönotto lisää tilisi turvallisuutta." #: src/views/TwoFA.vue:11 msgid "Two-factor authentication code" @@ -1602,6 +1756,10 @@ msgstr "Tyyppi:" msgid "Unknown" msgstr "Tuntematon" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/fr/LC_MESSAGES/app.po b/frontend/locale/fr/LC_MESSAGES/app.po index 2fe01fb5c..957b0e001 100644 --- a/frontend/locale/fr/LC_MESSAGES/app.po +++ b/frontend/locale/fr/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-22 19:25+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2021-07-01 16:15+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -168,7 +175,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -184,6 +193,10 @@ msgstr "" msgid "Aliases" msgstr "Alias" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "API" @@ -274,9 +287,12 @@ msgstr "Changer le mot de passe" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" -msgstr "Cocher cette option si les mots de passe contenus dans votre fichier ne sont pas chiffrés" +msgstr "" +"Cocher cette option si les mots de passe contenus dans votre fichier ne sont" +" pas chiffrés" #: src/components/domains/DomainAliasForm.vue:56 #: src/components/domains/DomainAliasForm.vue:26 @@ -287,7 +303,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -296,7 +313,8 @@ msgstr "" msgid "Close" msgstr "Fermer" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 #, fuzzy msgid "Closed" msgstr "Fermée" @@ -312,8 +330,11 @@ msgstr "Confirmation" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." -msgstr "Félicitations ! L'authentification à deux facteurs est maintenant activée pour votre compte." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." +msgstr "" +"Félicitations ! L'authentification à deux facteurs est maintenant activée " +"pour votre compte." #: src/views/Login.vue:23 msgid "Connect" @@ -368,7 +389,8 @@ msgstr "" msgid "Creation date" msgstr "Date de création" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 #, fuzzy msgid "Crypt passwords" msgstr "Chiffrer les mots de passe" @@ -412,8 +434,12 @@ msgid "Default mailbox quota" msgstr "Quota par défaut pour une boîte aux lettres" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Quota par défaut appliqué aux boîtes aux lettres. Peut être exprimé en Ko, Mo (défaut) ou Go. Une valeur à 0 signifie pas de quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." +msgstr "" +"Quota par défaut appliqué aux boîtes aux lettres. Peut être exprimé en Ko, " +"Mo (défaut) ou Go. Une valeur à 0 signifie pas de quota." #: src/components/domains/DomainAliasForm.vue:24 #: src/components/domains/DomainList.vue:115 @@ -439,6 +465,10 @@ msgstr "" msgid "Description" msgstr "Description" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 #, fuzzy @@ -469,8 +499,10 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" -msgstr "Des clés DKIM existent déjà pour ce domaine. Voulez vous les écraser ?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" +msgstr "" +"Des clés DKIM existent déjà pour ce domaine. Voulez vous les écraser ?" #: src/components/domains/DomainDKIMKey.vue:4 msgid "DKIM public key for" @@ -490,6 +522,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -500,6 +536,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -692,7 +732,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -729,6 +771,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "En échec" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -750,7 +799,8 @@ msgstr "Transfert" #: src/components/user/ForwardForm.vue:6 msgid "Forward messages and store copies into your local mailbox" -msgstr "Transférer les messages et conserver une copie dans votre boite locale" +msgstr "" +"Transférer les messages et conserver une copie dans votre boite locale" #: src/components/user/ForwardForm.vue:19 #: src/components/user/ForwardForm.vue:52 @@ -758,6 +808,18 @@ msgstr "Transférer les messages et conserver une copie dans votre boite locale" msgid "Forward updated" msgstr "Transfert mis à jour" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +#, fuzzy +msgid "Forwarded" +msgstr "Transfert" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -773,13 +835,21 @@ msgstr "Nom complet" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +#, fuzzy +msgid "Fully aligned" +msgstr "Alignement complet" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -819,7 +889,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -842,7 +914,15 @@ msgstr "Identités" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1066,7 +1146,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1117,11 +1198,13 @@ msgid "Not generated" msgstr "Non générée" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1138,7 +1221,8 @@ msgstr "" msgid "One or more updates are available" msgstr "Une ou plusieurs mises à jour sont disponibles!" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "Ouverte" @@ -1158,6 +1242,17 @@ msgstr "Options" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "Alignement partiel" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1238,7 +1333,8 @@ msgstr "Profil mis à jour" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "ID de file" @@ -1256,12 +1352,23 @@ msgid "Quota" msgstr "Quota" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." -msgstr "Quota pour cette boite. Peut être exprimé en Ko, Mo (défaut) ou Go. Définir une valeur spécifique ou utiliser la valeur par défaut du domaine. Laisser vide pour définir une valeur illimitée (interdit pour les admins. de domaine)." +msgid "" +"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)." +msgstr "" +"Quota pour cette boite. Peut être exprimé en Ko, Mo (défaut) ou Go. Définir " +"une valeur spécifique ou utiliser la valeur par défaut du domaine. Laisser " +"vide pour définir une valeur illimitée (interdit pour les admins. de " +"domaine)." #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Quota partagé entre les boîtes aux lettres. Peut être exprimé en Ko, Mo (défaut) ou Go. Une valeur à 0 signifie pas de quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." +msgstr "" +"Quota partagé entre les boîtes aux lettres. Peut être exprimé en Ko, Mo " +"(défaut) ou Go. Une valeur à 0 signifie pas de quota." #: src/components/domains/DomainForm.vue:68 #: src/components/identities/AccountForm.vue:64 @@ -1492,7 +1599,13 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +#, fuzzy +msgid "Statistics" +msgstr "Statistiques" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1520,7 +1633,9 @@ msgid "Tags" msgstr "Tags" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1563,6 +1678,13 @@ msgstr "A" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "Total" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1576,10 +1698,16 @@ msgstr "" msgid "Transport" msgstr "Transport" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +#, fuzzy +msgid "Trusted sources" +msgstr "Sources de confiance" + #: src/components/user/TwoFactorAuthForm.vue:4 #, fuzzy msgid "Two factor authentication" @@ -1587,8 +1715,12 @@ msgstr "Authentification" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." -msgstr "L'authentification à 2 facteurs n'est pas encore activée pour votre compte. Activer cette fonctionnalité renforcera la sécurité de votre compte." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." +msgstr "" +"L'authentification à 2 facteurs n'est pas encore activée pour votre compte. " +"Activer cette fonctionnalité renforcera la sécurité de votre compte." #: src/views/TwoFA.vue:11 msgid "Two-factor authentication code" @@ -1609,6 +1741,10 @@ msgstr "" msgid "Unknown" msgstr "Inconnu" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "Sources inconnues / Menaces" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/it/LC_MESSAGES/app.po b/frontend/locale/it/LC_MESSAGES/app.po index 2f352017f..d22d84284 100644 --- a/frontend/locale/it/LC_MESSAGES/app.po +++ b/frontend/locale/it/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "Alias" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "API" @@ -270,9 +283,11 @@ msgstr "Cambia password" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" -msgstr "Seleziona questa opzione se le password contenute nel file non sono criptate" +msgstr "" +"Seleziona questa opzione se le password contenute nel file non sono criptate" #: src/components/domains/DomainAliasForm.vue:56 #: src/components/domains/DomainAliasForm.vue:26 @@ -283,7 +298,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +308,8 @@ msgstr "" msgid "Close" msgstr "Chiudi" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "Chiudi" @@ -307,7 +324,8 @@ msgstr "Conferma" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -363,7 +381,8 @@ msgstr "" msgid "Creation date" msgstr "Data di creazione" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "Cripta le password" @@ -405,8 +424,13 @@ msgid "Default mailbox quota" msgstr "Dimensione massima predefinita per le mailbox" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Valore predefinito per lo spazio massimo confiviso tra le mailbox. Può essere espresso in KB, MB (predefinito) o GB. Il valore 0 indica nessun limite." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." +msgstr "" +"Valore predefinito per lo spazio massimo confiviso tra le mailbox. Può " +"essere espresso in KB, MB (predefinito) o GB. Il valore 0 indica nessun " +"limite." #: src/components/domains/DomainAliasForm.vue:24 #: src/components/domains/DomainList.vue:115 @@ -432,6 +456,10 @@ msgstr "" msgid "Description" msgstr "Descrizione" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +489,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +511,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +525,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +720,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +759,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "Fallito" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -741,13 +787,26 @@ msgstr "Inoltra" #: src/components/user/ForwardForm.vue:6 msgid "Forward messages and store copies into your local mailbox" -msgstr "Inoltra i messaggi e memorizza le copie nella tua casella di posta locale" +msgstr "" +"Inoltra i messaggi e memorizza le copie nella tua casella di posta locale" #: src/components/user/ForwardForm.vue:19 #: src/components/user/ForwardForm.vue:52 msgid "Forward updated" msgstr "Inoltro aggiornato" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +#, fuzzy +msgid "Forwarded" +msgstr "Inoltra" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +822,21 @@ msgstr "Nome completo" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +#, fuzzy +msgid "Fully aligned" +msgstr "Completamente allineato" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +874,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +899,15 @@ msgstr "Identità" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1128,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1180,13 @@ msgid "Not generated" msgstr "Non generata" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1203,8 @@ msgstr "" msgid "One or more updates are available" msgstr "Sono disponibili nuovi aggiornamenti" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1224,17 @@ msgstr "Opzioni" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "Parzialmente allineato" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1312,8 @@ msgstr "Profilo aggiornato" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,12 +1331,23 @@ msgid "Quota" msgstr "Dimensione massima" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." -msgstr "Dimensione massima per questa mailbox, può essere espressa in KB, MB (predefinito) o GB. Definire un valore personalizzato o utilizzare quello predefinito per il dominio. Lasciare vuoto per specificare un valore non limitato (non permesso per amministratori di dominio)." +msgid "" +"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)." +msgstr "" +"Dimensione massima per questa mailbox, può essere espressa in KB, MB " +"(predefinito) o GB. Definire un valore personalizzato o utilizzare quello " +"predefinito per il dominio. Lasciare vuoto per specificare un valore non " +"limitato (non permesso per amministratori di dominio)." #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Spazio massimo confiviso tra le mailbox. Può essere espresso in KB, MB (predefinito) o GB. Il valore 0 indica nessun limite." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." +msgstr "" +"Spazio massimo confiviso tra le mailbox. Può essere espresso in KB, MB " +"(predefinito) o GB. Il valore 0 indica nessun limite." #: src/components/domains/DomainForm.vue:68 #: src/components/identities/AccountForm.vue:64 @@ -1470,7 +1574,13 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +#, fuzzy +msgid "Statistics" +msgstr "Statistiche" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1608,9 @@ msgid "Tags" msgstr "Tag" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1653,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "Totale" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1673,25 @@ msgstr "" msgid "Transport" msgstr "Trasporto" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +#, fuzzy +msgid "Trusted sources" +msgstr "Fonti attendibili" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1586,6 +1713,10 @@ msgstr "" msgid "Unknown" msgstr "Sconosciuto" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "Fonti sconosciute / Minaccie" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/ja/LC_MESSAGES/app.po b/frontend/locale/ja/LC_MESSAGES/app.po index a8abb726f..fc775a343 100644 --- a/frontend/locale/ja/LC_MESSAGES/app.po +++ b/frontend/locale/ja/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -270,7 +283,8 @@ msgstr "" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -307,7 +323,8 @@ msgstr "" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -363,7 +380,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -405,7 +423,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -432,6 +452,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +485,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +507,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +521,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +716,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +755,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +790,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +816,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +867,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +892,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1121,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1173,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1196,8 @@ msgstr "" msgid "One or more updates are available" msgstr "" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1217,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1305,8 @@ msgstr "" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,11 +1324,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1470,7 +1561,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1594,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1639,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1659,24 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1586,6 +1698,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/nl/LC_MESSAGES/app.po b/frontend/locale/nl/LC_MESSAGES/app.po index 34ae364c6..0c155a019 100644 --- a/frontend/locale/nl/LC_MESSAGES/app.po +++ b/frontend/locale/nl/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -270,7 +283,8 @@ msgstr "" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -307,7 +323,8 @@ msgstr "" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -363,7 +380,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -405,7 +423,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -432,6 +452,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +485,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +507,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +521,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +716,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +755,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +790,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +816,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +867,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +892,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1121,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1173,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1196,8 @@ msgstr "" msgid "One or more updates are available" msgstr "" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1217,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1305,8 @@ msgstr "" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,11 +1324,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1470,7 +1561,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1594,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1639,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1659,24 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1586,6 +1698,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/pl/LC_MESSAGES/app.po b/frontend/locale/pl/LC_MESSAGES/app.po index 615f3be8e..f2868c9cc 100644 --- a/frontend/locale/pl/LC_MESSAGES/app.po +++ b/frontend/locale/pl/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -270,7 +283,8 @@ msgstr "" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -307,7 +323,8 @@ msgstr "" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -363,7 +380,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -405,7 +423,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -432,6 +452,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +485,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +507,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +521,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +716,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +755,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +790,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +816,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +867,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +892,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1121,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1173,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1196,8 @@ msgstr "" msgid "One or more updates are available" msgstr "" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1217,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1305,8 @@ msgstr "" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,11 +1324,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1470,7 +1561,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1594,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1639,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1659,24 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1586,6 +1698,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/po/LC_MESSAGES/app.po b/frontend/locale/po/LC_MESSAGES/app.po index 4d808c538..602e2e25a 100644 --- a/frontend/locale/po/LC_MESSAGES/app.po +++ b/frontend/locale/po/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -27,22 +27,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -165,7 +172,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -181,6 +190,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -269,7 +282,8 @@ msgstr "" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -282,7 +296,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -291,7 +306,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -306,7 +322,8 @@ msgstr "" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -362,7 +379,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -404,7 +422,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -431,6 +451,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -460,7 +484,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -481,6 +506,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -491,6 +520,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -682,7 +715,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -719,6 +754,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -747,6 +789,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -762,13 +815,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -806,7 +866,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -829,7 +891,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1050,7 +1120,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1101,11 +1172,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1122,7 +1195,8 @@ msgstr "" msgid "One or more updates are available" msgstr "" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1142,6 +1216,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1219,7 +1304,8 @@ msgstr "" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1237,11 +1323,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1469,7 +1560,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1497,7 +1593,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1540,6 +1638,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1553,17 +1658,24 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1585,6 +1697,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/pt-br/LC_MESSAGES/app.po b/frontend/locale/pt-br/LC_MESSAGES/app.po index d88e3cc47..d5198000f 100644 --- a/frontend/locale/pt-br/LC_MESSAGES/app.po +++ b/frontend/locale/pt-br/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -27,22 +27,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -165,7 +172,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -181,6 +190,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -269,7 +282,8 @@ msgstr "" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -282,7 +296,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -291,7 +306,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -306,7 +322,8 @@ msgstr "" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -362,7 +379,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -404,7 +422,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -431,6 +451,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -460,7 +484,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -481,6 +506,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -491,6 +520,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -682,7 +715,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -719,6 +754,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -747,6 +789,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -762,13 +815,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -806,7 +866,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -829,7 +891,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1050,7 +1120,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1101,11 +1172,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1122,7 +1195,8 @@ msgstr "" msgid "One or more updates are available" msgstr "" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1142,6 +1216,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1219,7 +1304,8 @@ msgstr "" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1237,11 +1323,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1469,7 +1560,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1497,7 +1593,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1540,6 +1638,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1553,17 +1658,24 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1585,6 +1697,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/pt/LC_MESSAGES/app.po b/frontend/locale/pt/LC_MESSAGES/app.po index fa2244905..df8dfe13a 100644 --- a/frontend/locale/pt/LC_MESSAGES/app.po +++ b/frontend/locale/pt/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -270,7 +283,8 @@ msgstr "" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -307,7 +323,8 @@ msgstr "" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -363,7 +380,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -405,7 +423,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -432,6 +452,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +485,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +507,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +521,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +716,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +755,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +790,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +816,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +867,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +892,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1121,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1173,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1196,8 @@ msgstr "" msgid "One or more updates are available" msgstr "" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1217,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1305,8 @@ msgstr "" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,11 +1324,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1470,7 +1561,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1594,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1639,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1659,24 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1586,6 +1698,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/ru/LC_MESSAGES/app.po b/frontend/locale/ru/LC_MESSAGES/app.po index 3d0ea394e..8697ac903 100644 --- a/frontend/locale/ru/LC_MESSAGES/app.po +++ b/frontend/locale/ru/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "Синоним(ы)" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "API" @@ -270,7 +283,8 @@ msgstr "Изменить пароль" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "Выберите эту опцию если пароль в вашем файле не зашифрован " @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -307,7 +323,8 @@ msgstr "Подтверждение" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -363,7 +380,8 @@ msgstr "" msgid "Creation date" msgstr "Дата создания" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "Шифровать пароль" @@ -405,7 +423,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -432,6 +452,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +485,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +507,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +521,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +716,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +755,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -741,13 +783,27 @@ msgstr "Перенаправленые" #: src/components/user/ForwardForm.vue:6 msgid "Forward messages and store copies into your local mailbox" -msgstr "Перенаправление сообщения, и сохранение копии в вашем локальном почтовом ящике" +msgstr "" +"Перенаправление сообщения, и сохранение копии в вашем локальном почтовом " +"ящике" #: src/components/user/ForwardForm.vue:19 #: src/components/user/ForwardForm.vue:52 msgid "Forward updated" msgstr "Перенаправление обновлено" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +#, fuzzy +msgid "Forwarded" +msgstr "Перенаправленые" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +819,21 @@ msgstr "Имя файла" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +#, fuzzy +msgid "Fully aligned" +msgstr "Имя файла" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +871,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +896,15 @@ msgstr "Пользователи" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1125,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1177,13 @@ msgid "Not generated" msgstr "Получатель не определен" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1200,8 @@ msgstr "" msgid "One or more updates are available" msgstr "Доступны одно или более обновлений." -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1221,17 @@ msgstr "Опции" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1309,8 @@ msgstr "Профиль обновлен" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,11 +1328,20 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." -msgstr "Квота в мегабайтах для этого почтового ящика. Определите собственное значение или используйте значение по умолчанию для родительского домена. Оставьте пустым для неограниченного значения. (Не разрешено администраторам домена)" +msgid "" +"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)." +msgstr "" +"Квота в мегабайтах для этого почтового ящика. Определите собственное " +"значение или используйте значение по умолчанию для родительского домена. " +"Оставьте пустым для неограниченного значения. (Не разрешено администраторам" +" домена)" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1470,7 +1569,13 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +#, fuzzy +msgid "Statistics" +msgstr "Статистика" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1603,9 @@ msgid "Tags" msgstr "Теги" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1648,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,17 +1668,25 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +#, fuzzy +msgid "Trusted sources" +msgstr "Ресурсы" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1586,6 +1708,10 @@ msgstr "" msgid "Unknown" msgstr "Неизвестное" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/sv/LC_MESSAGES/app.po b/frontend/locale/sv/LC_MESSAGES/app.po index b86babf2d..858b3d10a 100644 --- a/frontend/locale/sv/LC_MESSAGES/app.po +++ b/frontend/locale/sv/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "Alias" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "API" @@ -270,7 +283,8 @@ msgstr "Ändra lösenord" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "Markera det här alternativet om lösenord i filen inte är krypterad" @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "Stäng" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "Stäng" @@ -307,7 +323,8 @@ msgstr "Bekräftelse" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "Grattis! Tvåfaktorsautentisering är nu aktiverat för ditt konto." #: src/views/Login.vue:23 @@ -363,7 +380,8 @@ msgstr "" msgid "Creation date" msgstr "Skapelsedatum" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "Krypterade lösenord" @@ -405,8 +423,11 @@ msgid "Default mailbox quota" msgstr "Standard brevlåde kvota" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Standardkvota i MB applicerad på nya brevlådor. 0 betyder ingen kvota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." +msgstr "" +"Standardkvota i MB applicerad på nya brevlådor. 0 betyder ingen kvota." #: src/components/domains/DomainAliasForm.vue:24 #: src/components/domains/DomainList.vue:115 @@ -432,6 +453,10 @@ msgstr "" msgid "Description" msgstr "Beskrivning" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +486,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +508,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +522,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +717,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +756,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "Misslyckades" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +791,18 @@ msgstr "Vidarebefordra meddelande och spara kopia i din lokala brevlåda" msgid "Forward updated" msgstr "Vidarebefordring uppdaterad" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +#, fuzzy +msgid "Forwarded" +msgstr "Vidarebefordra" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +818,21 @@ msgstr "Fullständigt nam" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +#, fuzzy +msgid "Fully aligned" +msgstr "Helt i linje" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +870,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +895,15 @@ msgstr "Konton" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1124,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1176,13 @@ msgid "Not generated" msgstr "Ej genererad" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1199,8 @@ msgstr "" msgid "One or more updates are available" msgstr "En eller fler uppdateringar finns tillgängliga" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1220,17 @@ msgstr "Inställningar" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "Delvis i linje" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1308,8 @@ msgstr "Profil uppdaterad" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,12 +1327,21 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." -msgstr "Kvot i MB för denna brevlåda. Definiera ett anpassat värde eller använda domänens förvalda. Lämna tomt för att definiera ett obegränsat värde (ej tillåtet för domänadministratörer)." +msgid "" +"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)." +msgstr "" +"Kvot i MB för denna brevlåda. Definiera ett anpassat värde eller använda " +"domänens förvalda. Lämna tomt för att definiera ett obegränsat värde (ej " +"tillåtet för domänadministratörer)." #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." -msgstr "Standardkvota i MB applicerad på nya brevlådor. 0 betyder ingen kvota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." +msgstr "" +"Standardkvota i MB applicerad på nya brevlådor. 0 betyder ingen kvota." #: src/components/domains/DomainForm.vue:68 #: src/components/identities/AccountForm.vue:64 @@ -1470,7 +1568,13 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +#, fuzzy +msgid "Statistics" +msgstr "Statistik" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1602,9 @@ msgid "Tags" msgstr "Tagg" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1647,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "Totalt" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,18 +1667,28 @@ msgstr "" msgid "Transport" msgstr "Transport" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +#, fuzzy +msgid "Trusted sources" +msgstr "Betrodda källor" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." -msgstr "Tvåfaktorsautentisering (2FA) har inte aktiverats för ditt konto. Aktivering ökar ditt kontos säkerhet." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." +msgstr "" +"Tvåfaktorsautentisering (2FA) har inte aktiverats för ditt konto. Aktivering" +" ökar ditt kontos säkerhet." #: src/views/TwoFA.vue:11 msgid "Two-factor authentication code" @@ -1586,6 +1709,10 @@ msgstr "" msgid "Unknown" msgstr "Okänt" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "Okända källor / Hot" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/tr/LC_MESSAGES/app.po b/frontend/locale/tr/LC_MESSAGES/app.po index 97d4c12ab..91fb22440 100644 --- a/frontend/locale/tr/LC_MESSAGES/app.po +++ b/frontend/locale/tr/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -28,22 +28,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -166,7 +173,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -182,6 +191,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "API" @@ -270,7 +283,8 @@ msgstr "Parolayı değiştirin" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -283,7 +297,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -292,7 +307,8 @@ msgstr "" msgid "Close" msgstr "Kapat" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -307,8 +323,11 @@ msgstr "Onayla" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." -msgstr "Tebrikler! Artık hesabınız için İki Faktörlü Kimlik Doğrulama etkinleştirildi." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." +msgstr "" +"Tebrikler! Artık hesabınız için İki Faktörlü Kimlik Doğrulama " +"etkinleştirildi." #: src/views/Login.vue:23 msgid "Connect" @@ -363,7 +382,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -405,7 +425,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -432,6 +454,10 @@ msgstr "" msgid "Description" msgstr "Tanım" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -461,7 +487,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -482,6 +509,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -492,6 +523,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -683,7 +718,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -720,6 +757,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -748,6 +792,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -763,13 +818,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -807,7 +869,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -830,7 +894,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1051,7 +1123,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1102,11 +1175,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1123,7 +1198,8 @@ msgstr "" msgid "One or more updates are available" msgstr "Bir veya daha fazla güncelleme mevcut" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1143,6 +1219,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1220,7 +1307,8 @@ msgstr "Profil güncellendi" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1238,11 +1326,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1470,7 +1563,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1498,7 +1596,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1541,6 +1641,13 @@ msgstr "Kime" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1554,18 +1661,27 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." -msgstr "Hesabınız için İki Faktörlü Kimlik Doğrulama (2FA) henüz etkinleştirilmedi. Bu özelliği etkinleştirmek hesabınızın güvenliğini artıracaktır." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." +msgstr "" +"Hesabınız için İki Faktörlü Kimlik Doğrulama (2FA) henüz etkinleştirilmedi. " +"Bu özelliği etkinleştirmek hesabınızın güvenliğini artıracaktır." #: src/views/TwoFA.vue:11 msgid "Two-factor authentication code" @@ -1586,6 +1702,10 @@ msgstr "" msgid "Unknown" msgstr "Bilinmeyen" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/locale/zh-hant/LC_MESSAGES/app.po b/frontend/locale/zh-hant/LC_MESSAGES/app.po index 0c05413cd..21487b644 100644 --- a/frontend/locale/zh-hant/LC_MESSAGES/app.po +++ b/frontend/locale/zh-hant/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Modoboa 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-23 11:26+0100\n" +"POT-Creation-Date: 2023-02-23 18:08+0100\n" "PO-Revision-Date: 2023-02-23 11:26+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -27,22 +27,29 @@ msgstr "" #: src/components/domains/DNSDetail.vue:47 #: src/components/domains/DNSDetail.vue:205 -msgid "A new key will be generated soon. Refresh the page in a moment to see it." +msgid "" +"A new key will be generated soon. Refresh the page in a moment to see it." msgstr "" #: src/components/identities/AccountRoleForm.vue:39 #: src/components/identities/AccountRoleForm.vue:69 -msgid "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." +msgid "" +"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." msgstr "" #: src/components/identities/AccountRoleForm.vue:34 #: src/components/identities/AccountRoleForm.vue:64 -msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters." +msgid "" +"A user with no privileges but with a mailbox. He will be allowed to use all " +"end-user features: webmail, calendar, contacts, filters." msgstr "" #: src/components/identities/AccountRoleForm.vue:24 #: src/components/identities/AccountRoleForm.vue:54 -msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox." +msgid "" +"A user with privileges on one or more domain. He will be allowed to " +"administer mailboxes and he can also have a mailbox." msgstr "" #: src/components/tools/TimeSerieChart.vue:16 @@ -165,7 +172,9 @@ msgstr "" #: src/components/identities/AccountAliasForm.vue:3 #: src/components/identities/AliasRecipientForm.vue:3 -msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)." +msgid "" +"Alias(es) of this mailbox. To create a catchall alias, just enter the domain" +" name (@domain.tld)." msgstr "" #: src/components/domains/DomainList.vue:25 @@ -181,6 +190,10 @@ msgstr "" msgid "Aliases" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:4 +msgid "Alignment" +msgstr "" + #: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214 msgid "API" msgstr "" @@ -269,7 +282,8 @@ msgstr "" msgid "Check out the following list to find related components" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Check this option if passwords contained in your file are not crypted" msgstr "" @@ -282,7 +296,8 @@ msgstr "" msgid "Choose a role" msgstr "" -#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36 +#: src/App.vue:18 src/App.vue:2 +#: src/components/domains/AdministratorList.vue:36 #: src/components/domains/DomainAliasForm.vue:21 #: src/components/domains/DomainDKIMKey.vue:22 #: src/components/domains/DomainDNSConfig.vue:40 @@ -291,7 +306,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5 +#: src/components/alarms/AlarmList.vue:21 +#: src/components/alarms/AlarmList.vue:5 msgid "Closed" msgstr "" @@ -306,7 +322,8 @@ msgstr "" #: src/components/user/TwoFactorAuthForm.vue:34 #: src/components/user/TwoFactorAuthForm.vue:2 -msgid "Congratulations! Two-Factor Authentication is now enabled for your account." +msgid "" +"Congratulations! Two-Factor Authentication is now enabled for your account." msgstr "" #: src/views/Login.vue:23 @@ -362,7 +379,8 @@ msgstr "" msgid "Creation date" msgstr "" -#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1 +#: src/views/identities/Identities.vue:45 +#: src/views/identities/Identities.vue:1 msgid "Crypt passwords" msgstr "" @@ -404,7 +422,9 @@ msgid "Default mailbox quota" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:6 -msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or " +"GB. A value of 0 means no quota." msgstr "" #: src/components/domains/DomainAliasForm.vue:24 @@ -431,6 +451,10 @@ msgstr "" msgid "Description" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:37 +msgid "Detail" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:57 #: src/components/user/TwoFactorAuthForm.vue:5 msgid "Disable 2FA" @@ -460,7 +484,8 @@ msgstr "" #: src/components/domains/DNSDetail.vue:30 #: src/components/domains/DNSDetail.vue:189 -msgid "DKIM keys already exist for this domain. Do you want to overwrite them?" +msgid "" +"DKIM keys already exist for this domain. Do you want to overwrite them?" msgstr "" #: src/components/domains/DomainDKIMKey.vue:4 @@ -481,6 +506,10 @@ msgstr "" msgid "DKIM signing" msgstr "" +#: src/views/domains/Domain.vue:17 +msgid "DMARC" +msgstr "" + #: src/components/domains/DNSDetail.vue:79 #: src/components/domains/DNSDetail.vue:43 msgid "DMARC record found" @@ -491,6 +520,10 @@ msgstr "" msgid "DMARC record not found" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:50 +msgid "DMARC support does not seem to be enabled for this domain." +msgstr "" + #: src/components/domains/DomainCreationForm.vue:31 #: src/components/domains/DomainCreationForm.vue:109 #: src/components/domains/DomainCreationForm.vue:115 @@ -682,7 +715,9 @@ msgid "Enter an email address" msgstr "" #: src/views/TwoFA.vue:12 -msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes." +msgid "" +"Enter the code from the two-factor app on your mobile device. If you have " +"lost your device, you may enter one of your recovery codes." msgstr "" #: src/views/user/PasswordRecoverySmsTotpForm.vue:11 @@ -719,6 +754,13 @@ msgstr "" msgid "Export domains and aliases to CSV" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:25 +#: src/components/dmarc/DmarcAligmentChart.vue:37 +#: src/components/dmarc/DmarcAligmentChart.vue:143 +#: src/components/dmarc/DmarcAligmentChart.vue:155 +msgid "Failed" +msgstr "" + #: src/components/identities/AccountCreationForm.vue:30 #: src/components/identities/AccountGeneralForm.vue:32 #: src/components/user/ProfileForm.vue:45 @@ -747,6 +789,17 @@ msgstr "" msgid "Forward updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:24 +#: src/components/dmarc/DmarcAligmentChart.vue:36 +#: src/components/dmarc/DmarcAligmentChart.vue:142 +#: src/components/dmarc/DmarcAligmentChart.vue:154 +msgid "Forwarded" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:42 +msgid "Forwarders with ARC" +msgstr "" + #: src/components/logs/MessageList.vue:13 #: src/components/tools/TimeSerieChart.vue:17 #: src/components/logs/MessageList.vue:46 @@ -762,13 +815,20 @@ msgstr "" msgid "Fullname/recipient" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:22 +#: src/components/dmarc/DmarcAligmentChart.vue:34 +#: src/components/dmarc/DmarcAligmentChart.vue:140 +#: src/components/dmarc/DmarcAligmentChart.vue:152 +msgid "Fully aligned" +msgstr "" + #: src/components/domains/DomainCreationForm.vue:23 #: src/components/domains/DomainCreationForm.vue:108 #: src/components/domains/DomainCreationForm.vue:114 #: src/components/domains/DomainForm.vue:7 #: src/components/identities/AliasCreationForm.vue:17 #: src/components/identities/AliasCreationForm.vue:49 -#: src/components/identities/AliasForm.vue:7 +#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11 #: src/components/identities/AliasCreationForm.vue:37 #: src/components/identities/AliasCreationForm.vue:69 #: src/components/domains/DomainCreationForm.vue:74 @@ -806,7 +866,9 @@ msgid "help" msgstr "" #: src/components/domains/DomainDNSConfig.vue:8 -msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones." +msgid "" +"Here is an example of DNS configuration (bind format). Replace values " +"between [ ] by the appropriate ones." msgstr "" #: src/components/domains/DomainDNSConfig.vue:33 @@ -829,7 +891,15 @@ msgstr "" #: src/components/tools/CreationForm.vue:26 #: src/components/tools/CreationForm.vue:99 -msgid "If you close this form now, your modifications won't be saved. Do you confirm?" +msgid "" +"If you close this form now, your modifications won't be saved. Do you " +"confirm?" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:52 +msgid "" +"If you configured it recently, please wait for the first report to be " +"received and processed." msgstr "" #: src/components/tools/ImportForm.vue:29 @@ -1050,7 +1120,8 @@ msgid "Never logged-in" msgstr "" #: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3 -#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3 +#: src/views/identities/Identities.vue:15 +#: src/views/identities/Identities.vue:3 msgid "New" msgstr "" @@ -1101,11 +1172,13 @@ msgid "Not generated" msgstr "" #: src/components/domains/DomainLimitationsForm.vue:9 -msgid "Number of messages this domain can send per day. Leave empty for no limit." +msgid "" +"Number of messages this domain can send per day. Leave empty for no limit." msgstr "" #: src/components/identities/AccountMailboxForm.vue:8 -msgid "Number of messages this mailbox can send per day. Leave empty for no limit." +msgid "" +"Number of messages this mailbox can send per day. Leave empty for no limit." msgstr "" #: src/views/user/PasswordRecoveryForm.vue:31 @@ -1122,7 +1195,8 @@ msgstr "" msgid "One or more updates are available" msgstr "" -#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2 +#: src/components/alarms/AlarmList.vue:18 +#: src/components/alarms/AlarmList.vue:2 msgid "Opened" msgstr "" @@ -1142,6 +1216,17 @@ msgstr "" msgid "Parameters updated" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:23 +#: src/components/dmarc/DmarcAligmentChart.vue:35 +#: src/components/dmarc/DmarcAligmentChart.vue:141 +#: src/components/dmarc/DmarcAligmentChart.vue:153 +msgid "Partially aligned" +msgstr "" + +#: src/components/dmarc/DmarcAligmentChart.vue:41 +msgid "Partially trusted sources / Forwarders" +msgstr "" + #: src/components/identities/AccountPasswordForm.vue:88 #: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13 #: src/components/identities/AccountPasswordForm.vue:42 @@ -1219,7 +1304,8 @@ msgstr "" msgid "Provide a CSV file where lines respect one of the following formats:" msgstr "" -#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42 +#: src/components/logs/MessageList.vue:9 +#: src/components/logs/MessageList.vue:42 msgid "Queue ID" msgstr "" @@ -1237,11 +1323,16 @@ msgid "Quota" msgstr "" #: src/components/identities/AccountMailboxForm.vue:5 -msgid "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)." +msgid "" +"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)." msgstr "" #: src/components/domains/DomainLimitationsForm.vue:3 -msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota." +msgid "" +"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. " +"A value of 0 means no quota." msgstr "" #: src/components/domains/DomainForm.vue:68 @@ -1469,7 +1560,12 @@ msgstr "" msgid "Start typing a name here..." msgstr "" -#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11 +#: src/views/domains/Domain.vue:14 +msgid "Statistics" +msgstr "" + +#: src/components/alarms/AlarmList.vue:9 +#: src/components/logs/MessageList.vue:11 #: src/components/alarms/AlarmList.vue:73 #: src/components/logs/MessageList.vue:44 msgid "Status" @@ -1497,7 +1593,9 @@ msgid "Tags" msgstr "" #: src/components/tools/ImportForm.vue:9 -msgid "The first element of each line is mandatory and must be equal to one of the previous values." +msgid "" +"The first element of each line is mandatory and must be equal to one of the " +"previous values." msgstr "" #: src/components/user/TwoFactorAuthForm.vue:39 @@ -1540,6 +1638,13 @@ msgstr "" msgid "Too many unsuccessful attempts, please try later." msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:33 +#: src/components/dmarc/DmarcSourceTable.vue:8 +#: src/components/dmarc/DmarcSourceTable.vue:3 +#: src/components/dmarc/DmarcAligmentChart.vue:151 +msgid "Total" +msgstr "" + #: src/views/user/PasswordRecoverySmsTotpForm.vue:37 #: src/views/user/PasswordRecoverySmsTotpForm.vue:85 msgid "TOTP resent." @@ -1553,17 +1658,24 @@ msgstr "" msgid "Transport" msgstr "" -#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72 +#: src/components/alarms/AlarmList.vue:8 +#: src/components/alarms/AlarmList.vue:72 msgid "Triggered" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:40 +msgid "Trusted sources" +msgstr "" + #: src/components/user/TwoFactorAuthForm.vue:4 msgid "Two factor authentication" msgstr "" #: src/components/user/TwoFactorAuthForm.vue:64 #: src/components/user/TwoFactorAuthForm.vue:1 -msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security." +msgid "" +"Two-Factor Authentication (2FA) is not yet activated for your account. " +"Enabling this feature will increase your account's security." msgstr "" #: src/views/TwoFA.vue:11 @@ -1585,6 +1697,10 @@ msgstr "" msgid "Unknown" msgstr "" +#: src/components/dmarc/DmarcAligmentChart.vue:43 +msgid "Unknown sources / Threats" +msgstr "" + #: src/components/identities/AccountMailboxForm.vue:30 #: src/components/identities/AccountMailboxForm.vue:69 msgid "unlimited" diff --git a/frontend/merge_translations.py b/frontend/merge_translations.py index fbc831cc4..3414d755a 100644 --- a/frontend/merge_translations.py +++ b/frontend/merge_translations.py @@ -35,7 +35,8 @@ OLD_TRANSLATION_MODULES = [ "maillog", "policyd", "relaydomains", - "transport" + "transport", + "dmarc", ] diff --git a/frontend/src/api/domains.js b/frontend/src/api/domains.js index 94fba0a0a..19464e734 100644 --- a/frontend/src/api/domains.js +++ b/frontend/src/api/domains.js @@ -13,6 +13,12 @@ export default { getDomainDNSDetail (domainId) { return repository.get(`/${domainResource}/${domainId}/dns_detail/`) }, + getDomainDmarcAlignment (domainId, period) { + return repository.get( + `${domainResource}/${domainId}/dmarc/alignment_stats/`, + { params: { period } } + ) + }, getDomainAliases (domain) { let url = `/${domainAliasResource}/` if (domain !== undefined) { diff --git a/frontend/src/components/dmarc/DmarcAligmentChart.vue b/frontend/src/components/dmarc/DmarcAligmentChart.vue new file mode 100644 index 000000000..075dde9f5 --- /dev/null +++ b/frontend/src/components/dmarc/DmarcAligmentChart.vue @@ -0,0 +1,259 @@ + + + diff --git a/frontend/src/components/dmarc/DmarcSourceTable.vue b/frontend/src/components/dmarc/DmarcSourceTable.vue new file mode 100644 index 000000000..d8271dc9a --- /dev/null +++ b/frontend/src/components/dmarc/DmarcSourceTable.vue @@ -0,0 +1,60 @@ + + + diff --git a/frontend/src/views/TwoFA.vue b/frontend/src/views/TwoFA.vue index 1d4843b2c..692ed6f5d 100644 --- a/frontend/src/views/TwoFA.vue +++ b/frontend/src/views/TwoFA.vue @@ -13,6 +13,7 @@ @@ -24,13 +25,14 @@ :error-messages="errors" :hint="'Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes.'|translate" persistent-hint + @finish="verifyCode" />
- + Verify code
@@ -46,7 +48,8 @@ export default { data () { return { code: null, - errors: {} + errors: {}, + loading: false } }, methods: { @@ -55,6 +58,7 @@ export default { if (!isValid) { return } + this.loading = true account.verifyTFACode(this.code).then(resp => { Cookies.set('token', resp.data.access, { sameSite: 'strict' }) Cookies.set('refreshToken', resp.data.refresh, { sameSite: 'strict' }) @@ -63,6 +67,7 @@ export default { }) }).catch(error => { this.$refs.observer.setErrors(error.response.data) + this.loading = false }) } } diff --git a/frontend/src/views/domains/Domain.vue b/frontend/src/views/domains/Domain.vue index 2e41af615..a4fe69da1 100644 --- a/frontend/src/views/domains/Domain.vue +++ b/frontend/src/views/domains/Domain.vue @@ -6,49 +6,77 @@ mdi-circle-edit-outline - - - - -
- + + General + + + Statistics + + + DMARC + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + - - - -
- - - - - - - - - - - - - - - + + + +
@@ -57,6 +85,7 @@ + + +{% endblock %} + +{% block leftcol %} + +{% endblock %} + +{% block apparea %} +
+
+

{% trans "DMARC report for" %} {{ domain }}

+
+
+
+
+ + {{ daterange.0|date }} - {{ daterange.1|date }} + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+

{{ stats.total }}

+

{% trans "processed" %}

+
+
+
+ +
+
+
+

{{ stats.aligned }}

+

{% trans "fully aligned" %}

+
+
+
+ +
+
+
+

{{ stats.trusted }}

+

{% trans "partially aligned" %}

+
+
+
+ +
+
+
+

{{ stats.forwarded }}

+

{% trans "forwarded" %}

+
+
+
+ +
+
+
+

{{ stats.failed }}

+

{% trans "failed" %}

+
+
+
+
+
+
+ +
+ +
+ + + +{% endblock %} diff --git a/modoboa/dmarc/templatetags/__init__.py b/modoboa/dmarc/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modoboa/dmarc/templatetags/dmarc_tags.py b/modoboa/dmarc/templatetags/dmarc_tags.py new file mode 100644 index 000000000..c313b67ae --- /dev/null +++ b/modoboa/dmarc/templatetags/dmarc_tags.py @@ -0,0 +1,65 @@ +"""Custom template tags.""" + +import datetime + +from collections import OrderedDict + +from django import template +from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _ + +register = template.Library() + + +@register.simple_tag +def next_period(period): + """Return next period.""" + current = period.split("-") + if int(current[1]) == 52: + week0 = datetime.datetime.strptime("{}-0-1".format(int(current[0]) + 1 ), "%Y-%W-%w") + week1 = datetime.datetime.strptime("{}-1-1".format(int(current[0]) + 1 ), "%Y-%W-%w") + week52 = datetime.datetime.strptime("{}-52-1".format(current[0]), "%Y-%W-%w") + if week0 == week52 or week0 == week1 : + parts = (int(current[0]) + 1, 1 ) + else: + parts = (int(current[0]) + 1, 0 ) + else: + parts = (current[0], int(current[1]) + 1 ) + return mark_safe("{}-{}".format(parts[0], parts[1])) + +@register.simple_tag +def previous_period(period): + """Return previous period.""" + current = period.split("-") + if int(current[1]) == 1: + week0 = datetime.datetime.strptime("{}-0-1".format(current[0]), "%Y-%W-%w") + week1 = datetime.datetime.strptime("{}-1-1".format(current[0]), "%Y-%W-%w") + if week0 == week1: + parts = (int(current[0]) - 1, 52 ) + else: + parts = (current[0], 0 ) + elif int(current[1]) == 0: + week0 = datetime.datetime.strptime("{}-0-1".format(current[0]), "%Y-%W-%w") + week52 = datetime.datetime.strptime("{}-52-1".format(int(current[0]) - 1 ), "%Y-%W-%w") + if week0 == week52: + parts = (int(current[0]) - 1, 51 ) + else: + parts = (int(current[0]) - 1, 52 ) + else: + parts = (current[0], int(current[1]) - 1 ) + return mark_safe("{}-{}".format(parts[0], parts[1])) + + +@register.filter +def domain_sorted_items(domain_dict): + """Return a list of tuples ordered alphabetically by domain names.""" + if isinstance(domain_dict, dict): + sorted_domain_dict = OrderedDict( + sorted(domain_dict.items(), key=lambda t: t[0])) + unresolved_label = _("Not resolved") + unresolved = sorted_domain_dict.pop(unresolved_label, None) + if unresolved: + sorted_domain_dict[unresolved_label] = unresolved + return sorted_domain_dict.items() + + raise ValueError("domain_dict is not a dict") diff --git a/modoboa/dmarc/tests/__init__.py b/modoboa/dmarc/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/modoboa/dmarc/tests/fail-reports/Report_Domain_ngyn.org_Submitter_163.com_Report-ID_aggr_report_ngyn.org_20150705_163-failed.com.eml b/modoboa/dmarc/tests/fail-reports/Report_Domain_ngyn.org_Submitter_163.com_Report-ID_aggr_report_ngyn.org_20150705_163-failed.com.eml new file mode 100644 index 000000000..492a0ec48 --- /dev/null +++ b/modoboa/dmarc/tests/fail-reports/Report_Domain_ngyn.org_Submitter_163.com_Report-ID_aggr_report_ngyn.org_20150705_163-failed.com.eml @@ -0,0 +1,67 @@ +Return-Path: +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id IKPdD1ULmlXgLQAABvoInA + for ; Mon, 06 Jul 2015 07:00:05 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id 2645EE035B + for ; Mon, 6 Jul 2015 07:00:05 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Mon, 6 Jul 2015 07:00:03 +0200 (CEST) +Received: from m12-181.163.com (m12-181.163.com [220.181.12.181]) + by mail.koalabs.org (Postfix) with ESMTP + for ; Mon, 6 Jul 2015 06:59:54 +0200 (CEST) +Received: from 163.com (unknown [192.168.201.141]) + by mfast1 (Coremail) with SMTP id tcCowEAJixEvC5pVHJvvLg--.53754S2; + Mon, 06 Jul 2015 12:59:27 +0800 (CST) +Content-Type: multipart/mixed; boundary="===============2544031943362770105==" +MIME-Version: 1.0 +From: +Date: Mon, 06 Jul 2015 12:59:25 +0800 +Subject: Report Domain: ngyn.org Submitter: 163.com Report-ID: + aggr_report_ngyn.org_20150705_163.com +To: postmaster@ngyn.org +X-CM-TRANSID:tcCowEAJixEvC5pVHJvvLg--.53754S2 +Message-Id:<559A0B30.EBEE1F.29746@m12-181.163.com> +X-Coremail-Antispam: 1UD129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73 + VFW2AGmfu7bjvjm3AaLaJ3UjIYCTnIWjp_UUUnI7CY07I20VC2zVCF04k26cxKx2IYs7xG + 6rWj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wAa7VASzI0EjI02j7AqF2 + xKxVCjxxvEa2IrM2AIxVAIcxkEcVAq07x20xvEncxIr21le4C267I2x7xF54xIwI1l5I8C + rVACY4xI64kE6c02F40Ex7xfMcIj6x8ErcxFaVAv8VWrMcvjeVCFs4IE7xkEbVWUJVW8Jw + ACjcxG0xvEwIxGrwAKzVAC0xCFj2AI6cx7M4kE6xkIj40Ew7xC0wCjxxvEa2IrMxkIecxE + wVCm-wCY0x0Ix7I2Y4AK64vIr41l42xK82IYc2Ij64vIr41l42xK82IY6x8ErcxFaVAv8V + WrMxCjnVAqn7xvrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18 + MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jr0_JrylIxkGc2Ij64vIr4 + 1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjTRClkVDUUUU +X-Originating-IP: [192.168.201.141] +X-CM-SenderInfo: 5dex2vi6rwjhhfrp/ + +--===============2544031943362770105== +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit + +This is a DMARC aggregate report for domain ngyn.org on 20150705. For more information please mail to abuse@163.com. +--===============2544031943362770105== +MIME-Version: 1.0 +Content-Type: application/gzip; + name="163.com!ngyn.org!1436054400!1436140799.zip" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="163.com!ngyn.org!1436054400!1436140799.zip" + +UEsDBBQAAAAIAGxn5kZGEGLBdAEAAJQDAAAqAAAAMTYzLmNvbSFuZ3luLm9yZyExNDM2MDU0NDAw +ITE0MzYxNDA3OTkueG1sbVNbbsMgEPzvKXICg5M4USSEehOEzdpBsQEBbpXbF4eHadovzOzs7Owu +JiOA6PnwoB+HA7FgtPVsAc8F93zDAqrtxBRfgLaXUzPohaCCRAIsXM6U96uDz8KJYCQkXSkonybL +0lVNT9VsUkfcdviKO1aS94QoENwAs1xNqWSAepikou35dMHd+YwxQRHJcVDiFW3P+Hq7BT8qi6Hf +aqVa3TYxepbDk5m1n6W7QzGiQ1uKZutBKwIxysVDLtQRFD8S6Mz4wrYzQoYqrYAgk+4uAy4jZvC0 +C4RwvCz+ZyeMddA2O7P6u/Tu9GoHYNLQtu2aIz42l3CcguAeydxBr8rTlqD4keFUEL74vIZxiRzY +ZiCd0U56qVWyXSMVb5vBGF5BIJRxpH7HFCgzqZp8qxn2k1sjUoDycpRgXUm7Axdg2Wj1Qtdm30yN +J6E/6YSv/h7eo1tnvytWpvaV19L10tMD3xTSNNKltLXvHb2X28hxhwSVP/EHUEsBAhQDFAAAAAgA +bGfmRkYQYsF0AQAAlAMAACoAAAAAAAAAAAAAAKSBAAAAADE2My5jb20hbmd5bi5vcmchMTQzNjA1 +NDQwMCExNDM2MTQwNzk5LnhtbFBLBQYAAAAAAQABAFgAAAC8AQAAAAA= +--===============2544031943362770105==-- + diff --git a/modoboa/dmarc/tests/mixins.py b/modoboa/dmarc/tests/mixins.py new file mode 100644 index 000000000..29c3a5de7 --- /dev/null +++ b/modoboa/dmarc/tests/mixins.py @@ -0,0 +1,47 @@ +"""Test mixins.""" + +import io +import os +import sys + +from django.core.management import call_command + + +class CallCommandMixin(object): + """A mixin to provide command execution shortcuts.""" + + def setUp(self): + """Replace stdin""" + super(CallCommandMixin, self).setUp() + self.stdin = sys.stdin + + def tearDown(self): + sys.stdin = self.stdin + + def import_report(self, path): + """Import test report from file.""" + with open(path) as fp: + buf = io.StringIO(fp.read()) + sys.stdin = buf + out = io.StringIO() + call_command("import_aggregated_report", "--pipe", stdout=out) + return out.getvalue() + + def import_reports(self, folder="reports"): + """Import reports from folder.""" + path = os.path.join(os.path.dirname(__file__), folder) + for f in os.listdir(path): + fpath = os.path.join(path, f) + if f.startswith(".") or not os.path.isfile(fpath): + continue + self.import_report(fpath) + + def import_fail_reports(self, folder="fail-reports"): + """Import failed reports from folder.""" + path = os.path.join(os.path.dirname(__file__), folder) + for f in os.listdir(path): + fpath = os.path.join(path, f) + if f.startswith(".") or not os.path.isfile(fpath): + continue + with self.assertRaisesMessage(SystemExit, '65'): + self.import_report(fpath) diff --git a/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_163.com_Report-ID_aggr_report_ngyn.org_20150705_163.com.eml b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_163.com_Report-ID_aggr_report_ngyn.org_20150705_163.com.eml new file mode 100644 index 000000000..8c674ac0d --- /dev/null +++ b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_163.com_Report-ID_aggr_report_ngyn.org_20150705_163.com.eml @@ -0,0 +1,67 @@ +Return-Path: +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id IKPdD1ULmlXgLQAABvoInA + for ; Mon, 06 Jul 2015 07:00:05 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id 2645EE035B + for ; Mon, 6 Jul 2015 07:00:05 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Mon, 6 Jul 2015 07:00:03 +0200 (CEST) +Received: from m12-181.163.com (m12-181.163.com [220.181.12.181]) + by mail.koalabs.org (Postfix) with ESMTP + for ; Mon, 6 Jul 2015 06:59:54 +0200 (CEST) +Received: from 163.com (unknown [192.168.201.141]) + by mfast1 (Coremail) with SMTP id tcCowEAJixEvC5pVHJvvLg--.53754S2; + Mon, 06 Jul 2015 12:59:27 +0800 (CST) +Content-Type: multipart/mixed; boundary="===============2544031943362770105==" +MIME-Version: 1.0 +From: +Date: Mon, 06 Jul 2015 12:59:25 +0800 +Subject: Report Domain: ngyn.org Submitter: 163.com Report-ID: + aggr_report_ngyn.org_20150705_163.com +To: postmaster@ngyn.org +X-CM-TRANSID:tcCowEAJixEvC5pVHJvvLg--.53754S2 +Message-Id:<559A0B30.EBEE1F.29746@m12-181.163.com> +X-Coremail-Antispam: 1UD129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73 + VFW2AGmfu7bjvjm3AaLaJ3UjIYCTnIWjp_UUUnI7CY07I20VC2zVCF04k26cxKx2IYs7xG + 6rWj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wAa7VASzI0EjI02j7AqF2 + xKxVCjxxvEa2IrM2AIxVAIcxkEcVAq07x20xvEncxIr21le4C267I2x7xF54xIwI1l5I8C + rVACY4xI64kE6c02F40Ex7xfMcIj6x8ErcxFaVAv8VWrMcvjeVCFs4IE7xkEbVWUJVW8Jw + ACjcxG0xvEwIxGrwAKzVAC0xCFj2AI6cx7M4kE6xkIj40Ew7xC0wCjxxvEa2IrMxkIecxE + wVCm-wCY0x0Ix7I2Y4AK64vIr41l42xK82IYc2Ij64vIr41l42xK82IY6x8ErcxFaVAv8V + WrMxCjnVAqn7xvrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18 + MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jr0_JrylIxkGc2Ij64vIr4 + 1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjTRClkVDUUUU +X-Originating-IP: [192.168.201.141] +X-CM-SenderInfo: 5dex2vi6rwjhhfrp/ + +--===============2544031943362770105== +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit + +This is a DMARC aggregate report for domain ngyn.org on 20150705. For more information please mail to abuse@163.com. +--===============2544031943362770105== +MIME-Version: 1.0 +Content-Type: application/zip; + name="163.com!ngyn.org!1436054400!1436140799.zip" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="163.com!ngyn.org!1436054400!1436140799.zip" + +UEsDBBQAAAAIAGxn5kZGEGLBdAEAAJQDAAAqAAAAMTYzLmNvbSFuZ3luLm9yZyExNDM2MDU0NDAw +ITE0MzYxNDA3OTkueG1sbVNbbsMgEPzvKXICg5M4USSEehOEzdpBsQEBbpXbF4eHadovzOzs7Owu +JiOA6PnwoB+HA7FgtPVsAc8F93zDAqrtxBRfgLaXUzPohaCCRAIsXM6U96uDz8KJYCQkXSkonybL +0lVNT9VsUkfcdviKO1aS94QoENwAs1xNqWSAepikou35dMHd+YwxQRHJcVDiFW3P+Hq7BT8qi6Hf +aqVa3TYxepbDk5m1n6W7QzGiQ1uKZutBKwIxysVDLtQRFD8S6Mz4wrYzQoYqrYAgk+4uAy4jZvC0 +C4RwvCz+ZyeMddA2O7P6u/Tu9GoHYNLQtu2aIz42l3CcguAeydxBr8rTlqD4keFUEL74vIZxiRzY +ZiCd0U56qVWyXSMVb5vBGF5BIJRxpH7HFCgzqZp8qxn2k1sjUoDycpRgXUm7Axdg2Wj1Qtdm30yN +J6E/6YSv/h7eo1tnvytWpvaV19L10tMD3xTSNNKltLXvHb2X28hxhwSVP/EHUEsBAhQDFAAAAAgA +bGfmRkYQYsF0AQAAlAMAACoAAAAAAAAAAAAAAKSBAAAAADE2My5jb20hbmd5bi5vcmchMTQzNjA1 +NDQwMCExNDM2MTQwNzk5LnhtbFBLBQYAAAAAAQABAFgAAAC8AQAAAAA= +--===============2544031943362770105==-- + diff --git a/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_amazon.com_Report-ID_aggr_report_ngyn.org_20210607-ignored.eml b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_amazon.com_Report-ID_aggr_report_ngyn.org_20210607-ignored.eml new file mode 100644 index 000000000..ed0d30d1c --- /dev/null +++ b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_amazon.com_Report-ID_aggr_report_ngyn.org_20210607-ignored.eml @@ -0,0 +1,279 @@ +Return-Path: postmaster@amazonses.com +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id dV+vEDEApVVCdQAABvoInA + for ; Tue, 03 Jun 2021 14:27:34 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id C28EFE035E + for ; Tue, 03 Jun 2021 14:27:34 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Tue, 03 Jun 2021 14:27:32 +0200 (CEST) +Received: from a7-16.smtp-out.eu-west-1.amazonses.com (a7-16.smtp-out.eu-west-1.amazonses.com [54.240.7.16]) + by mail.koalabs.org (Postfix) with ESMTPS + for ; Mon, 7 Jun 2021 12:28:31 +0200 (CEST) + (envelope-from 01020179e5ffe776-2049ffa3-f9ed-4b84-8bed-26aec834960c-000000@eu-west-1.amazonses.com) +Date: Mon, 7 Jun 2021 10:23:43 +0000 +From: postmaster@amazonses.com +To: dmarc-aggrep@ngyn.org +Message-ID: <01020179e5ffe776-2049ffa3-f9ed-4b84-8bed-26aec834960c-000000@eu-west-1.amazonses.com> +Subject: Dmarc Aggregate Report Domain: {ngyn.org} Submitter: {Amazon + SES} Date: {2021-06-06} Report-ID: {12007123-9847-4f23-a7d7-c6837cce89de} +Content-Type: multipart/mixed; + boundary="----=_Part_8428_1073105148.1623061423987" +MIME-Version: 1.0 + +------=_Part_8428_1073105148.1623061423987 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +This MIME email was sent through Amazon SES. +------=_Part_8428_1073105148.1623061423987 +Content-Type: application/octet-stream; + name=amazonses.com!ngyn.org!1622937600!1623024000.xml.gz +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="amazonses.com!ngyn.org!1622937600!1623024000.xml.gz" + +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 +yanL1kmbf/kfHM/x+WY1AAA= + +------=_Part_8428_1073105148.1623061423987-- diff --git a/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_amazon.com_Report-ID_aggr_report_ngyn.org_20210622.eml b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_amazon.com_Report-ID_aggr_report_ngyn.org_20210622.eml new file mode 100644 index 000000000..2c3802b5e --- /dev/null +++ b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_amazon.com_Report-ID_aggr_report_ngyn.org_20210622.eml @@ -0,0 +1,50 @@ +Return-Path: postmaster@amazonses.com +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id dV+vEDEApVVCdQAABvoInA + for ; Tue, 03 Jun 2021 14:27:34 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id C28EFE035E + for ; Tue, 03 Jun 2021 14:27:34 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Tue, 03 Jun 2021 14:27:32 +0200 (CEST) +Received: from a7-16.smtp-out.eu-west-1.amazonses.com (a7-16.smtp-out.eu-west-1.amazonses.com [54.240.7.16]) + by mail.koalabs.org (Postfix) with ESMTPS + for ; Mon, 7 Jun 2021 12:28:31 +0200 (CEST) + (envelope-from 01020179e5ffe776-2049ffa3-f9ed-4b84-8bed-26aec834960c-000000@eu-west-1.amazonses.com) +Date: Mon, 7 Jun 2021 10:23:43 +0000 +From: postmaster@amazonses.com +To: dmarc-aggrep@ngyn.org +Message-ID: <01020179e5ffe776-2049ffa3-f9ed-4b84-8bed-26aec834960c-000000@eu-west-1.amazonses.com> +Subject: Dmarc Aggregate Report Domain: {ngyn.org} Submitter: {Amazon + SES} Date: {2021-06-06} Report-ID: {12007123-9847-4f23-a7d7-c6837cce89de} +Content-Type: multipart/mixed; + boundary="----=_Part_8428_1073105148.1623061423987" +MIME-Version: 1.0 + +------=_Part_8428_1073105148.1623061423987 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +This MIME email was sent through Amazon SES. +------=_Part_8428_1073105148.1623061423987 +Content-Type: application/octet-stream; + name=amazonses.com!ngyn.org!1622937600!1623024000.xml.gz +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="amazonses.com!ngyn.org!1622937600!1623024000.xml.gz" + +H4sICA343WAAA2FtYXpvbnNlcy5jb20hbmd5bi5vcmchMTYyNDIzMzYwMCExNjI0MzIwMDAwLnht +bAClU7ty2zAQrKWv4LgX3xalGQSOi5RJCndpOBBwlDAmAQ4AOnG+PgeCryhJlYp3u4e9WxxInn50 +bfQGxkqtPjxkcfrwRPekARAXxl/pfkcmkqZxRpI5QdxAr42rO3BMMMcQ2hFtrrViHdDnz8/fvn45 +vHx6IckC+gromGxpr63rmHVgPrKO/dTKgo257kgSeF856UtBszxNqywvDudTWR3KBiNWierAj6ei +4hxOZwEkWev9aRwJasPUdWy7Ixe4SkWzY17mRXFMU5IEZCRBiZEqsJGnfO5Fkt9Ulhar5SgivW4l +f6/74dJKewNBd4giLjQ6UVRd31WMN4BaAZhoJl5lRy1JQjCjtm9G0H8nrKdKK/TXLwB39BFz/HgE +o/sRPGqAazOGPtHfQ4Sx1YPhUMuenss4L+LyMc5OuNoVnyu5HpSjSIVghqd28MbaAe9HzIQ3LS2u +Vjr/RMLUW2RT5z33zKLVMVwZbzwQPppbJn/viRuZjREpQDnZSHygy7EbMAGmbozuNovYopPMH4cJ +G9ytNmCH1q16d7P+a8VrRRCYDE3J4mmrRjZu/195EcOXdOfDF48PI4r2JFn/819WLGN5CQQAAA== + +------=_Part_8428_1073105148.1623061423987-- diff --git a/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_fastmail.com_Report-ID_2015.06.23.5672770.eml b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_fastmail.com_Report-ID_2015.06.23.5672770.eml new file mode 100644 index 000000000..f05aba4c4 --- /dev/null +++ b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_fastmail.com_Report-ID_2015.06.23.5672770.eml @@ -0,0 +1,90 @@ +Return-Path: +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id MN7aCZgMilV1TAAABvoInA + for ; Wed, 24 Jun 2015 03:49:12 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id 0FF2EE035E + for ; Wed, 24 Jun 2015 03:49:12 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Authentication-Results: nelson.ngyn.org (amavisd-new); + dkim=pass (1024-bit key) header.d=fastmail.com header.b=0Nj5GpwR; + dkim=pass (1024-bit key) header.d=messagingengine.com + header.b=W7jB990M +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Wed, 24 Jun 2015 03:49:11 +0200 (CEST) +Received: from bulk2-smtp.messagingengine.com (bulk2-smtp.messagingengine.com [66.111.4.225]) + (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) + (No client certificate requested) + by mail.koalabs.org (Postfix) with ESMTPS + for ; Wed, 24 Jun 2015 03:49:11 +0200 (CEST) +Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) + by mailbulk.nyi.internal (Postfix) with ESMTP id D8DDDAFE; + Tue, 23 Jun 2015 21:49:03 -0400 (EDT) +Received: from frontend1 ([10.202.2.160]) + by compute6.internal (MEProxy); Tue, 23 Jun 2015 21:49:03 -0400 +DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=fastmail.com; h= + content-type:date:from:message-id:mime-version:subject:to + :x-sasl-enc:x-sasl-enc; s=mesmtp; bh=1t7zGOXcrQ9ovOrxVPikV8Cc8h4 + =; b=0Nj5GpwRFukRLOhanfU0ZrV04k7RkzI1k4Ko8nC1WFOPbK43dzMSg6zZ1QM + +Hgb+WdYhPc1D1oInpbxoN5urVBNqOL43xyQY7Ul0fg+5kY8s8Pxndo2pFko2Sqf + YvTXeDN9IZJgxcT3Qy1/N38sE0q+Jt3uD+0gTJhJAOZqVlxY= +DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= + messagingengine.com; h=content-type:date:from:message-id + :mime-version:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=1t + 7zGOXcrQ9ovOrxVPikV8Cc8h4=; b=W7jB990M1394jwz9JB5XcuQlJ1qTn478nI + nG4+68z4YRi88Nl0Mwmq3LMkamLzim/HSrTSsN2dk2yWl+JxQZNis0Nh6nqq7f60 + mkTmv74DLMnAKdqriTpkzN7PnzKTr/A4AumpPF0yFJ3DONjq1fqXFHOAx+T8xk7I + zf1/lQlPs= +X-Sasl-enc: pVVGFLeGBqO3p41F4hif6WoWvBVprb8iTS5Hykw0gj6x 1435110543 +Received: from root1.messagingengine.com (unknown [66.111.4.4]) + by mail.messagingengine.com (Postfix) with ESMTPA id A2C52C00288 + for ; Tue, 23 Jun 2015 21:49:03 -0400 (EDT) +From: dmarc@fastmail.com +To: postmaster@ngyn.org +Date: Tue, 23 Jun 2015 21:49:03 -0400 +Subject: Report Domain: ngyn.org Submitter: fastmail.com Report-ID: + 2015.06.23.5672770 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="1435110543.af000f16737.3591227"; charset="us-ascii" +Message-Id: <20150624014903.A2C52C00288@frontend1.nyi.internal> + + +--1435110543.af000f16737.3591227 +Date: Tue, 23 Jun 2015 21:49:03 -0400 +MIME-Version: 1.0 +Content-Type: text/plain; charset="US-ASCII" +Content-Disposition: inline + + +This is a DMARC aggregate report for ngyn.org + +1 records. +0 passed. +1 failed. + +Submitted by FastMail Pty Ltd +Generated with Mail::DMARC 1.20150611 + + +--1435110543.af000f16737.3591227 +Date: Tue, 23 Jun 2015 21:49:03 -0400 +MIME-Version: 1.0 +Content-Type: application/gzip; name="fastmail.com!ngyn.org!1435017600!1435103999!5672770.xml.gz" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; + filename="fastmail.com!ngyn.org!1435017600!1435103999!5672770.xml.gz" + +H4sIAI8MilUAA21TTXPbIBA9J7/Ck3uFlNTWuENJTjm1M/0HGgwrmYn4GEBu/O+7gCzZbk5i31t2 +31tW9PVTj5sT+KCs+fnUVPXTK3ukPYA8cPHBHh+oB2d97DRELnnkCC2Ykmy7a5/btqZkhVKC9UNn +uAb2zkP8zdW4+RPPm19RUrJQKQ80ckxq7sVbj6kprITVlBQm53xGzzthTeQCG5jesmOMLvwg5PoK +wTv/Z6YCKBs6z82Qez7QAwzKsOb7y7Zu2l2N4guSSTAyU039st/vsaYpjshNlcXv1Vios6MS585N +h1GFI5R70qJAw8xwNhVaxzoFSByXH0qzQEk5ZCi4PiPpmwDHjDVAictRuIShxE5EtkUSP0nUFwrw +rYT1RYu3f4vJYCcvoFOOtU3V7Ktmu6uatsWyC5HzhJ1MZM+UlEPG5h5w4uOEI8mVk08VnA0q4h7N +Eq+ROSe57PG9kJwNZ0/9DM6eVyM3TXDmRT9VEkxUvcK1vTzaCUbroIuWwTdhRzucK8HT663EbWbv +rWajOnjAUcV5527InH8ELsEXYH3DazQru1NE+RSPnYcwjXGWePG2bMRd73UtUrJAFUyn+jiVHBSi +lGSOh5BWMAdlYpd9IXetU1pZAErW3/of7jTwqvgDAAA= + +--1435110543.af000f16737.3591227-- diff --git a/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_google.com_Report-ID_1282989064754998675.eml b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_google.com_Report-ID_1282989064754998675.eml new file mode 100644 index 000000000..d44a7a6a1 --- /dev/null +++ b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_google.com_Report-ID_1282989064754998675.eml @@ -0,0 +1,51 @@ +Return-Path: +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id dV+vEDEApVVCdQAABvoInA + for ; Tue, 03 Jun 2021 14:27:34 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id C28EFE035E + for ; Tue, 03 Jun 2021 14:27:34 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Tue, 03 Jun 2021 14:27:32 +0200 (CEST) +Received: from mail-vn0-f74.google.com (mail-vn0-f74.google.com [209.85.216.74]) + (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) + (No client certificate requested) + by mail.koalabs.org (Postfix) with ESMTPS + for ; Tue, 03 Jun 2021 14:27:29 +0200 (CEST) +Received: by vnbf7 with SMTP id f7so392460vnb.1 + for ; Tue, 03 Jun 2021 05:27:28 -0700 (PDT) +MIME-Version: 1.0 +X-Received: by 10.52.251.34 with SMTP id zh2mr50557742vdc.8.1436869893195; + Tue, 03 Jun 2021 03:31:33 -0700 (PDT) +Message-ID: <14872432101891615947@google.com> +Date: Tue, 03 Jun 2021 10:31:33 +0000 +Subject: Report domain: ngyn.org Submitter: google.com Report-ID: 1282989064754998675 +From: noreply-dmarc-support@google.com +To: dmarc-aggrep@ngyn.org +Content-Type: application/zip; + name="google.com!ngyn.org!1622592000!1622678399.zip" +Content-Disposition: attachment; + filename="google.com!ngyn.org!1622592000!1622678399.zip" +Content-Transfer-Encoding: base64 + +UEsDBBQDAAAIAMhzw1IU0YnahAIAAAQMAAAtAAAAZ29vZ2xlLmNvbSFuZ3luLm9yZyExNjIyNTky +MDAwITE2MjI2NzgzOTkueG1s7ZbBctsgFEX3+QqP9wYJ24rUIaSrfkG71hDpWWYiAQM4if++WAJJ +ressmridTrOSuPCu3rs+w5jev3Tt4gmMFUreLVOULBcgK1UL2dwtv339ssqXi3t2Q3cA9QOvHtnN +YkENaGVc2YHjNXf8pHlVmaaUvAPWKNW0gCrVURzFcAY6LlomlXdoj6u646Za2YM+2X2el/XnYs2L +M7yslHS8cqWQO8X2zmn7CeNQiqZSzDGX9hkMJpss2+YJxef1wTiMIWqWkpwUeZFkm9vtpijy7HZL +8bgdjvtRoTRcNmEYLz1AIyRLM0K2BUkS/7FBifsg6343u83XRUExyGiGf3Sj+BeZUq1aUR1LfXho +hd3D2Ijy6Ugmm6NEPl+KByHs8vpRdMxS3L9E0epdr/lnkDSTSgLFOqxtFGxUdOWYz8E/hhbP2hlY +qJSJnRn1PM5u1cFUUArNSFKgfIsISVDmQ5g24tFKHaRjhOL+JcpxfHji7YG7OP4QgbBaWeE8taHr +uTKd6yPYeZYontII4+7CxhhJgILbYBEld9TAWlXxthxaoriX5mc8eh343j3Qd5pbH3VUJmscveP6 +fMBBH2OkovYWYifA2LFsD7wGU+6M6mYMzNRoc1ZM+cHtSwP20LrJbwpmThe88E63sPJjIJKk2yQj +a9Rwra3tnEZejtzNagdrNgQQFrPIoYXKKcOiH8VRmjKJ3cQf6WJnr7YQoAiL0XyiH/8cBcU9yb8D +9Sa9DPXmWlD3Gb8K9b/BWXR+C00kTdbr9G00SXB/kaa0IChBBKXJKyit/zhLp40Pli6w9F7ff2eQ +crRNPUcJWl9GKb0WSafL5/+4lU4DXY+kcCtdDSaKpz/03wFQSwECPwMUAwAACADIc8NSFNGJ2oQC +AAAEDAAALQAkAAAAAAAAACCAtIEAAAAAZ29vZ2xlLmNvbSFuZ3luLm9yZyExNjIyNTkyMDAwITE2 +MjI2NzgzOTkueG1sCgAgAAAAAAABABgAgCVxNHRY1wGAJXE0dFjXAQBf60Z0WNcBUEsFBgAAAAAB +AAEAfwAAAM8CAAAAAA== + diff --git a/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_google.com_Report-ID_14872432101891615947.eml b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_google.com_Report-ID_14872432101891615947.eml new file mode 100644 index 000000000..0cf12c8bc --- /dev/null +++ b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_google.com_Report-ID_14872432101891615947.eml @@ -0,0 +1,60 @@ +Return-Path: +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id dV+vEDEApVVCdQAABvoInA + for ; Tue, 14 Jul 2015 14:27:34 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id C28EFE035E + for ; Tue, 14 Jul 2015 14:27:34 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Authentication-Results: nelson.ngyn.org (amavisd-new); + dkim=pass (2048-bit key) header.d=google.com +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Tue, 14 Jul 2015 14:27:32 +0200 (CEST) +Received: from mail-vn0-f74.google.com (mail-vn0-f74.google.com [209.85.216.74]) + (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) + (No client certificate requested) + by mail.koalabs.org (Postfix) with ESMTPS + for ; Tue, 14 Jul 2015 14:27:29 +0200 (CEST) +Received: by vnbf7 with SMTP id f7so392460vnb.1 + for ; Tue, 14 Jul 2015 05:27:28 -0700 (PDT) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=google.com; s=20120113; + h=mime-version:message-id:date:subject:from:to:content-type + :content-disposition:content-transfer-encoding; + bh=28gVVTJdqkSuhoNLWpBiJ0mYAF1CETmzecT8+PvUARY=; + b=jahe/NPogONhyXBkFG2iEkgVoYJmOoXuXCsfTUiY4WtDacSfBxs4pHCYd9kv1iu7Rm + 8TUOyMG0ftm+Bu3Ldctb75lcrEb6yf/X/LIhXUyPlWSOwowqU429D8+89Lz2234K+5Ps + 9u4E4vSI4HvVKjqxs/eIkSSpmqZDZydFtqOiKg3Nj4fr9v2FzEHuiwOvqO6dU8lct3zs + cc9/NNNp9q2z+nJ02hujEKDDrqEW+U3Xm8uk+YE4eUDvvqQQyC5SFTRWcGiQ1visZmfm + OlHmv25II7saHmZ4VrGXFUZHE+8d0lXN+QOndSZ6aorsarKzSRlXvD2ISxKKo3Qw8UqJ + CCnA== +MIME-Version: 1.0 +X-Received: by 10.52.251.34 with SMTP id zh2mr50557742vdc.8.1436869893195; + Tue, 14 Jul 2015 03:31:33 -0700 (PDT) +Message-ID: <14872432101891615947@google.com> +Date: Tue, 14 Jul 2015 10:31:33 +0000 +Subject: Report domain: ngyn.org Submitter: google.com Report-ID: 14872432101891615947 +From: noreply-dmarc-support@google.com +To: dmarc-aggrep@ngyn.org +Content-Type: application/zip; + name="google.com!ngyn.org!1436745600!1436831999.zip" +Content-Disposition: attachment; + filename="google.com!ngyn.org!1436745600!1436831999.zip" +Content-Transfer-Encoding: base64 + +UEsDBAoAAAAIANhS7kbvUmeO+AEAANQEAAAtAAAAZ29vZ2xlLmNvbSFuZ3luLm9yZyExNDM2NzQ1 +NjAwITE0MzY4MzE5OTkueG1spVTLcqMwELznK1y+Gxkb27ClKDnlC3bPlCwGrApIKkkk8d/vYImH +na1c9oTo6WlNN2PTl6+uXX2AdVKr53WabNcrUEJXUjXP6z+/3zb5evXCnmgNUJ25eGdPqxW1YLT1 +ZQeeV9zzAUNU26ZUvAPWaN20kAjdUTKBgQMdly1TGhXa66bquBUb15tB7nXZFnix58tbXgqtPBe+ +lKrW7OK9cb8Iia3J3Eo44cp9giW77Hg85FvU+t4fhKMNWbE0y0+7bL9Lt2lepMf0UGQnSuZ64KNX +KC1XTXSD0BkaqbB9fzxlh+MWbwvIWAdV3ar5Pi2KAmdRoxi5V5tuW4ZKjW6luJamP7fSXWAaRGM8 +iqnmqhIMGLUCEKq8epcdc5SEQwSdqW/Y8AyQwe+ggBIT390IuBExwrMDEvBxG/Ff42CKQttxMqs/ +J+9O91ZAKQ0rsmS3T7JDkuYpyk/4yBS6V55hKRxGOF4HH7ztMaxqLAwJSGe0kx63Ng69RBa8IQHD +HTqfw4hu61iYEolLwd1SAiF/NcAc70wLVal7T8kNWVJw8zrA0QcL4TQrknvJKcYHX8gbw6OyQglZ +S/xdTm0X4BXYsra6W3z5JRplvjVT3vtLacH1rZ/1HvL4cadiMoNADC2+TJ6WavQ+0f9UnheWPPoY +yGH5KJn/oP4CUEsBAgoACgAAAAgA2FLuRu9SZ474AQAA1AQAAC0AAAAAAAAAAAAAAAAAAAAAAGdv +b2dsZS5jb20hbmd5bi5vcmchMTQzNjc0NTYwMCExNDM2ODMxOTk5LnhtbFBLBQYAAAAAAQABAFsA +AABDAgAAAAA= diff --git a/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_hotmail.com_Report-ID_66f317a021ff4cdabad2b350d3303615@hotmail.com.eml b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_hotmail.com_Report-ID_66f317a021ff4cdabad2b350d3303615@hotmail.com.eml new file mode 100644 index 000000000..7fda38ca6 --- /dev/null +++ b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_hotmail.com_Report-ID_66f317a021ff4cdabad2b350d3303615@hotmail.com.eml @@ -0,0 +1,59 @@ +Return-Path: +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id mL/aJNE4kFUCCAAABvoInA + for ; Sun, 28 Jun 2015 20:11:29 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id 7F4A2E035D + for ; Sun, 28 Jun 2015 20:11:29 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Sun, 28 Jun 2015 20:11:28 +0200 (CEST) +Received: from mail2.koalabs.org (alena.koalabs.org [66.175.223.133]) + by mail.koalabs.org (Postfix) with ESMTP + for ; Sun, 28 Jun 2015 20:11:28 +0200 (CEST) +Received: from BAY004-OMC4S15.hotmail.com (bay004-omc4s15.hotmail.com [65.54.190.217]) + by mail2.koalabs.org (Postfix) with ESMTP id 63F8D46F66 + for ; Sun, 28 Jun 2015 14:11:26 -0400 (EDT) +Received: from BAY0-DTS-DRS01 ([65.54.190.200]) by BAY004-OMC4S15.hotmail.com with Microsoft SMTPSVC(7.5.7601.23008); + Sun, 28 Jun 2015 11:11:18 -0700 +MIME-Version: 1.0 +From: dmarcrep@microsoft.com +To: postmaster@ngyn.org +Date: 28 Jun 2015 11:11:18 -0700 +Subject: =?utf-8?B?UmVwb3J0IERvbWFpbjogbmd5bi5vcmcgU3VibWl0dGVyOiBob3RtYWlsLmNvbSBSZXBvcnQtSUQ6IDw2NmYzMTdhMDIxZmY0Y2RhYmFkMmIzNTBkMzMwMzYxNUBob3RtYWlsLmNvbT4=?= +Content-Type: multipart/mixed; + boundary=--boundary_32281_b52cf564-2a50-4f96-aeb0-ef5f83b05463 +Message-ID: +X-OriginalArrivalTime: 28 Jun 2015 18:11:18.0588 (UTC) FILETIME=[D4889FC0:01D0B1CD] + + +----boundary_32281_b52cf564-2a50-4f96-aeb0-ef5f83b05463 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: quoted-printable + + +----boundary_32281_b52cf564-2a50-4f96-aeb0-ef5f83b05463 +Content-Type: application/zip; name=hotmail.com!ngyn.org!1435428000!1435514400.zip +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename=hotmail.com!ngyn.org!1435428000!1435514400.zip + +UEsDBBQAAgAIAGlZ3EbQIUrLnQEAADsDAAAuAF0AaG90bWFpbC5jb20hbmd5bi5vcmchMTQz +NTQyODAwMCExNDM1NTE0NDAwLnhtbFNESACMAAAAAAgAiyIcyGNkYGkRYWBgUGCAAB0gZmQE +M1lF0NhMDAkMLCCegATDf0Z5BkYmiBxIryITdnEFsLgIRBxqlhADphjIfABVVA0AB8Y4kFXG +OJBVxjiQVYWT226cMBCGX2W198WwwHYrTZxIue4zIGOPWSv4INvk8Gy96CP1FWrjsCGKqt7g +8W/+mW/G8OfXb7h/1fPhGX1Q1twdm6o+HtBwK5SZ7o5LlN8ux3sKElGMjD9R8Oisj4PGyASL +jIL102CYRvpTcW+DlfHwaL2rgNxOADVTMxWaeZ78D3p7s+JWAymnW2Yl6Pks2+Y7q0+NlB0X +bGTiNLZ9Ldq2bs9N/3C1MXuK/cMHiQgHz8yUao44KUObru2706WuayBFATRilfum67Kc90D2 +VvKlSWdnxd8Gt4yzClfMpWwiMNRMb6ZKjaYERQAmnpSmAUgJgAUn121ewVFjDQJxFMIWpwAc +j7RPclrS80s1j9z6vNqXZLSL5zgoR3901amtur5qLk3Kc9OB28VEmrQSbPz4zOYlNZr5VXA2 +qJiu/R1jr8DK7lhI4KWNTC/TzDOu/GDcZSQrnBJoopIqfVEUrsgE+kF6q3eT2qtAPhnYEq+D +x7DMMZSa/x50eY1G1A69tz5f26q8Ixbu/9lLjzdnMZHPHGQbP7n9B38BUEsBAhcLFAACAAgA +aVncRtAhSsudAQAAOwMAAC4AEQAAAAAAAQAgALaBAAAAAGhvdG1haWwuY29tIW5neW4ub3Jn +ITE0MzU0MjgwMDAhMTQzNTUxNDQwMC54bWxTRAQAjAAAAFVUBQAHxjiQVVBLBQYAAAAAAQAB +AG0AAABGAgAAAAA= +----boundary_32281_b52cf564-2a50-4f96-aeb0-ef5f83b05463-- + + diff --git a/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_yahoo.com_Report-ID_1435111091.916236.eml b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_yahoo.com_Report-ID_1435111091.916236.eml new file mode 100644 index 000000000..2104c695f --- /dev/null +++ b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_yahoo.com_Report-ID_1435111091.916236.eml @@ -0,0 +1,67 @@ +Return-Path: +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id 53eANBaoilWVQwAABvoInA + for ; Wed, 24 Jun 2015 14:52:38 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id BD629E0360 + for ; Wed, 24 Jun 2015 14:52:38 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Authentication-Results: nelson.ngyn.org (amavisd-new); + dkim=pass (2048-bit key) header.d=yahoo.com +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Wed, 24 Jun 2015 14:52:37 +0200 (CEST) +Received: from n1-vm5.bullet.mail.ne1.yahoo.com (n1-vm5.bullet.mail.ne1.yahoo.com [98.138.229.197]) + (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) + (No client certificate requested) + by mail.koalabs.org (Postfix) with ESMTPS + for ; Wed, 24 Jun 2015 14:52:37 +0200 (CEST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1435150193; bh=s8fRltU+y/nfIjdSVEbtwFXKmxeW2BeOfADZ7qSc3i4=; h=Date:From:To:Subject:From:Subject; b=Masqn66+cIcv0cwUblZZjLPFOA+l0BfXvanLooG2xAWCwGItLHUToHXwfhsbw5QsyhpptvQSIFWFUBoZqS8T27ZcLVzkPRFl38h/Yo03pBDwL6njc1yQVN2RZxz3i7VO5MXEF2XFg9z2B19dfi+GRISCGLTPA0s+sAt32I+A8FZDSzqDxb3AKuU66QabM9BJiMn/XUGAr7At96sEFyWPDBWe2Q3+MzEN5pO54uWVhjd9qaIRB6Oc/FAFM+SFcVU9UrJFRN43rP/50xV70rrV00//lWrJH+4b3RdIHjy54Vy0qLwOJ8PRdKaDbJ/NJuxbKNiYJZvE+t+QvlEpbvd7/Q== +Received: from [98.138.226.173] by n1.bullet.mail.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000 +Received: from [98.138.237.130] by t2.bullet.mail.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000 +Received: from [127.0.0.1] by launcher100.asd.mail.corp.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000 +X-Yahoo-Newman-Property: asdreport +X-Yahoo-Newman-Id: 1435111091.916236 +MIME-Version: 1.0 +Content-Transfer-Encoding: binary +Content-Type: multipart/mixed; boundary="_----------=_14351501937631101" +X-Mailer: MIME::Lite 3.027 (F2.73; A2.04; B3.13; Q3.13) +Date: Wed, 24 Jun 2015 05:49:53 -0700 +From: noreply@dmarc.yahoo.com +To: postmaster@ngyn.org +Subject: Report Domain: ngyn.org Submitter: yahoo.com Report-ID: <1435111091.916236> +Message-Id: <1435150193.404586@dmarc.yahoo.com> + +This is a multi-part message in MIME format. + +--_----------=_14351501937631101 +Content-Disposition: inline +Content-Length: 44 +Content-Transfer-Encoding: binary +Content-Type: text/plain + +This is an aggregate report from Yahoo! Inc. +--_----------=_14351501937631101 +Content-Disposition: attachment; filename="yahoo.com!ngyn.org!1435017600!1435103999.zip" +Content-Transfer-Encoding: base64 +Content-Type: application/x-zip-compressed; name="yahoo.com!ngyn.org!1435017600!1435103999.zip" + +UEsDBBQAAAAIADsu2EY7OXCQrwEAACUEAAAsABwAeWFob28uY29tIW5neW4u +b3JnITE0MzUwMTc2MDAhMTQzNTEwMzk5OS54bWxVVAkAA3GnilVxp4pVdXgL +AAEEAAAAAAQAAAAAlVRBcuMgEDzvvkKbB4CIY7tURche84Q9qTAa2VQkoAAl +8e8zMhjJTi57EvQ0M90zU+Ivn+NQvYMP2prnB0bqhxfx6zfvAbqDVG94riru +wVkf2xGi7GSUFxBh64+tkSOIf/Jk7Z/q1SjCaUEzC0apB+FsiKMMEfzfbpRe +kfP8hig7cpoYmZ5r6U6wp82WMVY3jDRs97jZcboEMxvlQOulOV7LIXaAozaX +1zXb7+qa04QUApicvN40TVOhAFMS0ruMpeaNee7soNW5ddNh0OEEix6LXoww +x7Mh2AhMl4Aclt2bHkXgNB2uaHD9BZy/GXPCWAOcugKoKLZ4x0/S9aMEbJ+y +vsjx9mOxHezkFbTaiT0jrCFsuyNsv+d0CRSuspOJouE0HQqei8K7HCZsVFci +s3cdcMo64iZl8WtkTZy99zhzZCxtSBqxAymy9GJl9r4uTqc45LoDE3WvcZmX +lyeQHfi293ZcTWWNXjN9f87lFE+thzANcZXyXnMe8aAPHnAUMS31zeDzZs+J +hIEpejnMi3W5LyZvEvN1A/6/ipMh/FBitWH0m7uZn7eH09Uf4AtQSwECHgMU +AAAACAA7LthGOzlwkK8BAAAlBAAALAAYAAAAAAABAAAApIEAAAAAeWFob28u +Y29tIW5neW4ub3JnITE0MzUwMTc2MDAhMTQzNTEwMzk5OS54bWxVVAUAA3Gn +ilV1eAsAAQQAAAAABAAAAABQSwUGAAAAAAEAAQByAAAAFQIAAAAA + +--_----------=_14351501937631101-- diff --git a/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_yahoo.com_Report-ID_1436111091.916236-ignored.eml b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_yahoo.com_Report-ID_1436111091.916236-ignored.eml new file mode 100644 index 000000000..02d787aa7 --- /dev/null +++ b/modoboa/dmarc/tests/reports/Report_Domain_ngyn.org_Submitter_yahoo.com_Report-ID_1436111091.916236-ignored.eml @@ -0,0 +1,64 @@ +Return-Path: +Delivered-To: +Received: from mail.koalabs.org + by nelson.ngyn.org (Dovecot) with LMTP id 53eANBaoilWVQwAABvoInA + for ; Wed, 24 Jun 2015 14:52:38 +0200 +Received: from localhost (localhost.localdomain [127.0.0.1]) + by mail.koalabs.org (Postfix) with ESMTP id BD629E0360 + for ; Wed, 24 Jun 2015 14:52:38 +0200 (CEST) +X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org +Authentication-Results: nelson.ngyn.org (amavisd-new); + dkim=pass (2048-bit key) header.d=yahoo.com +Received: from mail.koalabs.org ([127.0.0.1]) + by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP for ; + Wed, 24 Jun 2015 14:52:37 +0200 (CEST) +Received: from n1-vm5.bullet.mail.ne1.yahoo.com (n1-vm5.bullet.mail.ne1.yahoo.com [98.138.229.197]) + (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) + (No client certificate requested) + by mail.koalabs.org (Postfix) with ESMTPS + for ; Wed, 24 Jun 2015 14:52:37 +0200 (CEST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1435150193; bh=s8fRltU+y/nfIjdSVEbtwFXKmxeW2BeOfADZ7qSc3i4=; h=Date:From:To:Subject:From:Subject; b=Masqn66+cIcv0cwUblZZjLPFOA+l0BfXvanLooG2xAWCwGItLHUToHXwfhsbw5QsyhpptvQSIFWFUBoZqS8T27ZcLVzkPRFl38h/Yo03pBDwL6njc1yQVN2RZxz3i7VO5MXEF2XFg9z2B19dfi+GRISCGLTPA0s+sAt32I+A8FZDSzqDxb3AKuU66QabM9BJiMn/XUGAr7At96sEFyWPDBWe2Q3+MzEN5pO54uWVhjd9qaIRB6Oc/FAFM+SFcVU9UrJFRN43rP/50xV70rrV00//lWrJH+4b3RdIHjy54Vy0qLwOJ8PRdKaDbJ/NJuxbKNiYJZvE+t+QvlEpbvd7/Q== +Received: from [98.138.226.173] by n1.bullet.mail.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000 +Received: from [98.138.237.130] by t2.bullet.mail.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000 +Received: from [127.0.0.1] by launcher100.asd.mail.corp.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000 +X-Yahoo-Newman-Property: asdreport +X-Yahoo-Newman-Id: 1435111091.916236 +MIME-Version: 1.0 +Content-Transfer-Encoding: binary +Content-Type: multipart/mixed; boundary="_----------=_14351501937631101" +X-Mailer: MIME::Lite 3.027 (F2.73; A2.04; B3.13; Q3.13) +Date: Wed, 24 Jun 2015 05:49:53 -0700 +From: noreply@dmarc.yahoo.com +To: postmaster@ngyn.org +Subject: Report Domain: ngyn.org Submitter: yahoo.com Report-ID: <1436111091.916236> +Message-Id: <1435150193.404586@dmarc.yahoo.com> + +This is a multi-part message in MIME format. + +--_----------=_14351501937631101 +Content-Disposition: inline +Content-Length: 44 +Content-Transfer-Encoding: binary +Content-Type: text/plain + +This is an aggregate report from Yahoo! Inc. +--_----------=_14351501937631101 +Content-Disposition: attachment; filename="yahoo.com!ngyn.org!1436017600!1436103999.zip" +Content-Transfer-Encoding: base64 +Content-Type: application/x-zip-compressed; name="yahoo.com!ngyn.org!1436017600!1436103999.zip" + +UEsDBBQDAAAIAHhdTFUTlAO/pwEAABkEAAAsAAAAeWFob28uY29tIW5neW4ub3JnITE0MzYwMTc2 +MDAhMTQzNjEwMzk5OS54bWylU0uu2zAMXLenSN8BLKtpExhg9brtEboyFJt21Gd9QMmvze2rSIZk +pNl15fFwOEMSNrz+0cvhHckra7698KZ9eRUfPsKEOF7k8Bbx4QCEzlLoNQY5yiATGWlLc2+kRvFT +Xq39dPhhhgZYYTcVaqkW4awPWvqA9H3Ukobmdu9pBquBJUWS1yw1Cv7leOKctx1vOn76fDwBq8VN +HcfBnqSZc1ziLjgrk7pbfj61LbDEVAGazbw9dl0X803xYw+GwJ7tDs4uarj1br0syl+xtMvxTWnh +gWWwkd5NgoClZ6acIPyFQwDmNsZXKsJNNQTB7/PfQRrmaS4QDpbKDGR/11W9XWnAXjlx5g3vGv71 +1PDzGVgpVO1gVxNEvEcCld9C8V0uqwxl2Xx/5Z31KihrhLEGge2YvTDdY5JqAZbgrhTPslUiqrHs +SW4u1A1BjWiCmhSSr51XlCNSP5HVwsw301iage3Y4vRvO8g1XHtCvy5hZ/k482i1VEYs6kK4KB/y +h5zZvS4bCYNrIBk3zO9FUY5RT/EfKU56/yQim2b8uF2kytcDbPfX/wVQSwECPwMUAwAACAB4XUxV +E5QDv6cBAAAZBAAALAAkAAAAAAAAACCApIEAAAAAeWFob28uY29tIW5neW4ub3JnITE0MzYwMTc2 +MDAhMTQzNjEwMzk5OS54bWwKACAAAAAAAAEAGACASwUgH97YAYBLBSAf3tgBAFhOMR/e2AFQSwUG +AAAAAAEAAQB+AAAA8QEAAAAA + +--_----------=_14351501937631101-- diff --git a/modoboa/dmarc/tests/test_management_command.py b/modoboa/dmarc/tests/test_management_command.py new file mode 100644 index 000000000..7a4b9fc33 --- /dev/null +++ b/modoboa/dmarc/tests/test_management_command.py @@ -0,0 +1,33 @@ +"""Management command tests.""" + +from modoboa.admin import factories as admin_factories +from modoboa.lib.tests import ModoTestCase + +from . import mixins +from .. import models + + +class ManagementCommandTestCase(mixins.CallCommandMixin, ModoTestCase): + """Test management command.""" + + @classmethod + def setUpTestData(cls): + super(ManagementCommandTestCase, cls).setUpTestData() + cls.domain = admin_factories.DomainFactory(name="ngyn.org") + + def test_import_from_archive(self): + """Import report from archive.""" + self.import_reports() + self.import_fail_reports() + self.assertTrue(self.domain.record_set.exists()) + self.assertTrue( + models.Reporter.objects.filter( + org_name="FastMail Pty Ltd").exists()) + # Ensure that reports from Yahoo are processed successfully. + # These do not contain a sp attribute in policy_published + self.assertTrue( + models.Report.objects.filter( + report_id="1435111091.916236", + reporter=models.Reporter.objects.get(org_name="Yahoo! Inc."), + ).exists() + ) diff --git a/modoboa/dmarc/tests/test_views.py b/modoboa/dmarc/tests/test_views.py new file mode 100644 index 000000000..97d3bcf7e --- /dev/null +++ b/modoboa/dmarc/tests/test_views.py @@ -0,0 +1,77 @@ +"""Views tests.""" + +from django.urls import reverse + +from modoboa.admin import factories as admin_factories +from modoboa.core import models as core_models +from modoboa.lib.tests import ModoTestCase + +from . import mixins + + +class DMARCViewsTestCase(mixins.CallCommandMixin, ModoTestCase): + """Views test cases.""" + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super(DMARCViewsTestCase, cls).setUpTestData() + cls.domain = admin_factories.DomainFactory(name="ngyn.org") + + def test_domainlist_view(self): + """Test domain list view.""" + self.import_reports() + user = core_models.User.objects.get(username="admin") + self.client.force_login(user) + url = reverse("admin:_domain_list") + response = self.ajax_get(url) + url = reverse("dmarc:domain_report", args=[self.domain.pk]) + self.assertIn(url, response["rows"]) + + def test_domainreport_view(self): + """Test domain report view.""" + self.import_reports() + user = core_models.User.objects.get(username="admin") + self.client.force_login(user) + url = reverse("dmarc:domain_report", args=[self.domain.pk]) + response = self.client.get("{}?period=2015-26".format(url)) + self.assertContains(response, "'Failed', 100.0") + + def test_domainreport_view_week0(self): + """Test domain report view for week 0.""" + self.import_reports() + user = core_models.User.objects.get(username="admin") + self.client.force_login(user) + url = reverse("dmarc:domain_report", args=[self.domain.pk]) + response = self.client.get("{}?period=2019-0".format(url)) + self.assertContains(response, "Dec. 31, 2018") + + def test_domainreport_view_week1(self): + """Test domain report view for week 1.""" + self.import_reports() + user = core_models.User.objects.get(username="admin") + self.client.force_login(user) + url = reverse("dmarc:domain_report", args=[self.domain.pk]) + response = self.client.get("{}?period=2019-1".format(url)) + self.assertContains(response, "Jan. 7, 2019") + + def test_domainreport_view_week52(self): + """Test domain report view for week 52.""" + self.import_reports() + user = core_models.User.objects.get(username="admin") + self.client.force_login(user) + url = reverse("dmarc:domain_report", args=[self.domain.pk]) + response = self.client.get("{}?period=2018-52".format(url)) + self.assertContains(response, "Dec. 30, 2018") + + def test_domainreport_view_arc(self): + """Test domain report view for displaying ARC results""" + self.import_reports() + user = core_models.User.objects.get(username="admin") + self.client.force_login(user) + url = reverse("dmarc:domain_report", args=[self.domain.pk]) + response = self.client.get("{}?period=2021-22".format(url)) + self.assertContains(response, "'Fully aligned', 86.0") + self.assertContains(response, "'Partially aligned', 8.0") + self.assertContains(response, "'Forwarded', 4.0") + self.assertContains(response, "'Failed', 2.0") diff --git a/modoboa/dmarc/urls.py b/modoboa/dmarc/urls.py new file mode 100644 index 000000000..be59ad665 --- /dev/null +++ b/modoboa/dmarc/urls.py @@ -0,0 +1,12 @@ +"""DMARC urls.""" + +from django.urls import path + +from . import views + +app_name = "dmarc" + +urlpatterns = [ + path("domains//", views.DomainReportView.as_view(), + name="domain_report"), +] diff --git a/modoboa/dmarc/views.py b/modoboa/dmarc/views.py new file mode 100644 index 000000000..68c9fdbeb --- /dev/null +++ b/modoboa/dmarc/views.py @@ -0,0 +1,151 @@ +"""DMARC views.""" + +import concurrent.futures +import datetime +import tldextract + +from dns import resolver, reversename + +from django.db.models import Q +from django.utils import timezone +from django.views import generic + +from django.contrib.auth import mixins as auth_mixins +from django.utils.translation import ugettext_lazy as _ + +from modoboa.admin import models as admin_models +from modoboa.parameters import tools as param_tools + +from . import models + + +def insert_record(target, record, name): + """Add a record.""" + + if name not in target: + target[name] = {} + + if record.source_ip not in target[name]: + target[name][record.source_ip] = { + "total": 0, + "spf": {"pass": 0, "fail": 0}, + "dkim": {"pass": 0, "fail": 0} + } + target[name][record.source_ip]["total"] += record.count + for typ in ["spf", "dkim"]: + result = getattr(record, "{}_result".format(typ)) + target[name][record.source_ip][typ][result] += record.count + + +def week_range(year, weeknumber): + """Return start and end dates of a given week.""" + tz = timezone.get_current_timezone() + fmt = "%Y-%W-%w" + start_week = datetime.datetime.strptime( + "{}-{}-{}".format(year, weeknumber, 1), fmt) + end_week = datetime.datetime.strptime( + "{}-{}-{}".format(year, weeknumber, 0), fmt) + return tz.localize(start_week), tz.localize(end_week) + + +class DomainReportView( + auth_mixins.PermissionRequiredMixin, + generic.TemplateView): + """ListView for Report.""" + + permission_required = "dmarc.view_report" + template_name = "dmarc/domain_report.html" + + def get_queryset(self): + """Filter reports.""" + self.period = self.request.GET.get("period", "") + if not self.period: + year, week, day = timezone.now().isocalendar() + week -= 1 + self.period = "{}-{}".format(year, week) + else: + year, week = self.period.split("-") + + self.daterange = week_range(year, week) + self.domain = admin_models.Domain.objects.get(pk=self.kwargs["pk"]) + qargs = ( + (Q(report__start_date__gte=self.daterange[0], + report__start_date__lte=self.daterange[1]) | + Q(report__end_date__gte=self.daterange[0], + report__end_date__lte=self.daterange[1])) & + Q(header_from=self.domain) + ) + return models.Record.objects.select_related().filter(qargs) + + def get_context_data(self, *args, **kwargs): + """Extra context data.""" + context = super(DomainReportView, self).get_context_data( + *args, **kwargs) + qset = self.get_queryset() + stats = { + "total": 0, + "aligned": 0, + "trusted": 0, + "forwarded": 0, + "failed": 0 + } + aligned = {} + trusted = {} + forwarded = {} + threats = {} + all_records = qset.all() + dns_names = {} + if param_tools.get_global_parameter("enable_rlookups"): + dns_resolver = resolver.Resolver() + dns_resolver.timeout = 1.0 + dns_resolver.lifetime = 1.0 + + def get_domain_name_from_ip(ip): + addr = reversename.from_address(ip) + try: + resp = dns_resolver.query(addr, "PTR") + ext = tldextract.extract(str(resp[0].target)) + if not ext.suffix: # invalid PTR record + raise resolver.NXDOMAIN() + return (ip, '.'.join((ext.domain, ext.suffix)).lower()) + except (resolver.NXDOMAIN, resolver.YXDOMAIN, + resolver.NoAnswer, resolver.NoNameservers, + resolver.Timeout): + return (None, None) + + ips = (r.source_ip for r in all_records) + with concurrent.futures.ThreadPoolExecutor(max_workers=16) as pool: + dns_names = {i: n for (i, n) in + list(pool.map(get_domain_name_from_ip, ips))} + + for record in all_records: + stats["total"] += record.count + name = dns_names.get(record.source_ip, _("Not resolved")) + if record.dkim_result == "pass" and record.spf_result == "pass": + stats["aligned"] += record.count + insert_record(aligned, record, name) + elif record.dkim_result == "pass" or record.spf_result == "pass": + stats["trusted"] += record.count + insert_record(trusted, record, name) + elif record.reason_type == "local_policy" and record.reason_comment.startswith("arc=pass"): + stats["forwarded"] += record.count + insert_record(forwarded, record, name) + else: + insert_record(threats, record, name) + stats["failed"] += record.count + + pie_data = {} + if stats["total"]: + pie_data.update({ + "faligned": stats["aligned"] / float(stats["total"]) * 100, + "paligned": stats["trusted"] / float(stats["total"]) * 100, + "forwarded": stats["forwarded"] / float(stats["total"]) * 100, + "failed": stats["failed"] / float(stats["total"]) * 100 + }) + + context.update({ + "stats": stats, "aligned": aligned, "trusted": trusted, "forwarded": forwarded, "threats": threats, + "period": self.period, "daterange": self.daterange, + "domain": self.domain, "pie_data": pie_data + }) + return context diff --git a/modoboa/urls.py b/modoboa/urls.py index 159d2583e..058f87d81 100644 --- a/modoboa/urls.py +++ b/modoboa/urls.py @@ -28,6 +28,7 @@ urlpatterns = [ path('admin/', include("modoboa.admin.urls")), path('dnstools/', include("modoboa.dnstools.urls")), path('stats/', include("modoboa.maillog.urls")), + path('dmarc/', include("modoboa.dmarc.urls")), path('user/forward/', user_views.forward, name="user_forward"), diff --git a/modoboa/urls_api_v2.py b/modoboa/urls_api_v2.py index b6376b088..c7d58e87f 100644 --- a/modoboa/urls_api_v2.py +++ b/modoboa/urls_api_v2.py @@ -12,6 +12,7 @@ urlpatterns = [ path('', include("modoboa.parameters.api.v2.urls")), path('', include("modoboa.limits.api.v1.urls")), path('', include("modoboa.relaydomains.api.v1.urls")), + path('', include("modoboa.dmarc.api.v2.urls")), path('', include("modoboa.dnstools.api.v2.urls")), path('', include("modoboa.maillog.api.v2.urls")), path('', include("modoboa.transport.api.v2.urls")), diff --git a/requirements.txt b/requirements.txt index 4e4c4de50..4c67dcaf2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,3 +37,7 @@ qrcode aiosmtplib aioredis==2.0.1 + +tldextract>=2.0.2 +defusedxml>=0.6.0 +python-magic>=0.4.24 diff --git a/test_project/test_project/settings.py b/test_project/test_project/settings.py index 4b74c587a..3de95333a 100644 --- a/test_project/test_project/settings.py +++ b/test_project/test_project/settings.py @@ -89,6 +89,7 @@ MODOBOA_APPS = ( 'modoboa.dnstools', 'modoboa.policyd', 'modoboa.maillog', + 'modoboa.dmarc', # Modoboa extensions here. )