You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1474 lines
70 KiB

8 years ago
7 years ago
New Crowdin updates (#14197) * New translations devise.en.yml (Uyghur) [ci skip] * New translations doorkeeper.en.yml (Uyghur) [ci skip] * New translations en.json (Sorani (Kurdish)) [ci skip] * New translations en.yml (Sorani (Kurdish)) [ci skip] * New translations simple_form.en.yml (Sorani (Kurdish)) [ci skip] * New translations activerecord.en.yml (Sorani (Kurdish)) [ci skip] * New translations devise.en.yml (Sorani (Kurdish)) [ci skip] * New translations doorkeeper.en.yml (Sorani (Kurdish)) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Chinese Traditional, Hong Kong) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations simple_form.en.yml (Chinese Simplified) [ci skip] * New translations en.yml (Chinese Simplified) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Hebrew) [ci skip] * New translations en.json (Hebrew) [ci skip] * New translations en.json (Hebrew) [ci skip] * New translations en.json (Hebrew) [ci skip] * New translations en.json (Russian) [ci skip] * New translations en.yml (Persian) [ci skip] * New translations en.json (Persian) [ci skip] * New translations en.json (Croatian) [ci skip] * New translations en.json (Marathi) [ci skip] * New translations en.json (Norwegian Nynorsk) [ci skip] * New translations en.json (Bengali) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.json (Hindi) [ci skip] * New translations en.json (Latvian) [ci skip] * New translations en.json (Estonian) [ci skip] * New translations en.json (Kazakh) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Urdu (Pakistan)) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Icelandic) [ci skip] * New translations en.json (Tamil) [ci skip] * New translations en.json (Persian) [ci skip] * New translations en.json (Indonesian) [ci skip] * New translations en.json (Portuguese, Brazilian) [ci skip] * New translations en.json (Ido) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations en.json (Serbian (Latin)) [ci skip] * New translations en.json (Uyghur) [ci skip] * New translations en.json (Sorani (Kurdish)) [ci skip] * New translations en.json (Taigi) [ci skip] * New translations en.json (Silesian) [ci skip] * New translations en.json (Malay) [ci skip] * New translations en.json (Welsh) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations en.json (Telugu) [ci skip] * New translations en.json (Chinese Traditional, Hong Kong) [ci skip] * New translations en.json (Asturian) [ci skip] * New translations en.json (Kannada) [ci skip] * New translations en.json (Breton) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.json (Catalan) [ci skip] * New translations en.json (Bulgarian) [ci skip] * New translations en.json (Arabic) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (Czech) [ci skip] * New translations en.json (Greek) [ci skip] * New translations en.json (Basque) [ci skip] * New translations en.json (Danish) [ci skip] * New translations en.json (German) [ci skip] * New translations en.json (Finnish) [ci skip] * New translations en.json (Thai) [ci skip] * New translations en.json (Slovenian) [ci skip] * New translations en.json (Sardinian) [ci skip] * New translations en.json (Romanian) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Ukrainian) [ci skip] * New translations en.json (French) [ci skip] * New translations en.json (Hungarian) [ci skip] * New translations en.json (Slovak) [ci skip] * New translations en.json (Russian) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.json (Polish) [ci skip] * New translations en.json (Norwegian) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.json (Swedish) [ci skip] * New translations en.json (Serbian (Cyrillic)) [ci skip] * New translations en.json (Albanian) [ci skip] * New translations en.json (Italian) [ci skip] * New translations en.json (Armenian) [ci skip] * New translations en.json (Hebrew) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.json (Macedonian) [ci skip] * New translations en.json (Lithuanian) [ci skip] * New translations en.json (Georgian) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.json (German) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.json (Russian) [ci skip] * New translations en.json (French) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Catalan) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.json (Hungarian) [ci skip] * New translations en.json (Albanian) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations simple_form.en.yml (Dutch) [ci skip] * New translations simple_form.en.yml (Dutch) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.json (Thai) [ci skip] * New translations en.yml (Thai) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.yml (Dutch) [ci skip] * New translations en.json (Portuguese, Brazilian) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations en.yml (Occitan) [ci skip] * New translations en.json (Italian) [ci skip] * New translations en.json (Persian) [ci skip] * New translations en.json (French) [ci skip] * New translations en.yml (French) [ci skip] * New translations en.json (Arabic) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.yml (Kabyle) [ci skip] * New translations en.json (Icelandic) [ci skip] * New translations en.json (Portuguese, Brazilian) [ci skip] * New translations en.json (Indonesian) [ci skip] * New translations en.json (Persian) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.json (Tamil) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.json (Bengali) [ci skip] * New translations en.json (Marathi) [ci skip] * New translations en.json (Albanian) [ci skip] * New translations en.json (Serbian (Cyrillic)) [ci skip] * New translations en.json (Swedish) [ci skip] * New translations en.json (Turkish) [ci skip] * New translations en.json (Chinese Traditional) [ci skip] * New translations en.json (Urdu (Pakistan)) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Welsh) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations en.json (Chinese Traditional, Hong Kong) [ci skip] * New translations en.json (Malayalam) [ci skip] * New translations en.json (Telugu) [ci skip] * New translations en.json (Breton) [ci skip] * New translations en.json (Kannada) [ci skip] * New translations en.json (Uyghur) [ci skip] * New translations en.json (Croatian) [ci skip] * New translations en.json (Norwegian Nynorsk) [ci skip] * New translations en.json (Kazakh) [ci skip] * New translations en.json (Estonian) [ci skip] * New translations en.json (Latvian) [ci skip] * New translations en.json (Hindi) [ci skip] * New translations en.json (Malay) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (Arabic) [ci skip] * New translations en.json (Bulgarian) [ci skip] * New translations en.json (Catalan) [ci skip] * New translations en.json (Czech) [ci skip] * New translations en.json (Danish) [ci skip] * New translations en.json (German) [ci skip] * New translations en.json (Greek) [ci skip] * New translations en.json (Romanian) [ci skip] * New translations en.json (Slovenian) [ci skip] * New translations en.json (Thai) [ci skip] * New translations en.json (Chinese Simplified) [ci skip] * New translations en.json (Slovak) [ci skip] * New translations en.json (Hungarian) [ci skip] * New translations en.json (French) [ci skip] * New translations en.json (Ukrainian) [ci skip] * New translations en.json (Norwegian) [ci skip] * New translations en.json (Lithuanian) [ci skip] * New translations en.json (Macedonian) [ci skip] * New translations en.json (Dutch) [ci skip] * New translations en.json (Polish) [ci skip] * New translations en.json (Basque) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.json (Russian) [ci skip] * New translations en.json (Armenian) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.json (Finnish) [ci skip] * New translations en.json (Hebrew) [ci skip] * New translations en.json (Georgian) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.json (Italian) [ci skip] * New translations en.json (Ido) [ci skip] * New translations en.json (Taigi) [ci skip] * New translations en.json (Silesian) [ci skip] * New translations en.json (Sardinian) [ci skip] * New translations en.json (Occitan) [ci skip] * New translations en.json (Sorani (Kurdish)) [ci skip] * New translations en.json (Asturian) [ci skip] * New translations en.json (Kabyle) [ci skip] * New translations en.json (Serbian (Latin)) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.json (Russian) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.json (Russian) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.json (German) [ci skip] * New translations en.json (French) [ci skip] * New translations en.json (Korean) [ci skip] * New translations en.json (French) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations en.yml (Esperanto) [ci skip] * New translations en.json (Esperanto) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.json (Vietnamese) [ci skip] * New translations en.json (Japanese) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (Italian) [ci skip] * New translations en.json (Italian) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations en.json (Corsican) [ci skip] * New translations en.json (Persian) [ci skip] * New translations en.json (Hungarian) [ci skip] * New translations en.json (Portuguese, Brazilian) [ci skip] * New translations en.json (Spanish) [ci skip] * New translations en.json (French) [ci skip] * New translations en.json (Spanish, Argentina) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.json (Galician) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.json (Portuguese) [ci skip] * New translations en.json (Albanian) [ci skip] * i18n-tasks normalize * yarn manage:translations
3 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add Keybase integration (#10297) * create account_identity_proofs table * add endpoint for keybase to check local proofs * add async task to update validity and liveness of proofs from keybase * first pass keybase proof CRUD * second pass keybase proof creation * clean up proof list and add badges * add avatar url to keybase api * Always highlight the “Identity Proofs” navigation item when interacting with proofs. * Update translations. * Add profile URL. * Reorder proofs. * Add proofs to bio. * Update settings/identity_proofs front-end. * Use `link_to`. * Only encode query params if they exist. URLs without params had a trailing `?`. * Only show live proofs. * change valid to active in proof list and update liveness before displaying * minor fixes * add keybase config at well-known path * extremely naive feature flagging off the identity proof UI * fixes for rubocop * make identity proofs page resilient to potential keybase issues * normalize i18n * tweaks for brakeman * remove two unused translations * cleanup and add more localizations * make keybase_contacts an admin setting * fix ExternalProofService my_domain * use Addressable::URI in identity proofs * use active model serializer for keybase proof config * more cleanup of keybase proof config * rename proof is_valid and is_live to proof_valid and proof_live * cleanup * assorted tweaks for more robust communication with keybase * Clean up * Small fixes * Display verified identity identically to verified links * Clean up unused CSS * Add caching for Keybase avatar URLs * Remove keybase_contacts setting
5 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
Add WebAuthn as an alternative 2FA method (#14466) * feat: add possibility of adding WebAuthn security keys to use as 2FA This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor to the Settings page for editing the 2FA methods – now it will list the methods that are available to the user (TOTP and WebAuthn) and from there they'll be able to add or remove any of them. Also, it's worth mentioning that for enabling WebAuthn it's required to have TOTP enabled, so the first time that you go to the 2FA Settings page, you'll be asked to set it up. This work was inspired by the one donde by Github in their platform, and despite it could be approached in different ways, we decided to go with this one given that we feel that this gives a great UX. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add request for WebAuthn as second factor at login if enabled This commits adds the feature for using WebAuthn as a second factor for login when enabled. If users have WebAuthn enabled, now a page requesting for the use of a WebAuthn credential for log in will appear, although a link redirecting to the old page for logging in using a two-factor code will also be present. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: add possibility of deleting WebAuthn Credentials Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: disable WebAuthn when an Admin disables 2FA for a user Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * feat: remove ability to disable TOTP leaving only WebAuthn as 2FA Following examples form other platforms like Github, we decided to make Webauthn 2FA secondary to 2FA with TOTP, so that we removed the possibility of removing TOTP authentication only, leaving users with just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA' in order to remove second factor auth. The reason for WebAuthn being secondary to TOPT is that in that way, users will still be able to log in using their code from their phone's application if they don't have their security keys with them – or maybe even lost them. * We had to change a little the flow for setting up TOTP, given that now it's possible to setting up again if you already had TOTP, in order to let users modify their authenticator app – given that now it's not possible for them to disable TOTP and set it up again with another authenticator app. So, basically, now instead of storing the new `otp_secret` in the user, we store it in the session until the process of set up is finished. This was because, as it was before, when users clicked on 'Edit' in the new two-factor methods lists page, but then went back without finishing the flow, their `otp_secret` had been changed therefore invalidating their previous authenticator app, making them unable to log in again using TOTP. Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com> * refactor: fix eslint errors The PR build was failing given that linting returning some errors. This commit attempts to fix them. * refactor: normalize i18n translations The build was failing given that i18n translations files were not normalized. This commits fixes that. * refactor: avoid having the webauthn gem locked to a specific version * refactor: use symbols for routes without '/' * refactor: avoid sending webauthn disabled email when 2FA is disabled When an admins disable 2FA for users, we were sending two mails to them, one notifying that 2FA was disabled and the other to notify that WebAuthn was disabled. As the second one is redundant since the first email includes it, we can remove it and send just one email to users. * refactor: avoid creating new env variable for webauthn_origin config * refactor: improve flash error messages for webauthn pages Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
3 years ago
  1. ---
  2. en:
  3. about:
  4. about_hashtag_html: These are public posts tagged with <strong>#%{hashtag}</strong>. You can interact with them if you have an account anywhere in the fediverse.
  5. about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!'
  6. about_this: About
  7. active_count_after: active
  8. active_footnote: Monthly Active Users (MAU)
  9. administered_by: 'Administered by:'
  10. api: API
  11. apps: Mobile apps
  12. apps_platforms: Use Mastodon from iOS, Android and other platforms
  13. browse_directory: Browse a profile directory and filter by interests
  14. browse_local_posts: Browse a live stream of public posts from this server
  15. browse_public_posts: Browse a live stream of public posts on Mastodon
  16. contact: Contact
  17. contact_missing: Not set
  18. contact_unavailable: N/A
  19. discover_users: Discover users
  20. documentation: Documentation
  21. federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond.
  22. get_apps: Try a mobile app
  23. hosted_on: Mastodon hosted on %{domain}
  24. instance_actor_flash: |
  25. This account is a virtual actor used to represent the server itself and not any individual user.
  26. It is used for federation purposes and should not be blocked unless you want to block the whole instance, in which case you should use a domain block.
  27. learn_more: Learn more
  28. privacy_policy: Privacy policy
  29. rules: Server rules
  30. rules_html: 'Below is a summary of rules you need to follow if you want to have an account on this server of Mastodon:'
  31. see_whats_happening: See what's happening
  32. server_stats: 'Server stats:'
  33. source_code: Source code
  34. status_count_after:
  35. one: post
  36. other: posts
  37. status_count_before: Who published
  38. tagline: Follow friends and discover new ones
  39. terms: Terms of service
  40. unavailable_content: Moderated servers
  41. unavailable_content_description:
  42. domain: Server
  43. reason: Reason
  44. rejecting_media: 'Media files from these servers will not be processed or stored, and no thumbnails will be displayed, requiring manual click-through to the original file:'
  45. rejecting_media_title: Filtered media
  46. silenced: 'Posts from these servers will be hidden in public timelines and conversations, and no notifications will be generated from their users interactions, unless you are following them:'
  47. silenced_title: Silenced servers
  48. suspended: 'No data from these servers will be processed, stored or exchanged, making any interaction or communication with users from these servers impossible:'
  49. suspended_title: Suspended servers
  50. unavailable_content_html: Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.
  51. user_count_after:
  52. one: user
  53. other: users
  54. user_count_before: Home to
  55. what_is_mastodon: What is Mastodon?
  56. accounts:
  57. choices_html: "%{name}'s choices:"
  58. endorsements_hint: You can endorse people you follow from the web interface, and they will show up here.
  59. featured_tags_hint: You can feature specific hashtags that will be displayed here.
  60. follow: Follow
  61. followers:
  62. one: Follower
  63. other: Followers
  64. following: Following
  65. instance_actor_flash: This account is a virtual actor used to represent the server itself and not any individual user. It is used for federation purposes and should not be suspended.
  66. joined: Joined %{date}
  67. last_active: last active
  68. link_verified_on: Ownership of this link was checked on %{date}
  69. media: Media
  70. moved_html: "%{name} has moved to %{new_profile_link}:"
  71. network_hidden: This information is not available
  72. never_active: Never
  73. nothing_here: There is nothing here!
  74. people_followed_by: People whom %{name} follows
  75. people_who_follow: People who follow %{name}
  76. pin_errors:
  77. following: You must be already following the person you want to endorse
  78. posts:
  79. one: Post
  80. other: Posts
  81. posts_tab_heading: Posts
  82. posts_with_replies: Posts and replies
  83. roles:
  84. admin: Admin
  85. bot: Bot
  86. group: Group
  87. moderator: Mod
  88. unavailable: Profile unavailable
  89. unfollow: Unfollow
  90. admin:
  91. account_actions:
  92. action: Perform action
  93. title: Perform moderation action on %{acct}
  94. account_moderation_notes:
  95. create: Leave note
  96. created_msg: Moderation note successfully created!
  97. delete: Delete
  98. destroyed_msg: Moderation note successfully destroyed!
  99. accounts:
  100. add_email_domain_block: Block e-mail domain
  101. approve: Approve
  102. approve_all: Approve all
  103. approved_msg: Successfully approved %{username}'s sign-up application
  104. are_you_sure: Are you sure?
  105. avatar: Avatar
  106. by_domain: Domain
  107. change_email:
  108. changed_msg: Account email successfully changed!
  109. current_email: Current email
  110. label: Change email
  111. new_email: New email
  112. submit: Change email
  113. title: Change email for %{username}
  114. confirm: Confirm
  115. confirmed: Confirmed
  116. confirming: Confirming
  117. delete: Delete data
  118. deleted: Deleted
  119. demote: Demote
  120. destroyed_msg: "%{username}'s data is now queued to be deleted imminently"
  121. disable: Freeze
  122. disable_two_factor_authentication: Disable 2FA
  123. disabled: Frozen
  124. display_name: Display name
  125. domain: Domain
  126. edit: Edit
  127. email: Email
  128. email_status: Email status
  129. enable: Unfreeze
  130. enabled: Enabled
  131. enabled_msg: Successfully unfroze %{username}'s account
  132. followers: Followers
  133. follows: Follows
  134. header: Header
  135. inbox_url: Inbox URL
  136. invite_request_text: Reasons for joining
  137. invited_by: Invited by
  138. ip: IP
  139. joined: Joined
  140. location:
  141. all: All
  142. local: Local
  143. remote: Remote
  144. title: Location
  145. login_status: Login status
  146. media_attachments: Media attachments
  147. memorialize: Turn into memoriam
  148. memorialized: Memorialized
  149. memorialized_msg: Successfully turned %{username} into a memorial account
  150. moderation:
  151. active: Active
  152. all: All
  153. pending: Pending
  154. silenced: Silenced
  155. suspended: Suspended
  156. title: Moderation
  157. moderation_notes: Moderation notes
  158. most_recent_activity: Most recent activity
  159. most_recent_ip: Most recent IP
  160. no_account_selected: No accounts were changed as none were selected
  161. no_limits_imposed: No limits imposed
  162. not_subscribed: Not subscribed
  163. pending: Pending review
  164. perform_full_suspension: Suspend
  165. promote: Promote
  166. protocol: Protocol
  167. public: Public
  168. push_subscription_expires: PuSH subscription expires
  169. redownload: Refresh profile
  170. redownloaded_msg: Successfully refreshed %{username}'s profile from origin
  171. reject: Reject
  172. reject_all: Reject all
  173. rejected_msg: Successfully rejected %{username}'s sign-up application
  174. remove_avatar: Remove avatar
  175. remove_header: Remove header
  176. removed_avatar_msg: Successfully removed %{username}'s avatar image
  177. removed_header_msg: Successfully removed %{username}'s header image
  178. resend_confirmation:
  179. already_confirmed: This user is already confirmed
  180. send: Resend confirmation email
  181. success: Confirmation email successfully sent!
  182. reset: Reset
  183. reset_password: Reset password
  184. resubscribe: Resubscribe
  185. role: Permissions
  186. roles:
  187. admin: Administrator
  188. moderator: Moderator
  189. staff: Staff
  190. user: User
  191. search: Search
  192. search_same_email_domain: Other users with the same e-mail domain
  193. search_same_ip: Other users with the same IP
  194. sensitive: Sensitive
  195. sensitized: marked as sensitive
  196. shared_inbox_url: Shared inbox URL
  197. show:
  198. created_reports: Made reports
  199. targeted_reports: Reported by others
  200. silence: Limit
  201. silenced: Limited
  202. statuses: Posts
  203. subscribe: Subscribe
  204. suspended: Suspended
  205. suspension_irreversible: The data of this account has been irreversibly deleted. You can unsuspend the account to make it usable but it will not recover any data it previously had.
  206. suspension_reversible_hint_html: The account has been suspended, and the data will be fully removed on %{date}. Until then, the account can be restored without any ill effects. If you wish to remove all of the account's data immediately, you can do so below.
  207. time_in_queue: Waiting in queue %{time}
  208. title: Accounts
  209. unconfirmed_email: Unconfirmed email
  210. undo_sensitized: Undo sensitive
  211. undo_silenced: Undo silence
  212. undo_suspension: Undo suspension
  213. unsilenced_msg: Successfully unlimited %{username}'s account
  214. unsubscribe: Unsubscribe
  215. unsuspended_msg: Successfully unsuspended %{username}'s account
  216. username: Username
  217. view_domain: View summary for domain
  218. warn: Warn
  219. web: Web
  220. whitelisted: Allowed for federation
  221. action_logs:
  222. action_types:
  223. assigned_to_self_report: Assign Report
  224. change_email_user: Change E-mail for User
  225. confirm_user: Confirm User
  226. create_account_warning: Create Warning
  227. create_announcement: Create Announcement
  228. create_custom_emoji: Create Custom Emoji
  229. create_domain_allow: Create Domain Allow
  230. create_domain_block: Create Domain Block
  231. create_email_domain_block: Create E-mail Domain Block
  232. create_ip_block: Create IP rule
  233. create_unavailable_domain: Create Unavailable Domain
  234. demote_user: Demote User
  235. destroy_announcement: Delete Announcement
  236. destroy_custom_emoji: Delete Custom Emoji
  237. destroy_domain_allow: Delete Domain Allow
  238. destroy_domain_block: Delete Domain Block
  239. destroy_email_domain_block: Delete e-mail domain block
  240. destroy_ip_block: Delete IP rule
  241. destroy_status: Delete Post
  242. destroy_unavailable_domain: Delete Unavailable Domain
  243. disable_2fa_user: Disable 2FA
  244. disable_custom_emoji: Disable Custom Emoji
  245. disable_user: Disable User
  246. enable_custom_emoji: Enable Custom Emoji
  247. enable_user: Enable User
  248. memorialize_account: Memorialize Account
  249. promote_user: Promote User
  250. remove_avatar_user: Remove Avatar
  251. reopen_report: Reopen Report
  252. reset_password_user: Reset Password
  253. resolve_report: Resolve Report
  254. sensitive_account: Mark the media in your account as sensitive
  255. silence_account: Silence Account
  256. suspend_account: Suspend Account
  257. unassigned_report: Unassign Report
  258. unsensitive_account: Unmark the media in your account as sensitive
  259. unsilence_account: Unsilence Account
  260. unsuspend_account: Unsuspend Account
  261. update_announcement: Update Announcement
  262. update_custom_emoji: Update Custom Emoji
  263. update_domain_block: Update Domain Block
  264. update_status: Update Post
  265. actions:
  266. assigned_to_self_report_html: "%{name} assigned report %{target} to themselves"
  267. change_email_user_html: "%{name} changed the e-mail address of user %{target}"
  268. confirm_user_html: "%{name} confirmed e-mail address of user %{target}"
  269. create_account_warning_html: "%{name} sent a warning to %{target}"
  270. create_announcement_html: "%{name} created new announcement %{target}"
  271. create_custom_emoji_html: "%{name} uploaded new emoji %{target}"
  272. create_domain_allow_html: "%{name} allowed federation with domain %{target}"
  273. create_domain_block_html: "%{name} blocked domain %{target}"
  274. create_email_domain_block_html: "%{name} blocked e-mail domain %{target}"
  275. create_ip_block_html: "%{name} created rule for IP %{target}"
  276. create_unavailable_domain_html: "%{name} stopped delivery to domain %{target}"
  277. demote_user_html: "%{name} demoted user %{target}"
  278. destroy_announcement_html: "%{name} deleted announcement %{target}"
  279. destroy_custom_emoji_html: "%{name} destroyed emoji %{target}"
  280. destroy_domain_allow_html: "%{name} disallowed federation with domain %{target}"
  281. destroy_domain_block_html: "%{name} unblocked domain %{target}"
  282. destroy_email_domain_block_html: "%{name} unblocked e-mail domain %{target}"
  283. destroy_ip_block_html: "%{name} deleted rule for IP %{target}"
  284. destroy_status_html: "%{name} removed post by %{target}"
  285. destroy_unavailable_domain_html: "%{name} resumed delivery to domain %{target}"
  286. disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}"
  287. disable_custom_emoji_html: "%{name} disabled emoji %{target}"
  288. disable_user_html: "%{name} disabled login for user %{target}"
  289. enable_custom_emoji_html: "%{name} enabled emoji %{target}"
  290. enable_user_html: "%{name} enabled login for user %{target}"
  291. memorialize_account_html: "%{name} turned %{target}'s account into a memoriam page"
  292. promote_user_html: "%{name} promoted user %{target}"
  293. remove_avatar_user_html: "%{name} removed %{target}'s avatar"
  294. reopen_report_html: "%{name} reopened report %{target}"
  295. reset_password_user_html: "%{name} reset password of user %{target}"
  296. resolve_report_html: "%{name} resolved report %{target}"
  297. sensitive_account_html: "%{name} marked %{target}'s media as sensitive"
  298. silence_account_html: "%{name} silenced %{target}'s account"
  299. suspend_account_html: "%{name} suspended %{target}'s account"
  300. unassigned_report_html: "%{name} unassigned report %{target}"
  301. unsensitive_account_html: "%{name} unmarked %{target}'s media as sensitive"
  302. unsilence_account_html: "%{name} unsilenced %{target}'s account"
  303. unsuspend_account_html: "%{name} unsuspended %{target}'s account"
  304. update_announcement_html: "%{name} updated announcement %{target}"
  305. update_custom_emoji_html: "%{name} updated emoji %{target}"
  306. update_domain_block_html: "%{name} updated domain block for %{target}"
  307. update_status_html: "%{name} updated post by %{target}"
  308. deleted_status: "(deleted post)"
  309. empty: No logs found.
  310. filter_by_action: Filter by action
  311. filter_by_user: Filter by user
  312. title: Audit log
  313. announcements:
  314. destroyed_msg: Announcement successfully deleted!
  315. edit:
  316. title: Edit announcement
  317. empty: No announcements found.
  318. live: Live
  319. new:
  320. create: Create announcement
  321. title: New announcement
  322. publish: Publish
  323. published_msg: Announcement successfully published!
  324. scheduled_for: Scheduled for %{time}
  325. scheduled_msg: Announcement scheduled for publication!
  326. title: Announcements
  327. unpublish: Unpublish
  328. unpublished_msg: Announcement successfully unpublished!
  329. updated_msg: Announcement successfully updated!
  330. custom_emojis:
  331. assign_category: Assign category
  332. by_domain: Domain
  333. copied_msg: Successfully created local copy of the emoji
  334. copy: Copy
  335. copy_failed_msg: Could not make a local copy of that emoji
  336. create_new_category: Create new category
  337. created_msg: Emoji successfully created!
  338. delete: Delete
  339. destroyed_msg: Emojo successfully destroyed!
  340. disable: Disable
  341. disabled: Disabled
  342. disabled_msg: Successfully disabled that emoji
  343. emoji: Emoji
  344. enable: Enable
  345. enabled: Enabled
  346. enabled_msg: Successfully enabled that emoji
  347. image_hint: PNG up to 50KB
  348. list: List
  349. listed: Listed
  350. new:
  351. title: Add new custom emoji
  352. not_permitted: You are not permitted to perform this action
  353. overwrite: Overwrite
  354. shortcode: Shortcode
  355. shortcode_hint: At least 2 characters, only alphanumeric characters and underscores
  356. title: Custom emojis
  357. uncategorized: Uncategorized
  358. unlist: Unlist
  359. unlisted: Unlisted
  360. update_failed_msg: Could not update that emoji
  361. updated_msg: Emoji successfully updated!
  362. upload: Upload
  363. dashboard:
  364. authorized_fetch_mode: Secure mode
  365. backlog: backlogged jobs
  366. config: Configuration
  367. feature_deletions: Account deletions
  368. feature_invites: Invite links
  369. feature_profile_directory: Profile directory
  370. feature_registrations: Registrations
  371. feature_relay: Federation relay
  372. feature_timeline_preview: Timeline preview
  373. features: Features
  374. hidden_service: Federation with hidden services
  375. open_reports: open reports
  376. pending_tags: hashtags waiting for review
  377. pending_users: users waiting for review
  378. recent_users: Recent users
  379. search: Full-text search
  380. single_user_mode: Single user mode
  381. software: Software
  382. space: Space usage
  383. title: Dashboard
  384. total_users: users in total
  385. trends: Trends
  386. week_interactions: interactions this week
  387. week_users_active: active this week
  388. week_users_new: users this week
  389. whitelist_mode: Limited federation mode
  390. domain_allows:
  391. add_new: Allow federation with domain
  392. created_msg: Domain has been successfully allowed for federation
  393. destroyed_msg: Domain has been disallowed from federation
  394. undo: Disallow federation with domain
  395. domain_blocks:
  396. add_new: Add new domain block
  397. created_msg: Domain block is now being processed
  398. destroyed_msg: Domain block has been undone
  399. domain: Domain
  400. edit: Edit domain block
  401. existing_domain_block_html: You have already imposed stricter limits on %{name}, you need to <a href="%{unblock_url}">unblock it</a> first.
  402. new:
  403. create: Create block
  404. hint: The domain block will not prevent creation of account entries in the database, but will retroactively and automatically apply specific moderation methods on those accounts.
  405. severity:
  406. desc_html: "<strong>Silence</strong> will make the account's posts invisible to anyone who isn't following them. <strong>Suspend</strong> will remove all of the account's content, media, and profile data. Use <strong>None</strong> if you just want to reject media files."
  407. noop: None
  408. silence: Silence
  409. suspend: Suspend
  410. title: New domain block
  411. obfuscate: Obfuscate domain name
  412. obfuscate_hint: Partially obfuscate the domain name in the list if advertising the list of domain limitations is enabled
  413. private_comment: Private comment
  414. private_comment_hint: Comment about this domain limitation for internal use by the moderators.
  415. public_comment: Public comment
  416. public_comment_hint: Comment about this domain limitation for the general public, if advertising the list of domain limitations is enabled.
  417. reject_media: Reject media files
  418. reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions
  419. reject_reports: Reject reports
  420. reject_reports_hint: Ignore all reports coming from this domain. Irrelevant for suspensions
  421. rejecting_media: rejecting media files
  422. rejecting_reports: rejecting reports
  423. severity:
  424. silence: silenced
  425. suspend: suspended
  426. show:
  427. affected_accounts:
  428. one: One account in the database affected
  429. other: "%{count} accounts in the database affected"
  430. retroactive:
  431. silence: Unsilence existing affected accounts from this domain
  432. suspend: Unsuspend existing affected accounts from this domain
  433. title: Undo domain block for %{domain}
  434. undo: Undo
  435. undo: Undo domain block
  436. view: View domain block
  437. email_domain_blocks:
  438. add_new: Add new
  439. created_msg: Successfully blocked e-mail domain
  440. delete: Delete
  441. destroyed_msg: Successfully unblocked e-mail domain
  442. domain: Domain
  443. empty: No e-mail domains currently blocked.
  444. from_html: from %{domain}
  445. new:
  446. create: Add domain
  447. title: Block new e-mail domain
  448. title: Blocked e-mail domains
  449. follow_recommendations:
  450. description_html: "<strong>Follow recommendations help new users quickly find interesting content</strong>. When a user has not interacted with others enough to form personalized follow recommendations, these accounts are recommended instead. They are re-calculated on a daily basis from a mix of accounts with the highest recent engagements and highest local follower counts for a given language."
  451. language: For language
  452. status: Status
  453. suppress: Suppress follow recommendation
  454. suppressed: Suppressed
  455. title: Follow recommendations
  456. unsuppress: Restore follow recommendation
  457. instances:
  458. back_to_all: All
  459. back_to_limited: Limited
  460. back_to_warning: Warning
  461. by_domain: Domain
  462. delivery:
  463. all: All
  464. clear: Clear delivery errors
  465. restart: Restart delivery
  466. stop: Stop delivery
  467. title: Delivery
  468. unavailable: Unavailable
  469. unavailable_message: Delivery unavailable
  470. warning: Warning
  471. warning_message:
  472. one: Delivery failure %{count} day
  473. other: Delivery failure %{count} days
  474. delivery_available: Delivery is available
  475. delivery_error_days: Delivery error days
  476. delivery_error_hint: If delivery is not possible for %{count} days, it will be automatically marked as undeliverable.
  477. empty: No domains found.
  478. known_accounts:
  479. one: "%{count} known account"
  480. other: "%{count} known accounts"
  481. moderation:
  482. all: All
  483. limited: Limited
  484. title: Moderation
  485. private_comment: Private comment
  486. public_comment: Public comment
  487. title: Federation
  488. total_blocked_by_us: Blocked by us
  489. total_followed_by_them: Followed by them
  490. total_followed_by_us: Followed by us
  491. total_reported: Reports about them
  492. total_storage: Media attachments
  493. invites:
  494. deactivate_all: Deactivate all
  495. filter:
  496. all: All
  497. available: Available
  498. expired: Expired
  499. title: Filter
  500. title: Invites
  501. ip_blocks:
  502. add_new: Create rule
  503. created_msg: Successfully added new IP rule
  504. delete: Delete
  505. expires_in:
  506. '1209600': 2 weeks
  507. '15778476': 6 months
  508. '2629746': 1 month
  509. '31556952': 1 year
  510. '86400': 1 day
  511. '94670856': 3 years
  512. new:
  513. title: Create new IP rule
  514. no_ip_block_selected: No IP rules were changed as none were selected
  515. title: IP rules
  516. pending_accounts:
  517. title: Pending accounts (%{count})
  518. relationships:
  519. title: "%{acct}'s relationships"
  520. relays:
  521. add_new: Add new relay
  522. delete: Delete
  523. description_html: A <strong>federation relay</strong> is an intermediary server that exchanges large volumes of public posts between servers that subscribe and publish to it. <strong>It can help small and medium servers discover content from the fediverse</strong>, which would otherwise require local users manually following other people on remote servers.
  524. disable: Disable
  525. disabled: Disabled
  526. enable: Enable
  527. enable_hint: Once enabled, your server will subscribe to all public posts from this relay, and will begin sending this server's public posts to it.
  528. enabled: Enabled
  529. inbox_url: Relay URL
  530. pending: Waiting for relay's approval
  531. save_and_enable: Save and enable
  532. setup: Setup a relay connection
  533. signatures_not_enabled: Relays will not work correctly while secure mode or limited federation mode is enabled
  534. status: Status
  535. title: Relays
  536. report_notes:
  537. created_msg: Report note successfully created!
  538. destroyed_msg: Report note successfully deleted!
  539. reports:
  540. account:
  541. notes:
  542. one: "%{count} note"
  543. other: "%{count} notes"
  544. reports:
  545. one: "%{count} report"
  546. other: "%{count} reports"
  547. action_taken_by: Action taken by
  548. are_you_sure: Are you sure?
  549. assign_to_self: Assign to me
  550. assigned: Assigned moderator
  551. by_target_domain: Domain of reported account
  552. comment:
  553. none: None
  554. created_at: Reported
  555. forwarded: Forwarded
  556. forwarded_to: Forwarded to %{domain}
  557. mark_as_resolved: Mark as resolved
  558. mark_as_unresolved: Mark as unresolved
  559. notes:
  560. create: Add note
  561. create_and_resolve: Resolve with note
  562. create_and_unresolve: Reopen with note
  563. delete: Delete
  564. placeholder: Describe what actions have been taken, or any other related updates...
  565. reopen: Reopen report
  566. report: 'Report #%{id}'
  567. reported_account: Reported account
  568. reported_by: Reported by
  569. resolved: Resolved
  570. resolved_msg: Report successfully resolved!
  571. status: Status
  572. title: Reports
  573. unassign: Unassign
  574. unresolved: Unresolved
  575. updated_at: Updated
  576. rules:
  577. add_new: Add rule
  578. delete: Delete
  579. description_html: While most claim to have read and agree to the terms of service, usually people do not read through until after a problem arises. <strong>Make it easier to see your server's rules at a glance by providing them in a flat bullet point list.</strong> Try to keep individual rules short and simple, but try not to split them up into many separate items either.
  580. edit: Edit rule
  581. empty: No server rules have been defined yet.
  582. title: Server rules
  583. settings:
  584. activity_api_enabled:
  585. desc_html: Counts of locally published posts, active users, and new registrations in weekly buckets
  586. title: Publish aggregate statistics about user activity in the API
  587. bootstrap_timeline_accounts:
  588. desc_html: Separate multiple usernames by comma. These accounts will be guaranteed to be shown in follow recommendations
  589. title: Recommend these accounts to new users
  590. contact_information:
  591. email: Business e-mail
  592. username: Contact username
  593. custom_css:
  594. desc_html: Modify the look with CSS loaded on every page
  595. title: Custom CSS
  596. default_noindex:
  597. desc_html: Affects all users who have not changed this setting themselves
  598. title: Opt users out of search engine indexing by default
  599. domain_blocks:
  600. all: To everyone
  601. disabled: To no one
  602. title: Show domain blocks
  603. users: To logged-in local users
  604. domain_blocks_rationale:
  605. title: Show rationale
  606. hero:
  607. desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to server thumbnail
  608. title: Hero image
  609. mascot:
  610. desc_html: Displayed on multiple pages. At least 293×205px recommended. When not set, falls back to default mascot
  611. title: Mascot image
  612. peers_api_enabled:
  613. desc_html: Domain names this server has encountered in the fediverse
  614. title: Publish list of discovered servers in the API
  615. preview_sensitive_media:
  616. desc_html: Link previews on other websites will display a thumbnail even if the media is marked as sensitive
  617. title: Show sensitive media in OpenGraph previews
  618. profile_directory:
  619. desc_html: Allow users to be discoverable
  620. title: Enable profile directory
  621. registrations:
  622. closed_message:
  623. desc_html: Displayed on frontpage when registrations are closed. You can use HTML tags
  624. title: Closed registration message
  625. deletion:
  626. desc_html: Allow anyone to delete their account
  627. title: Open account deletion
  628. min_invite_role:
  629. disabled: No one
  630. title: Allow invitations by
  631. require_invite_text:
  632. desc_html: When registrations require manual approval, make the “Why do you want to join?” text input mandatory rather than optional
  633. title: Require new users to enter a reason to join
  634. registrations_mode:
  635. modes:
  636. approved: Approval required for sign up
  637. none: Nobody can sign up
  638. open: Anyone can sign up
  639. title: Registrations mode
  640. show_known_fediverse_at_about_page:
  641. desc_html: When disabled, restricts the public timeline linked from the landing page to showing only local content
  642. title: Include federated content on unauthenticated public timeline page
  643. show_staff_badge:
  644. desc_html: Show a staff badge on a user page
  645. title: Show staff badge
  646. site_description:
  647. desc_html: Introductory paragraph on the API. Describe what makes this Mastodon server special and anything else important. You can use HTML tags, in particular <code>&lt;a&gt;</code> and <code>&lt;em&gt;</code>.
  648. title: Server description
  649. site_description_extended:
  650. desc_html: A good place for your code of conduct, rules, guidelines and other things that set your server apart. You can use HTML tags
  651. title: Custom extended information
  652. site_short_description:
  653. desc_html: Displayed in sidebar and meta tags. Describe what Mastodon is and what makes this server special in a single paragraph.
  654. title: Short server description
  655. site_terms:
  656. desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML tags
  657. title: Custom terms of service
  658. site_title: Server name
  659. thumbnail:
  660. desc_html: Used for previews via OpenGraph and API. 1200x630px recommended
  661. title: Server thumbnail
  662. timeline_preview:
  663. desc_html: Display link to public timeline on landing page and allow API access to the public timeline without authentication
  664. title: Allow unauthenticated access to public timeline
  665. title: Site settings
  666. trendable_by_default:
  667. desc_html: Affects hashtags that have not been previously disallowed
  668. title: Allow hashtags to trend without prior review
  669. trends:
  670. desc_html: Publicly display previously reviewed hashtags that are currently trending
  671. title: Trending hashtags
  672. site_uploads:
  673. delete: Delete uploaded file
  674. destroyed_msg: Site upload successfully deleted!
  675. statuses:
  676. back_to_account: Back to account page
  677. batch:
  678. delete: Delete
  679. nsfw_off: Mark as not sensitive
  680. nsfw_on: Mark as sensitive
  681. deleted: Deleted
  682. failed_to_execute: Failed to execute
  683. media:
  684. title: Media
  685. no_media: No media
  686. no_status_selected: No posts were changed as none were selected
  687. title: Account posts
  688. with_media: With media
  689. system_checks:
  690. database_schema_check:
  691. message_html: There are pending database migrations. Please run them to ensure the application behaves as expected
  692. rules_check:
  693. action: Manage server rules
  694. message_html: You haven't defined any server rules.
  695. sidekiq_process_check:
  696. message_html: No Sidekiq process running for the %{value} queue(s). Please review your Sidekiq configuration
  697. tags:
  698. accounts_today: Unique uses today
  699. accounts_week: Unique uses this week
  700. breakdown: Breakdown of today's usage by source
  701. last_active: Recently used
  702. most_popular: Most popular
  703. most_recent: Recently created
  704. name: Hashtag
  705. review: Review status
  706. reviewed: Reviewed
  707. title: Hashtags
  708. trending_right_now: Trending right now
  709. unique_uses_today: "%{count} posting today"
  710. unreviewed: Not reviewed
  711. updated_msg: Hashtag settings updated successfully
  712. title: Administration
  713. warning_presets:
  714. add_new: Add new
  715. delete: Delete
  716. edit_preset: Edit warning preset
  717. empty: You haven't defined any warning presets yet.
  718. title: Manage warning presets
  719. admin_mailer:
  720. new_pending_account:
  721. body: The details of the new account are below. You can approve or reject this application.
  722. subject: New account up for review on %{instance} (%{username})
  723. new_report:
  724. body: "%{reporter} has reported %{target}"
  725. body_remote: Someone from %{domain} has reported %{target}
  726. subject: New report for %{instance} (#%{id})
  727. new_trending_tag:
  728. body: 'The hashtag #%{name} is trending today, but has not been previously reviewed. It will not be displayed publicly unless you allow it to, or just save the form as it is to never hear about it again.'
  729. subject: New hashtag up for review on %{instance} (#%{name})
  730. aliases:
  731. add_new: Create alias
  732. created_msg: Successfully created a new alias. You can now initiate the move from the old account.
  733. deleted_msg: Successfully removed the alias. Moving from that account to this one will no longer be possible.
  734. empty: You have no aliases.
  735. hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is <strong>harmless and reversible</strong>. <strong>The account migration is initiated from the old account</strong>.
  736. remove: Unlink alias
  737. appearance:
  738. advanced_web_interface: Advanced web interface
  739. advanced_web_interface_hint: 'If you want to make use of your entire screen width, the advanced web interface allows you to configure many different columns to see as much information at the same time as you want: Home, notifications, federated timeline, any number of lists and hashtags.'
  740. animations_and_accessibility: Animations and accessibility
  741. confirmation_dialogs: Confirmation dialogs
  742. discovery: Discovery
  743. localization:
  744. body: Mastodon is translated by volunteers.
  745. guide_link: https://crowdin.com/project/mastodon
  746. guide_link_text: Everyone can contribute.
  747. sensitive_content: Sensitive content
  748. toot_layout: Post layout
  749. application_mailer:
  750. notification_preferences: Change e-mail preferences
  751. salutation: "%{name},"
  752. settings: 'Change e-mail preferences: %{link}'
  753. view: 'View:'
  754. view_profile: View profile
  755. view_status: View post
  756. applications:
  757. created: Application successfully created
  758. destroyed: Application successfully deleted
  759. invalid_url: The provided URL is invalid
  760. regenerate_token: Regenerate access token
  761. token_regenerated: Access token successfully regenerated
  762. warning: Be very careful with this data. Never share it with anyone!
  763. your_token: Your access token
  764. auth:
  765. apply_for_account: Request an invite
  766. change_password: Password
  767. checkbox_agreement_html: I agree to the <a href="%{rules_path}" target="_blank">server rules</a> and <a href="%{terms_path}" target="_blank">terms of service</a>
  768. checkbox_agreement_without_rules_html: I agree to the <a href="%{terms_path}" target="_blank">terms of service</a>
  769. delete_account: Delete account
  770. delete_account_html: If you wish to delete your account, you can <a href="%{path}">proceed here</a>. You will be asked for confirmation.
  771. description:
  772. prefix_invited_by_user: "@%{name} invites you to join this server of Mastodon!"
  773. prefix_sign_up: Sign up on Mastodon today!
  774. suffix: With an account, you will be able to follow people, post updates and exchange messages with users from any Mastodon server and more!
  775. didnt_get_confirmation: Didn't receive confirmation instructions?
  776. dont_have_your_security_key: Don't have your security key?
  777. forgot_password: Forgot your password?
  778. invalid_reset_password_token: Password reset token is invalid or expired. Please request a new one.
  779. link_to_otp: Enter a two-factor code from your phone or a recovery code
  780. link_to_webauth: Use your security key device
  781. login: Log in
  782. logout: Logout
  783. migrate_account: Move to a different account
  784. migrate_account_html: If you wish to redirect this account to a different one, you can <a href="%{path}">configure it here</a>.
  785. or_log_in_with: Or log in with
  786. providers:
  787. cas: CAS
  788. saml: SAML
  789. register: Sign up
  790. registration_closed: "%{instance} is not accepting new members"
  791. resend_confirmation: Resend confirmation instructions
  792. reset_password: Reset password
  793. security: Security
  794. set_new_password: Set new password
  795. setup:
  796. email_below_hint_html: If the below e-mail address is incorrect, you can change it here and receive a new confirmation e-mail.
  797. email_settings_hint_html: The confirmation e-mail was sent to %{email}. If that e-mail address is not correct, you can change it in account settings.
  798. title: Setup
  799. status:
  800. account_status: Account status
  801. confirming: Waiting for e-mail confirmation to be completed.
  802. functional: Your account is fully operational.
  803. pending: Your application is pending review by our staff. This may take some time. You will receive an e-mail if your application is approved.
  804. redirecting_to: Your account is inactive because it is currently redirecting to %{acct}.
  805. too_fast: Form submitted too fast, try again.
  806. trouble_logging_in: Trouble logging in?
  807. use_security_key: Use security key
  808. authorize_follow:
  809. already_following: You are already following this account
  810. already_requested: You have already sent a follow request to that account
  811. error: Unfortunately, there was an error looking up the remote account
  812. follow: Follow
  813. follow_request: 'You have sent a follow request to:'
  814. following: 'Success! You are now following:'
  815. post_follow:
  816. close: Or, you can just close this window.
  817. return: Show the user's profile
  818. web: Go to web
  819. title: Follow %{acct}
  820. challenge:
  821. confirm: Continue
  822. hint_html: "<strong>Tip:</strong> We won't ask you for your password again for the next hour."
  823. invalid_password: Invalid password
  824. prompt: Confirm password to continue
  825. crypto:
  826. errors:
  827. invalid_key: is not a valid Ed25519 or Curve25519 key
  828. invalid_signature: is not a valid Ed25519 signature
  829. date:
  830. formats:
  831. default: "%b %d, %Y"
  832. with_month_name: "%B %d, %Y"
  833. datetime:
  834. distance_in_words:
  835. about_x_hours: "%{count}h"
  836. about_x_months: "%{count}mo"
  837. about_x_years: "%{count}y"
  838. almost_x_years: "%{count}y"
  839. half_a_minute: Just now
  840. less_than_x_minutes: "%{count}m"
  841. less_than_x_seconds: Just now
  842. over_x_years: "%{count}y"
  843. x_days: "%{count}d"
  844. x_minutes: "%{count}m"
  845. x_months: "%{count}mo"
  846. x_seconds: "%{count}s"
  847. deletes:
  848. challenge_not_passed: The information you entered was not correct
  849. confirm_password: Enter your current password to verify your identity
  850. confirm_username: Enter your username to confirm the procedure
  851. proceed: Delete account
  852. success_msg: Your account was successfully deleted
  853. warning:
  854. before: 'Before proceeding, please read these notes carefully:'
  855. caches: Content that has been cached by other servers may persist
  856. data_removal: Your posts and other data will be permanently removed
  857. email_change_html: You can <a href="%{path}">change your e-mail address</a> without deleting your account
  858. email_contact_html: If it still doesn't arrive, you can e-mail <a href="mailto:%{email}">%{email}</a> for help
  859. email_reconfirmation_html: If you are not receiving the confirmation e-mail, you can <a href="%{path}">request it again</a>
  860. irreversible: You will not be able to restore or reactivate your account
  861. more_details_html: For more details, see the <a href="%{terms_path}">privacy policy</a>.
  862. username_available: Your username will become available again
  863. username_unavailable: Your username will remain unavailable
  864. directories:
  865. directory: Profile directory
  866. explanation: Discover users based on their interests
  867. explore_mastodon: Explore %{title}
  868. domain_validator:
  869. invalid_domain: is not a valid domain name
  870. errors:
  871. '400': The request you submitted was invalid or malformed.
  872. '403': You don't have permission to view this page.
  873. '404': The page you are looking for isn't here.
  874. '406': This page is not available in the requested format.
  875. '410': The page you were looking for doesn't exist here anymore.
  876. '422':
  877. content: Security verification failed. Are you blocking cookies?
  878. title: Security verification failed
  879. '429': Too many requests
  880. '500':
  881. content: We're sorry, but something went wrong on our end.
  882. title: This page is not correct
  883. '503': The page could not be served due to a temporary server failure.
  884. noscript_html: To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the <a href="%{apps_path}">native apps</a> for Mastodon for your platform.
  885. existing_username_validator:
  886. not_found: could not find a local user with that username
  887. not_found_multiple: could not find %{usernames}
  888. exports:
  889. archive_takeout:
  890. date: Date
  891. download: Download your archive
  892. hint_html: You can request an archive of your <strong>posts and uploaded media</strong>. The exported data will be in the ActivityPub format, readable by any compliant software. You can request an archive every 7 days.
  893. in_progress: Compiling your archive...
  894. request: Request your archive
  895. size: Size
  896. blocks: You block
  897. bookmarks: Bookmarks
  898. csv: CSV
  899. domain_blocks: Domain blocks
  900. lists: Lists
  901. mutes: You mute
  902. storage: Media storage
  903. featured_tags:
  904. add_new: Add new
  905. errors:
  906. limit: You have already featured the maximum amount of hashtags
  907. hint_html: "<strong>What are featured hashtags?</strong> They are displayed prominently on your public profile and allow people to browse your public posts specifically under those hashtags. They are a great tool for keeping track of creative works or long-term projects."
  908. filters:
  909. contexts:
  910. account: Profiles
  911. home: Home and lists
  912. notifications: Notifications
  913. public: Public timelines
  914. thread: Conversations
  915. edit:
  916. title: Edit filter
  917. errors:
  918. invalid_context: None or invalid context supplied
  919. invalid_irreversible: Irreversible filtering only works with home or notifications context
  920. index:
  921. delete: Delete
  922. empty: You have no filters.
  923. title: Filters
  924. new:
  925. title: Add new filter
  926. footer:
  927. developers: Developers
  928. more: More…
  929. resources: Resources
  930. trending_now: Trending now
  931. generic:
  932. all: All
  933. changes_saved_msg: Changes successfully saved!
  934. copy: Copy
  935. delete: Delete
  936. no_batch_actions_available: No batch actions available on this page
  937. order_by: Order by
  938. save_changes: Save changes
  939. validation_errors:
  940. one: Something isn't quite right yet! Please review the error below
  941. other: Something isn't quite right yet! Please review %{count} errors below
  942. html_validator:
  943. invalid_markup: 'contains invalid HTML markup: %{error}'
  944. identity_proofs:
  945. active: Active
  946. authorize: Yes, authorize
  947. authorize_connection_prompt: Authorize this cryptographic connection?
  948. errors:
  949. failed: The cryptographic connection failed. Please try again from %{provider}.
  950. keybase:
  951. invalid_token: Keybase tokens are hashes of signatures and must be 66 hex characters
  952. verification_failed: Keybase does not recognize this token as a signature of Keybase user %{kb_username}. Please retry from Keybase.
  953. wrong_user: Cannot create a proof for %{proving} while logged in as %{current}. Log in as %{proving} and try again.
  954. explanation_html: Here you can cryptographically connect your other identities from other platforms, such as Keybase. This lets other people send you encrypted messages on those platforms and allows them to trust that the content you send them comes from you.
  955. i_am_html: I am %{username} on %{service}.
  956. identity: Identity
  957. inactive: Inactive
  958. publicize_checkbox: 'And toot this:'
  959. publicize_toot: 'It is proven! I am %{username} on %{service}: %{url}'
  960. remove: Remove proof from account
  961. removed: Successfully removed proof from account
  962. status: Verification status
  963. view_proof: View proof
  964. imports:
  965. errors:
  966. over_rows_processing_limit: contains more than %{count} rows
  967. modes:
  968. merge: Merge
  969. merge_long: Keep existing records and add new ones
  970. overwrite: Overwrite
  971. overwrite_long: Replace current records with the new ones
  972. preface: You can import data that you have exported from another server, such as a list of the people you are following or blocking.
  973. success: Your data was successfully uploaded and will be processed in due time
  974. types:
  975. blocking: Blocking list
  976. bookmarks: Bookmarks
  977. domain_blocking: Domain blocking list
  978. following: Following list
  979. muting: Muting list
  980. upload: Upload
  981. in_memoriam_html: In Memoriam.
  982. invites:
  983. delete: Deactivate
  984. expired: Expired
  985. expires_in:
  986. '1800': 30 minutes
  987. '21600': 6 hours
  988. '3600': 1 hour
  989. '43200': 12 hours
  990. '604800': 1 week
  991. '86400': 1 day
  992. expires_in_prompt: Never
  993. generate: Generate invite link
  994. invited_by: 'You were invited by:'
  995. max_uses:
  996. one: 1 use
  997. other: "%{count} uses"
  998. max_uses_prompt: No limit
  999. prompt: Generate and share links with others to grant access to this server
  1000. table:
  1001. expires_at: Expires
  1002. uses: Uses
  1003. title: Invite people
  1004. lists:
  1005. errors:
  1006. limit: You have reached the maximum amount of lists
  1007. media_attachments:
  1008. validations:
  1009. images_and_video: Cannot attach a video to a post that already contains images
  1010. not_ready: Cannot attach files that have not finished processing. Try again in a moment!
  1011. too_many: Cannot attach more than 4 files
  1012. migrations:
  1013. acct: Moved to
  1014. cancel: Cancel redirect
  1015. cancel_explanation: Cancelling the redirect will re-activate your current account, but will not bring back followers that have been moved to that account.
  1016. cancelled_msg: Successfully cancelled the redirect.
  1017. errors:
  1018. already_moved: is the same account you have already moved to
  1019. missing_also_known_as: is not an alias of this account
  1020. move_to_self: cannot be current account
  1021. not_found: could not be found
  1022. on_cooldown: You are on cooldown
  1023. followers_count: Followers at time of move
  1024. incoming_migrations: Moving from a different account
  1025. incoming_migrations_html: To move from another account to this one, first you need to <a href="%{path}">create an account alias</a>.
  1026. moved_msg: Your account is now redirecting to %{acct} and your followers are being moved over.
  1027. not_redirecting: Your account is not redirecting to any other account currently.
  1028. on_cooldown: You have recently migrated your account. This function will become available again in %{count} days.
  1029. past_migrations: Past migrations
  1030. proceed_with_move: Move followers
  1031. redirected_msg: Your account is now redirecting to %{acct}.
  1032. redirecting_to: Your account is redirecting to %{acct}.
  1033. set_redirect: Set redirect
  1034. warning:
  1035. backreference_required: The new account must first be configured to back-reference this one
  1036. before: 'Before proceeding, please read these notes carefully:'
  1037. cooldown: After moving there is a waiting period during which you will not be able to move again
  1038. disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation.
  1039. followers: This action will move all followers from the current account to the new account
  1040. only_redirect_html: Alternatively, you can <a href="%{path}">only put up a redirect on your profile</a>.
  1041. other_data: No other data will be moved automatically
  1042. redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches
  1043. moderation:
  1044. title: Moderation
  1045. move_handler:
  1046. carry_blocks_over_text: This user moved from %{acct}, which you had blocked.
  1047. carry_mutes_over_text: This user moved from %{acct}, which you had muted.
  1048. copy_account_note_text: 'This user moved from %{acct}, here were your previous notes about them:'
  1049. notification_mailer:
  1050. digest:
  1051. action: View all notifications
  1052. body: Here is a brief summary of the messages you missed since your last visit on %{since}
  1053. mention: "%{name} mentioned you in:"
  1054. new_followers_summary:
  1055. one: Also, you have acquired one new follower while being away! Yay!
  1056. other: Also, you have acquired %{count} new followers while being away! Amazing!
  1057. subject:
  1058. one: "1 new notification since your last visit \U0001F418"
  1059. other: "%{count} new notifications since your last visit \U0001F418"
  1060. title: In your absence...
  1061. favourite:
  1062. body: 'Your post was favourited by %{name}:'
  1063. subject: "%{name} favourited your post"
  1064. title: New favourite
  1065. follow:
  1066. body: "%{name} is now following you!"
  1067. subject: "%{name} is now following you"
  1068. title: New follower
  1069. follow_request:
  1070. action: Manage follow requests
  1071. body: "%{name} has requested to follow you"
  1072. subject: 'Pending follower: %{name}'
  1073. title: New follow request
  1074. mention:
  1075. action: Reply
  1076. body: 'You were mentioned by %{name} in:'
  1077. subject: You were mentioned by %{name}
  1078. title: New mention
  1079. poll:
  1080. subject: A poll by %{name} has ended
  1081. reblog:
  1082. body: 'Your post was boosted by %{name}:'
  1083. subject: "%{name} boosted your post"
  1084. title: New boost
  1085. status:
  1086. subject: "%{name} just posted"
  1087. notifications:
  1088. email_events: Events for e-mail notifications
  1089. email_events_hint: 'Select events that you want to receive notifications for:'
  1090. other_settings: Other notifications settings
  1091. number:
  1092. human:
  1093. decimal_units:
  1094. format: "%n%u"
  1095. units:
  1096. billion: B
  1097. million: M
  1098. quadrillion: Q
  1099. thousand: K
  1100. trillion: T
  1101. unit: ''
  1102. otp_authentication:
  1103. code_hint: Enter the code generated by your authenticator app to confirm
  1104. description_html: If you enable <strong>two-factor authentication</strong> using an authenticator app, logging in will require you to be in possession of your phone, which will generate tokens for you to enter.
  1105. enable: Enable
  1106. instructions_html: "<strong>Scan this QR code into Google Authenticator or a similar TOTP app on your phone</strong>. From now on, that app will generate tokens that you will have to enter when logging in."
  1107. manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:'
  1108. setup: Set up
  1109. wrong_code: The entered code was invalid! Are server time and device time correct?
  1110. pagination:
  1111. newer: Newer
  1112. next: Next
  1113. older: Older
  1114. prev: Prev
  1115. truncate: "&hellip;"
  1116. polls:
  1117. errors:
  1118. already_voted: You have already voted on this poll
  1119. duplicate_options: contain duplicate items
  1120. duration_too_long: is too far into the future
  1121. duration_too_short: is too soon
  1122. expired: The poll has already ended
  1123. invalid_choice: The chosen vote option does not exist
  1124. over_character_limit: cannot be longer than %{max} characters each
  1125. too_few_options: must have more than one item
  1126. too_many_options: can't contain more than %{max} items
  1127. preferences:
  1128. other: Other
  1129. posting_defaults: Posting defaults
  1130. public_timelines: Public timelines
  1131. reactions:
  1132. errors:
  1133. limit_reached: Limit of different reactions reached
  1134. unrecognized_emoji: is not a recognized emoji
  1135. relationships:
  1136. activity: Account activity
  1137. dormant: Dormant
  1138. follow_selected_followers: Follow selected followers
  1139. followers: Followers
  1140. following: Following
  1141. invited: Invited
  1142. last_active: Last active
  1143. most_recent: Most recent
  1144. moved: Moved
  1145. mutual: Mutual
  1146. primary: Primary
  1147. relationship: Relationship
  1148. remove_selected_domains: Remove all followers from the selected domains
  1149. remove_selected_followers: Remove selected followers
  1150. remove_selected_follows: Unfollow selected users
  1151. status: Account status
  1152. remote_follow:
  1153. acct: Enter your username@domain you want to act from
  1154. missing_resource: Could not find the required redirect URL for your account
  1155. no_account_html: Don't have an account? You can <a href='%{sign_up_path}' target='_blank'>sign up here</a>
  1156. proceed: Proceed to follow
  1157. prompt: 'You are going to follow:'
  1158. reason_html: "<strong>Why is this step necessary?</strong> <code>%{instance}</code> might not be the server where you are registered, so we need to redirect you to your home server first."
  1159. remote_interaction:
  1160. favourite:
  1161. proceed: Proceed to favourite
  1162. prompt: 'You want to favourite this post:'
  1163. reblog:
  1164. proceed: Proceed to boost
  1165. prompt: 'You want to boost this post:'
  1166. reply:
  1167. proceed: Proceed to reply
  1168. prompt: 'You want to reply to this post:'
  1169. scheduled_statuses:
  1170. over_daily_limit: You have exceeded the limit of %{limit} scheduled posts for today
  1171. over_total_limit: You have exceeded the limit of %{limit} scheduled posts
  1172. too_soon: The scheduled date must be in the future
  1173. sessions:
  1174. activity: Last activity
  1175. browser: Browser
  1176. browsers:
  1177. alipay: Alipay
  1178. blackberry: Blackberry
  1179. chrome: Chrome
  1180. edge: Microsoft Edge
  1181. electron: Electron
  1182. firefox: Firefox
  1183. generic: Unknown browser
  1184. ie: Internet Explorer
  1185. micro_messenger: MicroMessenger
  1186. nokia: Nokia S40 Ovi Browser
  1187. opera: Opera
  1188. otter: Otter
  1189. phantom_js: PhantomJS
  1190. qq: QQ Browser
  1191. safari: Safari
  1192. uc_browser: UCBrowser
  1193. weibo: Weibo
  1194. current_session: Current session
  1195. description: "%{browser} on %{platform}"
  1196. explanation: These are the web browsers currently logged in to your Mastodon account.
  1197. ip: IP
  1198. platforms:
  1199. adobe_air: Adobe Air
  1200. android: Android
  1201. blackberry: Blackberry
  1202. chrome_os: Chrome OS
  1203. firefox_os: Firefox OS
  1204. ios: iOS
  1205. linux: Linux
  1206. mac: macOS
  1207. other: unknown platform
  1208. windows: Windows
  1209. windows_mobile: Windows Mobile
  1210. windows_phone: Windows Phone
  1211. revoke: Revoke
  1212. revoke_success: Session successfully revoked
  1213. title: Sessions
  1214. settings:
  1215. account: Account
  1216. account_settings: Account settings
  1217. aliases: Account aliases
  1218. appearance: Appearance
  1219. authorized_apps: Authorized apps
  1220. back: Back to Mastodon
  1221. delete: Account deletion
  1222. development: Development
  1223. edit_profile: Edit profile
  1224. export: Data export
  1225. featured_tags: Featured hashtags
  1226. identity_proofs: Identity proofs
  1227. import: Import
  1228. import_and_export: Import and export
  1229. migrate: Account migration
  1230. notifications: Notifications
  1231. preferences: Preferences
  1232. profile: Profile
  1233. relationships: Follows and followers
  1234. two_factor_authentication: Two-factor Auth
  1235. webauthn_authentication: Security keys
  1236. statuses:
  1237. attached:
  1238. audio:
  1239. one: "%{count} audio"
  1240. other: "%{count} audio"
  1241. description: 'Attached: %{attached}'
  1242. image:
  1243. one: "%{count} image"
  1244. other: "%{count} images"
  1245. video:
  1246. one: "%{count} video"
  1247. other: "%{count} videos"
  1248. boosted_from_html: Boosted from %{acct_link}
  1249. content_warning: 'Content warning: %{warning}'
  1250. disallowed_hashtags:
  1251. one: 'contained a disallowed hashtag: %{tags}'
  1252. other: 'contained the disallowed hashtags: %{tags}'
  1253. errors:
  1254. in_reply_not_found: The post you are trying to reply to does not appear to exist.
  1255. language_detection: Automatically detect language
  1256. open_in_web: Open in web
  1257. over_character_limit: character limit of %{max} exceeded
  1258. pin_errors:
  1259. limit: You have already pinned the maximum number of posts
  1260. ownership: Someone else's post cannot be pinned
  1261. private: Non-public posts cannot be pinned
  1262. reblog: A boost cannot be pinned
  1263. poll:
  1264. total_people:
  1265. one: "%{count} person"
  1266. other: "%{count} people"
  1267. total_votes:
  1268. one: "%{count} vote"
  1269. other: "%{count} votes"
  1270. vote: Vote
  1271. show_more: Show more
  1272. show_newer: Show newer
  1273. show_older: Show older
  1274. show_thread: Show thread
  1275. sign_in_to_participate: Sign in to participate in the conversation
  1276. title: '%{name}: "%{quote}"'
  1277. visibilities:
  1278. direct: Direct
  1279. private: Followers-only
  1280. private_long: Only show to followers
  1281. public: Public
  1282. public_long: Everyone can see
  1283. unlisted: Unlisted
  1284. unlisted_long: Everyone can see, but not listed on public timelines
  1285. stream_entries:
  1286. pinned: Pinned post
  1287. reblogged: boosted
  1288. sensitive_content: Sensitive content
  1289. tags:
  1290. does_not_match_previous_name: does not match the previous name
  1291. terms:
  1292. body_html: |
  1293. <h2>Privacy Policy</h2>
  1294. <h3 id="collect">What information do we collect?</h3>
  1295. <ul>
  1296. <li><em>Basic account information</em>: If you register on this server, you may be asked to enter a username, an e-mail address and a password. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly.</li>
  1297. <li><em>Posts, following and other public information</em>: The list of people you follow is listed publicly, the same is true for your followers. When you submit a message, the date and time is stored as well as the application you submitted the message from. Messages may contain media attachments, such as pictures and videos. Public and unlisted posts are available publicly. When you feature a post on your profile, that is also publicly available information. Your posts are delivered to your followers, in some cases it means they are delivered to different servers and copies are stored there. When you delete posts, this is likewise delivered to your followers. The action of reblogging or favouriting another post is always public.</li>
  1298. <li><em>Direct and followers-only posts</em>: All posts are stored and processed on the server. Followers-only posts are delivered to your followers and users who are mentioned in them, and direct posts are delivered only to users mentioned in them. In some cases it means they are delivered to different servers and copies are stored there. We make a good faith effort to limit the access to those posts only to authorized persons, but other servers may fail to do so. Therefore it's important to review servers your followers belong to. You may toggle an option to approve and reject new followers manually in the settings. <em>Please keep in mind that the operators of the server and any receiving server may view such messages</em>, and that recipients may screenshot, copy or otherwise re-share them. <em>Do not share any dangerous information over Mastodon.</em></li>
  1299. <li><em>IPs and other metadata</em>: When you log in, we record the IP address you log in from, as well as the name of your browser application. All the logged in sessions are available for your review and revocation in the settings. The latest IP address used is stored for up to 12 months. We also may retain server logs which include the IP address of every request to our server.</li>
  1300. </ul>
  1301. <hr class="spacer" />
  1302. <h3 id="use">What do we use your information for?</h3>
  1303. <p>Any of the information we collect from you may be used in the following ways:</p>
  1304. <ul>
  1305. <li>To provide the core functionality of Mastodon. You can only interact with other people's content and post your own content when you are logged in. For example, you may follow other people to view their combined posts in your own personalized home timeline.</li>
  1306. <li>To aid moderation of the community, for example comparing your IP address with other known ones to determine ban evasion or other violations.</li>
  1307. <li>The email address you provide may be used to send you information, notifications about other people interacting with your content or sending you messages, and to respond to inquiries, and/or other requests or questions.</li>
  1308. </ul>
  1309. <hr class="spacer" />
  1310. <h3 id="protect">How do we protect your information?</h3>
  1311. <p>We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.</p>
  1312. <hr class="spacer" />
  1313. <h3 id="data-retention">What is our data retention policy?</h3>
  1314. <p>We will make a good faith effort to:</p>
  1315. <ul>
  1316. <li>Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 90 days.</li>
  1317. <li>Retain the IP addresses associated with registered users no more than 12 months.</li>
  1318. </ul>
  1319. <p>You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.</p>
  1320. <p>You may irreversibly delete your account at any time.</p>
  1321. <hr class="spacer"/>
  1322. <h3 id="cookies">Do we use cookies?</h3>
  1323. <p>Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.</p>
  1324. <p>We use cookies to understand and save your preferences for future visits.</p>
  1325. <hr class="spacer" />
  1326. <h3 id="disclose">Do we disclose any information to outside parties?</h3>
  1327. <p>We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.</p>
  1328. <p>Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.</p>
  1329. <p>When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password.</p>
  1330. <hr class="spacer" />
  1331. <h3 id="children">Site usage by children</h3>
  1332. <p>If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) do not use this site.</p>
  1333. <p>If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) do not use this site.</p>
  1334. <p>Law requirements can be different if this server is in another jurisdiction.</p>
  1335. <hr class="spacer" />
  1336. <h3 id="changes">Changes to our Privacy Policy</h3>
  1337. <p>If we decide to change our privacy policy, we will post those changes on this page.</p>
  1338. <p>This document is CC-BY-SA. It was last updated March 7, 2018.</p>
  1339. <p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
  1340. title: "%{instance} Terms of Service and Privacy Policy"
  1341. themes:
  1342. contrast: Mastodon (High contrast)
  1343. default: Mastodon (Dark)
  1344. mastodon-light: Mastodon (Light)
  1345. time:
  1346. formats:
  1347. default: "%b %d, %Y, %H:%M"
  1348. month: "%b %Y"
  1349. two_factor_authentication:
  1350. add: Add
  1351. disable: Disable 2FA
  1352. disabled_success: Two-factor authentication successfully disabled
  1353. edit: Edit
  1354. enabled: Two-factor authentication is enabled
  1355. enabled_success: Two-factor authentication successfully enabled
  1356. generate_recovery_codes: Generate recovery codes
  1357. lost_recovery_codes: Recovery codes allow you to regain access to your account if you lose your phone. If you've lost your recovery codes, you can regenerate them here. Your old recovery codes will be invalidated.
  1358. methods: Two-factor methods
  1359. otp: Authenticator app
  1360. recovery_codes: Backup recovery codes
  1361. recovery_codes_regenerated: Recovery codes successfully regenerated
  1362. recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. <strong>Keep the recovery codes safe</strong>. For example, you may print them and store them with other important documents.
  1363. webauthn: Security keys
  1364. user_mailer:
  1365. backup_ready:
  1366. explanation: You requested a full backup of your Mastodon account. It's now ready for download!
  1367. subject: Your archive is ready for download
  1368. title: Archive takeout
  1369. sign_in_token:
  1370. details: 'Here are details of the attempt:'
  1371. explanation: 'We detected an attempt to sign in to your account from an unrecognized IP address. If this is you, please enter the security code below on the sign in challenge page:'
  1372. further_actions: 'If this wasn''t you, please change your password and enable two-factor authentication on your account. You can do so here:'
  1373. subject: Please confirm attempted sign in
  1374. title: Sign in attempt
  1375. warning:
  1376. explanation:
  1377. disable: You can no longer login to your account or use it in any other way, but your profile and other data remains intact.
  1378. sensitive: Your uploaded media files and linked media will be treated as sensitive.
  1379. silence: You can still use your account but only people who are already following you will see your posts on this server, and you may be excluded from various public listings. However, others may still manually follow you.
  1380. suspend: You can no longer use your account, and your profile and other data are no longer accessible. You can still login to request a backup of your data until the data is fully removed, but we will retain some data to prevent you from evading the suspension.
  1381. get_in_touch: You can reply to this e-mail to get in touch with the staff of %{instance}.
  1382. review_server_policies: Review server policies
  1383. statuses: 'Specifically, for:'
  1384. subject:
  1385. disable: Your account %{acct} has been frozen
  1386. none: Warning for %{acct}
  1387. sensitive: Your account %{acct} posting media has been marked as sensitive
  1388. silence: Your account %{acct} has been limited
  1389. suspend: Your account %{acct} has been suspended
  1390. title:
  1391. disable: Account frozen
  1392. none: Warning
  1393. sensitive: Your media has been marked as sensitive
  1394. silence: Account limited
  1395. suspend: Account suspended
  1396. welcome:
  1397. edit_profile_action: Setup profile
  1398. edit_profile_step: You can customize your profile by uploading an avatar, header, changing your display name and more. If you’d like to review new followers before they’re allowed to follow you, you can lock your account.
  1399. explanation: Here are some tips to get you started
  1400. final_action: Start posting
  1401. final_step: 'Start posting! Even without followers your public posts may be seen by others, for example on the local timeline and in hashtags. You may want to introduce yourself on the #introductions hashtag.'
  1402. full_handle: Your full handle
  1403. full_handle_hint: This is what you would tell your friends so they can message or follow you from another server.
  1404. review_preferences_action: Change preferences
  1405. review_preferences_step: Make sure to set your preferences, such as which emails you'd like to receive, or what privacy level you’d like your posts to default to. If you don’t have motion sickness, you could choose to enable GIF autoplay.
  1406. subject: Welcome to Mastodon
  1407. tip_federated_timeline: The federated timeline is a firehose view of the Mastodon network. But it only includes people your neighbours are subscribed to, so it's not complete.
  1408. tip_following: You follow your server's admin(s) by default. To find more interesting people, check the local and federated timelines.
  1409. tip_local_timeline: The local timeline is a firehose view of people on %{instance}. These are your immediate neighbours!
  1410. tip_mobile_webapp: If your mobile browser offers you to add Mastodon to your homescreen, you can receive push notifications. It acts like a native app in many ways!
  1411. tips: Tips
  1412. title: Welcome aboard, %{name}!
  1413. users:
  1414. follow_limit_reached: You cannot follow more than %{limit} people
  1415. generic_access_help_html: Trouble accessing your account? You may get in touch with %{email} for assistance
  1416. invalid_otp_token: Invalid two-factor code
  1417. invalid_sign_in_token: Invalid security code
  1418. otp_lost_help_html: If you lost access to both, you may get in touch with %{email}
  1419. seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available.
  1420. signed_in_as: 'Signed in as:'
  1421. suspicious_sign_in_confirmation: You appear to not have logged in from this device before, so we're sending a security code to your e-mail address to confirm that it's you.
  1422. verification:
  1423. explanation_html: 'You can <strong>verify yourself as the owner of the links in your profile metadata</strong>. For that, the linked website must contain a link back to your Mastodon profile. The link back <strong>must</strong> have a <code>rel="me"</code> attribute. The text content of the link does not matter. Here is an example:'
  1424. verification: Verification
  1425. webauthn_credentials:
  1426. add: Add new security key
  1427. create:
  1428. error: There was a problem adding your security key. Please try again.
  1429. success: Your security key was successfully added.
  1430. delete: Delete
  1431. delete_confirmation: Are you sure you want to delete this security key?
  1432. description_html: If you enable <strong>security key authentication</strong>, logging in will require you to use one of your security keys.
  1433. destroy:
  1434. error: There was a problem deleting you security key. Please try again.
  1435. success: Your security key was successfully deleted.
  1436. invalid_credential: Invalid security key
  1437. nickname_hint: Enter the nickname of your new security key
  1438. not_enabled: You haven't enabled WebAuthn yet
  1439. not_supported: This browser doesn't support security keys
  1440. otp_required: To use security keys please enable two-factor authentication first.
  1441. registered_on: Registered on %{date}