From bd365cc38bbdcfe69f333525d37f44bbbaf1d62c Mon Sep 17 00:00:00 2001 From: ashleyhull-versent Date: Thu, 4 Apr 2019 22:22:55 +0800 Subject: [PATCH 01/27] Duplicate values (#10470) --- app/javascript/mastodon/features/account/components/header.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 9d15bc28f3..4faba55895 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -22,8 +22,6 @@ const messages = defineMessages({ account_locked: { id: 'account.locked_info', defaultMessage: 'This account privacy status is set to locked. The owner manually reviews who can follow them.' }, mention: { id: 'account.mention', defaultMessage: 'Mention @{name}' }, direct: { id: 'account.direct', defaultMessage: 'Direct message @{name}' }, - edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' }, - unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' }, block: { id: 'account.block', defaultMessage: 'Block @{name}' }, mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' }, From e6814a332c3b355893d366cf8639ab3c7e30b52b Mon Sep 17 00:00:00 2001 From: Ben Lubar Date: Thu, 4 Apr 2019 09:46:27 -0500 Subject: [PATCH 02/27] Fix `tootctl accounts cull` (#10460) * List the actual accounts that would have been culled during a dry run. Otherwise, the dry run mode is basically useless. * Prevent unreachable domains from inheriting the previous status code. * Update CHANGELOG.md for #10460. --- CHANGELOG.md | 2 ++ lib/mastodon/accounts_cli.rb | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91e66c4005..8670c26583 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ All notable changes to this project will be documented in this file. - Change Webpack to not use @babel/preset-env to compile node_modules ([ykzts](https://github.com/tootsuite/mastodon/pull/10289)) - Change web UI to use new Web Share Target API ([gol-cha](https://github.com/tootsuite/mastodon/pull/9963)) - Change ActivityPub reports to have persistent URIs ([ThibG](https://github.com/tootsuite/mastodon/pull/10303)) +- Change `tootctl accounts cull --dry-run` to list accounts that would be deleted ([BenLubar](https://github.com/tootsuite/mastodon/pull/10460)) ### Removed @@ -75,6 +76,7 @@ All notable changes to this project will be documented in this file. - Fix race condition when streaming out deleted statuses ([ThibG](https://github.com/tootsuite/mastodon/pull/10280)) - Fix performance of admin federation UI by caching account counts ([Gargron](https://github.com/tootsuite/mastodon/pull/10374)) - Fix JS error on pages that don't define a CSRF token ([hinaloe](https://github.com/tootsuite/mastodon/pull/10383)) +- Fix `tootctl accounts cull` sometimes removing accounts that are temporarily unreachable ([BenLubar](https://github.com/tootsuite/mastodon/pull/10460)) ## [2.7.4] - 2019-03-05 ### Fixed diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index f02b2149b7..41e902e8fb 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -219,12 +219,14 @@ module Mastodon def cull skip_threshold = 7.days.ago culled = 0 + dry_run_culled = [] skip_domains = Set.new dry_run = options[:dry_run] ? ' (DRY RUN)' : '' Account.remote.where(protocol: :activitypub).partitioned.find_each do |account| next if account.updated_at >= skip_threshold || (account.last_webfingered_at.present? && account.last_webfingered_at >= skip_threshold) + code = 0 unless skip_domains.include?(account.domain) begin code = Request.new(:head, account.uri).perform(&:code) @@ -236,7 +238,11 @@ module Mastodon end if [404, 410].include?(code) - SuspendAccountService.new.call(account, destroy: true) unless options[:dry_run] + if options[:dry_run] + dry_run_culled << account.acct + else + SuspendAccountService.new.call(account, destroy: true) + end culled += 1 say('+', :green, false) else @@ -252,6 +258,11 @@ module Mastodon say('The following servers were not available during the check:', :yellow) skip_domains.each { |domain| say(' ' + domain) } end + + unless dry_run_culled.empty? + say('The following accounts would have been deleted:', :green) + dry_run_culled.each { |account| say(' ' + account) } + end end option :all, type: :boolean From 48a52c9372d8bde1377f9b6e6b2e1a704cddc3c3 Mon Sep 17 00:00:00 2001 From: jeroenpraat <41594439+jeroenpraat@users.noreply.github.com> Date: Thu, 4 Apr 2019 23:12:08 +0200 Subject: [PATCH 03/27] Dutch (nl) translation (#10474) * Translation Dutch * Update activerecord.nl.yml * Update devise.nl.yml * Update nl.yml * Update nl.yml * Update devise.nl.yml * Update nl.yml --- app/javascript/mastodon/locales/nl.json | 28 +++++------ config/locales/activerecord.nl.yml | 3 ++ config/locales/devise.nl.yml | 3 ++ config/locales/nl.yml | 62 ++++++++++++++++++++++++- 4 files changed, 80 insertions(+), 16 deletions(-) diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index e5e4748d72..cac676c7b4 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -71,10 +71,10 @@ "compose_form.lock_disclaimer": "Jouw account is niet {locked}. Iedereen kan jou volgen en kan de toots zien die je alleen aan jouw volgers hebt gericht.", "compose_form.lock_disclaimer.lock": "besloten", "compose_form.placeholder": "Wat wil je kwijt?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Keuze toevoegen", + "compose_form.poll.duration": "Duur van de poll", + "compose_form.poll.option_placeholder": "Keuze {number}", + "compose_form.poll.remove_option": "Deze keuze verwijderen", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.marked": "Media is als gevoelig gemarkeerd", @@ -83,7 +83,7 @@ "compose_form.spoiler.unmarked": "Tekst is niet verborgen", "compose_form.spoiler_placeholder": "Waarschuwingstekst", "confirmation_modal.cancel": "Annuleren", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Blokkeren en rapporteren", "confirmations.block.confirm": "Blokkeren", "confirmations.block.message": "Weet je het zeker dat je {name} wilt blokkeren?", "confirmations.delete.confirm": "Verwijderen", @@ -154,9 +154,9 @@ "home.column_settings.basic": "Algemeen", "home.column_settings.show_reblogs": "Boosts tonen", "home.column_settings.show_replies": "Reacties tonen", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.days": "{number, plural, one {# dag} other {# dagen}}", + "intervals.full.hours": "{number, plural, one {# uur} other {# uur}}", + "intervals.full.minutes": "{number, plural, one {# minuut} other {# minuten}}", "introduction.federation.action": "Volgende", "introduction.federation.federated.headline": "Globaal", "introduction.federation.federated.text": "Openbare toots van mensen op andere servers in de fediverse verschijnen op de globale tijdlijn.", @@ -246,7 +246,7 @@ "notification.favourite": "{name} voegde jouw toot als favoriet toe", "notification.follow": "{name} volgt jou nu", "notification.mention": "{name} vermeldde jou", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Een poll waaraan jij hebt meegedaan is beëindigd", "notification.reblog": "{name} boostte jouw toot", "notifications.clear": "Meldingen verwijderen", "notifications.clear_confirmation": "Weet je het zeker dat je al jouw meldingen wilt verwijderen?", @@ -257,7 +257,7 @@ "notifications.column_settings.filter_bar.show": "Tonen", "notifications.column_settings.follow": "Nieuwe volgers:", "notifications.column_settings.mention": "Vermeldingen:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Pollresultaten:", "notifications.column_settings.push": "Pushmeldingen", "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "In kolom tonen", @@ -267,14 +267,14 @@ "notifications.filter.favourites": "Favorieten", "notifications.filter.follows": "Die jij volgt", "notifications.filter.mentions": "Vermeldingen", - "notifications.filter.polls": "Poll results", + "notifications.filter.polls": "Pollresultaten", "notifications.group": "{count} meldingen", "poll.closed": "Gesloten", "poll.refresh": "Vernieuwen", "poll.total_votes": "{count, plural, one {# stem} other {# stemmen}}", "poll.vote": "Stemmen", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll_button.add_poll": "Poll toevoegen", + "poll_button.remove_poll": "Poll verwijderen", "privacy.change": "Zichtbaarheid toot aanpassen", "privacy.direct.long": "Alleen aan vermelde gebruikers tonen", "privacy.direct.short": "Direct", @@ -366,7 +366,7 @@ "upload_area.title": "Hierin slepen om te uploaden", "upload_button.label": "Media toevoegen (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Uploadlimiet van bestand overschreden.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.poll": "Het uploaden van bestanden is in polls niet toegestaan.", "upload_form.description": "Omschrijf dit voor mensen met een visuele beperking", "upload_form.focus": "Voorvertoning aanpassen", "upload_form.undo": "Verwijderen", diff --git a/config/locales/activerecord.nl.yml b/config/locales/activerecord.nl.yml index eeabab34aa..bdb87e8e5d 100644 --- a/config/locales/activerecord.nl.yml +++ b/config/locales/activerecord.nl.yml @@ -1,6 +1,9 @@ --- nl: activerecord: + attributes: + status: + owned_poll: Poll errors: models: account: diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index a768d3c1d2..96d14d9d20 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -13,6 +13,7 @@ nl: last_attempt: Je hebt nog één poging over voordat jouw account wordt opgeschort. locked: Jouw account is opgeschort. not_found_in_database: "%{authentication_keys} of wachtwoord ongeldig." + pending: Jouw account moet nog steeds worden beoordeeld. timeout: Jouw sessie is verlopen, log opnieuw in. unauthenticated: Je dient in te loggen of te registreren. unconfirmed: Je dient eerst jouw account te bevestigen. @@ -21,6 +22,7 @@ nl: action: E-mailadres verifiëren action_with_app: Bevestigen en naar %{app} teruggaan explanation: Je hebt een account op %{host} aangemaakt en met één klik kun je deze activeren. Wanneer jij dit account niet hebt aangemaakt, mag je deze e-mail negeren. + explanation_when_pending: Je vroeg met dit e-mailadres een uitnodiging aan voor %{host}. Nadat je jouw e-mailadres hebt bevestigd, beoordelen we jouw aanvraag. Je kunt tot dan nog niet inloggen. Wanneer jouw aanvraag wordt afgekeurd, worden jouw gegevens verwijderd en hoef je daarna verder niets meer te doen. Wanneer jij dit niet was, kun je deze e-mail negeren. extra_html: Bekijk ook de regels van de Mastodonserver en onze gebruiksvoorwaarden. subject: 'Mastodon: E-mail bevestigen voor %{instance}' title: E-mailadres verifiëren @@ -61,6 +63,7 @@ nl: signed_up: Je bent geregistreerd. signed_up_but_inactive: Je bent geregistreerd. Je kon alleen niet automatisch ingelogd worden omdat jouw account nog niet geactiveerd is. signed_up_but_locked: Je bent ingeschreven. Je kon alleen niet automatisch ingelogd worden omdat jouw account is opgeschort. + signed_up_but_pending: Er is een bericht met een bevestigingslink naar jouw e-mailadres verzonden. Nadat je op deze link hebt geklikt nemen we jouw aanvraag in behandeling. Je wordt op de hoogte gesteld wanneer deze wordt goedgekeurd. signed_up_but_unconfirmed: Je ontvangt via e-mail instructies hoe je jouw account kunt activeren. Kijk tussen je spam wanneer niks werd ontvangen. update_needs_confirmation: Je hebt je e-mailadres succesvol gewijzigd, maar we moeten je nieuwe mailadres nog bevestigen. Controleer jouw e-mail en klik op de link in de mail om jouw e-mailadres te bevestigen. Kijk tussen je spam wanneer niks werd ontvangen. updated: Jouw accountgegevens zijn opgeslagen. diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 36a030fa43..2bfab24543 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -4,25 +4,36 @@ nl: about_hashtag_html: Dit zijn openbare toots die getagged zijn met #%{hashtag}. Je kunt er op reageren of iets anders mee doen als je op Mastodon (of ergens anders in de fediverse) een account hebt. about_mastodon_html: Mastodon is een sociaal netwerk dat gebruikt maakt van open webprotocollen en vrije software. Het is net zoals e-mail gedecentraliseerd. about_this: Over deze server + active_count_after: actief + active_footnote: Actieve gebruikers per maand (MAU) administered_by: 'Beheerd door:' api: API apps: Mobiele apps + apps_platforms: Gebruik Mastodon op iOS, Android en op andere platformen + browse_directory: Gebruikersgids doorbladeren en op interesses filteren + browse_public_posts: Livestream van openbare Mastodonberichten bekijken contact: Contact contact_missing: Niet ingesteld contact_unavailable: n.v.t + discover_users: Gebruikers ontdekken documentation: Documentatie extended_description_html: |

Een goede plek voor richtlijnen

De uitgebreide omschrijving is nog niet ingevuld.

+ federation_hint_html: Met een account op %{instance} ben je in staat om mensen die zich op andere Mastodonservers (en op andere plekken) bevinden te volgen. generic_description: "%{domain} is een server in het Mastodonnetwerk" + get_apps: Mobiele apps hosted_on: Mastodon op %{domain} learn_more: Meer leren privacy_policy: Privacybeleid + see_whats_happening: Kijk wat er aan de hand is + server_stats: 'Serverstatistieken:' source_code: Broncode status_count_after: one: toot other: toots status_count_before: Zij schreven + tagline: Vrienden volgen en nieuwe ontdekken terms: Gebruiksvoorwaarden user_count_after: one: gebruiker @@ -68,6 +79,7 @@ nl: delete: Verwijderen destroyed_msg: Verwijderen van opmerking voor moderatoren geslaagd! accounts: + approve: Goedkeuren are_you_sure: Weet je het zeker? avatar: Avatar by_domain: Domein @@ -113,6 +125,7 @@ nl: moderation: active: Actief all: Alles + pending: In afwachting silenced: Genegeerd suspended: Opgeschort title: Moderatie @@ -122,6 +135,7 @@ nl: no_limits_imposed: Geen limieten ingesteld not_subscribed: Niet geabonneerd outbox_url: Outbox-URL + pending: Moet nog beoordeeld worden perform_full_suspension: Opschorten profile_url: Profiel-URL promote: Promoveren @@ -129,6 +143,7 @@ nl: public: Openbaar push_subscription_expires: PuSH-abonnement verloopt op redownload: Profiel vernieuwen + reject: Afkeuren remove_avatar: Avatar verwijderen remove_header: Omslagfoto verwijderen resend_confirmation: @@ -400,6 +415,12 @@ nl: min_invite_role: disabled: Niemand title: Uitnodigingen toestaan door + registrations_mode: + modes: + approved: Goedkeuring vereist om te kunnen registreren + none: Niemand kan zich registreren + open: Iedereen kan zich registreren + title: Registratiemodus show_known_fediverse_at_about_page: desc_html: Wanneer ingeschakeld wordt de globale tijdlijn op de voorpagina getoond en wanneer uitgeschakeld de lokale tijdljn. title: De globale tijdlijn op de voorpagina tonen @@ -462,6 +483,9 @@ nl: edit_preset: Voorinstelling van waarschuwing bewerken title: Voorinstellingen van waarschuwingen beheren admin_mailer: + new_pending_account: + body: Zie hieronder de details van het nieuwe account. Je kunt de aanvraag goedkeuren of afkeuren. + subject: Er dient een nieuw account op %{instance} te worden beoordeeld (%{username}) new_report: body: "%{reporter} heeft %{target} gerapporteerd" body_remote: Iemand van %{domain} heeft %{target} gerapporteerd @@ -483,10 +507,12 @@ nl: your_token: Jouw toegangscode auth: agreement_html: Wanneer je op registreren klikt ga je akkoord met het opvolgen van de regels van deze server en onze gebruiksvoorwaarden. + apply_for_account: Een uitnodiging aanvragen change_password: Wachtwoord + checkbox_agreement_html: Ik ga akkoord met de regels van deze server en de gebruiksvoorwaarden confirm_email: E-mail bevestigen delete_account: Account verwijderen - delete_account_html: Wanneer je jouw account graag wilt verwijderen, kan je dat hier doen. We vragen jou daar om een bevestiging. + delete_account_html: Wanneer je jouw account graag wilt verwijderen, kun je dat hier doen. We vragen jou daar om een bevestiging. didnt_get_confirmation: Geen bevestigingsinstructies ontvangen? forgot_password: Wachtwoord vergeten? invalid_reset_password_token: De code om jouw wachtwoord opnieuw in te stellen is verlopen. Vraag een nieuwe aan. @@ -499,10 +525,12 @@ nl: cas: CAS saml: SAML register: Registreren + registration_closed: "%{instance} laat geen nieuwe gebruikers toe" resend_confirmation: Verstuur de bevestigingsinstructies nogmaals reset_password: Wachtwoord opnieuw instellen security: Beveiliging set_new_password: Nieuw wachtwoord instellen + trouble_logging_in: Problemen met inloggen? authorize_follow: already_following: Je volgt dit account al error: Helaas, er is een fout opgetreden bij het opzoeken van de externe account @@ -598,12 +626,29 @@ nl: more: Meer… resources: Hulpmiddelen generic: + all: Alles changes_saved_msg: Wijzigingen succesvol opgeslagen! copy: Kopiëren save_changes: Wijzigingen opslaan validation_errors: one: Er is iets niet helemaal goed! Bekijk onderstaande fout other: Er is iets niet helemaal goed! Bekijk onderstaande %{count} fouten + identity_proofs: + active: Actief + authorize: Ja, autoriseren + authorize_connection_prompt: Deze cryptografische verbinding autoriseren? + errors: + failed: De cryptografische verbinding is mislukt. Probeer het opnieuw vanaf %{provider}. + keybase: + invalid_token: Keybasetokens zijn hashes van handtekeningen en moeten een lengte hebben van 66 hexadecimale tekens + verification_failed: Keybase herkent deze token niet als een handtekening van Keybasegebruiker %{kb_username}. Probeer het opnieuw vanuit Keybase. + wrong_user: Er kan geen bewijs worden aangemaakt voor %{proving} terwijl je bent ingelogd als %{current}. Log in als %{proving} en probeer het opnieuw. + explanation_html: Hier kun je met behulp van cryptografie jouw andere identiteiten verbinden, zoals een Keybaseprofiel. Hiermee kunnen andere mensen jou versleutelde berichten sturen en inhoud die jij verstuurt vertrouwen. + i_am_html: Ik ben %{username} op %{service}. + identity: Identiteit + inactive: Inactief + status: Verificatiestatus + view_proof: Bekijk bewijs imports: modes: merge: Samenvoegen @@ -721,6 +766,17 @@ nl: other: Overig publishing: Publiceren web: Webapp + relationships: + activity: Accountactiviteit + dormant: Sluimerend + moved: Verhuisd + mutual: Wederzijds + primary: Primair + relationship: Relatie + remove_selected_domains: Alle volgers van de geselecteerde domeinen verwijderen + remove_selected_followers: Geselecteerde volgers verwijderen + remove_selected_follows: Geselecteerde gebruikers ontvolgen + status: Accountstatus remote_follow: acct: Geef jouw account@domein op die je wilt gebruiken missing_resource: Kon vereiste doorverwijzings-URL voor jouw account niet vinden @@ -795,10 +851,12 @@ nl: edit_profile: Profiel bewerken export: Exporteren featured_tags: Uitgelichte hashtags + identity_proofs: Identiteitsbewijzen import: Importeren migrate: Accountmigratie notifications: Meldingen preferences: Voorkeuren + relationships: Volgers en gevolgden settings: Instellingen two_factor_authentication: Tweestapsverificatie your_apps: Jouw toepassingen @@ -944,7 +1002,7 @@ nl: generate_recovery_codes: Herstelcodes genereren instructions_html: "Scan deze QR-code in Google Authenticator of een soortgelijke app op jouw mobiele telefoon. Van nu af aan genereert deze app aanmeldcodes die je bij het inloggen moet invoeren." lost_recovery_codes: Met herstelcodes kun je toegang tot jouw account krijgen wanneer je jouw telefoon bent kwijtgeraakt. Wanneer je jouw herstelcodes bent kwijtgeraakt, kan je ze hier opnieuw genereren. Jouw oude herstelcodes zijn daarna ongeldig. - manual_instructions: Voor het geval je de QR-code niet kunt scannen en het handmatig moet invoeren, vind je hieronder geheime code in platte tekst. + manual_instructions: Voor het geval je de QR-code niet kunt scannen en het handmatig moet invoeren, vind je hieronder de geheime code in platte tekst. recovery_codes: Herstelcodes back-uppen recovery_codes_regenerated: Opnieuw genereren herstelcodes geslaagd recovery_instructions_html: Wanneer je ooit de toegang verliest tot jouw telefoon, kan je met behulp van een van de herstelcodes hieronder opnieuw toegang krijgen tot jouw account. Zorg ervoor dat je de herstelcodes op een veilige plek bewaard. Je kunt ze bijvoorbeeld printen en ze samen met andere belangrijke documenten bewaren. From e0137c588409123f0ae016cd46fba271968fa5bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20=C4=BDach?= Date: Fri, 5 Apr 2019 15:16:28 +0200 Subject: [PATCH 04/27] Updates the Slovak translation (#10477) * Update sk.json * Update sk.json * Update sk.json --- app/javascript/mastodon/locales/sk.json | 56 ++++++++++++------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 5542198f72..56f05e1e34 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -6,7 +6,7 @@ "account.blocked": "Blokovaný/á", "account.direct": "Súkromná správa pre @{name}", "account.domain_blocked": "Doména ukrytá", - "account.edit_profile": "Upraviť profil", + "account.edit_profile": "Uprav profil", "account.endorse": "Zobrazuj na profile", "account.follow": "Následuj", "account.followers": "Sledujúci", @@ -14,38 +14,38 @@ "account.follows": "Následuje", "account.follows.empty": "Tento užívateľ ešte nikoho nenásleduje.", "account.follows_you": "Následuje ťa", - "account.hide_reblogs": "Skryť povýšenia od @{name}", + "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", "account.media": "Médiá", "account.mention": "Spomeň @{name}", "account.moved_to": "{name} sa presunul/a na:", "account.mute": "Ignorovať @{name}", - "account.mute_notifications": "Stĺmiť oboznámenia od @{name}", + "account.mute_notifications": "Stĺm oboznámenia od @{name}", "account.muted": "Utíšený/á", "account.posts": "Príspevky", "account.posts_with_replies": "Príspevky aj s odpoveďami", "account.report": "Nahlás @{name}", - "account.requested": "Čaká na schválenie. Kliknite pre zrušenie žiadosti", - "account.share": "Zdieľať @{name} profil", + "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti", + "account.share": "Zdieľaj @{name} profil", "account.show_reblogs": "Ukáž vyzdvihnutia od @{name}", "account.unblock": "Odblokuj @{name}", "account.unblock_domain": "Prestaň skrývať {domain}", "account.unendorse": "Nezobrazuj na profile", "account.unfollow": "Prestaň následovať", "account.unmute": "Prestaň ignorovať @{name}", - "account.unmute_notifications": "Zrušiť stlmenie oznámení od @{name}", + "account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", "alert.unexpected.title": "Oops!", "boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie", "bundle_column_error.body": "Pri načítaní tohto prvku nastala nejaká chyba.", "bundle_column_error.retry": "Skús to znova", "bundle_column_error.title": "Chyba siete", - "bundle_modal_error.close": "Zatvoriť", + "bundle_modal_error.close": "Zatvor", "bundle_modal_error.message": "Nastala chyba pri načítaní tohto komponentu.", "bundle_modal_error.retry": "Skúsiť znova", "column.blocks": "Blokovaní užívatelia", - "column.community": "Lokálna časová os", + "column.community": "Miestna časová os", "column.direct": "Súkromné správy", "column.domain_blocks": "Skryté domény", "column.favourites": "Obľúbené", @@ -64,11 +64,11 @@ "column_header.show_settings": "Ukáž nastavenia", "column_header.unpin": "Odopnúť", "column_subheading.settings": "Nastavenia", - "community.column_settings.media_only": "Iba media", + "community.column_settings.media_only": "Iba médiá", "compose_form.direct_message_warning": "Tento príspevok bude videný výhradne iba spomenutými užívateľmi. Ber ale na vedomie že správci tvojej a všetkých iných zahrnutých instancií majú možnosť skontrolovať túto správu.", "compose_form.direct_message_warning_learn_more": "Zistiť viac", "compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.", - "compose_form.lock_disclaimer": "Váš účet nie je {locked}. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.", + "compose_form.lock_disclaimer": "Tvoj účet nie je {locked}. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.", "compose_form.lock_disclaimer.lock": "zamknutý", "compose_form.placeholder": "Čo máš na mysli?", "compose_form.poll.add_option": "Pridaj voľbu", @@ -90,29 +90,29 @@ "confirmations.delete.message": "Si si istý/á, že chceš vymazať túto správu?", "confirmations.delete_list.confirm": "Vymaž", "confirmations.delete_list.message": "Si si istý/á, že chceš natrvalo vymazať tento zoznam?", - "confirmations.domain_block.confirm": "Skryť celú doménu", - "confirmations.domain_block.message": "Si si naozaj istý, že chceš blokovať celú {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať pár konkrétnych užívateľov, čo sa doporučuje. Neuvidíš obsah z tejto domény v žiadnej verejnej časovej osi, ani v oznámeniach. Tvoji následovníci pochádzajúci z tejto domény budú odstránení.", + "confirmations.domain_block.confirm": "Skry celú doménu", + "confirmations.domain_block.message": "Si si naozaj istý/á, že chceš blokovať celú doménu {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať pár konkrétnych užívateľov, čo sa doporučuje. Neuvidíš obsah z tejto domény v žiadnej verejnej časovej osi, ani v oznámeniach. Tvoji následovníci pochádzajúci z tejto domény budú odstránení.", "confirmations.mute.confirm": "Ignoruj", - "confirmations.mute.message": "Naozaj chcete ignorovať {name}?", - "confirmations.redraft.confirm": "Vyčistiť a prepísať", + "confirmations.mute.message": "Naozaj chceš ignorovať {name}?", + "confirmations.redraft.confirm": "Vyčisti a prepíš", "confirmations.redraft.message": "Si si istý/á, že chceš premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.", "confirmations.reply.confirm": "Odpovedz", "confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?", - "confirmations.unfollow.confirm": "Nesledovať", - "confirmations.unfollow.message": "Naozaj chcete prestať sledovať {name}?", + "confirmations.unfollow.confirm": "Nesleduj", + "confirmations.unfollow.message": "Naozaj chceš prestať sledovať {name}?", "embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.", "embed.preview": "Tu je ako to bude vyzerať:", "emoji_button.activity": "Aktivita", "emoji_button.custom": "Vlastné", "emoji_button.flags": "Vlajky", "emoji_button.food": "Jedlá a nápoje", - "emoji_button.label": "Vložiť emotikony", + "emoji_button.label": "Vlož emotikony", "emoji_button.nature": "Prírodné", "emoji_button.not_found": "Nie emotikony!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Predmety", "emoji_button.people": "Ľudia", "emoji_button.recent": "Často používané", - "emoji_button.search": "Hľadať...", + "emoji_button.search": "Hľadaj...", "emoji_button.search_results": "Nájdené", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", @@ -210,7 +210,7 @@ "lightbox.previous": "Predchádzajúci", "lists.account.add": "Pridať do zoznamu", "lists.account.remove": "Odobrať zo zoznamu", - "lists.delete": "Vymazať list", + "lists.delete": "Vymaž list", "lists.edit": "Uprav zoznam", "lists.edit.submit": "Zmeň názov", "lists.new.create": "Pridaj zoznam", @@ -259,7 +259,7 @@ "notifications.column_settings.mention": "Zmienenia:", "notifications.column_settings.poll": "Výsledky ankiet:", "notifications.column_settings.push": "Push notifikácie", - "notifications.column_settings.reblog": "Boosty:", + "notifications.column_settings.reblog": "Vyzdvihnutia:", "notifications.column_settings.show": "Zobraziť v stĺpci", "notifications.column_settings.sound": "Prehrať zvuk", "notifications.filter.all": "Všetky", @@ -278,7 +278,7 @@ "privacy.change": "Uprav súkromie príspevku", "privacy.direct.long": "Pošli iba spomenutým používateľom", "privacy.direct.short": "Súkromne", - "privacy.private.long": "Poslať iba následovateľom", + "privacy.private.long": "Pošli iba následovateľom", "privacy.private.short": "Iba pre sledujúcich", "privacy.public.long": "Poslať všetkým verejne", "privacy.public.short": "Verejné", @@ -341,7 +341,7 @@ "status.report": "Nahlásiť @{name}", "status.sensitive_toggle": "Klikni pre zobrazenie", "status.sensitive_warning": "Chúlostivý obsah", - "status.share": "Zdieľať", + "status.share": "Zdieľaj", "status.show_less": "Zobraz menej", "status.show_less_all": "Všetkým ukáž menej", "status.show_more": "Ukáž viac", @@ -353,8 +353,8 @@ "suggestions.header": "Mohlo by ťa zaujímať…", "tabs_bar.federated_timeline": "Federovaná", "tabs_bar.home": "Domov", - "tabs_bar.local_timeline": "Lokálna", - "tabs_bar.notifications": "Notifikácie", + "tabs_bar.local_timeline": "Miestna", + "tabs_bar.notifications": "Oboznámenia", "tabs_bar.search": "Hľadaj", "time_remaining.days": "Zostáva {number, plural, one {# deň} few {# dní} many {# dni} other {# dni}}", "time_remaining.hours": "Zostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", @@ -371,13 +371,13 @@ "upload_form.focus": "Pozmeň náhľad", "upload_form.undo": "Vymaž", "upload_progress.label": "Nahráva sa...", - "video.close": "Zavrieť video", + "video.close": "Zavri video", "video.exit_fullscreen": "Vpnúť zobrazenie na celú obrazovku", - "video.expand": "Zväčšiť video", + "video.expand": "Zväčši video", "video.fullscreen": "Zobraziť na celú obrazovku", "video.hide": "Skryť video", "video.mute": "Vypnúť zvuk", "video.pause": "Pauza", - "video.play": "Prehrať", - "video.unmute": "Zapnúť zvuk" + "video.play": "Prehraj", + "video.unmute": "Zapni zvuk" } From 4be7952892e11ee2ff90f9235d499445a56cca03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Fri, 5 Apr 2019 19:51:13 +0200 Subject: [PATCH 05/27] i18n: Update Polish translation (#10479) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcin Mikołajczak --- app/javascript/mastodon/locales/pl.json | 5 +- config/locales/devise.pl.yml | 3 ++ config/locales/pl.yml | 69 +++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 63d4f60e00..e967170125 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", "empty_column.account_timeline": "Brak wpisów tutaj!", + "empty_column.account_timeline_blocked": "Jesteś zablokowany(-a)", "empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.", "empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!", "empty_column.direct": "Nie masz żadnych wiadomości bezpośrednich. Kiedy dostaniesz lub wyślesz jakąś, pojawi się ona tutaj.", @@ -246,7 +247,7 @@ "notification.favourite": "{name} dodał(a) Twój wpis do ulubionych", "notification.follow": "{name} zaczął(-ęła) Cię śledzić", "notification.mention": "{name} wspomniał(a) o tobie", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Głosowanie w którym brałeś(-aś) udział zakończyła się", "notification.reblog": "{name} podbił(a) Twój wpis", "notifications.clear": "Wyczyść powiadomienia", "notifications.clear_confirmation": "Czy na pewno chcesz bezpowrotnie usunąć wszystkie powiadomienia?", @@ -257,7 +258,7 @@ "notifications.column_settings.filter_bar.show": "Pokaż", "notifications.column_settings.follow": "Nowi śledzący:", "notifications.column_settings.mention": "Wspomnienia:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Wyniki głosowania:", "notifications.column_settings.push": "Powiadomienia push", "notifications.column_settings.reblog": "Podbicia:", "notifications.column_settings.show": "Pokaż w kolumnie", diff --git a/config/locales/devise.pl.yml b/config/locales/devise.pl.yml index 4f9007e1d8..a0af51c328 100644 --- a/config/locales/devise.pl.yml +++ b/config/locales/devise.pl.yml @@ -12,6 +12,7 @@ pl: last_attempt: Masz jeszcze jedną próbę; Twoje konto zostanie zablokowane jeśli się nie powiedzie. locked: Twoje konto zostało zablokowane. not_found_in_database: Nieprawidłowy %{authentication_keys} lub hasło. + pending: Twoje konto oczekuje na przegląd. timeout: Twoja sesja wygasła. Zaloguj się ponownie, aby kontynuować.. unauthenticated: Zapisz się lub zaloguj, aby kontynuować. unconfirmed: Zweryfikuj adres e-mail, aby kontynuować. @@ -20,6 +21,7 @@ pl: action: Zweryfikuj adres e-mail action_with_app: Potwierdź i wróć do %{app} explanation: Utworzyłeś(-aś) konto na %{host} podając ten adres e-mail. Jedno kliknięcie dzieli Cię od aktywacji tego konta. Jeżeli to nie Ty, zignoruj ten e-mail. + explanation_when_pending: Poprosiłeś(-aś) o zaproszenie na %{host} używajac tego adresu e-mail. Kiedy potwierdzisz swój adres e-mail, przejrzymy Twoje podanie. Do tego czasu nie możesz się zalogować. Jeżeli Twoje podanie zostanie odrzucone, Twoje dane zostaną usunięte i nie będziesz musiał(-a) podejmować żadnych dodatkowych działań. Jeżeli to nie Ty, zignoruj ten e-mail. extra_html: Przeczytaj też regulamin serwera i nasze zasady użytkowania. subject: 'Mastodon: Instrukcje weryfikacji adresu e-mail na %{instance}' title: Zweryfikuj adres e-mail @@ -60,6 +62,7 @@ pl: signed_up: Witamy! Twoje konto zostało utworzone. signed_up_but_inactive: Twoje konto zostało utworzone. Nie mogliśmy Cię jednak zalogować, ponieważ konto nie zostało jeszcze aktywowane. signed_up_but_locked: Twoje konto zostało utworzone. Nie mogliśmy Cię jednak zalogować, ponieważ konto jest zablokowane. + signed_up_but_pending: Na Twój adres e-mail została wysłana wiadomosć z odnośnikiem potwierdzającym. Po kliknięciu w odnośnik, przejrzymy Twoje podanie. Zostaniesz poinformowany(-a), gdy zostanie ono przyjęte. signed_up_but_unconfirmed: Na Twój adres e-mail została wysłana wiadomosć z odnośnikiem potwierdzającym. Kliknij w odnośnik, aby aktywować konto. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem. update_needs_confirmation: Konto zostało zaktualizowane, musimy jednak zweryfikować Twój nowy adres e-mail. Została na niego wysłana wiadomość z odnośnikiem potwierdzającym. Jeżeli nie otrzymano wiadomości, sprawdź folder ze spamem. updated: Konto zostało zaktualizowane. diff --git a/config/locales/pl.yml b/config/locales/pl.yml index b7b6e2fad5..f3da82b1c9 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -4,20 +4,30 @@ pl: about_hashtag_html: Znajdują się tu publiczne wpisy oznaczone hashtagiem #%{hashtag}. Możesz dołączyć do dyskusji, jeżeli posiadasz konto gdziekolwiek w Fediwersum. about_mastodon_html: Mastodon jest wolną i otwartą siecią społecznościową, zdecentralizowaną alternatywą dla zamkniętych, komercyjnych platform. about_this: O tej instancji + active_count_after: aktywni + active_footnote: Aktywni użytkownicy miesięcznie (MAU) administered_by: 'Administrowana przez:' api: API apps: Aplikacje + apps_platforms: Korzystaj z Mastodona z poziomu iOS-a, Androida i innych + browse_directory: Przeglądaj katalog profilów i filtruj z uwzględnieniem zainteresowań + browse_public_posts: Przeglądaj strumień publicznych wpisów na Mastodonie na żywo contact: Kontakt contact_missing: Nie ustawiono contact_unavailable: Nie dotyczy + discover_users: Odkrywaj użytkowników documentation: Dokumentacja extended_description_html: |

Dobre miejsce na zasady użytkowania

Nie ustawiono jeszcze szczegółowego opisu

+ federation_hint_html: Z kontem na %{instance}, możesz śledzić użytkowników każdego serwera Mastodona i nie tylko. generic_description: "%{domain} jest jednym z serwerów sieci" + get_apps: Spróbuj aplikacji mobilnej hosted_on: Mastodon uruchomiony na %{domain} learn_more: Dowiedz się więcej privacy_policy: Polityka prywatności + see_whats_happening: Zobacz co się dzieje + server_stats: 'Statystyki serwera:' source_code: Kod źródłowy status_count_after: few: wpisów @@ -25,6 +35,7 @@ pl: one: wpisu other: wpisów status_count_before: Są autorami + tagline: Śledź znajomych i poznawal nowych terms: Zasady użytkowania user_count_after: few: użytkowników @@ -76,6 +87,7 @@ pl: delete: Usuń destroyed_msg: Pomyślnie usunięto notatkę moderacyjną! accounts: + approve: Przyjmij are_you_sure: Jesteś tego pewien? avatar: Awatar by_domain: Domena @@ -121,6 +133,7 @@ pl: moderation: active: Aktywne all: Wszystkie + pending: Oczekujące silenced: Wyciszone suspended: Zawieszone title: Moderacja @@ -130,6 +143,7 @@ pl: no_limits_imposed: Nie nałożono ograniczeń not_subscribed: Nie zasubskrybowano outbox_url: Adres skrzynki nadawczej + pending: Oczekuje na przegląd perform_full_suspension: Zawieś profile_url: Adres profilu promote: Podnieś uprawnienia @@ -137,6 +151,7 @@ pl: public: Publiczne push_subscription_expires: Subskrypcja PuSH wygasa redownload: Odśwież profil + reject: Odrzuć remove_avatar: Usun awatar remove_header: Usuń nagłówek resend_confirmation: @@ -238,6 +253,7 @@ pl: feature_profile_directory: Katalog profilów feature_registrations: Rejestracja feature_relay: Przekazywanie federacji + feature_timeline_preview: Podgląd osi czasu features: Możliwości hidden_service: Federowanie z ukrytymi usługami open_reports: otwarte zgłoszenia @@ -412,6 +428,12 @@ pl: min_invite_role: disabled: Nikt title: Kto może zapraszać użytkowników + registrations_mode: + modes: + approved: Przyjęcie jest wymagane do rejestracji + none: Nikt nie może się zarejestrować + open: Każdy może się zarejestrować + title: Tryb rejestracji show_known_fediverse_at_about_page: desc_html: Jeśli włączone, podgląd instancji będzie wyświetlał wpisy z całego Fediwersum. W innym przypadku, będą wyświetlane tylko lokalne wpisy. title: Pokazuj wszystkie znane wpisy na podglądzie instancji @@ -474,6 +496,9 @@ pl: edit_preset: Edytuj szablon ostrzeżenia title: Zarządzaj szablonami ostrzeżeń admin_mailer: + new_pending_account: + body: Poniżej znajdują się szczegóły dotycząće nowego konta. Możesz przyjąć lub odrzucić to podanie. + subject: Nowe konto czeka na przegląd na %{instance} (%{username}) new_report: body: Użytkownik %{reporter} zgłosił(a) %{target} body_remote: Użytkownik instancji %{domain} zgłosił(a) %{target} @@ -495,7 +520,9 @@ pl: your_token: Twój token dostępu auth: agreement_html: Rejestrując się, oświadczasz, że zapoznałeś(-aś) się z informacjami o serwerze i zasadami korzystania z usługi. + apply_for_account: Poproś o zaproszenie change_password: Hasło + checkbox_agreement_html: Zgadzam się z regułami serwera i zasadami korzystania z usługi confirm_email: Potwierdź adres e-mail delete_account: Usunięcie konta delete_account_html: Jeżeli chcesz usunąć konto, przejdź tutaj. Otrzymasz prośbę o potwierdzenie. @@ -511,10 +538,12 @@ pl: cas: CAS saml: SAML register: Rejestracja + registration_closed: "%{instance} nie przyjmuje nowych członków" resend_confirmation: Ponownie prześlij instrukcje weryfikacji reset_password: Zresetuj hasło security: Bezpieczeństwo set_new_password: Ustaw nowe hasło + trouble_logging_in: Masz problem z zalogowaniem się? authorize_follow: already_following: Już śledzisz to konto error: Niestety, podczas sprawdzania zdalnego konta wystąpił błąd @@ -572,6 +601,9 @@ pl: content: Przepraszamy, coś poszło nie tak, po naszej stronie. title: Ta strona jest nieprawidłowa noscript_html: Aby korzystać z aplikacji Mastodon, włącz JavaScript. Możesz też skorzystać z jednej z natywnych aplikacji obsługującej Twoje urządzenie. + existing_username_validator: + not_found: nie znaleziono lokalnego użytkownika o tej nazwie + not_found_multiple: nie znaleziono %{usernames} exports: archive_takeout: date: Data @@ -612,14 +644,36 @@ pl: more: Więcej… resources: Zasoby generic: + all: Wszystkie changes_saved_msg: Ustawienia zapisane! copy: Kopiuj + order_by: Uporządkuj według save_changes: Zapisz zmiany validation_errors: few: Coś jest wciąż nie tak! Przejrzyj %{count} poniższe błędy many: Coś jest wciąż nie tak! Przejrzyj %{count} poniższych błędów one: Coś jest wciąż nie tak! Przyjrzyj się poniższemu błędowi other: Coś jest wciąż nie tak! Przejrzyj poniższe błędy (%{count}) + html_validator: + invalid_markup: 'zawiera nieprawidłową składnię HTML: %{error}' + identity_proofs: + active: Aktywny + authorize: Tak, autoryzuj + authorize_connection_prompt: Czy chcesz autoryzować to połączenie kryptograficzne? + errors: + failed: Połączenioe kryptograficzne nie powiodło się. Spróbuj ponownie z poziomu %{provider}. + keybase: + invalid_token: Tokeny Keybase są hashami podpisów i musza składać się z 66 znaków heksadecymalnych + verification_failed: Keybase nie rozpoznaje tego tokenu jako podpisu użytkownika Keybase %{kb_username}. Spróbuj ponownie z poziomu Keybase. + wrong_user: Nie można utworzyć dowodu dla %{proving}, gdy jesteś zalogowany(-a) jako %{current}. Zaloguj się jako %{proving} i spróbuj ponownie. + explanation_html: Tutaj możesz połączyć kryptograficznie swoje inne tożsamości, takie jak profil Keybase. To pozwoli innym wysłać Ci szyfrowane wiadomości i zaufać zawartości którą im wysyłasz. + i_am_html: Jestem %{username} na %{service}. + identity: Tożsamość + inactive: Niekatywny + publicize_checkbox: 'I opublikuj to:' + publicize_toot: 'Udowodnione! Jestem %{username} na %{service}: %{url}' + status: Stan weryfikacji + view_proof: Wyświetl dowód imports: modes: merge: Połącz @@ -743,6 +797,19 @@ pl: other: Pozostałe publishing: Publikowanie web: Sieć + relationships: + activity: Aktywność konta + dormant: Uśpione + last_active: Ostatnia aktywność + most_recent: Ostatnie + moved: Przeniesione + mutual: Wspólna + primary: Jednostronna + relationship: Relacja + remove_selected_domains: Usuń wszystkich śledzących z zaznaczonych domen + remove_selected_followers: Usuń zaznaczonych śledzących + remove_selected_follows: Przestań śledzić zaznaczonych użytkowników + status: Stan konta remote_follow: acct: Podaj swój adres (nazwa@domena), z którego chcesz wykonać działanie missing_resource: Nie udało się znaleźć adresu przekierowania z Twojej domeny @@ -817,10 +884,12 @@ pl: edit_profile: Edytuj profil export: Eksportowanie danych featured_tags: Wyróżnione hashtagi + identity_proofs: Dowody tożsamości import: Importowanie danych migrate: Migracja konta notifications: Powiadomienia preferences: Preferencje + relationships: Śledzeni i śledzący settings: Ustawienia two_factor_authentication: Uwierzytelnianie dwuetapowe your_apps: Twoje aplikacje From fb8557e6521e45441ab64d106e1afafd48051f24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Sat, 6 Apr 2019 11:41:19 +0900 Subject: [PATCH 06/27] Bump rubocop from 0.66.0 to 0.67.1 (#10475) Bumps [rubocop](https://github.com/rubocop-hq/rubocop) from 0.66.0 to 0.67.1. - [Release notes](https://github.com/rubocop-hq/rubocop/releases) - [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.66.0...v0.67.1) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index e3c97b1d64..735920a663 100644 --- a/Gemfile +++ b/Gemfile @@ -127,7 +127,7 @@ group :development do gem 'letter_opener', '~> 1.7' gem 'letter_opener_web', '~> 1.3' gem 'memory_profiler' - gem 'rubocop', '~> 0.66', require: false + gem 'rubocop', '~> 0.67', require: false gem 'brakeman', '~> 4.5', require: false gem 'bundler-audit', '~> 0.6', require: false gem 'scss_lint', '~> 0.57', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 22bb2adc28..ee7e58dd00 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -390,7 +390,7 @@ GEM paperclip-av-transcoder (0.6.4) av (~> 0.9.0) paperclip (>= 2.5.2) - parallel (1.14.0) + parallel (1.17.0) parallel_tests (2.28.0) parallel parser (2.6.2.0) @@ -526,7 +526,7 @@ GEM rspec-core (~> 3.0, >= 3.0.0) sidekiq (>= 2.4.0) rspec-support (3.8.0) - rubocop (0.66.0) + rubocop (0.67.1) jaro_winkler (~> 1.5.1) parallel (~> 1.10) parser (>= 2.5, != 2.5.1.1) @@ -747,7 +747,7 @@ DEPENDENCIES rqrcode (~> 0.10) rspec-rails (~> 3.8) rspec-sidekiq (~> 3.0) - rubocop (~> 0.66) + rubocop (~> 0.67) sanitize (~> 5.0) scss_lint (~> 0.57) sidekiq (~> 5.2) From e007c7a99b2ef9903a3aad5ff67902e9fd10b232 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 6 Apr 2019 04:47:05 +0200 Subject: [PATCH 07/27] Add `tootctl accounts approve` (#10480) --- lib/mastodon/accounts_cli.rb | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index 41e902e8fb..9b25a2ef7f 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -367,6 +367,37 @@ module Mastodon say("OK, unfollowed target from #{processed} accounts, skipped #{failed}", :green) end + option :number, type: :numeric, aliases: [:n] + option :all, type: :boolean + desc 'approve [USERNAME]', 'Approve pending accounts' + long_desc <<~LONG_DESC + When registrations require review from staff, approve pending accounts, + either all of them with the --all option, or a specific number of them + specified with the --number (-n) option, or only a single specific + account identified by its username. + LONG_DESC + def approve(username = nil) + if options[:all] + User.pending.find_each(&:approve!) + say('OK', :green) + elsif options[:number] + User.pending.limit(options[:number]).each(&:approve!) + say('OK', :green) + elsif username.present? + account = Account.find_local(username) + + if account.nil? + say('No such account', :red) + exit(1) + end + + account.user&.approve! + say('OK', :green) + else + exit(1) + end + end + private def rotate_keys_for_account(account, delay = 0) From 6689e572f308933742e0df6f55e2ac81ca178865 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 6 Apr 2019 04:47:16 +0200 Subject: [PATCH 08/27] Add `tootctl emoji purge` (#10481) Fix #10441 --- lib/mastodon/emoji_cli.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/mastodon/emoji_cli.rb b/lib/mastodon/emoji_cli.rb index 2262040d49..32827dd456 100644 --- a/lib/mastodon/emoji_cli.rb +++ b/lib/mastodon/emoji_cli.rb @@ -66,6 +66,12 @@ module Mastodon say("Imported #{imported}, skipped #{skipped}, failed to import #{failed}", color(imported, skipped, failed)) end + desc 'purge', 'Remove all custom emoji' + def purge + CustomEmoji.in_batches.destroy_all + say('OK', :green) + end + private def color(green, _yellow, red) From 20d301c383c0789ec192a2c86f2df4464c99f457 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 6 Apr 2019 04:47:26 +0200 Subject: [PATCH 09/27] Fix missing long description on `tootctl statuses remove` (#10482) --- lib/mastodon/statuses_cli.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/mastodon/statuses_cli.rb b/lib/mastodon/statuses_cli.rb index 5881ba260b..7f2fbfa85d 100644 --- a/lib/mastodon/statuses_cli.rb +++ b/lib/mastodon/statuses_cli.rb @@ -13,7 +13,15 @@ module Mastodon end option :days, type: :numeric, default: 90 - desc 'remove', 'Remove statuses' + desc 'remove', 'Remove unreferenced statuses' + long_desc <<~LONG_DESC + Remove statuses that are not referenced by local user activity, such as + ones that came from relays, or belonging to users that were once followed + by someone locally but no longer are. + + This is a computationally heavy procedure that creates extra database + indicides before commencing, and removes them afterward. + LONG_DESC def remove say('Creating temporary database indices...') From 2b68fe5442438ed6e19ba8f6401f1203d9768db1 Mon Sep 17 00:00:00 2001 From: ashleyhull-versent Date: Sat, 6 Apr 2019 11:02:03 +0800 Subject: [PATCH 10/27] tinyfix 2: unrequired arguments (#10471) * unrequired argument * unrequired argument --- app/javascript/mastodon/components/status.js | 2 +- app/javascript/mastodon/features/status/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index e10faedf87..cea9a0c2e5 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -351,7 +351,7 @@ class Status extends ImmutablePureComponent { return ( -
+
{prepend}
diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index c0ea460e8b..567af6be9f 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -442,7 +442,7 @@ class Status extends ImmutablePureComponent { {ancestors} -
+
Date: Sat, 6 Apr 2019 16:26:51 +0200 Subject: [PATCH 11/27] Improve sk translation further (#10484) * Further improving Slovak translation * Update sk.json --- app/javascript/mastodon/locales/sk.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 56f05e1e34..52c79c0bb0 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -158,16 +158,16 @@ "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", "intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", "introduction.federation.action": "Ďalej", - "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.headline": "Federovaná", "introduction.federation.federated.text": "Verejné príspevky z ostatných serverov vo fediverse budú zobrazenie vo federovanej časovej osi.", - "introduction.federation.home.headline": "Home", + "introduction.federation.home.headline": "Domov", "introduction.federation.home.text": "Príspevky od ľudí ktorých následuješ sa zobrazia na tvojej domovskej nástenke. Môžeš následovať hocikoho na ktoromkoľvek serveri!", - "introduction.federation.local.headline": "Local", + "introduction.federation.local.headline": "Miestna", "introduction.federation.local.text": "Verejné príspevky od ľudí v rámci toho istého serveru na akom si aj ty, budú zobrazované na miestnej časovej osi.", "introduction.interactions.action": "Ukonči návod!", "introduction.interactions.favourite.headline": "Obľúbené", "introduction.interactions.favourite.text": "Obľúbením si môžeš príspevok uložiť na neskôr, a zároveň dať jeho autorovi vedieť, že sa ti páčil.", - "introduction.interactions.reblog.headline": "Povýš", + "introduction.interactions.reblog.headline": "Vyzdvihni", "introduction.interactions.reblog.text": "Môžeš zdieľať príspevky iných ľudí s vašimi následovateľmi tým, že ich povýšiš.", "introduction.interactions.reply.headline": "Odpovedz", "introduction.interactions.reply.text": "Odpovedať môžeš na príspevky iných ľudí, aj na svoje vlastné, čím sa spolu prepoja do konverzácie.", @@ -311,9 +311,9 @@ "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", - "status.block": "Blokovať @{name}", + "status.block": "Blokuj @{name}", "status.cancel_reblog_private": "Nezdieľaj", - "status.cannot_reblog": "Tento príspevok nemôže byť re-tootnutý", + "status.cannot_reblog": "Tento príspevok nemôže byť zdieľaný", "status.copy": "Skopíruj odkaz na príspevok", "status.delete": "Zmazať", "status.detailed_status": "Podrobný náhľad celej konverzácie", @@ -325,14 +325,14 @@ "status.media_hidden": "Skryté médiá", "status.mention": "Spomeň @{name}", "status.more": "Viac", - "status.mute": "Utíšiť @{name}", - "status.mute_conversation": "Ignorovať konverzáciu", + "status.mute": "Utíš @{name}", + "status.mute_conversation": "Ignoruj konverzáciu", "status.open": "Otvoriť tento status", "status.pin": "Pripni na profil", "status.pinned": "Pripnutý príspevok", "status.read_more": "Čítaj ďalej", "status.reblog": "Povýšiť", - "status.reblog_private": "Povýš k pôvodnému publiku", + "status.reblog_private": "Vyzdvihni k pôvodnému publiku", "status.reblogged_by": "{name} povýšil/a", "status.reblogs.empty": "Nikto ešte nepovýšil tento príspevok. Keď tak niekto urobí, bude to zobrazené práve tu.", "status.redraft": "Vymaž a prepíš", From 2c63e0292a0a0a530ce814246bb6762983808135 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 6 Apr 2019 17:53:17 +0200 Subject: [PATCH 12/27] Fix admin validation being too strict about usernames (#10449) * Fix admin validation being too strict about usernames Fix #10446 * Strip Setting.site_contact_username consistently throughout the codebase --- app/controllers/home_controller.rb | 2 +- app/controllers/shares_controller.rb | 2 +- app/models/concerns/account_finder_concern.rb | 2 +- app/presenters/instance_presenter.rb | 2 +- app/validators/existing_username_validator.rb | 10 ++-------- 5 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index b5d6460f9f..d1bd0601e9 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -50,7 +50,7 @@ class HomeController < ApplicationController push_subscription: current_account.user.web_push_subscription(current_session), current_account: current_account, token: current_session.token, - admin: Account.find_local(Setting.site_contact_username), + admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')), } end diff --git a/app/controllers/shares_controller.rb b/app/controllers/shares_controller.rb index 9ef1e07491..af605b98f7 100644 --- a/app/controllers/shares_controller.rb +++ b/app/controllers/shares_controller.rb @@ -21,7 +21,7 @@ class SharesController < ApplicationController push_subscription: current_account.user.web_push_subscription(current_session), current_account: current_account, token: current_session.token, - admin: Account.find_local(Setting.site_contact_username), + admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')), text: text, } end diff --git a/app/models/concerns/account_finder_concern.rb b/app/models/concerns/account_finder_concern.rb index 7e3bbde097..0ac49cc126 100644 --- a/app/models/concerns/account_finder_concern.rb +++ b/app/models/concerns/account_finder_concern.rb @@ -13,7 +13,7 @@ module AccountFinderConcern end def representative - find_local(Setting.site_contact_username.gsub(/\A@/, '')) || Account.local.find_by(suspended: false) + find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')) || Account.local.find_by(suspended: false) end def find_local(username) diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb index 74c5ed1293..f3a73209af 100644 --- a/app/presenters/instance_presenter.rb +++ b/app/presenters/instance_presenter.rb @@ -13,7 +13,7 @@ class InstancePresenter ) def contact_account - Account.find_local(Setting.site_contact_username.gsub(/\A@/, '')) + Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')) end def user_count diff --git a/app/validators/existing_username_validator.rb b/app/validators/existing_username_validator.rb index 4388a0c983..b31d098273 100644 --- a/app/validators/existing_username_validator.rb +++ b/app/validators/existing_username_validator.rb @@ -5,16 +5,10 @@ class ExistingUsernameValidator < ActiveModel::EachValidator return if value.blank? if options[:multiple] - missing_usernames = value.split(',').map { |username| username unless Account.find_local(username) }.compact + missing_usernames = value.split(',').map { |username| username.strip.gsub(/\A@/, '') }.map { |username| username unless Account.find_local(username) }.compact record.errors.add(attribute, I18n.t('existing_username_validator.not_found_multiple', usernames: missing_usernames.join(', '))) if missing_usernames.any? else - record.errors.add(attribute, I18n.t('existing_username_validator.not_found')) unless Account.find_local(value) + record.errors.add(attribute, I18n.t('existing_username_validator.not_found')) unless Account.find_local(value.strip.gsub(/\A@/, '')) end end - - private - - def valid_html?(str) - Nokogiri::HTML.fragment(str).to_s == str - end end From e1d0390e29b60a6fa06d91a5d33dfb0e81fe7dd7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 6 Apr 2019 17:53:45 +0200 Subject: [PATCH 13/27] Add batch actions for approving and rejecting pending accounts (#10469) --- .../admin/pending_accounts_controller.rb | 52 +++++++++++++++++++ app/models/form/account_batch.rb | 19 +++++++ app/views/admin/accounts/index.html.haml | 2 +- .../admin/pending_accounts/_account.html.haml | 14 +++++ .../admin/pending_accounts/index.html.haml | 33 ++++++++++++ config/locales/en.yml | 4 +- config/navigation.rb | 2 +- config/routes.rb | 7 +++ 8 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 app/controllers/admin/pending_accounts_controller.rb create mode 100644 app/views/admin/pending_accounts/_account.html.haml create mode 100644 app/views/admin/pending_accounts/index.html.haml diff --git a/app/controllers/admin/pending_accounts_controller.rb b/app/controllers/admin/pending_accounts_controller.rb new file mode 100644 index 0000000000..8429d35855 --- /dev/null +++ b/app/controllers/admin/pending_accounts_controller.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +module Admin + class PendingAccountsController < BaseController + before_action :set_accounts, only: :index + + def index + @form = Form::AccountBatch.new + end + + def update + @form = Form::AccountBatch.new(form_account_batch_params.merge(current_account: current_account, action: action_from_button)) + @form.save + rescue ActionController::ParameterMissing + # Do nothing + ensure + redirect_to admin_pending_accounts_path(current_params) + end + + def approve_all + Form::AccountBatch.new(account_ids: User.pending.pluck(:account_id), action: 'approve').save + redirect_to admin_pending_accounts_path(current_params) + end + + def reject_all + Form::AccountBatch.new(account_ids: User.pending.pluck(:account_id), action: 'reject').save + redirect_to admin_pending_accounts_path(current_params) + end + + private + + def set_accounts + @accounts = Account.joins(:user).merge(User.pending).page(params[:page]) + end + + def form_account_batch_params + params.require(:form_account_batch).permit(:action, account_ids: []) + end + + def action_from_button + if params[:approve] + 'approve' + elsif params[:reject] + 'reject' + end + end + + def current_params + params.slice(:page).permit(:page) + end + end +end diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb index 60eaaf0e2b..5bc44e809b 100644 --- a/app/models/form/account_batch.rb +++ b/app/models/form/account_batch.rb @@ -2,6 +2,7 @@ class Form::AccountBatch include ActiveModel::Model + include Authorization attr_accessor :account_ids, :action, :current_account @@ -13,6 +14,10 @@ class Form::AccountBatch remove_from_followers! when 'block_domains' block_domains! + when 'approve' + approve! + when 'reject' + reject! end end @@ -57,4 +62,18 @@ class Form::AccountBatch ActivityPub::DeliveryWorker.perform_async(json, current_account.id, follow.account.inbox_url) end + + def approve! + users = accounts.includes(:user).map(&:user) + + users.each { |user| authorize(user, :approve?) } + .each(&:approve!) + end + + def reject! + records = accounts.includes(:user) + + records.each { |account| authorize(account.user, :reject?) } + .each { |account| SuspendAccountService.new.call(account, including_user: true, destroy: true, skip_distribution: true) } + end end diff --git a/app/views/admin/accounts/index.html.haml b/app/views/admin/accounts/index.html.haml index 66808add7c..7e9adb3fff 100644 --- a/app/views/admin/accounts/index.html.haml +++ b/app/views/admin/accounts/index.html.haml @@ -10,7 +10,7 @@ .filter-subset %strong= t('admin.accounts.moderation.title') %ul - %li= filter_link_to t('admin.accounts.moderation.pending'), pending: '1', silenced: nil, suspended: nil + %li= link_to safe_join([t('admin.accounts.moderation.pending'), "(#{number_with_delimiter(User.pending.count)})"], ' '), admin_pending_accounts_path %li= filter_link_to t('admin.accounts.moderation.active'), silenced: nil, suspended: nil, pending: nil %li= filter_link_to t('admin.accounts.moderation.silenced'), silenced: '1', suspended: nil, pending: nil %li= filter_link_to t('admin.accounts.moderation.suspended'), suspended: '1', silenced: nil, pending: nil diff --git a/app/views/admin/pending_accounts/_account.html.haml b/app/views/admin/pending_accounts/_account.html.haml new file mode 100644 index 0000000000..c520dc065a --- /dev/null +++ b/app/views/admin/pending_accounts/_account.html.haml @@ -0,0 +1,14 @@ +.batch-table__row + %label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox + = f.check_box :account_ids, { multiple: true, include_hidden: false }, account.id + .batch-table__row__content.batch-table__row__content--unpadded + %table.accounts-table + %tbody + %tr + %td + = account.user_email + = "(@#{account.username})" + %br/ + = account.user_current_sign_in_ip + %td.accounts-table__count + = table_link_to 'pencil', t('admin.accounts.edit'), admin_account_path(account.id) diff --git a/app/views/admin/pending_accounts/index.html.haml b/app/views/admin/pending_accounts/index.html.haml new file mode 100644 index 0000000000..77b96cbca0 --- /dev/null +++ b/app/views/admin/pending_accounts/index.html.haml @@ -0,0 +1,33 @@ +- content_for :page_title do + = t('admin.pending_accounts.title', count: User.pending.count) + +- content_for :header_tags do + = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' + += form_for(@form, url: admin_pending_accounts_path, method: :patch) do |f| + = hidden_field_tag :page, params[:page] || 1 + + .batch-table + .batch-table__toolbar + %label.batch-table__toolbar__select.batch-checkbox-all + = check_box_tag :batch_checkbox_all, nil, false + .batch-table__toolbar__actions + = f.button safe_join([fa_icon('check'), t('admin.accounts.approve')]), name: :approve, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + + = f.button safe_join([fa_icon('times'), t('admin.accounts.reject')]), name: :reject, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + .batch-table__body + - if @accounts.empty? + = nothing_here 'nothing-here--under-tabs' + - else + = render partial: 'account', collection: @accounts, locals: { f: f } + += paginate @accounts + +%hr.spacer/ + +%div{ style: 'overflow: hidden' } + %div{ style: 'float: right' } + = link_to t('admin.accounts.reject_all'), reject_all_admin_pending_accounts_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' + + %div + = link_to t('admin.accounts.approve_all'), approve_all_admin_pending_accounts_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' diff --git a/config/locales/en.yml b/config/locales/en.yml index 705024ff5b..df9c4913c4 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -330,6 +330,8 @@ en: expired: Expired title: Filter title: Invites + pending_accounts: + title: Pending accounts (%{count}) relays: add_new: Add new relay delete: Delete @@ -496,7 +498,7 @@ en: salutation: "%{name}," settings: 'Change e-mail preferences: %{link}' view: 'View:' - view_profile: View Profile + view_profile: View profile view_status: View status applications: created: Application successfully created diff --git a/config/navigation.rb b/config/navigation.rb index a6b2b6e4c7..dd5825867b 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -28,7 +28,7 @@ SimpleNavigation::Configuration.run do |navigation| primary.item :moderation, safe_join([fa_icon('gavel fw'), t('moderation.title')]), admin_reports_url, if: proc { current_user.staff? } do |admin| admin.item :action_logs, safe_join([fa_icon('bars fw'), t('admin.action_logs.title')]), admin_action_logs_url admin.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_url, highlights_on: %r{/admin/reports} - admin.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts} + admin.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts|/admin/pending_accounts} admin.item :invites, safe_join([fa_icon('user-plus fw'), t('admin.invites.title')]), admin_invites_path admin.item :tags, safe_join([fa_icon('tag fw'), t('admin.tags.title')]), admin_tags_path admin.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url(limited: '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks}, if: -> { current_user.admin? } diff --git a/config/routes.rb b/config/routes.rb index a98dbb7006..1ea6490b0d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -214,6 +214,13 @@ Rails.application.routes.draw do end end + resources :pending_accounts, only: [:index, :update] do + collection do + post :approve_all + post :reject_all + end + end + resources :users, only: [] do resource :two_factor_authentication, only: [:destroy] end From b7038997734f53b455b6fcc124a805395b374d28 Mon Sep 17 00:00:00 2001 From: koyu Date: Sat, 6 Apr 2019 20:13:03 +0200 Subject: [PATCH 14/27] Updated German locales (#10488) --- config/locales/de.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/config/locales/de.yml b/config/locales/de.yml index 6ac6e346bc..c3aecc58c6 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -3,7 +3,7 @@ de: about: about_hashtag_html: Dies sind öffentliche Beiträge, die mit #%{hashtag} getaggt wurden. Wenn du irgendwo im Fediversum ein Konto besitzt, kannst du mit ihnen interagieren. about_mastodon_html: Mastodon ist ein soziales Netzwerk. Es basiert auf offenen Web-Protokollen und freier, quelloffener Software. Es ist dezentral (so wie E-Mail!). - about_this: Über diese Instanz + about_this: Über diesen Server active_count_after: aktiv active_footnote: Monatlich Aktive User (MAU) administered_by: 'Administriert von:' @@ -11,7 +11,7 @@ de: apps: Mobile Apps apps_platforms: Benutze Mastodon auf iOS, Android und anderen Plattformen browse_directory: Durchsuche ein Profilverzeichnis und filtere nach Interessen - browse_public_posts: Durchsuche einen Zeitleiste an öffentlichen Beiträgen auf Mastodon + browse_public_posts: Durchsuche eine Zeitleiste an öffentlichen Beiträgen auf Mastodon contact: Kontakt contact_missing: Nicht angegeben contact_unavailable: N/A @@ -422,17 +422,17 @@ de: open: Jeder kann sich registrieren title: Registrierungsmodus show_known_fediverse_at_about_page: - desc_html: Wenn aktiviert, wird es alle Beiträge aus dem bereits bekannten Teil des Fediversums auf der Startseite anzeigen. Andernfalls werden lokale Beitrage der Instanz angezeigt. + desc_html: Wenn aktiviert, wird es alle Beiträge aus dem bereits bekannten Teil des Fediversums auf der Startseite anzeigen. Andernfalls werden lokale Beitrage des Servers angezeigt. title: Verwende öffentliche Zeitleiste für die Vorschau show_staff_badge: desc_html: Zeige Mitarbeiter-Badge auf Benutzerseite title: Zeige Mitarbeiter-Badge site_description: - desc_html: Einleitungsabschnitt auf der Frontseite. Beschreibe, was diese Mastodon-Instanz ausmacht. Du kannst HTML-Tags benutzen, insbesondere <a> und <em>. + desc_html: Einleitungsabschnitt auf der Frontseite. Beschreibe, was diesen Mastodon-Server ausmacht. Du kannst HTML-Tags benutzen, insbesondere <a> und <em>. title: Beschreibung des Servers site_description_extended: desc_html: Bietet sich für Verhaltenskodizes, Regeln, Richtlinien und weiteres an, was deinen Server auszeichnet. Du kannst HTML-Tags benutzen - title: Erweiterte Beschreibung der Instanz + title: Erweiterte Beschreibung des Servers site_short_description: desc_html: Wird angezeigt in der Seitenleiste und in Meta-Tags. Beschreibe in einem einzigen Abschnitt, was Mastodon ist und was diesen Server ausmacht. Falls leer, wird die Server-Beschreibung verwendet. title: Kurze Server-Beschreibung @@ -446,7 +446,7 @@ de: timeline_preview: desc_html: Auf der Frontseite die öffentliche Zeitleiste anzeigen title: Zeitleisten-Vorschau - title: Instanz-Einstellungen + title: Server-Einstellungen statuses: back_to_account: Zurück zum Konto batch: @@ -530,7 +530,7 @@ de: reset_password: Passwort zurücksetzen security: Sicherheit set_new_password: Neues Passwort setzen - trouble_logging_in: Schwierigkeiten beim anmelden? + trouble_logging_in: Schwierigkeiten beim Anmelden? authorize_follow: already_following: Du folgst diesem Konto bereits error: Das Remote-Konto konnte nicht geladen werden @@ -982,7 +982,7 @@ de:

Änderung an unserer Datenschutzerklärung

-

Wenn wir uns entscheiden, Änderungen an unserer Datenschutzerklärung vorzunehmen, werden wird diese Änderungen auf dieser Seite bekannt gegeben.

+

Wenn wir uns entscheiden, Änderungen an unserer Datenschutzerklärung vorzunehmen, werden wir diese Änderungen auf dieser Seite bekannt gegeben.

Dies ist eine Übersetzung, Irrtümer und Übersetzungsfehler vorbehalten. Im Zweifelsfall gilt die englische Originalversion.

From 6a0cd366ef339741fd24021d330dd4b44cfa6f8d Mon Sep 17 00:00:00 2001 From: Aditoo17 <42938951+Aditoo17@users.noreply.github.com> Date: Sun, 7 Apr 2019 02:34:52 +0200 Subject: [PATCH 15/27] I18n: Update Czech translation (#10489) --- config/locales/cs.yml | 11 ++++++++--- config/locales/doorkeeper.cs.yml | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 96b31cab42..6ba920ad51 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -23,7 +23,7 @@ cs: federation_hint_html: S účtem na %{instance} můžete sledovat lidi na jakémkoliv serveru Mastodon a jiných službách. generic_description: "%{domain} je jedním ze serverů v síti" get_apps: Vyzkoušejte mobilní aplikaci - hosted_on: Server Mastodon na adrese %{domain} + hosted_on: Mastodon na adrese %{domain} learn_more: Zjistit více privacy_policy: Zásady soukromí see_whats_happening: Podívejte se, co se děje @@ -84,6 +84,7 @@ cs: destroyed_msg: Moderátorská poznámka byla úspěšně zničena! accounts: approve: Schválit + approve_all: Schválit vše are_you_sure: Jste si jistý/á? avatar: Avatar by_domain: Doména @@ -148,6 +149,7 @@ cs: push_subscription_expires: Odebírání PuSH expiruje redownload: Obnovit profil reject: Zamítnout + reject_all: Zamítnout vše remove_avatar: Odstranit avatar remove_header: Odstranit záhlaví resend_confirmation: @@ -336,6 +338,8 @@ cs: expired: Vypršelé title: Filtrovat title: Pozvánky + pending_accounts: + title: Čekající účty (%{count}) relays: add_new: Přidat nový most delete: Smazat @@ -764,6 +768,7 @@ cs: quadrillion: bld thousand: tis trillion: bil + unit: '' pagination: newer: Novější next: Další @@ -1058,8 +1063,8 @@ cs: edit_profile_action: Nastavit profil edit_profile_step: Můžete si přizpůsobit svůj profil nahráním avataru a obrázku záhlaví, změnou zobrazovaného jména a dalších. Chcete-li posoudit nové sledující předtím, než vás mohou sledovat, můžete svůj účet uzamknout. explanation: Zde je pár tipů na začátek - final_action: Začněte přispívat - final_step: 'Začněte psát! I když nemáte sledující, mohou vaše zprávy vidět jiní lidé, například na místní časové ose a mezi hashtagy. Můžete se ostatním představit pomocí hashtagu #introductions.' + final_action: Začít psát + final_step: 'Začněte psát! I když nemáte sledující, mohou vaše zprávy vidět jiní lidé, například na místní časové ose a v hashtazích. Můžete se ostatním představit pomocí hashtagu #introductions.' full_handle: Vaše celá adresa profilu full_handle_hint: Tohle je, co byste řekl/a svým přátelům, aby vám mohli posílat zprávy nebo vás sledovat z jiného serveru. review_preferences_action: Změnit nastavení diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml index 99172656ab..f523e125d8 100644 --- a/config/locales/doorkeeper.cs.yml +++ b/config/locales/doorkeeper.cs.yml @@ -79,7 +79,7 @@ cs: messages: access_denied: Vlastník zdroje či autorizační server zamítl požadavek. credential_flow_not_configured: Proud Resource Owner Password Credentials selhal, protože Doorkeeper.configure.resource_owner_from_credentials nebylo nakonfigurováno. - invalid_client: Ověření klienta selhalo kvůli neznámému klientovi, chybějící klientské autentikaci či nepodporované autentikační metodě. + invalid_client: Ověření klienta selhalo kvůli neznámému klientovi, chybějící klientské autentizaci či nepodporované autentizační metodě. invalid_grant: Poskytnuté oprávnění je neplatné, vypršelé, zamítnuté, neshoduje se s URI přesměrování použitým v požadavku o autorizaci, nebo bylo uděleno jinému klientu. invalid_redirect_uri: Přesměrovací URI není platné. invalid_request: Požadavku chybí pžadovaný parametr, obsahuje nepodporovanou hodnotu parametru, či je jinak malformovaný. From 0e8819f0e8729cda54231ed7a76dd10eb2083bdf Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 7 Apr 2019 04:26:43 +0200 Subject: [PATCH 16/27] Add rate limit for media proxy requests (#10490) 30 per 30 minutes, like media uploads --- config/initializers/rack_attack.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb index 28201cc64c..ae3eede668 100644 --- a/config/initializers/rack_attack.rb +++ b/config/initializers/rack_attack.rb @@ -57,6 +57,10 @@ class Rack::Attack req.authenticated_user_id if req.post? && req.path.start_with?('/api/v1/media') end + throttle('throttle_media_proxy', limit: 30, period: 30.minutes) do |req| + req.ip if req.path.start_with?('/media_proxy') + end + throttle('throttle_api_sign_up', limit: 5, period: 30.minutes) do |req| req.ip if req.post? && req.path == '/api/v1/accounts' end From 67b3b62b98b89f24097a2757e42bc94f1bce123c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 7 Apr 2019 04:59:13 +0200 Subject: [PATCH 17/27] Improve blocked view of profiles (#10491) * Revert "Fix filtering of favourited_by, reblogged_by, followers and following (#10447)" This reverts commit 120544067fcca4bf6e71ba1ffb276c451c17c656. * Revert "Hide blocking accounts from blocked users (#10442)" This reverts commit 62bafa20a112ccdddaedb25723fc819dbbcd8e9a. * Improve blocked view of profiles - Change "You are blocked" to "Profile unavailable" - Hide following/followers in API when blocked - Disable follow button and show "Profile unavailable" on public profile as well --- .../accounts/follower_accounts_controller.rb | 8 +++-- .../accounts/following_accounts_controller.rb | 8 +++-- .../api/v1/accounts/statuses_controller.rb | 10 ------- app/controllers/api/v1/accounts_controller.rb | 5 ---- .../favourited_by_accounts_controller.rb | 1 - .../reblogged_by_accounts_controller.rb | 2 +- app/helpers/stream_entries_helper.rb | 2 +- .../features/account/components/header.js | 2 +- .../features/account_timeline/index.js | 22 ++++++++++---- .../mastodon/features/followers/index.js | 8 +++-- .../mastodon/features/following/index.js | 8 +++-- .../styles/mastodon/components.scss | 3 +- .../styles/mastodon/stream_entries.scss | 17 +++++++++++ app/models/account.rb | 1 - .../account_relationships_presenter.rb | 6 +++- .../rest/relationship_serializer.rb | 6 +++- app/services/account_search_service.rb | 10 +------ app/services/search_service.rb | 2 -- app/views/accounts/show.html.haml | 4 ++- app/views/follower_accounts/index.html.haml | 2 ++ app/views/following_accounts/index.html.haml | 2 ++ config/locales/en.yml | 1 + .../follower_accounts_controller_spec.rb | 29 ++---------------- .../following_accounts_controller_spec.rb | 29 ++---------------- spec/services/account_search_service_spec.rb | 17 ----------- spec/services/search_service_spec.rb | 30 +++++++++---------- 26 files changed, 97 insertions(+), 138 deletions(-) diff --git a/app/controllers/api/v1/accounts/follower_accounts_controller.rb b/app/controllers/api/v1/accounts/follower_accounts_controller.rb index 7a45e6dd26..2dabb8398c 100644 --- a/app/controllers/api/v1/accounts/follower_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/follower_accounts_controller.rb @@ -19,13 +19,17 @@ class Api::V1::Accounts::FollowerAccountsController < Api::BaseController end def load_accounts - return [] if @account.user_hides_network? && current_account.id != @account.id + return [] if hide_results? default_accounts.merge(paginated_follows).to_a end + def hide_results? + (@account.user_hides_network? && current_account.id != @account.id) || (current_account && @account.blocking?(current_account)) + end + def default_accounts - Account.without_blocking(current_account).includes(:active_relationships, :account_stat).references(:active_relationships) + Account.includes(:active_relationships, :account_stat).references(:active_relationships) end def paginated_follows diff --git a/app/controllers/api/v1/accounts/following_accounts_controller.rb b/app/controllers/api/v1/accounts/following_accounts_controller.rb index 0369cb25e9..44e89804b3 100644 --- a/app/controllers/api/v1/accounts/following_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/following_accounts_controller.rb @@ -19,13 +19,17 @@ class Api::V1::Accounts::FollowingAccountsController < Api::BaseController end def load_accounts - return [] if @account.user_hides_network? && current_account.id != @account.id + return [] if hide_results? default_accounts.merge(paginated_follows).to_a end + def hide_results? + (@account.user_hides_network? && current_account.id != @account.id) || (current_account && @account.blocking?(current_account)) + end + def default_accounts - Account.without_blocking(current_account).includes(:passive_relationships, :account_stat).references(:passive_relationships) + Account.includes(:passive_relationships, :account_stat).references(:passive_relationships) end def paginated_follows diff --git a/app/controllers/api/v1/accounts/statuses_controller.rb b/app/controllers/api/v1/accounts/statuses_controller.rb index 7aba2d0bdb..8cd8f8e799 100644 --- a/app/controllers/api/v1/accounts/statuses_controller.rb +++ b/app/controllers/api/v1/accounts/statuses_controller.rb @@ -3,8 +3,6 @@ class Api::V1::Accounts::StatusesController < Api::BaseController before_action -> { authorize_if_got_token! :read, :'read:statuses' } before_action :set_account - before_action :check_account_suspension - before_action :check_account_block after_action :insert_pagination_headers respond_to :json @@ -20,14 +18,6 @@ class Api::V1::Accounts::StatusesController < Api::BaseController @account = Account.find(params[:account_id]) end - def check_account_suspension - gone if @account.suspended? - end - - def check_account_block - gone if current_account.present? && @account.blocking?(current_account) - end - def load_statuses cached_account_statuses end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 685e044c34..b0c62778e6 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -10,7 +10,6 @@ class Api::V1::AccountsController < Api::BaseController before_action :require_user!, except: [:show, :create] before_action :set_account, except: [:create] before_action :check_account_suspension, only: [:show] - before_action :check_account_block, only: [:show] before_action :check_enabled_registrations, only: [:create] respond_to :json @@ -76,10 +75,6 @@ class Api::V1::AccountsController < Api::BaseController gone if @account.suspended? end - def check_account_block - gone if current_account.present? && @account.blocking?(current_account) - end - def account_params params.permit(:username, :email, :password, :agreement, :locale) end diff --git a/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb b/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb index e00c4d7088..657e578319 100644 --- a/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb +++ b/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb @@ -22,7 +22,6 @@ class Api::V1::Statuses::FavouritedByAccountsController < Api::BaseController def default_accounts Account - .without_blocking(current_account) .includes(:favourites, :account_stat) .references(:favourites) .where(favourites: { status_id: @status.id }) diff --git a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb index 9b2d0e59e9..6851099f66 100644 --- a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb +++ b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb @@ -21,7 +21,7 @@ class Api::V1::Statuses::RebloggedByAccountsController < Api::BaseController end def default_accounts - Account.without_blocking(current_account).includes(:statuses, :account_stat).references(:statuses) + Account.includes(:statuses, :account_stat).references(:statuses) end def paginated_statuses diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/stream_entries_helper.rb index 4734e32a43..d56efbfb91 100644 --- a/app/helpers/stream_entries_helper.rb +++ b/app/helpers/stream_entries_helper.rb @@ -23,7 +23,7 @@ module StreamEntriesHelper safe_join([render(file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')), t('accounts.unfollow')]) end elsif !(account.memorial? || account.moved?) - link_to account_follow_path(account), class: 'button logo-button', data: { method: :post } do + link_to account_follow_path(account), class: "button logo-button#{account.blocking?(current_account) ? ' disabled' : ''}", data: { method: :post } do safe_join([render(file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')), t('accounts.follow')]) end end diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 4faba55895..e5b60e33e1 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -109,7 +109,7 @@ class Header extends ImmutablePureComponent { } else if (account.getIn(['relationship', 'requested'])) { actionBtn =