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.

1670 lines
79 KiB

8 years ago
Support for import/export of instance-level domain blocks/allows for 4.x w/ additional fixes (#20597) * Allow import/export of instance-level domain blocks/allows (#1754) * Allow import/export of instance-level domain blocks/allows. Fixes #15095 * Pacify circleci * Address simple code review feedback * Add headers to exported CSV * Extract common import/export functionality to AdminExportControllerConcern * Add additional fields to instance-blocked domain export * Address review feedback * Split instance domain block/allow import/export into separate pages/controllers * Address code review feedback * Pacify DeepSource * Work around Paperclip::HasAttachmentFile for Rails 6 * Fix deprecated API warning in export tests * Remove after_commit workaround (cherry picked from commit 94e98864e39c010635e839fea984f2b4893bef1a) * Add confirmation page when importing blocked domains (#1773) * Move glitch-soc-specific strings to glitch-soc-specific locale files * Add confirmation page when importing blocked domains (cherry picked from commit b91196f4b73fff91997b8077619ae25b6d04a59e) * Fix authorization check in domain blocks controller (cherry picked from commit 75279377583c6e2aa04cc8d7380c593979630b38) * Fix error strings for domain blocks and email-domain blocks Corrected issue with non-error message used for Mastodon:NotPermittedError in Domain Blocks Corrected issue Domain Blocks using the Email Domain Blocks message on ActionContoller::ParameterMissing Corrected issue with Email Domain Blocks using the not_permitted string from "custom emojii's" * Ran i18n-tasks normalize to address test failure * Removed unused admin.export_domain_blocks.not_permitted string Removing unused string as indicated by Check i18n * Fix tests (cherry picked from commit 9094c2f52c24e1c00b594e7c11cd00e4a07eb431) * Fix domain block export not exporting blocks with only media rejection (cherry picked from commit 26ff48ee48a5c03a2a4b0bd03fd322529e6bd960) * Fix various issues with domain block import - stop using Paperclip for processing domain allow/block imports - stop leaving temporary files - better error handling - assume CSV files are UTF-8-encoded (cherry picked from commit cad824d8f501b95377e4f0a957e5a00d517a1902) Co-authored-by: Levi Bard <taktaktaktaktaktaktaktaktaktak@gmail.com> Co-authored-by: Claire <claire.github-309c@sitedethib.com>
1 year ago
Support for import/export of instance-level domain blocks/allows for 4.x w/ additional fixes (#20597) * Allow import/export of instance-level domain blocks/allows (#1754) * Allow import/export of instance-level domain blocks/allows. Fixes #15095 * Pacify circleci * Address simple code review feedback * Add headers to exported CSV * Extract common import/export functionality to AdminExportControllerConcern * Add additional fields to instance-blocked domain export * Address review feedback * Split instance domain block/allow import/export into separate pages/controllers * Address code review feedback * Pacify DeepSource * Work around Paperclip::HasAttachmentFile for Rails 6 * Fix deprecated API warning in export tests * Remove after_commit workaround (cherry picked from commit 94e98864e39c010635e839fea984f2b4893bef1a) * Add confirmation page when importing blocked domains (#1773) * Move glitch-soc-specific strings to glitch-soc-specific locale files * Add confirmation page when importing blocked domains (cherry picked from commit b91196f4b73fff91997b8077619ae25b6d04a59e) * Fix authorization check in domain blocks controller (cherry picked from commit 75279377583c6e2aa04cc8d7380c593979630b38) * Fix error strings for domain blocks and email-domain blocks Corrected issue with non-error message used for Mastodon:NotPermittedError in Domain Blocks Corrected issue Domain Blocks using the Email Domain Blocks message on ActionContoller::ParameterMissing Corrected issue with Email Domain Blocks using the not_permitted string from "custom emojii's" * Ran i18n-tasks normalize to address test failure * Removed unused admin.export_domain_blocks.not_permitted string Removing unused string as indicated by Check i18n * Fix tests (cherry picked from commit 9094c2f52c24e1c00b594e7c11cd00e4a07eb431) * Fix domain block export not exporting blocks with only media rejection (cherry picked from commit 26ff48ee48a5c03a2a4b0bd03fd322529e6bd960) * Fix various issues with domain block import - stop using Paperclip for processing domain allow/block imports - stop leaving temporary files - better error handling - assume CSV files are UTF-8-encoded (cherry picked from commit cad824d8f501b95377e4f0a957e5a00d517a1902) Co-authored-by: Levi Bard <taktaktaktaktaktaktaktaktaktak@gmail.com> Co-authored-by: Claire <claire.github-309c@sitedethib.com>
1 year ago
Support for import/export of instance-level domain blocks/allows for 4.x w/ additional fixes (#20597) * Allow import/export of instance-level domain blocks/allows (#1754) * Allow import/export of instance-level domain blocks/allows. Fixes #15095 * Pacify circleci * Address simple code review feedback * Add headers to exported CSV * Extract common import/export functionality to AdminExportControllerConcern * Add additional fields to instance-blocked domain export * Address review feedback * Split instance domain block/allow import/export into separate pages/controllers * Address code review feedback * Pacify DeepSource * Work around Paperclip::HasAttachmentFile for Rails 6 * Fix deprecated API warning in export tests * Remove after_commit workaround (cherry picked from commit 94e98864e39c010635e839fea984f2b4893bef1a) * Add confirmation page when importing blocked domains (#1773) * Move glitch-soc-specific strings to glitch-soc-specific locale files * Add confirmation page when importing blocked domains (cherry picked from commit b91196f4b73fff91997b8077619ae25b6d04a59e) * Fix authorization check in domain blocks controller (cherry picked from commit 75279377583c6e2aa04cc8d7380c593979630b38) * Fix error strings for domain blocks and email-domain blocks Corrected issue with non-error message used for Mastodon:NotPermittedError in Domain Blocks Corrected issue Domain Blocks using the Email Domain Blocks message on ActionContoller::ParameterMissing Corrected issue with Email Domain Blocks using the not_permitted string from "custom emojii's" * Ran i18n-tasks normalize to address test failure * Removed unused admin.export_domain_blocks.not_permitted string Removing unused string as indicated by Check i18n * Fix tests (cherry picked from commit 9094c2f52c24e1c00b594e7c11cd00e4a07eb431) * Fix domain block export not exporting blocks with only media rejection (cherry picked from commit 26ff48ee48a5c03a2a4b0bd03fd322529e6bd960) * Fix various issues with domain block import - stop using Paperclip for processing domain allow/block imports - stop leaving temporary files - better error handling - assume CSV files are UTF-8-encoded (cherry picked from commit cad824d8f501b95377e4f0a957e5a00d517a1902) Co-authored-by: Levi Bard <taktaktaktaktaktaktaktaktaktak@gmail.com> Co-authored-by: Claire <claire.github-309c@sitedethib.com>
1 year ago
Support for import/export of instance-level domain blocks/allows for 4.x w/ additional fixes (#20597) * Allow import/export of instance-level domain blocks/allows (#1754) * Allow import/export of instance-level domain blocks/allows. Fixes #15095 * Pacify circleci * Address simple code review feedback * Add headers to exported CSV * Extract common import/export functionality to AdminExportControllerConcern * Add additional fields to instance-blocked domain export * Address review feedback * Split instance domain block/allow import/export into separate pages/controllers * Address code review feedback * Pacify DeepSource * Work around Paperclip::HasAttachmentFile for Rails 6 * Fix deprecated API warning in export tests * Remove after_commit workaround (cherry picked from commit 94e98864e39c010635e839fea984f2b4893bef1a) * Add confirmation page when importing blocked domains (#1773) * Move glitch-soc-specific strings to glitch-soc-specific locale files * Add confirmation page when importing blocked domains (cherry picked from commit b91196f4b73fff91997b8077619ae25b6d04a59e) * Fix authorization check in domain blocks controller (cherry picked from commit 75279377583c6e2aa04cc8d7380c593979630b38) * Fix error strings for domain blocks and email-domain blocks Corrected issue with non-error message used for Mastodon:NotPermittedError in Domain Blocks Corrected issue Domain Blocks using the Email Domain Blocks message on ActionContoller::ParameterMissing Corrected issue with Email Domain Blocks using the not_permitted string from "custom emojii's" * Ran i18n-tasks normalize to address test failure * Removed unused admin.export_domain_blocks.not_permitted string Removing unused string as indicated by Check i18n * Fix tests (cherry picked from commit 9094c2f52c24e1c00b594e7c11cd00e4a07eb431) * Fix domain block export not exporting blocks with only media rejection (cherry picked from commit 26ff48ee48a5c03a2a4b0bd03fd322529e6bd960) * Fix various issues with domain block import - stop using Paperclip for processing domain allow/block imports - stop leaving temporary files - better error handling - assume CSV files are UTF-8-encoded (cherry picked from commit cad824d8f501b95377e4f0a957e5a00d517a1902) Co-authored-by: Levi Bard <taktaktaktaktaktaktaktaktaktak@gmail.com> Co-authored-by: Claire <claire.github-309c@sitedethib.com>
1 year 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
Revamp post filtering system (#18058) * Add model for custom filter keywords * Use CustomFilterKeyword internally Does not change the API * Fix /filters/edit and /filters/new * Add migration tests * Remove whole_word column from custom_filters (covered by custom_filter_keywords) * Redesign /filters Instead of a list, present a card that displays more information and handles multiple keywords per filter. * Redesign /filters/new and /filters/edit to add and remove keywords This adds a new gem dependency: cocoon, as well as a npm dependency: cocoon-js-vanilla. Those are used to easily populate and remove form fields from the user interface when manipulating multiple keyword filters at once. * Add /api/v2/filters to edit filter with multiple keywords Entities: - `Filter`: `id`, `title`, `filter_action` (either `hide` or `warn`), `context` `keywords` - `FilterKeyword`: `id`, `keyword`, `whole_word` API endpoits: - `GET /api/v2/filters` to list filters (including keywords) - `POST /api/v2/filters` to create a new filter `keywords_attributes` can also be passed to create keywords in one request - `GET /api/v2/filters/:id` to read a particular filter - `PUT /api/v2/filters/:id` to update a new filter `keywords_attributes` can also be passed to edit, delete or add keywords in one request - `DELETE /api/v2/filters/:id` to delete a particular filter - `GET /api/v2/filters/:id/keywords` to list keywords for a filter - `POST /api/v2/filters/:filter_id/keywords/:id` to add a new keyword to a filter - `GET /api/v2/filter_keywords/:id` to read a particular keyword - `PUT /api/v2/filter_keywords/:id` to edit a particular keyword - `DELETE /api/v2/filter_keywords/:id` to delete a particular keyword * Change from `irreversible` boolean to `action` enum * Remove irrelevent `irreversible_must_be_within_context` check * Fix /filters/new and /filters/edit with update for filter_action * Fix Rubocop/Codeclimate complaining about task names * Refactor FeedManager#phrase_filtered? This moves regexp building and filter caching to the `CustomFilter` class. This does not change the functional behavior yet, but this changes how the cache is built, doing per-custom_filter regexps so that filters can be matched independently, while still offering caching. * Perform server-side filtering and output result in REST API * Fix numerous filters_changed events being sent when editing multiple keywords at once * Add some tests * Use the new API in the WebUI - use client-side logic for filters we have fetched rules for. This is so that filter changes can be retroactively applied without reloading the UI. - use server-side logic for filters we haven't fetched rules for yet (e.g. network error, or initial timeline loading) * Minor optimizations and refactoring * Perform server-side filtering on the streaming server * Change the wording of filter action labels * Fix issues pointed out by linter * Change design of “Show anyway” link in accordence to review comments * Drop “irreversible” filtering behavior * Move /api/v2/filter_keywords to /api/v1/filters/keywords * Rename `filter_results` attribute to `filtered` * Rename REST::LegacyFilterSerializer to REST::V1::FilterSerializer * Fix systemChannelId value in streaming server * Simplify code by removing client-side filtering code The simplifcation comes at a cost though: filters aren't retroactively applied anymore.
1 year ago
Revamp post filtering system (#18058) * Add model for custom filter keywords * Use CustomFilterKeyword internally Does not change the API * Fix /filters/edit and /filters/new * Add migration tests * Remove whole_word column from custom_filters (covered by custom_filter_keywords) * Redesign /filters Instead of a list, present a card that displays more information and handles multiple keywords per filter. * Redesign /filters/new and /filters/edit to add and remove keywords This adds a new gem dependency: cocoon, as well as a npm dependency: cocoon-js-vanilla. Those are used to easily populate and remove form fields from the user interface when manipulating multiple keyword filters at once. * Add /api/v2/filters to edit filter with multiple keywords Entities: - `Filter`: `id`, `title`, `filter_action` (either `hide` or `warn`), `context` `keywords` - `FilterKeyword`: `id`, `keyword`, `whole_word` API endpoits: - `GET /api/v2/filters` to list filters (including keywords) - `POST /api/v2/filters` to create a new filter `keywords_attributes` can also be passed to create keywords in one request - `GET /api/v2/filters/:id` to read a particular filter - `PUT /api/v2/filters/:id` to update a new filter `keywords_attributes` can also be passed to edit, delete or add keywords in one request - `DELETE /api/v2/filters/:id` to delete a particular filter - `GET /api/v2/filters/:id/keywords` to list keywords for a filter - `POST /api/v2/filters/:filter_id/keywords/:id` to add a new keyword to a filter - `GET /api/v2/filter_keywords/:id` to read a particular keyword - `PUT /api/v2/filter_keywords/:id` to edit a particular keyword - `DELETE /api/v2/filter_keywords/:id` to delete a particular keyword * Change from `irreversible` boolean to `action` enum * Remove irrelevent `irreversible_must_be_within_context` check * Fix /filters/new and /filters/edit with update for filter_action * Fix Rubocop/Codeclimate complaining about task names * Refactor FeedManager#phrase_filtered? This moves regexp building and filter caching to the `CustomFilter` class. This does not change the functional behavior yet, but this changes how the cache is built, doing per-custom_filter regexps so that filters can be matched independently, while still offering caching. * Perform server-side filtering and output result in REST API * Fix numerous filters_changed events being sent when editing multiple keywords at once * Add some tests * Use the new API in the WebUI - use client-side logic for filters we have fetched rules for. This is so that filter changes can be retroactively applied without reloading the UI. - use server-side logic for filters we haven't fetched rules for yet (e.g. network error, or initial timeline loading) * Minor optimizations and refactoring * Perform server-side filtering on the streaming server * Change the wording of filter action labels * Fix issues pointed out by linter * Change design of “Show anyway” link in accordence to review comments * Drop “irreversible” filtering behavior * Move /api/v2/filter_keywords to /api/v1/filters/keywords * Rename `filter_results` attribute to `filtered` * Rename REST::LegacyFilterSerializer to REST::V1::FilterSerializer * Fix systemChannelId value in streaming server * Simplify code by removing client-side filtering code The simplifcation comes at a cost though: filters aren't retroactively applied anymore.
1 year ago
Revamp post filtering system (#18058) * Add model for custom filter keywords * Use CustomFilterKeyword internally Does not change the API * Fix /filters/edit and /filters/new * Add migration tests * Remove whole_word column from custom_filters (covered by custom_filter_keywords) * Redesign /filters Instead of a list, present a card that displays more information and handles multiple keywords per filter. * Redesign /filters/new and /filters/edit to add and remove keywords This adds a new gem dependency: cocoon, as well as a npm dependency: cocoon-js-vanilla. Those are used to easily populate and remove form fields from the user interface when manipulating multiple keyword filters at once. * Add /api/v2/filters to edit filter with multiple keywords Entities: - `Filter`: `id`, `title`, `filter_action` (either `hide` or `warn`), `context` `keywords` - `FilterKeyword`: `id`, `keyword`, `whole_word` API endpoits: - `GET /api/v2/filters` to list filters (including keywords) - `POST /api/v2/filters` to create a new filter `keywords_attributes` can also be passed to create keywords in one request - `GET /api/v2/filters/:id` to read a particular filter - `PUT /api/v2/filters/:id` to update a new filter `keywords_attributes` can also be passed to edit, delete or add keywords in one request - `DELETE /api/v2/filters/:id` to delete a particular filter - `GET /api/v2/filters/:id/keywords` to list keywords for a filter - `POST /api/v2/filters/:filter_id/keywords/:id` to add a new keyword to a filter - `GET /api/v2/filter_keywords/:id` to read a particular keyword - `PUT /api/v2/filter_keywords/:id` to edit a particular keyword - `DELETE /api/v2/filter_keywords/:id` to delete a particular keyword * Change from `irreversible` boolean to `action` enum * Remove irrelevent `irreversible_must_be_within_context` check * Fix /filters/new and /filters/edit with update for filter_action * Fix Rubocop/Codeclimate complaining about task names * Refactor FeedManager#phrase_filtered? This moves regexp building and filter caching to the `CustomFilter` class. This does not change the functional behavior yet, but this changes how the cache is built, doing per-custom_filter regexps so that filters can be matched independently, while still offering caching. * Perform server-side filtering and output result in REST API * Fix numerous filters_changed events being sent when editing multiple keywords at once * Add some tests * Use the new API in the WebUI - use client-side logic for filters we have fetched rules for. This is so that filter changes can be retroactively applied without reloading the UI. - use server-side logic for filters we haven't fetched rules for yet (e.g. network error, or initial timeline loading) * Minor optimizations and refactoring * Perform server-side filtering on the streaming server * Change the wording of filter action labels * Fix issues pointed out by linter * Change design of “Show anyway” link in accordence to review comments * Drop “irreversible” filtering behavior * Move /api/v2/filter_keywords to /api/v1/filters/keywords * Rename `filter_results` attribute to `filtered` * Rename REST::LegacyFilterSerializer to REST::V1::FilterSerializer * Fix systemChannelId value in streaming server * Simplify code by removing client-side filtering code The simplifcation comes at a cost though: filters aren't retroactively applied anymore.
1 year ago
Revamp post filtering system (#18058) * Add model for custom filter keywords * Use CustomFilterKeyword internally Does not change the API * Fix /filters/edit and /filters/new * Add migration tests * Remove whole_word column from custom_filters (covered by custom_filter_keywords) * Redesign /filters Instead of a list, present a card that displays more information and handles multiple keywords per filter. * Redesign /filters/new and /filters/edit to add and remove keywords This adds a new gem dependency: cocoon, as well as a npm dependency: cocoon-js-vanilla. Those are used to easily populate and remove form fields from the user interface when manipulating multiple keyword filters at once. * Add /api/v2/filters to edit filter with multiple keywords Entities: - `Filter`: `id`, `title`, `filter_action` (either `hide` or `warn`), `context` `keywords` - `FilterKeyword`: `id`, `keyword`, `whole_word` API endpoits: - `GET /api/v2/filters` to list filters (including keywords) - `POST /api/v2/filters` to create a new filter `keywords_attributes` can also be passed to create keywords in one request - `GET /api/v2/filters/:id` to read a particular filter - `PUT /api/v2/filters/:id` to update a new filter `keywords_attributes` can also be passed to edit, delete or add keywords in one request - `DELETE /api/v2/filters/:id` to delete a particular filter - `GET /api/v2/filters/:id/keywords` to list keywords for a filter - `POST /api/v2/filters/:filter_id/keywords/:id` to add a new keyword to a filter - `GET /api/v2/filter_keywords/:id` to read a particular keyword - `PUT /api/v2/filter_keywords/:id` to edit a particular keyword - `DELETE /api/v2/filter_keywords/:id` to delete a particular keyword * Change from `irreversible` boolean to `action` enum * Remove irrelevent `irreversible_must_be_within_context` check * Fix /filters/new and /filters/edit with update for filter_action * Fix Rubocop/Codeclimate complaining about task names * Refactor FeedManager#phrase_filtered? This moves regexp building and filter caching to the `CustomFilter` class. This does not change the functional behavior yet, but this changes how the cache is built, doing per-custom_filter regexps so that filters can be matched independently, while still offering caching. * Perform server-side filtering and output result in REST API * Fix numerous filters_changed events being sent when editing multiple keywords at once * Add some tests * Use the new API in the WebUI - use client-side logic for filters we have fetched rules for. This is so that filter changes can be retroactively applied without reloading the UI. - use server-side logic for filters we haven't fetched rules for yet (e.g. network error, or initial timeline loading) * Minor optimizations and refactoring * Perform server-side filtering on the streaming server * Change the wording of filter action labels * Fix issues pointed out by linter * Change design of “Show anyway” link in accordence to review comments * Drop “irreversible” filtering behavior * Move /api/v2/filter_keywords to /api/v1/filters/keywords * Rename `filter_results` attribute to `filtered` * Rename REST::LegacyFilterSerializer to REST::V1::FilterSerializer * Fix systemChannelId value in streaming server * Simplify code by removing client-side filtering code The simplifcation comes at a cost though: filters aren't retroactively applied anymore.
1 year ago
Revamp post filtering system (#18058) * Add model for custom filter keywords * Use CustomFilterKeyword internally Does not change the API * Fix /filters/edit and /filters/new * Add migration tests * Remove whole_word column from custom_filters (covered by custom_filter_keywords) * Redesign /filters Instead of a list, present a card that displays more information and handles multiple keywords per filter. * Redesign /filters/new and /filters/edit to add and remove keywords This adds a new gem dependency: cocoon, as well as a npm dependency: cocoon-js-vanilla. Those are used to easily populate and remove form fields from the user interface when manipulating multiple keyword filters at once. * Add /api/v2/filters to edit filter with multiple keywords Entities: - `Filter`: `id`, `title`, `filter_action` (either `hide` or `warn`), `context` `keywords` - `FilterKeyword`: `id`, `keyword`, `whole_word` API endpoits: - `GET /api/v2/filters` to list filters (including keywords) - `POST /api/v2/filters` to create a new filter `keywords_attributes` can also be passed to create keywords in one request - `GET /api/v2/filters/:id` to read a particular filter - `PUT /api/v2/filters/:id` to update a new filter `keywords_attributes` can also be passed to edit, delete or add keywords in one request - `DELETE /api/v2/filters/:id` to delete a particular filter - `GET /api/v2/filters/:id/keywords` to list keywords for a filter - `POST /api/v2/filters/:filter_id/keywords/:id` to add a new keyword to a filter - `GET /api/v2/filter_keywords/:id` to read a particular keyword - `PUT /api/v2/filter_keywords/:id` to edit a particular keyword - `DELETE /api/v2/filter_keywords/:id` to delete a particular keyword * Change from `irreversible` boolean to `action` enum * Remove irrelevent `irreversible_must_be_within_context` check * Fix /filters/new and /filters/edit with update for filter_action * Fix Rubocop/Codeclimate complaining about task names * Refactor FeedManager#phrase_filtered? This moves regexp building and filter caching to the `CustomFilter` class. This does not change the functional behavior yet, but this changes how the cache is built, doing per-custom_filter regexps so that filters can be matched independently, while still offering caching. * Perform server-side filtering and output result in REST API * Fix numerous filters_changed events being sent when editing multiple keywords at once * Add some tests * Use the new API in the WebUI - use client-side logic for filters we have fetched rules for. This is so that filter changes can be retroactively applied without reloading the UI. - use server-side logic for filters we haven't fetched rules for yet (e.g. network error, or initial timeline loading) * Minor optimizations and refactoring * Perform server-side filtering on the streaming server * Change the wording of filter action labels * Fix issues pointed out by linter * Change design of “Show anyway” link in accordence to review comments * Drop “irreversible” filtering behavior * Move /api/v2/filter_keywords to /api/v1/filters/keywords * Rename `filter_results` attribute to `filtered` * Rename REST::LegacyFilterSerializer to REST::V1::FilterSerializer * Fix systemChannelId value in streaming server * Simplify code by removing client-side filtering code The simplifcation comes at a cost though: filters aren't retroactively applied anymore.
1 year ago
Support for import/export of instance-level domain blocks/allows for 4.x w/ additional fixes (#20597) * Allow import/export of instance-level domain blocks/allows (#1754) * Allow import/export of instance-level domain blocks/allows. Fixes #15095 * Pacify circleci * Address simple code review feedback * Add headers to exported CSV * Extract common import/export functionality to AdminExportControllerConcern * Add additional fields to instance-blocked domain export * Address review feedback * Split instance domain block/allow import/export into separate pages/controllers * Address code review feedback * Pacify DeepSource * Work around Paperclip::HasAttachmentFile for Rails 6 * Fix deprecated API warning in export tests * Remove after_commit workaround (cherry picked from commit 94e98864e39c010635e839fea984f2b4893bef1a) * Add confirmation page when importing blocked domains (#1773) * Move glitch-soc-specific strings to glitch-soc-specific locale files * Add confirmation page when importing blocked domains (cherry picked from commit b91196f4b73fff91997b8077619ae25b6d04a59e) * Fix authorization check in domain blocks controller (cherry picked from commit 75279377583c6e2aa04cc8d7380c593979630b38) * Fix error strings for domain blocks and email-domain blocks Corrected issue with non-error message used for Mastodon:NotPermittedError in Domain Blocks Corrected issue Domain Blocks using the Email Domain Blocks message on ActionContoller::ParameterMissing Corrected issue with Email Domain Blocks using the not_permitted string from "custom emojii's" * Ran i18n-tasks normalize to address test failure * Removed unused admin.export_domain_blocks.not_permitted string Removing unused string as indicated by Check i18n * Fix tests (cherry picked from commit 9094c2f52c24e1c00b594e7c11cd00e4a07eb431) * Fix domain block export not exporting blocks with only media rejection (cherry picked from commit 26ff48ee48a5c03a2a4b0bd03fd322529e6bd960) * Fix various issues with domain block import - stop using Paperclip for processing domain allow/block imports - stop leaving temporary files - better error handling - assume CSV files are UTF-8-encoded (cherry picked from commit cad824d8f501b95377e4f0a957e5a00d517a1902) Co-authored-by: Levi Bard <taktaktaktaktaktaktaktaktaktak@gmail.com> Co-authored-by: Claire <claire.github-309c@sitedethib.com>
1 year 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
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_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!'
  5. contact_missing: Not set
  6. contact_unavailable: N/A
  7. hosted_on: Mastodon hosted on %{domain}
  8. title: About
  9. accounts:
  10. follow: Follow
  11. followers:
  12. one: Follower
  13. other: Followers
  14. following: Following
  15. 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.
  16. last_active: last active
  17. link_verified_on: Ownership of this link was checked on %{date}
  18. nothing_here: There is nothing here!
  19. pin_errors:
  20. following: You must be already following the person you want to endorse
  21. posts:
  22. one: Post
  23. other: Posts
  24. posts_tab_heading: Posts
  25. admin:
  26. account_actions:
  27. action: Perform action
  28. title: Perform moderation action on %{acct}
  29. account_moderation_notes:
  30. create: Leave note
  31. created_msg: Moderation note successfully created!
  32. destroyed_msg: Moderation note successfully destroyed!
  33. accounts:
  34. add_email_domain_block: Block e-mail domain
  35. approve: Approve
  36. approved_msg: Successfully approved %{username}'s sign-up application
  37. are_you_sure: Are you sure?
  38. avatar: Avatar
  39. by_domain: Domain
  40. change_email:
  41. changed_msg: Email successfully changed!
  42. current_email: Current email
  43. label: Change email
  44. new_email: New email
  45. submit: Change email
  46. title: Change email for %{username}
  47. change_role:
  48. changed_msg: Role successfully changed!
  49. label: Change role
  50. no_role: No role
  51. title: Change role for %{username}
  52. confirm: Confirm
  53. confirmed: Confirmed
  54. confirming: Confirming
  55. custom: Custom
  56. delete: Delete data
  57. deleted: Deleted
  58. demote: Demote
  59. destroyed_msg: "%{username}'s data is now queued to be deleted imminently"
  60. disable: Freeze
  61. disable_sign_in_token_auth: Disable e-mail token authentication
  62. disable_two_factor_authentication: Disable 2FA
  63. disabled: Frozen
  64. display_name: Display name
  65. domain: Domain
  66. edit: Edit
  67. email: Email
  68. email_status: Email status
  69. enable: Unfreeze
  70. enable_sign_in_token_auth: Enable e-mail token authentication
  71. enabled: Enabled
  72. enabled_msg: Successfully unfroze %{username}'s account
  73. followers: Followers
  74. follows: Follows
  75. header: Header
  76. inbox_url: Inbox URL
  77. invite_request_text: Reasons for joining
  78. invited_by: Invited by
  79. ip: IP
  80. joined: Joined
  81. location:
  82. all: All
  83. local: Local
  84. remote: Remote
  85. title: Location
  86. login_status: Login status
  87. media_attachments: Media attachments
  88. memorialize: Turn into memoriam
  89. memorialized: Memorialized
  90. memorialized_msg: Successfully turned %{username} into a memorial account
  91. moderation:
  92. active: Active
  93. all: All
  94. pending: Pending
  95. silenced: Limited
  96. suspended: Suspended
  97. title: Moderation
  98. moderation_notes: Moderation notes
  99. most_recent_activity: Most recent activity
  100. most_recent_ip: Most recent IP
  101. no_account_selected: No accounts were changed as none were selected
  102. no_limits_imposed: No limits imposed
  103. no_role_assigned: No role assigned
  104. not_subscribed: Not subscribed
  105. pending: Pending review
  106. perform_full_suspension: Suspend
  107. previous_strikes: Previous strikes
  108. previous_strikes_description_html:
  109. one: This account has <strong>one</strong> strike.
  110. other: This account has <strong>%{count}</strong> strikes.
  111. promote: Promote
  112. protocol: Protocol
  113. public: Public
  114. push_subscription_expires: PuSH subscription expires
  115. redownload: Refresh profile
  116. redownloaded_msg: Successfully refreshed %{username}'s profile from origin
  117. reject: Reject
  118. rejected_msg: Successfully rejected %{username}'s sign-up application
  119. remote_suspension_irreversible: The data of this account has been irreversibly deleted.
  120. remote_suspension_reversible_hint_html: The account has been suspended on their server, and the data will be fully removed on %{date}. Until then, the remote server can restore this account without any ill effects. If you wish to remove all of the account's data immediately, you can do so below.
  121. remove_avatar: Remove avatar
  122. remove_header: Remove header
  123. removed_avatar_msg: Successfully removed %{username}'s avatar image
  124. removed_header_msg: Successfully removed %{username}'s header image
  125. resend_confirmation:
  126. already_confirmed: This user is already confirmed
  127. send: Resend confirmation email
  128. success: Confirmation email successfully sent!
  129. reset: Reset
  130. reset_password: Reset password
  131. resubscribe: Resubscribe
  132. role: Role
  133. search: Search
  134. search_same_email_domain: Other users with the same e-mail domain
  135. search_same_ip: Other users with the same IP
  136. security_measures:
  137. only_password: Only password
  138. password_and_2fa: Password and 2FA
  139. sensitive: Force-sensitive
  140. sensitized: Marked as sensitive
  141. shared_inbox_url: Shared inbox URL
  142. show:
  143. created_reports: Made reports
  144. targeted_reports: Reported by others
  145. silence: Limit
  146. silenced: Limited
  147. statuses: Posts
  148. strikes: Previous strikes
  149. subscribe: Subscribe
  150. suspend: Suspend
  151. suspended: Suspended
  152. 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.
  153. 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.
  154. title: Accounts
  155. unblock_email: Unblock email address
  156. unblocked_email_msg: Successfully unblocked %{username}'s email address
  157. unconfirmed_email: Unconfirmed email
  158. undo_sensitized: Undo force-sensitive
  159. undo_silenced: Undo limit
  160. undo_suspension: Undo suspension
  161. unsilenced_msg: Successfully undid limit of %{username}'s account
  162. unsubscribe: Unsubscribe
  163. unsuspended_msg: Successfully unsuspended %{username}'s account
  164. username: Username
  165. view_domain: View summary for domain
  166. warn: Warn
  167. web: Web
  168. whitelisted: Allowed for federation
  169. action_logs:
  170. action_types:
  171. approve_appeal: Approve Appeal
  172. approve_user: Approve User
  173. assigned_to_self_report: Assign Report
  174. change_email_user: Change E-mail for User
  175. change_role_user: Change Role of User
  176. confirm_user: Confirm User
  177. create_account_warning: Create Warning
  178. create_announcement: Create Announcement
  179. create_canonical_email_block: Create E-mail Block
  180. create_custom_emoji: Create Custom Emoji
  181. create_domain_allow: Create Domain Allow
  182. create_domain_block: Create Domain Block
  183. create_email_domain_block: Create E-mail Domain Block
  184. create_ip_block: Create IP rule
  185. create_unavailable_domain: Create Unavailable Domain
  186. create_user_role: Create Role
  187. demote_user: Demote User
  188. destroy_announcement: Delete Announcement
  189. destroy_canonical_email_block: Delete E-mail Block
  190. destroy_custom_emoji: Delete Custom Emoji
  191. destroy_domain_allow: Delete Domain Allow
  192. destroy_domain_block: Delete Domain Block
  193. destroy_email_domain_block: Delete E-mail Domain Block
  194. destroy_instance: Purge Domain
  195. destroy_ip_block: Delete IP rule
  196. destroy_status: Delete Post
  197. destroy_unavailable_domain: Delete Unavailable Domain
  198. destroy_user_role: Destroy Role
  199. disable_2fa_user: Disable 2FA
  200. disable_custom_emoji: Disable Custom Emoji
  201. disable_sign_in_token_auth_user: Disable E-mail Token Authentication for User
  202. disable_user: Disable User
  203. enable_custom_emoji: Enable Custom Emoji
  204. enable_sign_in_token_auth_user: Enable E-mail Token Authentication for User
  205. enable_user: Enable User
  206. memorialize_account: Memorialize Account
  207. promote_user: Promote User
  208. reject_appeal: Reject Appeal
  209. reject_user: Reject User
  210. remove_avatar_user: Remove Avatar
  211. reopen_report: Reopen Report
  212. resend_user: Resend Confirmation Mail
  213. reset_password_user: Reset Password
  214. resolve_report: Resolve Report
  215. sensitive_account: Force-Sensitive Account
  216. silence_account: Limit Account
  217. suspend_account: Suspend Account
  218. unassigned_report: Unassign Report
  219. unblock_email_account: Unblock email address
  220. unsensitive_account: Undo Force-Sensitive Account
  221. unsilence_account: Undo Limit Account
  222. unsuspend_account: Unsuspend Account
  223. update_announcement: Update Announcement
  224. update_custom_emoji: Update Custom Emoji
  225. update_domain_block: Update Domain Block
  226. update_ip_block: Update IP rule
  227. update_status: Update Post
  228. update_user_role: Update Role
  229. actions:
  230. approve_appeal_html: "%{name} approved moderation decision appeal from %{target}"
  231. approve_user_html: "%{name} approved sign-up from %{target}"
  232. assigned_to_self_report_html: "%{name} assigned report %{target} to themselves"
  233. change_email_user_html: "%{name} changed the e-mail address of user %{target}"
  234. change_role_user_html: "%{name} changed role of %{target}"
  235. confirm_user_html: "%{name} confirmed e-mail address of user %{target}"
  236. create_account_warning_html: "%{name} sent a warning to %{target}"
  237. create_announcement_html: "%{name} created new announcement %{target}"
  238. create_canonical_email_block_html: "%{name} blocked e-mail with the hash %{target}"
  239. create_custom_emoji_html: "%{name} uploaded new emoji %{target}"
  240. create_domain_allow_html: "%{name} allowed federation with domain %{target}"
  241. create_domain_block_html: "%{name} blocked domain %{target}"
  242. create_email_domain_block_html: "%{name} blocked e-mail domain %{target}"
  243. create_ip_block_html: "%{name} created rule for IP %{target}"
  244. create_unavailable_domain_html: "%{name} stopped delivery to domain %{target}"
  245. create_user_role_html: "%{name} created %{target} role"
  246. demote_user_html: "%{name} demoted user %{target}"
  247. destroy_announcement_html: "%{name} deleted announcement %{target}"
  248. destroy_canonical_email_block_html: "%{name} unblocked e-mail with the hash %{target}"
  249. destroy_custom_emoji_html: "%{name} deleted emoji %{target}"
  250. destroy_domain_allow_html: "%{name} disallowed federation with domain %{target}"
  251. destroy_domain_block_html: "%{name} unblocked domain %{target}"
  252. destroy_email_domain_block_html: "%{name} unblocked e-mail domain %{target}"
  253. destroy_instance_html: "%{name} purged domain %{target}"
  254. destroy_ip_block_html: "%{name} deleted rule for IP %{target}"
  255. destroy_status_html: "%{name} removed post by %{target}"
  256. destroy_unavailable_domain_html: "%{name} resumed delivery to domain %{target}"
  257. destroy_user_role_html: "%{name} deleted %{target} role"
  258. disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}"
  259. disable_custom_emoji_html: "%{name} disabled emoji %{target}"
  260. disable_sign_in_token_auth_user_html: "%{name} disabled e-mail token authentication for %{target}"
  261. disable_user_html: "%{name} disabled login for user %{target}"
  262. enable_custom_emoji_html: "%{name} enabled emoji %{target}"
  263. enable_sign_in_token_auth_user_html: "%{name} enabled e-mail token authentication for %{target}"
  264. enable_user_html: "%{name} enabled login for user %{target}"
  265. memorialize_account_html: "%{name} turned %{target}'s account into a memoriam page"
  266. promote_user_html: "%{name} promoted user %{target}"
  267. reject_appeal_html: "%{name} rejected moderation decision appeal from %{target}"
  268. reject_user_html: "%{name} rejected sign-up from %{target}"
  269. remove_avatar_user_html: "%{name} removed %{target}'s avatar"
  270. reopen_report_html: "%{name} reopened report %{target}"
  271. resend_user_html: "%{name} resent confirmation e-mail for %{target}"
  272. reset_password_user_html: "%{name} reset password of user %{target}"
  273. resolve_report_html: "%{name} resolved report %{target}"
  274. sensitive_account_html: "%{name} marked %{target}'s media as sensitive"
  275. silence_account_html: "%{name} limited %{target}'s account"
  276. suspend_account_html: "%{name} suspended %{target}'s account"
  277. unassigned_report_html: "%{name} unassigned report %{target}"
  278. unblock_email_account_html: "%{name} unblocked %{target}'s email address"
  279. unsensitive_account_html: "%{name} unmarked %{target}'s media as sensitive"
  280. unsilence_account_html: "%{name} undid limit of %{target}'s account"
  281. unsuspend_account_html: "%{name} unsuspended %{target}'s account"
  282. update_announcement_html: "%{name} updated announcement %{target}"
  283. update_custom_emoji_html: "%{name} updated emoji %{target}"
  284. update_domain_block_html: "%{name} updated domain block for %{target}"
  285. update_ip_block_html: "%{name} changed rule for IP %{target}"
  286. update_status_html: "%{name} updated post by %{target}"
  287. update_user_role_html: "%{name} changed %{target} role"
  288. deleted_account: deleted account
  289. empty: No logs found.
  290. filter_by_action: Filter by action
  291. filter_by_user: Filter by user
  292. title: Audit log
  293. announcements:
  294. destroyed_msg: Announcement successfully deleted!
  295. edit:
  296. title: Edit announcement
  297. empty: No announcements found.
  298. live: Live
  299. new:
  300. create: Create announcement
  301. title: New announcement
  302. publish: Publish
  303. published_msg: Announcement successfully published!
  304. scheduled_for: Scheduled for %{time}
  305. scheduled_msg: Announcement scheduled for publication!
  306. title: Announcements
  307. unpublish: Unpublish
  308. unpublished_msg: Announcement successfully unpublished!
  309. updated_msg: Announcement successfully updated!
  310. custom_emojis:
  311. assign_category: Assign category
  312. by_domain: Domain
  313. copied_msg: Successfully created local copy of the emoji
  314. copy: Copy
  315. copy_failed_msg: Could not make a local copy of that emoji
  316. create_new_category: Create new category
  317. created_msg: Emoji successfully created!
  318. delete: Delete
  319. destroyed_msg: Emojo successfully destroyed!
  320. disable: Disable
  321. disabled: Disabled
  322. disabled_msg: Successfully disabled that emoji
  323. emoji: Emoji
  324. enable: Enable
  325. enabled: Enabled
  326. enabled_msg: Successfully enabled that emoji
  327. image_hint: PNG or GIF up to %{size}
  328. list: List
  329. listed: Listed
  330. new:
  331. title: Add new custom emoji
  332. no_emoji_selected: No emojis were changed as none were selected
  333. not_permitted: You are not permitted to perform this action
  334. overwrite: Overwrite
  335. shortcode: Shortcode
  336. shortcode_hint: At least 2 characters, only alphanumeric characters and underscores
  337. title: Custom emojis
  338. uncategorized: Uncategorized
  339. unlist: Unlist
  340. unlisted: Unlisted
  341. update_failed_msg: Could not update that emoji
  342. updated_msg: Emoji successfully updated!
  343. upload: Upload
  344. dashboard:
  345. active_users: active users
  346. interactions: interactions
  347. media_storage: Media storage
  348. new_users: new users
  349. opened_reports: reports opened
  350. pending_appeals_html:
  351. one: "<strong>%{count}</strong> pending appeal"
  352. other: "<strong>%{count}</strong> pending appeals"
  353. pending_reports_html:
  354. one: "<strong>%{count}</strong> pending report"
  355. other: "<strong>%{count}</strong> pending reports"
  356. pending_tags_html:
  357. one: "<strong>%{count}</strong> pending hashtag"
  358. other: "<strong>%{count}</strong> pending hashtags"
  359. pending_users_html:
  360. one: "<strong>%{count}</strong> pending user"
  361. other: "<strong>%{count}</strong> pending users"
  362. resolved_reports: reports resolved
  363. software: Software
  364. sources: Sign-up sources
  365. space: Space usage
  366. title: Dashboard
  367. top_languages: Top active languages
  368. top_servers: Top active servers
  369. website: Website
  370. disputes:
  371. appeals:
  372. empty: No appeals found.
  373. title: Appeals
  374. domain_allows:
  375. add_new: Allow federation with domain
  376. created_msg: Domain has been successfully allowed for federation
  377. destroyed_msg: Domain has been disallowed from federation
  378. export: Export
  379. import: Import
  380. undo: Disallow federation with domain
  381. domain_blocks:
  382. add_new: Add new domain block
  383. created_msg: Domain block is now being processed
  384. destroyed_msg: Domain block has been undone
  385. domain: Domain
  386. edit: Edit domain block
  387. existing_domain_block: You have already imposed stricter limits on %{name}.
  388. existing_domain_block_html: You have already imposed stricter limits on %{name}, you need to <a href="%{unblock_url}">unblock it</a> first.
  389. export: Export
  390. import: Import
  391. new:
  392. create: Create block
  393. 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.
  394. severity:
  395. desc_html: "<strong>Limit</strong> will make posts from accounts at this domain invisible to anyone who isn't following them. <strong>Suspend</strong> will remove all content, media, and profile data for this domain's accounts from your server. Use <strong>None</strong> if you just want to reject media files."
  396. noop: None
  397. silence: Limit
  398. suspend: Suspend
  399. title: New domain block
  400. no_domain_block_selected: No domain blocks were changed as none were selected
  401. not_permitted: You are not permitted to perform this action
  402. obfuscate: Obfuscate domain name
  403. obfuscate_hint: Partially obfuscate the domain name in the list if advertising the list of domain limitations is enabled
  404. private_comment: Private comment
  405. private_comment_hint: Comment about this domain limitation for internal use by the moderators.
  406. public_comment: Public comment
  407. public_comment_hint: Comment about this domain limitation for the general public, if advertising the list of domain limitations is enabled.
  408. reject_media: Reject media files
  409. reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions
  410. reject_reports: Reject reports
  411. reject_reports_hint: Ignore all reports coming from this domain. Irrelevant for suspensions
  412. undo: Undo domain block
  413. view: View domain block
  414. email_domain_blocks:
  415. add_new: Add new
  416. attempts_over_week:
  417. one: "%{count} attempt over the last week"
  418. other: "%{count} sign-up attempts over the last week"
  419. created_msg: Successfully blocked e-mail domain
  420. delete: Delete
  421. dns:
  422. types:
  423. mx: MX record
  424. domain: Domain
  425. new:
  426. create: Add domain
  427. resolve: Resolve domain
  428. title: Block new e-mail domain
  429. no_email_domain_block_selected: No e-mail domain blocks were changed as none were selected
  430. resolved_dns_records_hint_html: The domain name resolves to the following MX domains, which are ultimately responsible for accepting e-mail. Blocking an MX domain will block sign-ups from any e-mail address which uses the same MX domain, even if the visible domain name is different. <strong>Be careful not to block major e-mail providers.</strong>
  431. resolved_through_html: Resolved through %{domain}
  432. title: Blocked e-mail domains
  433. export_domain_allows:
  434. new:
  435. title: Import domain allows
  436. no_file: No file selected
  437. export_domain_blocks:
  438. import:
  439. description_html: You are about to import a list of domain blocks. Please review this list very carefully, especially if you have not authored this list yourself.
  440. existing_relationships_warning: Existing follow relationships
  441. private_comment_description_html: 'To help you track where imported blocks come from, imported blocks will be created with the following private comment: <q>%{comment}</q>'
  442. private_comment_template: Imported from %{source} on %{date}
  443. title: Import domain blocks
  444. new:
  445. title: Import domain blocks
  446. no_file: No file selected
  447. follow_recommendations:
  448. 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."
  449. language: For language
  450. status: Status
  451. suppress: Suppress follow recommendation
  452. suppressed: Suppressed
  453. title: Follow recommendations
  454. unsuppress: Restore follow recommendation
  455. instances:
  456. availability:
  457. description_html:
  458. one: If delivering to the domain fails <strong>%{count} day</strong> without succeeding, no further delivery attempts will be made unless a delivery <em>from</em> the domain is received.
  459. other: If delivering to the domain fails on <strong>%{count} different days</strong> without succeeding, no further delivery attempts will be made unless a delivery <em>from</em> the domain is received.
  460. failure_threshold_reached: Failure threshold reached on %{date}.
  461. failures_recorded:
  462. one: Failed attempt on %{count} day.
  463. other: Failed attempts on %{count} different days.
  464. no_failures_recorded: No failures on record.
  465. title: Availability
  466. warning: The last attempt to connect to this server has been unsuccessful
  467. back_to_all: All
  468. back_to_limited: Limited
  469. back_to_warning: Warning
  470. by_domain: Domain
  471. confirm_purge: Are you sure you want to permanently delete data from this domain?
  472. content_policies:
  473. comment: Internal note
  474. description_html: You can define content policies that will be applied to all accounts from this domain and any of its subdomains.
  475. policies:
  476. reject_media: Reject media
  477. reject_reports: Reject reports
  478. silence: Limit
  479. suspend: Suspend
  480. policy: Policy
  481. reason: Public reason
  482. title: Content policies
  483. dashboard:
  484. instance_accounts_dimension: Most followed accounts
  485. instance_accounts_measure: stored accounts
  486. instance_followers_measure: our followers there
  487. instance_follows_measure: their followers here
  488. instance_languages_dimension: Top languages
  489. instance_media_attachments_measure: stored media attachments
  490. instance_reports_measure: reports about them
  491. instance_statuses_measure: stored posts
  492. delivery:
  493. all: All
  494. clear: Clear delivery errors
  495. failing: Failing
  496. restart: Restart delivery
  497. stop: Stop delivery
  498. unavailable: Unavailable
  499. delivery_available: Delivery is available
  500. delivery_error_days: Delivery error days
  501. delivery_error_hint: If delivery is not possible for %{count} days, it will be automatically marked as undeliverable.
  502. destroyed_msg: Data from %{domain} is now queued for imminent deletion.
  503. empty: No domains found.
  504. known_accounts:
  505. one: "%{count} known account"
  506. other: "%{count} known accounts"
  507. moderation:
  508. all: All
  509. limited: Limited
  510. title: Moderation
  511. private_comment: Private comment
  512. public_comment: Public comment
  513. purge: Purge
  514. purge_description_html: If you believe this domain is offline for good, you can delete all account records and associated data from this domain from your storage. This may take a while.
  515. title: Federation
  516. total_blocked_by_us: Blocked by us
  517. total_followed_by_them: Followed by them
  518. total_followed_by_us: Followed by us
  519. total_reported: Reports about them
  520. total_storage: Media attachments
  521. totals_time_period_hint_html: The totals displayed below include data for all time.
  522. invites:
  523. deactivate_all: Deactivate all
  524. filter:
  525. all: All
  526. available: Available
  527. expired: Expired
  528. title: Filter
  529. title: Invites
  530. ip_blocks:
  531. add_new: Create rule
  532. created_msg: Successfully added new IP rule
  533. delete: Delete
  534. expires_in:
  535. '1209600': 2 weeks
  536. '15778476': 6 months
  537. '2629746': 1 month
  538. '31556952': 1 year
  539. '86400': 1 day
  540. '94670856': 3 years
  541. new:
  542. title: Create new IP rule
  543. no_ip_block_selected: No IP rules were changed as none were selected
  544. title: IP rules
  545. relationships:
  546. title: "%{acct}'s relationships"
  547. relays:
  548. add_new: Add new relay
  549. delete: Delete
  550. 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.
  551. disable: Disable
  552. disabled: Disabled
  553. enable: Enable
  554. 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.
  555. enabled: Enabled
  556. inbox_url: Relay URL
  557. pending: Waiting for relay's approval
  558. save_and_enable: Save and enable
  559. setup: Setup a relay connection
  560. signatures_not_enabled: Relays may not work correctly while secure mode or limited federation mode is enabled
  561. status: Status
  562. title: Relays
  563. report_notes:
  564. created_msg: Report note successfully created!
  565. destroyed_msg: Report note successfully deleted!
  566. reports:
  567. account:
  568. notes:
  569. one: "%{count} note"
  570. other: "%{count} notes"
  571. action_log: Audit log
  572. action_taken_by: Action taken by
  573. actions:
  574. delete_description_html: The reported posts will be deleted and a strike will be recorded to help you escalate on future infractions by the same account.
  575. mark_as_sensitive_description_html: The media in the reported posts will be marked as sensitive and a strike will be recorded to help you escalate on future infractions by the same account.
  576. other_description_html: See more options for controlling the account's behaviour and customize communication to the reported account.
  577. resolve_description_html: No action will be taken against the reported account, no strike recorded, and the report will be closed.
  578. silence_description_html: The profile will be visible only to those who already follow it or manually look it up, severely limiting its reach. Can always be reverted.
  579. suspend_description_html: The profile and all its contents will become inaccessible until it is eventually deleted. Interacting with the account will be impossible. Reversible within 30 days.
  580. actions_description_html: Decide which action to take to resolve this report. If you take a punitive action against the reported account, an e-mail notification will be sent to them, except when the <strong>Spam</strong> category is selected.
  581. add_to_report: Add more to report
  582. are_you_sure: Are you sure?
  583. assign_to_self: Assign to me
  584. assigned: Assigned moderator
  585. by_target_domain: Domain of reported account
  586. category: Category
  587. category_description_html: The reason this account and/or content was reported will be cited in communication with the reported account
  588. comment:
  589. none: None
  590. comment_description_html: 'To provide more information, %{name} wrote:'
  591. created_at: Reported
  592. delete_and_resolve: Delete posts
  593. forwarded: Forwarded
  594. forwarded_to: Forwarded to %{domain}
  595. mark_as_resolved: Mark as resolved
  596. mark_as_sensitive: Mark as sensitive
  597. mark_as_unresolved: Mark as unresolved
  598. no_one_assigned: No one
  599. notes:
  600. create: Add note
  601. create_and_resolve: Resolve with note
  602. create_and_unresolve: Reopen with note
  603. delete: Delete
  604. placeholder: Describe what actions have been taken, or any other related updates...
  605. title: Notes
  606. notes_description_html: View and leave notes to other moderators and your future self
  607. quick_actions_description_html: 'Take a quick action or scroll down to see reported content:'
  608. remote_user_placeholder: the remote user from %{instance}
  609. reopen: Reopen report
  610. report: 'Report #%{id}'
  611. reported_account: Reported account
  612. reported_by: Reported by
  613. resolved: Resolved
  614. resolved_msg: Report successfully resolved!
  615. skip_to_actions: Skip to actions
  616. status: Status
  617. statuses: Reported content
  618. statuses_description_html: Offending content will be cited in communication with the reported account
  619. target_origin: Origin of reported account
  620. title: Reports
  621. unassign: Unassign
  622. unresolved: Unresolved
  623. updated_at: Updated
  624. view_profile: View profile
  625. roles:
  626. add_new: Add role
  627. assigned_users:
  628. one: "%{count} user"
  629. other: "%{count} users"
  630. categories:
  631. administration: Administration
  632. devops: DevOps
  633. invites: Invites
  634. moderation: Moderation
  635. special: Special
  636. delete: Delete
  637. description_html: With <strong>user roles</strong>, you can customize which functions and areas of Mastodon your users can access.
  638. edit: Edit '%{name}' role
  639. everyone: Default permissions
  640. everyone_full_description_html: This is the <strong>base role</strong> affecting <strong>all users</strong>, even those without an assigned role. All other roles inherit permissions from it.
  641. permissions_count:
  642. one: "%{count} permission"
  643. other: "%{count} permissions"
  644. privileges:
  645. administrator: Administrator
  646. administrator_description: Users with this permission will bypass every permission
  647. delete_user_data: Delete User Data
  648. delete_user_data_description: Allows users to delete other users' data without delay
  649. invite_users: Invite Users
  650. invite_users_description: Allows users to invite new people to the server
  651. manage_announcements: Manage Announcements
  652. manage_announcements_description: Allows users to manage announcements on the server
  653. manage_appeals: Manage Appeals
  654. manage_appeals_description: Allows users to review appeals against moderation actions
  655. manage_blocks: Manage Blocks
  656. manage_blocks_description: Allows users to block e-mail providers and IP addresses
  657. manage_custom_emojis: Manage Custom Emojis
  658. manage_custom_emojis_description: Allows users to manage custom emojis on the server
  659. manage_federation: Manage Federation
  660. manage_federation_description: Allows users to block or allow federation with other domains, and control deliverability
  661. manage_invites: Manage Invites
  662. manage_invites_description: Allows users to browse and deactivate invite links
  663. manage_reports: Manage Reports
  664. manage_reports_description: Allows users to review reports and perform moderation actions against them
  665. manage_roles: Manage Roles
  666. manage_roles_description: Allows users to manage and assign roles below theirs
  667. manage_rules: Manage Rules
  668. manage_rules_description: Allows users to change server rules
  669. manage_settings: Manage Settings
  670. manage_settings_description: Allows users to change site settings
  671. manage_taxonomies: Manage Taxonomies
  672. manage_taxonomies_description: Allows users to review trending content and update hashtag settings
  673. manage_user_access: Manage User Access
  674. manage_user_access_description: Allows users to disable other users' two-factor authentication, change their e-mail address, and reset their password
  675. manage_users: Manage Users
  676. manage_users_description: Allows users to view other users' details and perform moderation actions against them
  677. manage_webhooks: Manage Webhooks
  678. manage_webhooks_description: Allows users to set up webhooks for administrative events
  679. view_audit_log: View Audit Log
  680. view_audit_log_description: Allows users to see a history of administrative actions on the server
  681. view_dashboard: View Dashboard
  682. view_dashboard_description: Allows users to access the dashboard and various metrics
  683. view_devops: DevOps
  684. view_devops_description: Allows users to access Sidekiq and pgHero dashboards
  685. title: Roles
  686. rules:
  687. add_new: Add rule
  688. delete: Delete
  689. 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.
  690. edit: Edit rule
  691. empty: No server rules have been defined yet.
  692. title: Server rules
  693. settings:
  694. about:
  695. manage_rules: Manage server rules
  696. preamble: Provide in-depth information about how the server is operated, moderated, funded.
  697. rules_hint: There is a dedicated area for rules that your users are expected to adhere to.
  698. title: About
  699. appearance:
  700. preamble: Customize Mastodon's web interface.
  701. title: Appearance
  702. branding:
  703. preamble: Your server's branding differentiates it from other servers in the network. This information may be displayed across a variety of environments, such as Mastodon's web interface, native applications, in link previews on other websites and within messaging apps, and so on. For this reason, it is best to keep this information clear, short and concise.
  704. title: Branding
  705. content_retention:
  706. preamble: Control how user-generated content is stored in Mastodon.
  707. title: Content retention
  708. default_noindex:
  709. desc_html: Affects all users who have not changed this setting themselves
  710. title: Opt users out of search engine indexing by default
  711. discovery:
  712. follow_recommendations: Follow recommendations
  713. preamble: Surfacing interesting content is instrumental in onboarding new users who may not know anyone Mastodon. Control how various discovery features work on your server.
  714. profile_directory: Profile directory
  715. public_timelines: Public timelines
  716. title: Discovery
  717. trends: Trends
  718. domain_blocks:
  719. all: To everyone
  720. disabled: To no one
  721. users: To logged-in local users
  722. registrations:
  723. preamble: Control who can create an account on your server.
  724. title: Registrations
  725. registrations_mode:
  726. modes:
  727. approved: Approval required for sign up
  728. none: Nobody can sign up
  729. open: Anyone can sign up
  730. title: Server Settings
  731. site_uploads:
  732. delete: Delete uploaded file
  733. destroyed_msg: Site upload successfully deleted!
  734. statuses:
  735. account: Author
  736. application: Application
  737. back_to_account: Back to account page
  738. back_to_report: Back to report page
  739. batch:
  740. remove_from_report: Remove from report
  741. report: Report
  742. deleted: Deleted
  743. favourites: Favourites
  744. history: Version history
  745. in_reply_to: Replying to
  746. language: Language
  747. media:
  748. title: Media
  749. metadata: Metadata
  750. no_status_selected: No posts were changed as none were selected
  751. open: Open post
  752. original_status: Original post
  753. reblogs: Reblogs
  754. status_changed: Post changed
  755. title: Account posts
  756. trending: Trending
  757. visibility: Visibility
  758. with_media: With media
  759. strikes:
  760. actions:
  761. delete_statuses: "%{name} deleted %{target}'s posts"
  762. disable: "%{name} froze %{target}'s account"
  763. mark_statuses_as_sensitive: "%{name} marked %{target}'s posts as sensitive"
  764. none: "%{name} sent a warning to %{target}"
  765. sensitive: "%{name} marked %{target}'s account as sensitive"
  766. silence: "%{name} limited %{target}'s account"
  767. suspend: "%{name} suspended %{target}'s account"
  768. appeal_approved: Appealed
  769. appeal_pending: Appeal pending
  770. system_checks:
  771. database_schema_check:
  772. message_html: There are pending database migrations. Please run them to ensure the application behaves as expected
  773. elasticsearch_running_check:
  774. message_html: Could not connect to Elasticsearch. Please check that it is running, or disable full-text search
  775. elasticsearch_version_check:
  776. message_html: 'Incompatible Elasticsearch version: %{value}'
  777. version_comparison: Elasticsearch %{running_version} is running while %{required_version} is required
  778. rules_check:
  779. action: Manage server rules
  780. message_html: You haven't defined any server rules.
  781. sidekiq_process_check:
  782. message_html: No Sidekiq process running for the %{value} queue(s). Please review your Sidekiq configuration
  783. tags:
  784. review: Review status
  785. updated_msg: Hashtag settings updated successfully
  786. title: Administration
  787. trends:
  788. allow: Allow
  789. approved: Approved
  790. disallow: Disallow
  791. links:
  792. allow: Allow link
  793. allow_provider: Allow publisher
  794. description_html: These are links that are currently being shared a lot by accounts that your server sees posts from. It can help your users find out what's going on in the world. No links are displayed publicly until you approve the publisher. You can also allow or reject individual links.
  795. disallow: Disallow link
  796. disallow_provider: Disallow publisher
  797. no_link_selected: No links were changed as none were selected
  798. publishers:
  799. no_publisher_selected: No publishers were changed as none were selected
  800. shared_by_over_week:
  801. one: Shared by one person over the last week
  802. other: Shared by %{count} people over the last week
  803. title: Trending links
  804. usage_comparison: Shared %{today} times today, compared to %{yesterday} yesterday
  805. only_allowed: Only allowed
  806. pending_review: Pending review
  807. preview_card_providers:
  808. allowed: Links from this publisher can trend
  809. description_html: These are domains from which links are often shared on your server. Links will not trend publicly unless the domain of the link is approved. Your approval (or rejection) extends to subdomains.
  810. rejected: Links from this publisher won't trend
  811. title: Publishers
  812. rejected: Rejected
  813. statuses:
  814. allow: Allow post
  815. allow_account: Allow author
  816. description_html: These are posts that your server knows about that are currently being shared and favourited a lot at the moment. It can help your new and returning users to find more people to follow. No posts are displayed publicly until you approve the author, and the author allows their account to be suggested to others. You can also allow or reject individual posts.
  817. disallow: Disallow post
  818. disallow_account: Disallow author
  819. no_status_selected: No trending posts were changed as none were selected
  820. not_discoverable: Author has not opted-in to being discoverable
  821. shared_by:
  822. one: Shared or favourited one time
  823. other: Shared and favourited %{friendly_count} times
  824. title: Trending posts
  825. tags:
  826. current_score: Current score %{score}
  827. dashboard:
  828. tag_accounts_measure: unique uses
  829. tag_languages_dimension: Top languages
  830. tag_servers_dimension: Top servers
  831. tag_servers_measure: different servers
  832. tag_uses_measure: total uses
  833. description_html: These are hashtags that are currently appearing in a lot of posts that your server sees. It can help your users find out what people are talking the most about at the moment. No hashtags are displayed publicly until you approve them.
  834. listable: Can be suggested
  835. no_tag_selected: No tags were changed as none were selected
  836. not_listable: Won't be suggested
  837. not_trendable: Won't appear under trends
  838. not_usable: Cannot be used
  839. peaked_on_and_decaying: Peaked on %{date}, now decaying
  840. title: Trending hashtags
  841. trendable: Can appear under trends
  842. trending_rank: 'Trending #%{rank}'
  843. usable: Can be used
  844. usage_comparison: Used %{today} times today, compared to %{yesterday} yesterday
  845. used_by_over_week:
  846. one: Used by one person over the last week
  847. other: Used by %{count} people over the last week
  848. title: Trends
  849. trending: Trending
  850. warning_presets:
  851. add_new: Add new
  852. delete: Delete
  853. edit_preset: Edit warning preset
  854. empty: You haven't defined any warning presets yet.
  855. title: Manage warning presets
  856. webhooks:
  857. add_new: Add endpoint
  858. delete: Delete
  859. description_html: A <strong>webhook</strong> enables Mastodon to push <strong>real-time notifications</strong> about chosen events to your own application, so your application can <strong>automatically trigger reactions</strong>.
  860. disable: Disable
  861. disabled: Disabled
  862. edit: Edit endpoint
  863. empty: You don't have any webhook endpoints configured yet.
  864. enable: Enable
  865. enabled: Active
  866. enabled_events:
  867. one: 1 enabled event
  868. other: "%{count} enabled events"
  869. events: Events
  870. new: New webhook
  871. rotate_secret: Rotate secret
  872. secret: Signing secret
  873. status: Status
  874. title: Webhooks
  875. webhook: Webhook
  876. admin_mailer:
  877. new_appeal:
  878. actions:
  879. delete_statuses: to delete their posts
  880. disable: to freeze their account
  881. mark_statuses_as_sensitive: to mark their posts as sensitive
  882. none: a warning
  883. sensitive: to mark their account as sensitive
  884. silence: to limit their account
  885. suspend: to suspend their account
  886. body: "%{target} is appealing a moderation decision by %{action_taken_by} from %{date}, which was %{type}. They wrote:"
  887. next_steps: You can approve the appeal to undo the moderation decision, or ignore it.
  888. subject: "%{username} is appealing a moderation decision on %{instance}"
  889. new_pending_account:
  890. body: The details of the new account are below. You can approve or reject this application.
  891. subject: New account up for review on %{instance} (%{username})
  892. new_report:
  893. body: "%{reporter} has reported %{target}"
  894. body_remote: Someone from %{domain} has reported %{target}
  895. subject: New report for %{instance} (#%{id})
  896. new_trends:
  897. body: 'The following items need a review before they can be displayed publicly:'
  898. new_trending_links:
  899. title: Trending links
  900. new_trending_statuses:
  901. title: Trending posts
  902. new_trending_tags:
  903. no_approved_tags: There are currently no approved trending hashtags.
  904. requirements: 'Any of these candidates could surpass the #%{rank} approved trending hashtag, which is currently #%{lowest_tag_name} with a score of %{lowest_tag_score}.'
  905. title: Trending hashtags
  906. subject: New trends up for review on %{instance}
  907. aliases:
  908. add_new: Create alias
  909. created_msg: Successfully created a new alias. You can now initiate the move from the old account.
  910. deleted_msg: Successfully removed the alias. Moving from that account to this one will no longer be possible.
  911. empty: You have no aliases.
  912. 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>.
  913. remove: Unlink alias
  914. appearance:
  915. advanced_web_interface: Advanced web interface
  916. 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.'
  917. animations_and_accessibility: Animations and accessibility
  918. confirmation_dialogs: Confirmation dialogs
  919. discovery: Discovery
  920. localization:
  921. body: Mastodon is translated by volunteers.
  922. guide_link: https://crowdin.com/project/mastodon
  923. guide_link_text: Everyone can contribute.
  924. sensitive_content: Sensitive content
  925. toot_layout: Post layout
  926. application_mailer:
  927. notification_preferences: Change e-mail preferences
  928. salutation: "%{name},"
  929. settings: 'Change e-mail preferences: %{link}'
  930. view: 'View:'
  931. view_profile: View profile
  932. view_status: View post
  933. applications:
  934. created: Application successfully created
  935. destroyed: Application successfully deleted
  936. regenerate_token: Regenerate access token
  937. token_regenerated: Access token successfully regenerated
  938. warning: Be very careful with this data. Never share it with anyone!
  939. your_token: Your access token
  940. auth:
  941. apply_for_account: Request an account
  942. change_password: Password
  943. delete_account: Delete account
  944. delete_account_html: If you wish to delete your account, you can <a href="%{path}">proceed here</a>. You will be asked for confirmation.
  945. description:
  946. prefix_invited_by_user: "@%{name} invites you to join this server of Mastodon!"
  947. prefix_sign_up: Sign up on Mastodon today!
  948. suffix: With an account, you will be able to follow people, post updates and exchange messages with users from any Mastodon server and more!
  949. didnt_get_confirmation: Didn't receive confirmation instructions?
  950. dont_have_your_security_key: Don't have your security key?
  951. forgot_password: Forgot your password?
  952. invalid_reset_password_token: Password reset token is invalid or expired. Please request a new one.
  953. link_to_otp: Enter a two-factor code from your phone or a recovery code
  954. link_to_webauth: Use your security key device
  955. log_in_with: Log in with
  956. login: Log in
  957. logout: Logout
  958. migrate_account: Move to a different account
  959. migrate_account_html: If you wish to redirect this account to a different one, you can <a href="%{path}">configure it here</a>.
  960. or_log_in_with: Or log in with
  961. privacy_policy_agreement_html: I have read and agree to the <a href="%{privacy_policy_path}" target="_blank">privacy policy</a>
  962. providers:
  963. cas: CAS
  964. saml: SAML
  965. register: Sign up
  966. registration_closed: "%{instance} is not accepting new members"
  967. resend_confirmation: Resend confirmation instructions
  968. reset_password: Reset password
  969. rules:
  970. preamble: These are set and enforced by the %{domain} moderators.
  971. title: Some ground rules.
  972. security: Security
  973. set_new_password: Set new password
  974. setup:
  975. email_below_hint_html: If the below e-mail address is incorrect, you can change it here and receive a new confirmation e-mail.
  976. 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.
  977. title: Setup
  978. sign_in:
  979. preamble_html: Sign in with your <strong>%{domain}</strong> credentials. If your account is hosted on a different server, you will not be able to log in here.
  980. title: Sign in to %{domain}
  981. sign_up:
  982. preamble: With an account on this Mastodon server, you'll be able to follow any other person on the network, regardless of where their account is hosted.
  983. title: Let's get you set up on %{domain}.
  984. status:
  985. account_status: Account status
  986. confirming: Waiting for e-mail confirmation to be completed.
  987. functional: Your account is fully operational.
  988. 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.
  989. redirecting_to: Your account is inactive because it is currently redirecting to %{acct}.
  990. view_strikes: View past strikes against your account
  991. too_fast: Form submitted too fast, try again.
  992. use_security_key: Use security key
  993. authorize_follow:
  994. already_following: You are already following this account
  995. already_requested: You have already sent a follow request to that account
  996. error: Unfortunately, there was an error looking up the remote account
  997. follow: Follow
  998. follow_request: 'You have sent a follow request to:'
  999. following: 'Success! You are now following:'
  1000. post_follow:
  1001. close: Or, you can just close this window.
  1002. return: Show the user's profile
  1003. web: Go to web
  1004. title: Follow %{acct}
  1005. challenge:
  1006. confirm: Continue
  1007. hint_html: "<strong>Tip:</strong> We won't ask you for your password again for the next hour."
  1008. invalid_password: Invalid password
  1009. prompt: Confirm password to continue
  1010. crypto:
  1011. errors:
  1012. invalid_key: is not a valid Ed25519 or Curve25519 key
  1013. invalid_signature: is not a valid Ed25519 signature
  1014. date:
  1015. formats:
  1016. default: "%b %d, %Y"
  1017. with_month_name: "%B %d, %Y"
  1018. datetime:
  1019. distance_in_words:
  1020. about_x_hours: "%{count}h"
  1021. about_x_months: "%{count}mo"
  1022. about_x_years: "%{count}y"
  1023. almost_x_years: "%{count}y"
  1024. half_a_minute: Just now
  1025. less_than_x_minutes: "%{count}m"
  1026. less_than_x_seconds: Just now
  1027. over_x_years: "%{count}y"
  1028. x_days: "%{count}d"
  1029. x_minutes: "%{count}m"
  1030. x_months: "%{count}mo"
  1031. x_seconds: "%{count}s"
  1032. deletes:
  1033. challenge_not_passed: The information you entered was not correct
  1034. confirm_password: Enter your current password to verify your identity
  1035. confirm_username: Enter your username to confirm the procedure
  1036. proceed: Delete account
  1037. success_msg: Your account was successfully deleted
  1038. warning:
  1039. before: 'Before proceeding, please read these notes carefully:'
  1040. caches: Content that has been cached by other servers may persist
  1041. data_removal: Your posts and other data will be permanently removed
  1042. email_change_html: You can <a href="%{path}">change your e-mail address</a> without deleting your account
  1043. email_contact_html: If it still doesn't arrive, you can e-mail <a href="mailto:%{email}">%{email}</a> for help
  1044. email_reconfirmation_html: If you are not receiving the confirmation e-mail, you can <a href="%{path}">request it again</a>
  1045. irreversible: You will not be able to restore or reactivate your account
  1046. more_details_html: For more details, see the <a href="%{terms_path}">privacy policy</a>.
  1047. username_available: Your username will become available again
  1048. username_unavailable: Your username will remain unavailable
  1049. disputes:
  1050. strikes:
  1051. action_taken: Action taken
  1052. appeal: Appeal
  1053. appeal_approved: This strike has been successfully appealed and is no longer valid
  1054. appeal_rejected: The appeal has been rejected
  1055. appeal_submitted_at: Appeal submitted
  1056. appealed_msg: Your appeal has been submitted. If it is approved, you will be notified.
  1057. appeals:
  1058. submit: Submit appeal
  1059. approve_appeal: Approve appeal
  1060. associated_report: Associated report
  1061. created_at: Dated
  1062. description_html: These are actions taken against your account and warnings that have been sent to you by the staff of %{instance}.
  1063. recipient: Addressed to
  1064. reject_appeal: Reject appeal
  1065. status: 'Post #%{id}'
  1066. status_removed: Post already removed from system
  1067. title: "%{action} from %{date}"
  1068. title_actions:
  1069. delete_statuses: Post removal
  1070. disable: Freezing of account
  1071. mark_statuses_as_sensitive: Marking of posts as sensitive
  1072. none: Warning
  1073. sensitive: Marking of account as sensitive
  1074. silence: Limitation of account
  1075. suspend: Suspension of account
  1076. your_appeal_approved: Your appeal has been approved
  1077. your_appeal_pending: You have submitted an appeal
  1078. your_appeal_rejected: Your appeal has been rejected
  1079. domain_validator:
  1080. invalid_domain: is not a valid domain name
  1081. errors:
  1082. '400': The request you submitted was invalid or malformed.
  1083. '403': You don't have permission to view this page.
  1084. '404': The page you are looking for isn't here.
  1085. '406': This page is not available in the requested format.
  1086. '410': The page you were looking for doesn't exist here anymore.
  1087. '422':
  1088. content: Security verification failed. Are you blocking cookies?
  1089. title: Security verification failed
  1090. '429': Too many requests
  1091. '500':
  1092. content: We're sorry, but something went wrong on our end.
  1093. title: This page is not correct
  1094. '503': The page could not be served due to a temporary server failure.
  1095. 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.
  1096. existing_username_validator:
  1097. not_found: could not find a local user with that username
  1098. not_found_multiple: could not find %{usernames}
  1099. exports:
  1100. archive_takeout:
  1101. date: Date
  1102. download: Download your archive
  1103. 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.
  1104. in_progress: Compiling your archive...
  1105. request: Request your archive
  1106. size: Size
  1107. blocks: You block
  1108. bookmarks: Bookmarks
  1109. csv: CSV
  1110. domain_blocks: Domain blocks
  1111. lists: Lists
  1112. mutes: You mute
  1113. storage: Media storage
  1114. featured_tags:
  1115. add_new: Add new
  1116. errors:
  1117. limit: You have already featured the maximum amount of hashtags
  1118. 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."
  1119. filters:
  1120. contexts:
  1121. account: Profiles
  1122. home: Home and lists
  1123. notifications: Notifications
  1124. public: Public timelines
  1125. thread: Conversations
  1126. edit:
  1127. add_keyword: Add keyword
  1128. keywords: Keywords
  1129. statuses: Individual posts
  1130. statuses_hint_html: This filter applies to select individual posts regardless of whether they match the keywords below. <a href="%{path}">Review or remove posts from the filter</a>.
  1131. title: Edit filter
  1132. errors:
  1133. deprecated_api_multiple_keywords: These parameters cannot be changed from this application because they apply to more than one filter keyword. Use a more recent application or the web interface.
  1134. invalid_context: None or invalid context supplied
  1135. index:
  1136. contexts: Filters in %{contexts}
  1137. delete: Delete
  1138. empty: You have no filters.
  1139. expires_in: Expires in %{distance}
  1140. expires_on: Expires on %{date}
  1141. keywords:
  1142. one: "%{count} keyword"
  1143. other: "%{count} keywords"
  1144. statuses:
  1145. one: "%{count} post"
  1146. other: "%{count} posts"
  1147. statuses_long:
  1148. one: "%{count} individual post hidden"
  1149. other: "%{count} individual posts hidden"
  1150. title: Filters
  1151. new:
  1152. save: Save new filter
  1153. title: Add new filter
  1154. statuses:
  1155. back_to_filter: Back to filter
  1156. batch:
  1157. remove: Remove from filter
  1158. index:
  1159. hint: This filter applies to select individual posts regardless of other criteria. You can add more posts to this filter from the web interface.
  1160. title: Filtered posts
  1161. footer:
  1162. trending_now: Trending now
  1163. generic:
  1164. all: All
  1165. all_items_on_page_selected_html:
  1166. one: "<strong>%{count}</strong> item on this page is selected."
  1167. other: All <strong>%{count}</strong> items on this page are selected.
  1168. all_matching_items_selected_html:
  1169. one: "<strong>%{count}</strong> item matching your search is selected."
  1170. other: All <strong>%{count}</strong> items matching your search are selected.
  1171. changes_saved_msg: Changes successfully saved!
  1172. copy: Copy
  1173. delete: Delete
  1174. deselect: Deselect all
  1175. none: None
  1176. order_by: Order by
  1177. save_changes: Save changes
  1178. select_all_matching_items:
  1179. one: Select %{count} item matching your search.
  1180. other: Select all %{count} items matching your search.
  1181. today: today
  1182. validation_errors:
  1183. one: Something isn't quite right yet! Please review the error below
  1184. other: Something isn't quite right yet! Please review %{count} errors below
  1185. html_validator:
  1186. invalid_markup: 'contains invalid HTML markup: %{error}'
  1187. imports:
  1188. errors:
  1189. invalid_csv_file: 'Invalid CSV file. Error: %{error}'
  1190. over_rows_processing_limit: contains more than %{count} rows
  1191. modes:
  1192. merge: Merge
  1193. merge_long: Keep existing records and add new ones
  1194. overwrite: Overwrite
  1195. overwrite_long: Replace current records with the new ones
  1196. preface: You can import data that you have exported from another server, such as a list of the people you are following or blocking.
  1197. success: Your data was successfully uploaded and will be processed in due time
  1198. types:
  1199. blocking: Blocking list
  1200. bookmarks: Bookmarks
  1201. domain_blocking: Domain blocking list
  1202. following: Following list
  1203. muting: Muting list
  1204. upload: Upload
  1205. invites:
  1206. delete: Deactivate
  1207. expired: Expired
  1208. expires_in:
  1209. '1800': 30 minutes
  1210. '21600': 6 hours
  1211. '3600': 1 hour
  1212. '43200': 12 hours
  1213. '604800': 1 week
  1214. '86400': 1 day
  1215. expires_in_prompt: Never
  1216. generate: Generate invite link
  1217. invited_by: 'You were invited by:'
  1218. max_uses:
  1219. one: 1 use
  1220. other: "%{count} uses"
  1221. max_uses_prompt: No limit
  1222. prompt: Generate and share links with others to grant access to this server
  1223. table:
  1224. expires_at: Expires
  1225. uses: Uses
  1226. title: Invite people
  1227. lists:
  1228. errors:
  1229. limit: You have reached the maximum amount of lists
  1230. login_activities:
  1231. authentication_methods:
  1232. otp: two-factor authentication app
  1233. password: password
  1234. sign_in_token: e-mail security code
  1235. webauthn: security keys
  1236. description_html: If you see activity that you don't recognize, consider changing your password and enabling two-factor authentication.
  1237. empty: No authentication history available
  1238. failed_sign_in_html: Failed sign-in attempt with %{method} from %{ip} (%{browser})
  1239. successful_sign_in_html: Successful sign-in with %{method} from %{ip} (%{browser})
  1240. title: Authentication history
  1241. media_attachments:
  1242. validations:
  1243. images_and_video: Cannot attach a video to a post that already contains images
  1244. not_ready: Cannot attach files that have not finished processing. Try again in a moment!
  1245. too_many: Cannot attach more than 4 files
  1246. migrations:
  1247. acct: Moved to
  1248. cancel: Cancel redirect
  1249. cancel_explanation: Cancelling the redirect will re-activate your current account, but will not bring back followers that have been moved to that account.
  1250. cancelled_msg: Successfully cancelled the redirect.
  1251. errors:
  1252. already_moved: is the same account you have already moved to
  1253. missing_also_known_as: is not an alias of this account
  1254. move_to_self: cannot be current account
  1255. not_found: could not be found
  1256. on_cooldown: You are on cooldown
  1257. followers_count: Followers at time of move
  1258. incoming_migrations: Moving from a different account
  1259. incoming_migrations_html: To move from another account to this one, first you need to <a href="%{path}">create an account alias</a>.
  1260. moved_msg: Your account is now redirecting to %{acct} and your followers are being moved over.
  1261. not_redirecting: Your account is not redirecting to any other account currently.
  1262. on_cooldown: You have recently migrated your account. This function will become available again in %{count} days.
  1263. past_migrations: Past migrations
  1264. proceed_with_move: Move followers
  1265. redirected_msg: Your account is now redirecting to %{acct}.
  1266. redirecting_to: Your account is redirecting to %{acct}.
  1267. set_redirect: Set redirect
  1268. warning:
  1269. backreference_required: The new account must first be configured to back-reference this one
  1270. before: 'Before proceeding, please read these notes carefully:'
  1271. cooldown: After moving there is a waiting period during which you will not be able to move again
  1272. disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation.
  1273. followers: This action will move all followers from the current account to the new account
  1274. only_redirect_html: Alternatively, you can <a href="%{path}">only put up a redirect on your profile</a>.
  1275. other_data: No other data will be moved automatically
  1276. redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches
  1277. moderation:
  1278. title: Moderation
  1279. move_handler:
  1280. carry_blocks_over_text: This user moved from %{acct}, which you had blocked.
  1281. carry_mutes_over_text: This user moved from %{acct}, which you had muted.
  1282. copy_account_note_text: 'This user moved from %{acct}, here were your previous notes about them:'
  1283. navigation:
  1284. toggle_menu: Toggle menu
  1285. notification_mailer:
  1286. admin:
  1287. report:
  1288. subject: "%{name} submitted a report"
  1289. sign_up:
  1290. subject: "%{name} signed up"
  1291. favourite:
  1292. body: 'Your post was favourited by %{name}:'
  1293. subject: "%{name} favourited your post"
  1294. title: New favourite
  1295. follow:
  1296. body: "%{name} is now following you!"
  1297. subject: "%{name} is now following you"
  1298. title: New follower
  1299. follow_request:
  1300. action: Manage follow requests
  1301. body: "%{name} has requested to follow you"
  1302. subject: 'Pending follower: %{name}'
  1303. title: New follow request
  1304. mention:
  1305. action: Reply
  1306. body: 'You were mentioned by %{name} in:'
  1307. subject: You were mentioned by %{name}
  1308. title: New mention
  1309. poll:
  1310. subject: A poll by %{name} has ended
  1311. reblog:
  1312. body: 'Your post was boosted by %{name}:'
  1313. subject: "%{name} boosted your post"
  1314. title: New boost
  1315. status:
  1316. subject: "%{name} just posted"
  1317. update:
  1318. subject: "%{name} edited a post"
  1319. notifications:
  1320. email_events: Events for e-mail notifications
  1321. email_events_hint: 'Select events that you want to receive notifications for:'
  1322. other_settings: Other notifications settings
  1323. number:
  1324. human:
  1325. decimal_units:
  1326. format: "%n%u"
  1327. units:
  1328. billion: B
  1329. million: M
  1330. quadrillion: Q
  1331. thousand: K
  1332. trillion: T
  1333. unit: ''
  1334. otp_authentication:
  1335. code_hint: Enter the code generated by your authenticator app to confirm
  1336. 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.
  1337. enable: Enable
  1338. 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."
  1339. manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:'
  1340. setup: Set up
  1341. wrong_code: The entered code was invalid! Are server time and device time correct?
  1342. pagination:
  1343. newer: Newer
  1344. next: Next
  1345. older: Older
  1346. prev: Prev
  1347. truncate: "&hellip;"
  1348. polls:
  1349. errors:
  1350. already_voted: You have already voted on this poll
  1351. duplicate_options: contain duplicate items
  1352. duration_too_long: is too far into the future
  1353. duration_too_short: is too soon
  1354. expired: The poll has already ended
  1355. invalid_choice: The chosen vote option does not exist
  1356. over_character_limit: cannot be longer than %{max} characters each
  1357. too_few_options: must have more than one item
  1358. too_many_options: can't contain more than %{max} items
  1359. preferences:
  1360. other: Other
  1361. posting_defaults: Posting defaults
  1362. public_timelines: Public timelines
  1363. privacy_policy:
  1364. title: Privacy Policy
  1365. reactions:
  1366. errors:
  1367. limit_reached: Limit of different reactions reached
  1368. unrecognized_emoji: is not a recognized emoji
  1369. relationships:
  1370. activity: Account activity
  1371. dormant: Dormant
  1372. follow_selected_followers: Follow selected followers
  1373. followers: Followers
  1374. following: Following
  1375. invited: Invited
  1376. last_active: Last active
  1377. most_recent: Most recent
  1378. moved: Moved
  1379. mutual: Mutual
  1380. primary: Primary
  1381. relationship: Relationship
  1382. remove_selected_domains: Remove all followers from the selected domains
  1383. remove_selected_followers: Remove selected followers
  1384. remove_selected_follows: Unfollow selected users
  1385. status: Account status
  1386. remote_follow:
  1387. missing_resource: Could not find the required redirect URL for your account
  1388. reports:
  1389. errors:
  1390. invalid_rules: does not reference valid rules
  1391. rss:
  1392. content_warning: 'Content warning:'
  1393. descriptions:
  1394. account: Public posts from @%{acct}
  1395. tag: 'Public posts tagged #%{hashtag}'
  1396. scheduled_statuses:
  1397. over_daily_limit: You have exceeded the limit of %{limit} scheduled posts for today
  1398. over_total_limit: You have exceeded the limit of %{limit} scheduled posts
  1399. too_soon: The scheduled date must be in the future
  1400. sessions:
  1401. activity: Last activity
  1402. browser: Browser
  1403. browsers:
  1404. alipay: Alipay
  1405. blackberry: BlackBerry
  1406. chrome: Chrome
  1407. edge: Microsoft Edge
  1408. electron: Electron
  1409. firefox: Firefox
  1410. generic: Unknown browser
  1411. ie: Internet Explorer
  1412. micro_messenger: MicroMessenger
  1413. nokia: Nokia S40 Ovi Browser
  1414. opera: Opera
  1415. otter: Otter
  1416. phantom_js: PhantomJS
  1417. qq: QQ Browser
  1418. safari: Safari
  1419. uc_browser: UC Browser
  1420. weibo: Weibo
  1421. current_session: Current session
  1422. description: "%{browser} on %{platform}"
  1423. explanation: These are the web browsers currently logged in to your Mastodon account.
  1424. ip: IP
  1425. platforms:
  1426. adobe_air: Adobe Air
  1427. android: Android
  1428. blackberry: BlackBerry
  1429. chrome_os: ChromeOS
  1430. firefox_os: Firefox OS
  1431. ios: iOS
  1432. linux: Linux
  1433. mac: macOS
  1434. other: unknown platform
  1435. windows: Windows
  1436. windows_mobile: Windows Mobile
  1437. windows_phone: Windows Phone
  1438. revoke: Revoke
  1439. revoke_success: Session successfully revoked
  1440. title: Sessions
  1441. view_authentication_history: View authentication history of your account
  1442. settings:
  1443. account: Account
  1444. account_settings: Account settings
  1445. aliases: Account aliases
  1446. appearance: Appearance
  1447. authorized_apps: Authorized apps
  1448. back: Back to Mastodon
  1449. delete: Account deletion
  1450. development: Development
  1451. edit_profile: Edit profile
  1452. export: Data export
  1453. featured_tags: Featured hashtags
  1454. import: Import
  1455. import_and_export: Import and export
  1456. migrate: Account migration
  1457. notifications: Notifications
  1458. preferences: Preferences
  1459. profile: Profile
  1460. relationships: Follows and followers
  1461. statuses_cleanup: Automated post deletion
  1462. strikes: Moderation strikes
  1463. two_factor_authentication: Two-factor Auth
  1464. webauthn_authentication: Security keys
  1465. statuses:
  1466. attached:
  1467. audio:
  1468. one: "%{count} audio"
  1469. other: "%{count} audio"
  1470. description: 'Attached: %{attached}'
  1471. image:
  1472. one: "%{count} image"
  1473. other: "%{count} images"
  1474. video:
  1475. one: "%{count} video"
  1476. other: "%{count} videos"
  1477. boosted_from_html: Boosted from %{acct_link}
  1478. content_warning: 'Content warning: %{warning}'
  1479. default_language: Same as interface language
  1480. disallowed_hashtags:
  1481. one: 'contained a disallowed hashtag: %{tags}'
  1482. other: 'contained the disallowed hashtags: %{tags}'
  1483. edited_at_html: Edited %{date}
  1484. errors:
  1485. in_reply_not_found: The post you are trying to reply to does not appear to exist.
  1486. open_in_web: Open in web
  1487. over_character_limit: character limit of %{max} exceeded
  1488. pin_errors:
  1489. direct: Posts that are only visible to mentioned users cannot be pinned
  1490. limit: You have already pinned the maximum number of posts
  1491. ownership: Someone else's post cannot be pinned
  1492. reblog: A boost cannot be pinned
  1493. poll:
  1494. total_people:
  1495. one: "%{count} person"
  1496. other: "%{count} people"
  1497. total_votes:
  1498. one: "%{count} vote"
  1499. other: "%{count} votes"
  1500. vote: Vote
  1501. show_more: Show more
  1502. show_newer: Show newer
  1503. show_older: Show older
  1504. show_thread: Show thread
  1505. sign_in_to_participate: Sign in to participate in the conversation
  1506. title: '%{name}: "%{quote}"'
  1507. visibilities:
  1508. direct: Direct
  1509. private: Followers-only
  1510. private_long: Only show to followers
  1511. public: Public
  1512. public_long: Everyone can see
  1513. unlisted: Unlisted
  1514. unlisted_long: Everyone can see, but not listed on public timelines
  1515. statuses_cleanup:
  1516. enabled: Automatically delete old posts
  1517. enabled_hint: Automatically deletes your posts once they reach a specified age threshold, unless they match one of the exceptions below
  1518. exceptions: Exceptions
  1519. explanation: Because deleting posts is an expensive operation, this is done slowly over time when the server is not otherwise busy. For this reason, your posts may be deleted a while after they reach the age threshold.
  1520. ignore_favs: Ignore favourites
  1521. ignore_reblogs: Ignore boosts
  1522. interaction_exceptions: Exceptions based on interactions
  1523. interaction_exceptions_explanation: Note that there is no guarantee for posts to be deleted if they go below the favourite or boost threshold after having once gone over them.
  1524. keep_direct: Keep direct messages
  1525. keep_direct_hint: Doesn't delete any of your direct messages
  1526. keep_media: Keep posts with media attachments
  1527. keep_media_hint: Doesn't delete any of your posts that have media attachments
  1528. keep_pinned: Keep pinned posts
  1529. keep_pinned_hint: Doesn't delete any of your pinned posts
  1530. keep_polls: Keep polls
  1531. keep_polls_hint: Doesn't delete any of your polls
  1532. keep_self_bookmark: Keep posts you bookmarked
  1533. keep_self_bookmark_hint: Doesn't delete your own posts if you have bookmarked them
  1534. keep_self_fav: Keep posts you favourited
  1535. keep_self_fav_hint: Doesn't delete your own posts if you have favourited them
  1536. min_age:
  1537. '1209600': 2 weeks
  1538. '15778476': 6 months
  1539. '2629746': 1 month
  1540. '31556952': 1 year
  1541. '5259492': 2 months
  1542. '604800': 1 week
  1543. '63113904': 2 years
  1544. '7889238': 3 months
  1545. min_age_label: Age threshold
  1546. min_favs: Keep posts favourited at least
  1547. min_favs_hint: Doesn't delete any of your posts that has received at least this amount of favourites. Leave blank to delete posts regardless of their number of favourites
  1548. min_reblogs: Keep posts boosted at least
  1549. min_reblogs_hint: Doesn't delete any of your posts that has been boosted at least this number of times. Leave blank to delete posts regardless of their number of boosts
  1550. stream_entries:
  1551. pinned: Pinned post
  1552. reblogged: boosted
  1553. sensitive_content: Sensitive content
  1554. strikes:
  1555. errors:
  1556. too_late: It is too late to appeal this strike
  1557. tags:
  1558. does_not_match_previous_name: does not match the previous name
  1559. themes:
  1560. contrast: Mastodon (High contrast)
  1561. default: Mastodon (Dark)
  1562. mastodon-light: Mastodon (Light)
  1563. time:
  1564. formats:
  1565. default: "%b %d, %Y, %H:%M"
  1566. month: "%b %Y"
  1567. time: "%H:%M"
  1568. two_factor_authentication:
  1569. add: Add
  1570. disable: Disable 2FA
  1571. disabled_success: Two-factor authentication successfully disabled
  1572. edit: Edit
  1573. enabled: Two-factor authentication is enabled
  1574. enabled_success: Two-factor authentication successfully enabled
  1575. generate_recovery_codes: Generate recovery codes
  1576. 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.
  1577. methods: Two-factor methods
  1578. otp: Authenticator app
  1579. recovery_codes: Backup recovery codes
  1580. recovery_codes_regenerated: Recovery codes successfully regenerated
  1581. 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.
  1582. webauthn: Security keys
  1583. user_mailer:
  1584. appeal_approved:
  1585. action: Go to your account
  1586. explanation: The appeal of the strike against your account on %{strike_date} that you submitted on %{appeal_date} has been approved. Your account is once again in good standing.
  1587. subject: Your appeal from %{date} has been approved
  1588. title: Appeal approved
  1589. appeal_rejected:
  1590. explanation: The appeal of the strike against your account on %{strike_date} that you submitted on %{appeal_date} has been rejected.
  1591. subject: Your appeal from %{date} has been rejected
  1592. title: Appeal rejected
  1593. backup_ready:
  1594. explanation: You requested a full backup of your Mastodon account. It's now ready for download!
  1595. subject: Your archive is ready for download
  1596. title: Archive takeout
  1597. suspicious_sign_in:
  1598. change_password: change your password
  1599. details: 'Here are details of the sign-in:'
  1600. explanation: We've detected a sign-in to your account from a new IP address.
  1601. further_actions_html: If this wasn't you, we recommend that you %{action} immediately and enable two-factor authentication to keep your account secure.
  1602. subject: Your account has been accessed from a new IP address
  1603. title: A new sign-in
  1604. warning:
  1605. appeal: Submit an appeal
  1606. appeal_description: If you believe this is an error, you can submit an appeal to the staff of %{instance}.
  1607. categories:
  1608. spam: Spam
  1609. violation: Content violates the following community guidelines
  1610. explanation:
  1611. delete_statuses: Some of your posts have been found to violate one or more community guidelines and have been subsequently removed by the moderators of %{instance}.
  1612. disable: You can no longer use your account, but your profile and other data remains intact. You can request a backup of your data, change account settings or delete your account.
  1613. mark_statuses_as_sensitive: Some of your posts have been marked as sensitive by the moderators of %{instance}. This means that people will need to tap the media in the posts before a preview is displayed. You can mark media as sensitive yourself when posting in the future.
  1614. sensitive: From now on, all your uploaded media files will be marked as sensitive and hidden behind a click-through warning.
  1615. 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 discovery features. However, others may still manually follow you.
  1616. 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 in about 30 days, but we will retain some basic data to prevent you from evading the suspension.
  1617. reason: 'Reason:'
  1618. statuses: 'Posts cited:'
  1619. subject:
  1620. delete_statuses: Your posts on %{acct} have been removed
  1621. disable: Your account %{acct} has been frozen
  1622. mark_statuses_as_sensitive: Your posts on %{acct} have been marked as sensitive
  1623. none: Warning for %{acct}
  1624. sensitive: Your posts on %{acct} will be marked as sensitive from now on
  1625. silence: Your account %{acct} has been limited
  1626. suspend: Your account %{acct} has been suspended
  1627. title:
  1628. delete_statuses: Posts removed
  1629. disable: Account frozen
  1630. mark_statuses_as_sensitive: Posts marked as sensitive
  1631. none: Warning
  1632. sensitive: Account marked as sensitive
  1633. silence: Account limited
  1634. suspend: Account suspended
  1635. welcome:
  1636. edit_profile_action: Setup profile
  1637. edit_profile_step: You can customize your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you.
  1638. explanation: Here are some tips to get you started
  1639. final_action: Start posting
  1640. final_step: 'Start posting! Even without followers, your public posts may be seen by others, for example on the local timeline or in hashtags. You may want to introduce yourself on the #introductions hashtag.'
  1641. full_handle: Your full handle
  1642. full_handle_hint: This is what you would tell your friends so they can message or follow you from another server.
  1643. subject: Welcome to Mastodon
  1644. title: Welcome aboard, %{name}!
  1645. users:
  1646. follow_limit_reached: You cannot follow more than %{limit} people
  1647. invalid_otp_token: Invalid two-factor code
  1648. otp_lost_help_html: If you lost access to both, you may get in touch with %{email}
  1649. seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available.
  1650. signed_in_as: 'Signed in as:'
  1651. verification:
  1652. 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:'
  1653. verification: Verification
  1654. webauthn_credentials:
  1655. add: Add new security key
  1656. create:
  1657. error: There was a problem adding your security key. Please try again.
  1658. success: Your security key was successfully added.
  1659. delete: Delete
  1660. delete_confirmation: Are you sure you want to delete this security key?
  1661. description_html: If you enable <strong>security key authentication</strong>, logging in will require you to use one of your security keys.
  1662. destroy:
  1663. error: There was a problem deleting you security key. Please try again.
  1664. success: Your security key was successfully deleted.
  1665. invalid_credential: Invalid security key
  1666. nickname_hint: Enter the nickname of your new security key
  1667. not_enabled: You haven't enabled WebAuthn yet
  1668. not_supported: This browser doesn't support security keys
  1669. otp_required: To use security keys please enable two-factor authentication first.
  1670. registered_on: Registered on %{date}