mirror of
https://github.com/mastodon/mastodon.git
synced 2025-09-05 17:31:12 +00:00
Merge branch 'main' into feature/require-mfa-by-admin
This commit is contained in:
commit
8bd9d60cdf
4
Gemfile
4
Gemfile
|
@ -88,7 +88,7 @@ gem 'sidekiq-scheduler', '~> 6.0'
|
||||||
gem 'sidekiq-unique-jobs', '> 8'
|
gem 'sidekiq-unique-jobs', '> 8'
|
||||||
gem 'simple_form', '~> 5.2'
|
gem 'simple_form', '~> 5.2'
|
||||||
gem 'simple-navigation', '~> 4.4'
|
gem 'simple-navigation', '~> 4.4'
|
||||||
gem 'stoplight', '~> 4.1'
|
gem 'stoplight'
|
||||||
gem 'strong_migrations'
|
gem 'strong_migrations'
|
||||||
gem 'tty-prompt', '~> 0.23', require: false
|
gem 'tty-prompt', '~> 0.23', require: false
|
||||||
gem 'twitter-text', '~> 3.1.0'
|
gem 'twitter-text', '~> 3.1.0'
|
||||||
|
@ -146,7 +146,7 @@ group :test do
|
||||||
gem 'climate_control'
|
gem 'climate_control'
|
||||||
|
|
||||||
# Validate schemas in specs
|
# Validate schemas in specs
|
||||||
gem 'json-schema', '~> 5.0'
|
gem 'json-schema', '~> 6.0'
|
||||||
|
|
||||||
# Test harness fo rack components
|
# Test harness fo rack components
|
||||||
gem 'rack-test', '~> 2.1'
|
gem 'rack-test', '~> 2.1'
|
||||||
|
|
18
Gemfile.lock
18
Gemfile.lock
|
@ -365,7 +365,7 @@ GEM
|
||||||
json-ld-preloaded (3.3.2)
|
json-ld-preloaded (3.3.2)
|
||||||
json-ld (~> 3.3)
|
json-ld (~> 3.3)
|
||||||
rdf (~> 3.3)
|
rdf (~> 3.3)
|
||||||
json-schema (5.2.1)
|
json-schema (6.0.0)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
bigdecimal (~> 3.1)
|
bigdecimal (~> 3.1)
|
||||||
jsonapi-renderer (0.2.2)
|
jsonapi-renderer (0.2.2)
|
||||||
|
@ -719,9 +719,7 @@ GEM
|
||||||
redis (4.8.1)
|
redis (4.8.1)
|
||||||
redis-client (0.25.2)
|
redis-client (0.25.2)
|
||||||
connection_pool
|
connection_pool
|
||||||
redlock (1.3.2)
|
regexp_parser (2.11.1)
|
||||||
redis (>= 3.0.0, < 6.0)
|
|
||||||
regexp_parser (2.11.0)
|
|
||||||
reline (0.6.2)
|
reline (0.6.2)
|
||||||
io-console (~> 0.5)
|
io-console (~> 0.5)
|
||||||
request_store (1.7.0)
|
request_store (1.7.0)
|
||||||
|
@ -751,7 +749,7 @@ GEM
|
||||||
rspec-mocks (3.13.5)
|
rspec-mocks (3.13.5)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.13.0)
|
rspec-support (~> 3.13.0)
|
||||||
rspec-rails (8.0.1)
|
rspec-rails (8.0.2)
|
||||||
actionpack (>= 7.2)
|
actionpack (>= 7.2)
|
||||||
activesupport (>= 7.2)
|
activesupport (>= 7.2)
|
||||||
railties (>= 7.2)
|
railties (>= 7.2)
|
||||||
|
@ -789,7 +787,7 @@ GEM
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rubocop (>= 1.75.0, < 2.0)
|
rubocop (>= 1.75.0, < 2.0)
|
||||||
rubocop-ast (>= 1.38.0, < 2.0)
|
rubocop-ast (>= 1.38.0, < 2.0)
|
||||||
rubocop-rails (2.32.0)
|
rubocop-rails (2.33.1)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rack (>= 1.1)
|
rack (>= 1.1)
|
||||||
|
@ -855,8 +853,8 @@ GEM
|
||||||
stackprof (0.2.27)
|
stackprof (0.2.27)
|
||||||
starry (0.2.0)
|
starry (0.2.0)
|
||||||
base64
|
base64
|
||||||
stoplight (4.1.1)
|
stoplight (5.3.1)
|
||||||
redlock (~> 1.0)
|
zeitwerk
|
||||||
stringio (3.1.7)
|
stringio (3.1.7)
|
||||||
strong_migrations (2.5.0)
|
strong_migrations (2.5.0)
|
||||||
activerecord (>= 7.1)
|
activerecord (>= 7.1)
|
||||||
|
@ -1005,7 +1003,7 @@ DEPENDENCIES
|
||||||
jd-paperclip-azure (~> 3.0)
|
jd-paperclip-azure (~> 3.0)
|
||||||
json-ld
|
json-ld
|
||||||
json-ld-preloaded (~> 3.2)
|
json-ld-preloaded (~> 3.2)
|
||||||
json-schema (~> 5.0)
|
json-schema (~> 6.0)
|
||||||
kaminari (~> 1.2)
|
kaminari (~> 1.2)
|
||||||
kt-paperclip (~> 7.2)
|
kt-paperclip (~> 7.2)
|
||||||
letter_opener (~> 1.8)
|
letter_opener (~> 1.8)
|
||||||
|
@ -1088,7 +1086,7 @@ DEPENDENCIES
|
||||||
simplecov (~> 0.22)
|
simplecov (~> 0.22)
|
||||||
simplecov-lcov (~> 0.8)
|
simplecov-lcov (~> 0.8)
|
||||||
stackprof
|
stackprof
|
||||||
stoplight (~> 4.1)
|
stoplight
|
||||||
strong_migrations
|
strong_migrations
|
||||||
test-prof
|
test-prof
|
||||||
thor (~> 1.2)
|
thor (~> 1.2)
|
||||||
|
|
|
@ -24,11 +24,11 @@ class Auth::RegistrationsController < Devise::RegistrationsController
|
||||||
super(&:build_invite_request)
|
super(&:build_invite_request)
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit # rubocop:disable Lint/UselessMethodDefinition
|
def edit
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
def create # rubocop:disable Lint/UselessMethodDefinition
|
def create
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@ module SignatureVerification
|
||||||
|
|
||||||
EXPIRATION_WINDOW_LIMIT = 12.hours
|
EXPIRATION_WINDOW_LIMIT = 12.hours
|
||||||
CLOCK_SKEW_MARGIN = 1.hour
|
CLOCK_SKEW_MARGIN = 1.hour
|
||||||
|
STOPLIGHT_COOL_OFF_TIME = 5.minutes.seconds
|
||||||
|
STOPLIGHT_THRESHOLD = 1
|
||||||
|
|
||||||
def require_account_signature!
|
def require_account_signature!
|
||||||
render json: signature_verification_failure_reason, status: signature_verification_failure_code unless signed_request_account
|
render json: signature_verification_failure_reason, status: signature_verification_failure_code unless signed_request_account
|
||||||
|
@ -107,10 +109,12 @@ module SignatureVerification
|
||||||
end
|
end
|
||||||
|
|
||||||
def stoplight_wrapper
|
def stoplight_wrapper
|
||||||
Stoplight("source:#{request.remote_ip}")
|
Stoplight(
|
||||||
.with_threshold(1)
|
"source:#{request.remote_ip}",
|
||||||
.with_cool_off_time(5.minutes.seconds)
|
cool_off_time: STOPLIGHT_COOL_OFF_TIME,
|
||||||
.with_error_handler { |error, handle| error.is_a?(HTTP::Error) || error.is_a?(OpenSSL::SSL::SSLError) ? handle.call(error) : raise(error) }
|
threshold: STOPLIGHT_THRESHOLD,
|
||||||
|
tracked_errors: [HTTP::Error, OpenSSL::SSL::SSLError]
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def actor_refresh_key!(actor)
|
def actor_refresh_key!(actor)
|
||||||
|
|
|
@ -25,7 +25,7 @@ export const ReplyIndicator = () => {
|
||||||
<div className='reply-indicator__line' />
|
<div className='reply-indicator__line' />
|
||||||
|
|
||||||
<Link to={`/@${account.get('acct')}`} className='detailed-status__display-avatar'>
|
<Link to={`/@${account.get('acct')}`} className='detailed-status__display-avatar'>
|
||||||
<Avatar account={account} size={46} />
|
<Avatar key={`avatar-${account.get('id')}`} account={account} size={46} />
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<div className='reply-indicator__main'>
|
<div className='reply-indicator__main'>
|
||||||
|
|
|
@ -224,6 +224,7 @@
|
||||||
"confirmations.discard_draft.edit.message": "Kontynuowanie spowoduje utratę wszystkich zmian wprowadzonych przez Ciebie w aktualnie edytowanym poście.",
|
"confirmations.discard_draft.edit.message": "Kontynuowanie spowoduje utratę wszystkich zmian wprowadzonych przez Ciebie w aktualnie edytowanym poście.",
|
||||||
"confirmations.discard_draft.edit.title": "Odrzucić zmiany w poście?",
|
"confirmations.discard_draft.edit.title": "Odrzucić zmiany w poście?",
|
||||||
"confirmations.discard_draft.post.cancel": "Wznów wersję roboczą",
|
"confirmations.discard_draft.post.cancel": "Wznów wersję roboczą",
|
||||||
|
"confirmations.discard_draft.post.message": "Kontynuacja odrzuci aktualnie tworzony post.",
|
||||||
"confirmations.discard_draft.post.title": "Anulować wersję roboczą?",
|
"confirmations.discard_draft.post.title": "Anulować wersję roboczą?",
|
||||||
"confirmations.discard_edit_media.confirm": "Odrzuć",
|
"confirmations.discard_edit_media.confirm": "Odrzuć",
|
||||||
"confirmations.discard_edit_media.message": "Masz niezapisane zmiany w opisie lub podglądzie, odrzucić je mimo to?",
|
"confirmations.discard_edit_media.message": "Masz niezapisane zmiany w opisie lub podglądzie, odrzucić je mimo to?",
|
||||||
|
@ -244,6 +245,9 @@
|
||||||
"confirmations.remove_from_followers.confirm": "Usuń obserwującego",
|
"confirmations.remove_from_followers.confirm": "Usuń obserwującego",
|
||||||
"confirmations.remove_from_followers.message": "{name} przestanie Cię obserwować. Czy na pewno chcesz kontynuować?",
|
"confirmations.remove_from_followers.message": "{name} przestanie Cię obserwować. Czy na pewno chcesz kontynuować?",
|
||||||
"confirmations.remove_from_followers.title": "Usunąć obserwującego?",
|
"confirmations.remove_from_followers.title": "Usunąć obserwującego?",
|
||||||
|
"confirmations.revoke_quote.confirm": "Usuń post",
|
||||||
|
"confirmations.revoke_quote.message": "Tej akcji nie można cofnąć.",
|
||||||
|
"confirmations.revoke_quote.title": "Usuń post?",
|
||||||
"confirmations.unfollow.confirm": "Nie obserwuj",
|
"confirmations.unfollow.confirm": "Nie obserwuj",
|
||||||
"confirmations.unfollow.message": "Czy na pewno nie chcesz obserwować {name}?",
|
"confirmations.unfollow.message": "Czy na pewno nie chcesz obserwować {name}?",
|
||||||
"confirmations.unfollow.title": "Cofnąć obserwację?",
|
"confirmations.unfollow.title": "Cofnąć obserwację?",
|
||||||
|
@ -305,6 +309,9 @@
|
||||||
"emoji_button.search_results": "Wyniki wyszukiwania",
|
"emoji_button.search_results": "Wyniki wyszukiwania",
|
||||||
"emoji_button.symbols": "Symbole",
|
"emoji_button.symbols": "Symbole",
|
||||||
"emoji_button.travel": "Podróże i miejsca",
|
"emoji_button.travel": "Podróże i miejsca",
|
||||||
|
"empty_column.account_featured.me": "Niczego jeszcze nie poleciłeś. Czy wiesz, że możesz wyświetlać swoje hashtagi, z których korzystasz najbardziej, a nawet konta znajomego na swoim profilu?",
|
||||||
|
"empty_column.account_featured.other": "{acct} nie wyróżnił jeszcze nic. Czy wiesz, że możesz wyświetlać swoje hashtagi, z których korzystasz najbardziej, a nawet konta znajomego na swoim profilu?",
|
||||||
|
"empty_column.account_featured_other.unknown": "To konto nie zostało jeszcze wyróżnione.",
|
||||||
"empty_column.account_hides_collections": "Ta osoba postanowiła nie udostępniać tych informacji",
|
"empty_column.account_hides_collections": "Ta osoba postanowiła nie udostępniać tych informacji",
|
||||||
"empty_column.account_suspended": "Konto zawieszone",
|
"empty_column.account_suspended": "Konto zawieszone",
|
||||||
"empty_column.account_timeline": "Brak wpisów!",
|
"empty_column.account_timeline": "Brak wpisów!",
|
||||||
|
@ -560,6 +567,8 @@
|
||||||
"navigation_bar.follows_and_followers": "Obserwowani i obserwujący",
|
"navigation_bar.follows_and_followers": "Obserwowani i obserwujący",
|
||||||
"navigation_bar.import_export": "Import i eksport",
|
"navigation_bar.import_export": "Import i eksport",
|
||||||
"navigation_bar.lists": "Listy",
|
"navigation_bar.lists": "Listy",
|
||||||
|
"navigation_bar.live_feed_local": "Kanał na żywo (lokalny)",
|
||||||
|
"navigation_bar.live_feed_public": "Kanał na żywo (publiczny)",
|
||||||
"navigation_bar.logout": "Wyloguj",
|
"navigation_bar.logout": "Wyloguj",
|
||||||
"navigation_bar.moderation": "Moderacja",
|
"navigation_bar.moderation": "Moderacja",
|
||||||
"navigation_bar.more": "Więcej",
|
"navigation_bar.more": "Więcej",
|
||||||
|
@ -594,6 +603,7 @@
|
||||||
"notification.label.mention": "Wzmianka",
|
"notification.label.mention": "Wzmianka",
|
||||||
"notification.label.private_mention": "Wzmianka bezpośrednia",
|
"notification.label.private_mention": "Wzmianka bezpośrednia",
|
||||||
"notification.label.private_reply": "Komentarz bezpośredni",
|
"notification.label.private_reply": "Komentarz bezpośredni",
|
||||||
|
"notification.label.quote": "{name} cytował twój post",
|
||||||
"notification.label.reply": "Komentarz",
|
"notification.label.reply": "Komentarz",
|
||||||
"notification.mention": "Wzmianka",
|
"notification.mention": "Wzmianka",
|
||||||
"notification.mentioned_you": "{name} wzmiankuje cię",
|
"notification.mentioned_you": "{name} wzmiankuje cię",
|
||||||
|
@ -651,6 +661,7 @@
|
||||||
"notifications.column_settings.mention": "Wzmianki:",
|
"notifications.column_settings.mention": "Wzmianki:",
|
||||||
"notifications.column_settings.poll": "Wyniki ankiety:",
|
"notifications.column_settings.poll": "Wyniki ankiety:",
|
||||||
"notifications.column_settings.push": "Powiadomienia push",
|
"notifications.column_settings.push": "Powiadomienia push",
|
||||||
|
"notifications.column_settings.quote": "Cytaty:",
|
||||||
"notifications.column_settings.reblog": "Podbicia:",
|
"notifications.column_settings.reblog": "Podbicia:",
|
||||||
"notifications.column_settings.show": "Pokaż w kolumnie",
|
"notifications.column_settings.show": "Pokaż w kolumnie",
|
||||||
"notifications.column_settings.sound": "Odtwarzaj dźwięk",
|
"notifications.column_settings.sound": "Odtwarzaj dźwięk",
|
||||||
|
@ -871,6 +882,8 @@
|
||||||
"status.quote_error.filtered": "Ukryte z powodu jednego z Twoich filtrów",
|
"status.quote_error.filtered": "Ukryte z powodu jednego z Twoich filtrów",
|
||||||
"status.quote_error.not_available": "Post niedostępny",
|
"status.quote_error.not_available": "Post niedostępny",
|
||||||
"status.quote_error.pending_approval": "Post oczekujący",
|
"status.quote_error.pending_approval": "Post oczekujący",
|
||||||
|
"status.quote_error.pending_approval_popout.body": "Oferty współdzielone przez Fediverse mogą wymagać czasu, ponieważ różne serwery mają różne protokoły.",
|
||||||
|
"status.quote_error.pending_approval_popout.title": "Oczekujący cytat? Spokojnie, bądź cierpliwy :)",
|
||||||
"status.quote_post_author": "Zacytowano post @{name}",
|
"status.quote_post_author": "Zacytowano post @{name}",
|
||||||
"status.read_more": "Czytaj dalej",
|
"status.read_more": "Czytaj dalej",
|
||||||
"status.reblog": "Podbij",
|
"status.reblog": "Podbij",
|
||||||
|
@ -886,6 +899,7 @@
|
||||||
"status.reply": "Odpowiedz",
|
"status.reply": "Odpowiedz",
|
||||||
"status.replyAll": "Odpowiedz na wątek",
|
"status.replyAll": "Odpowiedz na wątek",
|
||||||
"status.report": "Zgłoś @{name}",
|
"status.report": "Zgłoś @{name}",
|
||||||
|
"status.revoke_quote": "Usuń mój wpis z postu @{name}",
|
||||||
"status.sensitive_warning": "Wrażliwa zawartość",
|
"status.sensitive_warning": "Wrażliwa zawartość",
|
||||||
"status.share": "Udostępnij",
|
"status.share": "Udostępnij",
|
||||||
"status.show_less_all": "Zwiń wszystkie",
|
"status.show_less_all": "Zwiń wszystkie",
|
||||||
|
|
|
@ -245,6 +245,9 @@
|
||||||
"confirmations.remove_from_followers.confirm": "Убрать подписчика",
|
"confirmations.remove_from_followers.confirm": "Убрать подписчика",
|
||||||
"confirmations.remove_from_followers.message": "Пользователь {name} перестанет быть подписан на вас. Продолжить?",
|
"confirmations.remove_from_followers.message": "Пользователь {name} перестанет быть подписан на вас. Продолжить?",
|
||||||
"confirmations.remove_from_followers.title": "Убрать подписчика?",
|
"confirmations.remove_from_followers.title": "Убрать подписчика?",
|
||||||
|
"confirmations.revoke_quote.confirm": "Убрать пост",
|
||||||
|
"confirmations.revoke_quote.message": "Это действие невозможно отменить.",
|
||||||
|
"confirmations.revoke_quote.title": "Убрать пост?",
|
||||||
"confirmations.unfollow.confirm": "Отписаться",
|
"confirmations.unfollow.confirm": "Отписаться",
|
||||||
"confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?",
|
"confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?",
|
||||||
"confirmations.unfollow.title": "Отписаться?",
|
"confirmations.unfollow.title": "Отписаться?",
|
||||||
|
@ -498,6 +501,8 @@
|
||||||
"keyboard_shortcuts.translate": "перевести пост",
|
"keyboard_shortcuts.translate": "перевести пост",
|
||||||
"keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска",
|
"keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска",
|
||||||
"keyboard_shortcuts.up": "вверх по списку",
|
"keyboard_shortcuts.up": "вверх по списку",
|
||||||
|
"learn_more_link.got_it": "Понятно",
|
||||||
|
"learn_more_link.learn_more": "Узнать больше",
|
||||||
"lightbox.close": "Закрыть",
|
"lightbox.close": "Закрыть",
|
||||||
"lightbox.next": "Далее",
|
"lightbox.next": "Далее",
|
||||||
"lightbox.previous": "Назад",
|
"lightbox.previous": "Назад",
|
||||||
|
@ -845,6 +850,8 @@
|
||||||
"status.bookmark": "Добавить в закладки",
|
"status.bookmark": "Добавить в закладки",
|
||||||
"status.cancel_reblog_private": "Отменить продвижение",
|
"status.cancel_reblog_private": "Отменить продвижение",
|
||||||
"status.cannot_reblog": "Этот пост не может быть продвинут",
|
"status.cannot_reblog": "Этот пост не может быть продвинут",
|
||||||
|
"status.context.load_new_replies": "Доступны новые ответы",
|
||||||
|
"status.context.loading": "Проверяем, есть ли еще ответы",
|
||||||
"status.continued_thread": "Продолжение предыдущего поста",
|
"status.continued_thread": "Продолжение предыдущего поста",
|
||||||
"status.copy": "Скопировать ссылку на пост",
|
"status.copy": "Скопировать ссылку на пост",
|
||||||
"status.delete": "Удалить",
|
"status.delete": "Удалить",
|
||||||
|
@ -871,6 +878,7 @@
|
||||||
"status.open": "Открыть пост",
|
"status.open": "Открыть пост",
|
||||||
"status.pin": "Закрепить в профиле",
|
"status.pin": "Закрепить в профиле",
|
||||||
"status.quote_error.filtered": "Скрыто одним из ваших фильтров",
|
"status.quote_error.filtered": "Скрыто одним из ваших фильтров",
|
||||||
|
"status.quote_error.not_available": "Пост недоступен",
|
||||||
"status.read_more": "Читать далее",
|
"status.read_more": "Читать далее",
|
||||||
"status.reblog": "Продвинуть",
|
"status.reblog": "Продвинуть",
|
||||||
"status.reblog_private": "Продвинуть для своей аудитории",
|
"status.reblog_private": "Продвинуть для своей аудитории",
|
||||||
|
|
|
@ -74,7 +74,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_interaction_policies!
|
def update_interaction_policies!
|
||||||
@status.quote_approval_policy = @status_parser.quote_policy
|
@status.update(quote_approval_policy: @status_parser.quote_policy)
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_media_attachments!
|
def update_media_attachments!
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class BulkImportRowService
|
class BulkImportRowService
|
||||||
|
STOPLIGHT_COOL_OFF_TIME = 5.minutes.seconds
|
||||||
|
STOPLIGHT_THRESHOLD = 1
|
||||||
|
|
||||||
def call(row)
|
def call(row)
|
||||||
@account = row.bulk_import.account
|
@account = row.bulk_import.account
|
||||||
@data = row.data
|
@data = row.data
|
||||||
|
@ -10,7 +13,7 @@ class BulkImportRowService
|
||||||
when :following, :blocking, :muting, :lists
|
when :following, :blocking, :muting, :lists
|
||||||
target_acct = @data['acct']
|
target_acct = @data['acct']
|
||||||
target_domain = domain(target_acct)
|
target_domain = domain(target_acct)
|
||||||
@target_account = stoplight_wrapper(target_domain).run { ResolveAccountService.new.call(target_acct, { check_delivery_availability: true }) }
|
@target_account = stoplight_wrapper(target_domain).run(stoplight_fallback) { ResolveAccountService.new.call(target_acct, { check_delivery_availability: true }) }
|
||||||
return false if @target_account.nil?
|
return false if @target_account.nil?
|
||||||
when :bookmarks
|
when :bookmarks
|
||||||
target_uri = @data['uri']
|
target_uri = @data['uri']
|
||||||
|
@ -18,7 +21,7 @@ class BulkImportRowService
|
||||||
@target_status = ActivityPub::TagManager.instance.uri_to_resource(target_uri, Status)
|
@target_status = ActivityPub::TagManager.instance.uri_to_resource(target_uri, Status)
|
||||||
return false if @target_status.nil? && ActivityPub::TagManager.instance.local_uri?(target_uri)
|
return false if @target_status.nil? && ActivityPub::TagManager.instance.local_uri?(target_uri)
|
||||||
|
|
||||||
@target_status ||= stoplight_wrapper(target_domain).run { ActivityPub::FetchRemoteStatusService.new.call(target_uri) }
|
@target_status ||= stoplight_wrapper(target_domain).run(stoplight_fallback) { ActivityPub::FetchRemoteStatusService.new.call(target_uri) }
|
||||||
return false if @target_status.nil?
|
return false if @target_status.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -51,13 +54,18 @@ class BulkImportRowService
|
||||||
TagManager.instance.local_domain?(domain) ? nil : TagManager.instance.normalize_domain(domain)
|
TagManager.instance.local_domain?(domain) ? nil : TagManager.instance.normalize_domain(domain)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def stoplight_fallback
|
||||||
|
->(error) {}
|
||||||
|
end
|
||||||
|
|
||||||
def stoplight_wrapper(domain)
|
def stoplight_wrapper(domain)
|
||||||
if domain.present?
|
if domain.present?
|
||||||
Stoplight("source:#{domain}")
|
Stoplight(
|
||||||
.with_fallback { nil }
|
"source:#{domain}",
|
||||||
.with_threshold(1)
|
cool_off_time: STOPLIGHT_COOL_OFF_TIME,
|
||||||
.with_cool_off_time(5.minutes.seconds)
|
threshold: STOPLIGHT_THRESHOLD,
|
||||||
.with_error_handler { |error, handle| error.is_a?(HTTP::Error) || error.is_a?(OpenSSL::SSL::SSLError) ? handle.call(error) : raise(error) }
|
tracked_errors: [HTTP::Error, OpenSSL::SSL::SSLError]
|
||||||
|
)
|
||||||
else
|
else
|
||||||
Stoplight('domain-blank')
|
Stoplight('domain-blank')
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,8 +5,8 @@ class ActivityPub::DeliveryWorker
|
||||||
include RoutingHelper
|
include RoutingHelper
|
||||||
include JsonLdHelper
|
include JsonLdHelper
|
||||||
|
|
||||||
|
STOPLIGHT_COOL_OFF_TIME = 60
|
||||||
STOPLIGHT_FAILURE_THRESHOLD = 10
|
STOPLIGHT_FAILURE_THRESHOLD = 10
|
||||||
STOPLIGHT_COOLDOWN = 60
|
|
||||||
|
|
||||||
sidekiq_options queue: 'push', retry: 16, dead: false
|
sidekiq_options queue: 'push', retry: 16, dead: false
|
||||||
|
|
||||||
|
@ -75,9 +75,11 @@ class ActivityPub::DeliveryWorker
|
||||||
end
|
end
|
||||||
|
|
||||||
def stoplight_wrapper
|
def stoplight_wrapper
|
||||||
Stoplight(@inbox_url)
|
Stoplight(
|
||||||
.with_threshold(STOPLIGHT_FAILURE_THRESHOLD)
|
@inbox_url,
|
||||||
.with_cool_off_time(STOPLIGHT_COOLDOWN)
|
cool_off_time: STOPLIGHT_COOL_OFF_TIME,
|
||||||
|
threshold: STOPLIGHT_FAILURE_THRESHOLD
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def failure_tracker
|
def failure_tracker
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
require 'stoplight'
|
require 'stoplight'
|
||||||
|
|
||||||
Rails.application.reloader.to_prepare do
|
Rails.application.reloader.to_prepare do
|
||||||
Stoplight.default_data_store = Stoplight::DataStore::Redis.new(RedisConnection.new.connection)
|
Stoplight.configure do |config|
|
||||||
Stoplight.default_notifiers = [Stoplight::Notifier::Logger.new(Rails.logger)]
|
config.data_store = Stoplight::DataStore::Redis.new(RedisConnection.new.connection)
|
||||||
|
config.notifiers = [Stoplight::Notifier::Logger.new(Rails.logger)]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -599,6 +599,7 @@ pl:
|
||||||
limited: Ograniczone
|
limited: Ograniczone
|
||||||
title: Moderacja
|
title: Moderacja
|
||||||
moderation_notes:
|
moderation_notes:
|
||||||
|
create: Dodaj notatkę moderacyjną
|
||||||
title: Notatki moderacyjne
|
title: Notatki moderacyjne
|
||||||
private_comment: Prywatny komentarz
|
private_comment: Prywatny komentarz
|
||||||
public_comment: Publiczny komentarz
|
public_comment: Publiczny komentarz
|
||||||
|
@ -1109,6 +1110,7 @@ pl:
|
||||||
trending: Popularne
|
trending: Popularne
|
||||||
username_blocks:
|
username_blocks:
|
||||||
add_new: Dodaj nową
|
add_new: Dodaj nową
|
||||||
|
block_registrations: Zablokuj rejestracje
|
||||||
comparison:
|
comparison:
|
||||||
contains: Zawiera
|
contains: Zawiera
|
||||||
equals: Równa się
|
equals: Równa się
|
||||||
|
@ -1742,6 +1744,9 @@ pl:
|
||||||
title: Nowe wspomnienie o Tobie
|
title: Nowe wspomnienie o Tobie
|
||||||
poll:
|
poll:
|
||||||
subject: Ankieta %{name} zakończyła się
|
subject: Ankieta %{name} zakończyła się
|
||||||
|
quote:
|
||||||
|
subject: "%{name} cytował twój post"
|
||||||
|
title: Nowy cytat
|
||||||
reblog:
|
reblog:
|
||||||
body: 'Twój wpis został podbity przez %{name}:'
|
body: 'Twój wpis został podbity przez %{name}:'
|
||||||
subject: Twój wpis został podbity przez %{name}
|
subject: Twój wpis został podbity przez %{name}
|
||||||
|
@ -2024,6 +2029,9 @@ pl:
|
||||||
does_not_match_previous_name: nie pasuje do poprzedniej nazwy
|
does_not_match_previous_name: nie pasuje do poprzedniej nazwy
|
||||||
terms_of_service:
|
terms_of_service:
|
||||||
title: Regulamin
|
title: Regulamin
|
||||||
|
terms_of_service_interstitial:
|
||||||
|
review_link: Przeglądnij Warunki Korzystania
|
||||||
|
title: Warunki korzystania z %{domain} zmieniają się
|
||||||
themes:
|
themes:
|
||||||
contrast: Mastodon (Wysoki kontrast)
|
contrast: Mastodon (Wysoki kontrast)
|
||||||
default: Mastodon (Ciemny)
|
default: Mastodon (Ciemny)
|
||||||
|
|
|
@ -196,6 +196,7 @@ ru:
|
||||||
create_relay: Создание ретранслятора
|
create_relay: Создание ретранслятора
|
||||||
create_unavailable_domain: Добавление домена в список недоступных
|
create_unavailable_domain: Добавление домена в список недоступных
|
||||||
create_user_role: Создание ролей
|
create_user_role: Создание ролей
|
||||||
|
create_username_block: Создать правило имени пользователя
|
||||||
demote_user: Разжалование пользователей
|
demote_user: Разжалование пользователей
|
||||||
destroy_announcement: Удаление объявлений
|
destroy_announcement: Удаление объявлений
|
||||||
destroy_canonical_email_block: Удаление блокировок e-mail
|
destroy_canonical_email_block: Удаление блокировок e-mail
|
||||||
|
@ -209,6 +210,7 @@ ru:
|
||||||
destroy_status: Удаление постов
|
destroy_status: Удаление постов
|
||||||
destroy_unavailable_domain: Исключение доменов из списка недоступных
|
destroy_unavailable_domain: Исключение доменов из списка недоступных
|
||||||
destroy_user_role: Удаление ролей
|
destroy_user_role: Удаление ролей
|
||||||
|
destroy_username_block: Удалить правило имени пользователя
|
||||||
disable_2fa_user: Отключение 2FA
|
disable_2fa_user: Отключение 2FA
|
||||||
disable_custom_emoji: Отключение эмодзи
|
disable_custom_emoji: Отключение эмодзи
|
||||||
disable_relay: Отключение ретранслятора
|
disable_relay: Отключение ретранслятора
|
||||||
|
@ -243,6 +245,7 @@ ru:
|
||||||
update_report: Изменение жалоб
|
update_report: Изменение жалоб
|
||||||
update_status: Изменение постов
|
update_status: Изменение постов
|
||||||
update_user_role: Изменение ролей
|
update_user_role: Изменение ролей
|
||||||
|
update_username_block: Обновить правило имени пользователя
|
||||||
actions:
|
actions:
|
||||||
approve_appeal_html: "%{name} одобрил(а) обжалование действий модерации от %{target}"
|
approve_appeal_html: "%{name} одобрил(а) обжалование действий модерации от %{target}"
|
||||||
approve_user_html: "%{name} утвердил(а) регистрацию %{target}"
|
approve_user_html: "%{name} утвердил(а) регистрацию %{target}"
|
||||||
|
@ -261,6 +264,7 @@ ru:
|
||||||
create_relay_html: "%{name} создал(а) ретранслятор %{target}"
|
create_relay_html: "%{name} создал(а) ретранслятор %{target}"
|
||||||
create_unavailable_domain_html: "%{name} приостановил доставку на узел %{target}"
|
create_unavailable_domain_html: "%{name} приостановил доставку на узел %{target}"
|
||||||
create_user_role_html: "%{name} создал(а) роль %{target}"
|
create_user_role_html: "%{name} создал(а) роль %{target}"
|
||||||
|
create_username_block_html: "%{name} создал(а) правило для имён пользователей, содержащих %{target}"
|
||||||
demote_user_html: "%{name} разжаловал(а) пользователя %{target}"
|
demote_user_html: "%{name} разжаловал(а) пользователя %{target}"
|
||||||
destroy_announcement_html: "%{name} удалил(а) объявление %{target}"
|
destroy_announcement_html: "%{name} удалил(а) объявление %{target}"
|
||||||
destroy_canonical_email_block_html: "%{name} снял(а) блокировку e-mail с хэшем %{target}"
|
destroy_canonical_email_block_html: "%{name} снял(а) блокировку e-mail с хэшем %{target}"
|
||||||
|
@ -274,6 +278,7 @@ ru:
|
||||||
destroy_status_html: "%{name} удалил(а) пост пользователя %{target}"
|
destroy_status_html: "%{name} удалил(а) пост пользователя %{target}"
|
||||||
destroy_unavailable_domain_html: "%{name} возобновил доставку на узел %{target}"
|
destroy_unavailable_domain_html: "%{name} возобновил доставку на узел %{target}"
|
||||||
destroy_user_role_html: "%{name} удалил(а) роль %{target}"
|
destroy_user_role_html: "%{name} удалил(а) роль %{target}"
|
||||||
|
destroy_username_block_html: "%{name} удалил(а) правило для имён пользователей, содержащих %{target}"
|
||||||
disable_2fa_user_html: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}"
|
disable_2fa_user_html: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}"
|
||||||
disable_custom_emoji_html: "%{name} отключил(а) эмодзи %{target}"
|
disable_custom_emoji_html: "%{name} отключил(а) эмодзи %{target}"
|
||||||
disable_relay_html: "%{name} отключил(а) ретранслятор %{target}"
|
disable_relay_html: "%{name} отключил(а) ретранслятор %{target}"
|
||||||
|
@ -308,6 +313,7 @@ ru:
|
||||||
update_report_html: "%{name} изменил(а) жалобу %{target}"
|
update_report_html: "%{name} изменил(а) жалобу %{target}"
|
||||||
update_status_html: "%{name} изменил(а) пост пользователя %{target}"
|
update_status_html: "%{name} изменил(а) пост пользователя %{target}"
|
||||||
update_user_role_html: "%{name} изменил(а) роль %{target}"
|
update_user_role_html: "%{name} изменил(а) роль %{target}"
|
||||||
|
update_username_block_html: "%{name} обновил(а) правило для имён пользователей, содержащих %{target}"
|
||||||
deleted_account: удалённая учётная запись
|
deleted_account: удалённая учётная запись
|
||||||
empty: Журнал пуст.
|
empty: Журнал пуст.
|
||||||
filter_by_action: Фильтр по действию
|
filter_by_action: Фильтр по действию
|
||||||
|
@ -499,15 +505,24 @@ ru:
|
||||||
fasp:
|
fasp:
|
||||||
debug:
|
debug:
|
||||||
callbacks:
|
callbacks:
|
||||||
|
created_at: Создано в
|
||||||
delete: Удалить
|
delete: Удалить
|
||||||
ip: IP-адрес
|
ip: IP-адрес
|
||||||
|
request_body: Тело запроса
|
||||||
providers:
|
providers:
|
||||||
|
active: Активен
|
||||||
base_url: Основной URL
|
base_url: Основной URL
|
||||||
delete: Удалить
|
delete: Удалить
|
||||||
|
edit: Редактировать поставщика
|
||||||
|
finish_registration: Завершить регистрацию
|
||||||
|
name: Имя
|
||||||
|
providers: Поставщики
|
||||||
|
registration_requested: Требуется регистрация
|
||||||
registrations:
|
registrations:
|
||||||
confirm: Подтвердить
|
confirm: Подтвердить
|
||||||
reject: Отклонить
|
reject: Отклонить
|
||||||
save: Сохранить
|
save: Сохранить
|
||||||
|
select_capabilities: Выберите возможности
|
||||||
sign_in:
|
sign_in:
|
||||||
status: Пост
|
status: Пост
|
||||||
title: FASP
|
title: FASP
|
||||||
|
@ -585,6 +600,9 @@ ru:
|
||||||
all: Все
|
all: Все
|
||||||
limited: Ограниченные
|
limited: Ограниченные
|
||||||
title: Модерация
|
title: Модерация
|
||||||
|
moderation_notes:
|
||||||
|
create: Добавить заметку модератора
|
||||||
|
title: Заметки модератора
|
||||||
private_comment: Приватный комментарий
|
private_comment: Приватный комментарий
|
||||||
public_comment: Публичный комментарий
|
public_comment: Публичный комментарий
|
||||||
purge: Удалить данные
|
purge: Удалить данные
|
||||||
|
@ -799,11 +817,16 @@ ru:
|
||||||
title: Роли
|
title: Роли
|
||||||
rules:
|
rules:
|
||||||
add_new: Добавить правило
|
add_new: Добавить правило
|
||||||
|
add_translation: Добавить перевод
|
||||||
delete: Удалить
|
delete: Удалить
|
||||||
description_html: Хотя большинство утверждает, что прочитали и согласны с условиями обслуживания, обычно люди не читают их до тех пор, пока не возникнет проблема. <strong>Упростите просмотр правил вашего сервера с первого взгляда, предоставив их в виде простого маркированного списка.</strong> Старайтесь, чтобы отдельные правила были краткими и простыми, но старайтесь не разбивать их на множество отдельных элементов.
|
description_html: Хотя большинство утверждает, что прочитали и согласны с условиями обслуживания, обычно люди не читают их до тех пор, пока не возникнет проблема. <strong>Упростите просмотр правил вашего сервера с первого взгляда, предоставив их в виде простого маркированного списка.</strong> Старайтесь, чтобы отдельные правила были краткими и простыми, но старайтесь не разбивать их на множество отдельных элементов.
|
||||||
edit: Редактировать правило
|
edit: Редактировать правило
|
||||||
empty: Правила сервера еще не определены.
|
empty: Правила сервера еще не определены.
|
||||||
|
move_down: Переместить вниз
|
||||||
|
move_up: Переместить вверх
|
||||||
title: Правила сервера
|
title: Правила сервера
|
||||||
|
translation: Перевод
|
||||||
|
translations: Переводы
|
||||||
settings:
|
settings:
|
||||||
about:
|
about:
|
||||||
manage_rules: Управление правилами на сервере
|
manage_rules: Управление правилами на сервере
|
||||||
|
@ -829,6 +852,7 @@ ru:
|
||||||
discovery:
|
discovery:
|
||||||
follow_recommendations: Рекомендации подписок
|
follow_recommendations: Рекомендации подписок
|
||||||
preamble: Наблюдение интересного контента играет важную роль при открытии новых пользователей, которые могут не знать ни одного Mastodon. Контролируйте как работают различные функции обнаружения на вашем сервере.
|
preamble: Наблюдение интересного контента играет важную роль при открытии новых пользователей, которые могут не знать ни одного Mastodon. Контролируйте как работают различные функции обнаружения на вашем сервере.
|
||||||
|
privacy: Конфиденциальность
|
||||||
profile_directory: Каталог профилей
|
profile_directory: Каталог профилей
|
||||||
public_timelines: Публичные ленты
|
public_timelines: Публичные ленты
|
||||||
publish_statistics: Опубликовать стаитстику
|
publish_statistics: Опубликовать стаитстику
|
||||||
|
@ -1087,6 +1111,23 @@ ru:
|
||||||
other: За последнюю неделю использовал %{count} человек
|
other: За последнюю неделю использовал %{count} человек
|
||||||
title: Рекомендации и тренды
|
title: Рекомендации и тренды
|
||||||
trending: Популярное
|
trending: Популярное
|
||||||
|
username_blocks:
|
||||||
|
add_new: Добавить новое
|
||||||
|
block_registrations: Блокировать регистрации
|
||||||
|
comparison:
|
||||||
|
contains: Содержит
|
||||||
|
equals: Равен
|
||||||
|
contains_html: Содержит %{string}
|
||||||
|
created_msg: Успешно создано правило имени пользователя
|
||||||
|
delete: Удалить
|
||||||
|
edit:
|
||||||
|
title: Редактировать правило имени пользователя
|
||||||
|
matches_exactly_html: Равен %{string}
|
||||||
|
new:
|
||||||
|
create: Создать правило
|
||||||
|
title: Создать новое правило имени пользователя
|
||||||
|
not_permitted: Не разрешено
|
||||||
|
title: Правила имени пользователя
|
||||||
warning_presets:
|
warning_presets:
|
||||||
add_new: Добавить
|
add_new: Добавить
|
||||||
delete: Удалить
|
delete: Удалить
|
||||||
|
@ -1705,6 +1746,10 @@ ru:
|
||||||
title: Новое упоминание
|
title: Новое упоминание
|
||||||
poll:
|
poll:
|
||||||
subject: Опрос %{name} завершился
|
subject: Опрос %{name} завершился
|
||||||
|
quote:
|
||||||
|
body: 'Ваш пост был процитирован %{name}:'
|
||||||
|
subject: "%{name} процитировал(а) ваш пост"
|
||||||
|
title: Новая цитата
|
||||||
reblog:
|
reblog:
|
||||||
body: "%{name} продвинул(а) ваш пост:"
|
body: "%{name} продвинул(а) ваш пост:"
|
||||||
subject: "%{name} продвинул(а) ваш пост"
|
subject: "%{name} продвинул(а) ваш пост"
|
||||||
|
@ -1987,6 +2032,10 @@ ru:
|
||||||
does_not_match_previous_name: не совпадает с предыдущим именем
|
does_not_match_previous_name: не совпадает с предыдущим именем
|
||||||
terms_of_service:
|
terms_of_service:
|
||||||
title: Пользовательское соглашение
|
title: Пользовательское соглашение
|
||||||
|
terms_of_service_interstitial:
|
||||||
|
past_preamble_html: Мы изменили наше пользовательское соглашение с момента вашего последнего посещения. Мы рекомендуем вам ознакомиться с обновленным соглашением.
|
||||||
|
review_link: Посмотреть пользовательское соглашение
|
||||||
|
title: Изменяется пользовательское соглашение %{domain}
|
||||||
themes:
|
themes:
|
||||||
contrast: Mastodon (высококонтрастная)
|
contrast: Mastodon (высококонтрастная)
|
||||||
default: Mastodon (тёмная)
|
default: Mastodon (тёмная)
|
||||||
|
|
|
@ -56,10 +56,12 @@ pl:
|
||||||
scopes: Wybór API, do których aplikacja będzie miała dostęp. Jeżeli wybierzesz nadrzędny zakres, nie musisz wybierać jego elementów.
|
scopes: Wybór API, do których aplikacja będzie miała dostęp. Jeżeli wybierzesz nadrzędny zakres, nie musisz wybierać jego elementów.
|
||||||
setting_aggregate_reblogs: Nie pokazuj nowych podbić dla wpisów, które zostały niedawno podbite (dotyczy tylko nowo otrzymanych podbić)
|
setting_aggregate_reblogs: Nie pokazuj nowych podbić dla wpisów, które zostały niedawno podbite (dotyczy tylko nowo otrzymanych podbić)
|
||||||
setting_always_send_emails: Powiadomienia e-mail zwykle nie będą wysyłane, gdy używasz Mastodon
|
setting_always_send_emails: Powiadomienia e-mail zwykle nie będą wysyłane, gdy używasz Mastodon
|
||||||
|
setting_default_quote_policy: To ustawienie będzie skuteczne tylko dla postów utworzonych z następną wersją Mastodon, ale możesz wybrać swoje preferencje w przygotowaniu.
|
||||||
setting_default_sensitive: Wrażliwe multimedia są domyślnie schowane i mogą być odkryte kliknięciem
|
setting_default_sensitive: Wrażliwe multimedia są domyślnie schowane i mogą być odkryte kliknięciem
|
||||||
setting_display_media_default: Ukrywaj zawartość multimedialną oznaczoną jako wrażliwa
|
setting_display_media_default: Ukrywaj zawartość multimedialną oznaczoną jako wrażliwa
|
||||||
setting_display_media_hide_all: Zawsze ukrywaj zawartość multimedialną
|
setting_display_media_hide_all: Zawsze ukrywaj zawartość multimedialną
|
||||||
setting_display_media_show_all: Zawsze pokazuj zawartość multimedialną
|
setting_display_media_show_all: Zawsze pokazuj zawartość multimedialną
|
||||||
|
setting_emoji_style: Jak wyświetlić emotikony. "Auto" spróbuje użyć natywnych emoji, ale wróci do Twemoji dla starszych przeglądarek.
|
||||||
setting_system_scrollbars_ui: Stosuje się tylko do przeglądarek komputerowych opartych na Safari i Chrome
|
setting_system_scrollbars_ui: Stosuje się tylko do przeglądarek komputerowych opartych na Safari i Chrome
|
||||||
setting_use_blurhash: Gradienty są oparte na kolorach ukrywanej zawartości, ale uniewidaczniają wszystkie szczegóły
|
setting_use_blurhash: Gradienty są oparte na kolorach ukrywanej zawartości, ale uniewidaczniają wszystkie szczegóły
|
||||||
setting_use_pending_items: Ukryj aktualizacje osi czasu za kliknięciem, zamiast automatycznego przewijania strumienia
|
setting_use_pending_items: Ukryj aktualizacje osi czasu za kliknięciem, zamiast automatycznego przewijania strumienia
|
||||||
|
@ -75,6 +77,7 @@ pl:
|
||||||
filters:
|
filters:
|
||||||
action: Wybierz akcję do wykonania, gdy post pasuje do filtra
|
action: Wybierz akcję do wykonania, gdy post pasuje do filtra
|
||||||
actions:
|
actions:
|
||||||
|
blur: Ukryj media za ostrzeżeniem, bez ukrywania samego tekstu
|
||||||
hide: Całkowicie ukryj przefiltrowaną zawartość, jakby nie istniała
|
hide: Całkowicie ukryj przefiltrowaną zawartość, jakby nie istniała
|
||||||
warn: Ukryj filtrowaną zawartość za ostrzeżeniem wskazującym tytuł filtra
|
warn: Ukryj filtrowaną zawartość za ostrzeżeniem wskazującym tytuł filtra
|
||||||
form_admin_settings:
|
form_admin_settings:
|
||||||
|
@ -88,6 +91,7 @@ pl:
|
||||||
favicon: WEBP, PNG, GIF, albo JPEG. Nadpisuje domyślną faviconę Mastodona.
|
favicon: WEBP, PNG, GIF, albo JPEG. Nadpisuje domyślną faviconę Mastodona.
|
||||||
mascot: Nadpisuje ilustrację w zaawansowanym interfejsie internetowym.
|
mascot: Nadpisuje ilustrację w zaawansowanym interfejsie internetowym.
|
||||||
media_cache_retention_period: Media z wpisów od obcych użytkowników są cache'owane na twoim serwerze. Kiedy dana wartość jest dodatnia, media te będą usunięte po tylu dniach. Jeżeli usunięte media zostaną potem zażądane, oryginał zostanie ponownie pobrany (o ile jest dalej dostępny). Z powodu ograniczeń dot. częstotliwości z jaką karty podglądu linków dopytują się o dane od stron trzecich, zalecana wartość to min. 14 dni, bo karty podglądu linków nie będą wcześniej odświeżane na żądane.
|
media_cache_retention_period: Media z wpisów od obcych użytkowników są cache'owane na twoim serwerze. Kiedy dana wartość jest dodatnia, media te będą usunięte po tylu dniach. Jeżeli usunięte media zostaną potem zażądane, oryginał zostanie ponownie pobrany (o ile jest dalej dostępny). Z powodu ograniczeń dot. częstotliwości z jaką karty podglądu linków dopytują się o dane od stron trzecich, zalecana wartość to min. 14 dni, bo karty podglądu linków nie będą wcześniej odświeżane na żądane.
|
||||||
|
min_age: Użytkownicy zostaną poproszeni o potwierdzenie daty urodzenia podczas rejestracji
|
||||||
peers_api_enabled: Lista nazw domen, z którymi ten serwer spotkał się w fediverse. Nie są tu zawarte żadne dane o tym, czy użytkownik dokonuje federacji z danym serwerem, a jedynie, że jego serwer o tym wie. Jest to wykorzystywane przez serwisy, które zbierają statystyki dotyczące federacji w ogólnym sensie.
|
peers_api_enabled: Lista nazw domen, z którymi ten serwer spotkał się w fediverse. Nie są tu zawarte żadne dane o tym, czy użytkownik dokonuje federacji z danym serwerem, a jedynie, że jego serwer o tym wie. Jest to wykorzystywane przez serwisy, które zbierają statystyki dotyczące federacji w ogólnym sensie.
|
||||||
profile_directory: Katalog profili zawiera listę wszystkich użytkowników, którzy zgodzili się na bycie znalezionymi.
|
profile_directory: Katalog profili zawiera listę wszystkich użytkowników, którzy zgodzili się na bycie znalezionymi.
|
||||||
require_invite_text: Kiedy rejestracje wymagają ręcznego zatwierdzenia, ustaw pole "Dlaczego chcesz dołączyć?" jako obowiązkowe, a nie opcjonalne
|
require_invite_text: Kiedy rejestracje wymagają ręcznego zatwierdzenia, ustaw pole "Dlaczego chcesz dołączyć?" jako obowiązkowe, a nie opcjonalne
|
||||||
|
@ -132,13 +136,18 @@ pl:
|
||||||
name: Możesz zmieniać tylko wielkość liter, np. aby były bardziej widoczne
|
name: Możesz zmieniać tylko wielkość liter, np. aby były bardziej widoczne
|
||||||
terms_of_service:
|
terms_of_service:
|
||||||
changelog: Może być stworzony przy pomocy składni Markdown.
|
changelog: Może być stworzony przy pomocy składni Markdown.
|
||||||
|
effective_date: Uzasadnione ramy czasowe mogą być różne w dowolnym miejscu od 10 do 30 dni od daty powiadomienia użytkowników.
|
||||||
text: Może być stworzony przy pomocy składni Markdown.
|
text: Może być stworzony przy pomocy składni Markdown.
|
||||||
terms_of_service_generator:
|
terms_of_service_generator:
|
||||||
admin_email: Zawiadomienia prawne obejmują środki zapobiegawcze, nakazy sądowe, wnioski o popełnienie sprawy oraz wnioski organów ścigania.
|
admin_email: Zawiadomienia prawne obejmują środki zapobiegawcze, nakazy sądowe, wnioski o popełnienie sprawy oraz wnioski organów ścigania.
|
||||||
|
arbitration_address: Czy może być taki sam jak adres fizyczny powyżej lub „N/A” jeśli używasz adresu e-mail.
|
||||||
|
arbitration_website: Może być formularzem internetowym lub „N/A”, jeśli używasz adresu e-mail.
|
||||||
choice_of_law: Miasto, region, terytorium lub stan, którego wewnętrzne prawo będzie regulowało wszelkie roszczenia.
|
choice_of_law: Miasto, region, terytorium lub stan, którego wewnętrzne prawo będzie regulowało wszelkie roszczenia.
|
||||||
dmca_address: W przypadku operatorów z USA należy użyć adresu zarejestrowanego w DMCA Designated Agent Directory. Lista skrytek pocztowych dostępna jest na bezpośrednią prośbę użytkownika. Użyj DMCA Agent Post Office Box Waiver Request, aby wysłać email do Copyright Office z informacją, że jesteś domowym administratorm treści i z powodu obawy o zemstę lub odwetu za swoje działania, musisz użyć skrytki pocztowej, żeby usunąć swój adres domowy z dostępu publicznego.
|
dmca_address: W przypadku operatorów z USA należy użyć adresu zarejestrowanego w DMCA Designated Agent Directory. Lista skrytek pocztowych dostępna jest na bezpośrednią prośbę użytkownika. Użyj DMCA Agent Post Office Box Waiver Request, aby wysłać email do Copyright Office z informacją, że jesteś domowym administratorm treści i z powodu obawy o zemstę lub odwetu za swoje działania, musisz użyć skrytki pocztowej, żeby usunąć swój adres domowy z dostępu publicznego.
|
||||||
|
dmca_email: Czy może ten sam adres e-mail używany dla powyższego "Adres e-mail dla prawnych zawiadomień"?
|
||||||
domain: Unikalny numer identyfikacji świadczonej przez Ciebie usługi online.
|
domain: Unikalny numer identyfikacji świadczonej przez Ciebie usługi online.
|
||||||
jurisdiction: Wymień państwo, w którym mieszkają osoby płacące rachunki. Jeżeli jest to spółka lub inny zarejestrowany podmiot, w zależności od przypadku podaj państwo, w którym jest zarejestrowany, a także miasto, region czy województwo.
|
jurisdiction: Wymień państwo, w którym mieszkają osoby płacące rachunki. Jeżeli jest to spółka lub inny zarejestrowany podmiot, w zależności od przypadku podaj państwo, w którym jest zarejestrowany, a także miasto, region czy województwo.
|
||||||
|
min_age: Nie powinien być niższy niż minimalny wiek wymagany przez prawo twojego państwa.
|
||||||
user:
|
user:
|
||||||
chosen_languages: Jeżeli zaznaczone, tylko wpisy w wybranych językach będą wyświetlane na publicznych osiach czasu
|
chosen_languages: Jeżeli zaznaczone, tylko wpisy w wybranych językach będą wyświetlane na publicznych osiach czasu
|
||||||
role: Rola kontroluje uprawnienia użytkownika.
|
role: Rola kontroluje uprawnienia użytkownika.
|
||||||
|
@ -148,6 +157,10 @@ pl:
|
||||||
name: Publiczna nazwa roli, jeśli włączone jest wyświetlanie odznaki
|
name: Publiczna nazwa roli, jeśli włączone jest wyświetlanie odznaki
|
||||||
permissions_as_keys: Użytkownicy z tą rolą będą mieli dostęp do...
|
permissions_as_keys: Użytkownicy z tą rolą będą mieli dostęp do...
|
||||||
position: Wyższa rola decyduje o rozwiązywaniu konfliktów w pewnych sytuacjach. Niektóre działania mogą być wykonywane tylko na rolach z niższym priorytetem
|
position: Wyższa rola decyduje o rozwiązywaniu konfliktów w pewnych sytuacjach. Niektóre działania mogą być wykonywane tylko na rolach z niższym priorytetem
|
||||||
|
username_block:
|
||||||
|
allow_with_approval: Zamiast bezwzględnie uniemożliwiać rejestrację, pasujące rejestracje będą wymagały Twojej zgody
|
||||||
|
comparison: Proszę pamiętać o problemie Scunthorpe podczas blokowania częściowych dopasowań
|
||||||
|
username: Będą dopasowane niezależnie od otoczki i zwykłych homoglików, takich jak "4" dla "a" lub "3" dla "e"
|
||||||
webhook:
|
webhook:
|
||||||
events: Wybierz zdarzenia do wysłania
|
events: Wybierz zdarzenia do wysłania
|
||||||
template: Poskładaj zawartość JSON, podstawiając zmienne. Użyjemy domyślnej wartości, jeżeli pole zostawisz pustym.
|
template: Poskładaj zawartość JSON, podstawiając zmienne. Użyjemy domyślnej wartości, jeżeli pole zostawisz pustym.
|
||||||
|
@ -255,6 +268,7 @@ pl:
|
||||||
name: Hasztag
|
name: Hasztag
|
||||||
filters:
|
filters:
|
||||||
actions:
|
actions:
|
||||||
|
blur: Ukryj media z ostrzeżeniem
|
||||||
hide: Ukryj całkowicie
|
hide: Ukryj całkowicie
|
||||||
warn: Ukryj z ostrzeżeniem
|
warn: Ukryj z ostrzeżeniem
|
||||||
form_admin_settings:
|
form_admin_settings:
|
||||||
|
@ -312,6 +326,7 @@ pl:
|
||||||
follow_request: Powiadamiaj mnie e-mailem, gdy ktoś poprosi o pozwolenie na obserwowanie mnie
|
follow_request: Powiadamiaj mnie e-mailem, gdy ktoś poprosi o pozwolenie na obserwowanie mnie
|
||||||
mention: Powiadamiaj mnie e-mailem, gdy ktoś o mnie wspomni
|
mention: Powiadamiaj mnie e-mailem, gdy ktoś o mnie wspomni
|
||||||
pending_account: Wyślij e-mail kiedy nowe konto potrzebuje recenzji
|
pending_account: Wyślij e-mail kiedy nowe konto potrzebuje recenzji
|
||||||
|
quote: Ktoś Cię cytował
|
||||||
reblog: Powiadamiaj mnie e-mailem, gdy ktoś podbije mój wpis
|
reblog: Powiadamiaj mnie e-mailem, gdy ktoś podbije mój wpis
|
||||||
report: Nowe zgłoszenie zostało wysłane
|
report: Nowe zgłoszenie zostało wysłane
|
||||||
software_updates:
|
software_updates:
|
||||||
|
|
|
@ -237,6 +237,7 @@ ru:
|
||||||
setting_display_media_default: По умолчанию
|
setting_display_media_default: По умолчанию
|
||||||
setting_display_media_hide_all: Скрывать все
|
setting_display_media_hide_all: Скрывать все
|
||||||
setting_display_media_show_all: Показывать все
|
setting_display_media_show_all: Показывать все
|
||||||
|
setting_emoji_style: Стиль эмодзи
|
||||||
setting_expand_spoilers: Разворачивать все посты с предупреждением о содержании
|
setting_expand_spoilers: Разворачивать все посты с предупреждением о содержании
|
||||||
setting_hide_network: Скрыть мои связи
|
setting_hide_network: Скрыть мои связи
|
||||||
setting_missing_alt_text_modal: Запрашивать подтверждение при публикации медиа без альтернативного текста
|
setting_missing_alt_text_modal: Запрашивать подтверждение при публикации медиа без альтернативного текста
|
||||||
|
@ -319,6 +320,7 @@ ru:
|
||||||
follow_request: Мне пришёл запрос на подписку
|
follow_request: Мне пришёл запрос на подписку
|
||||||
mention: Меня упомянули в посте
|
mention: Меня упомянули в посте
|
||||||
pending_account: Новая заявка на создание аккаунта
|
pending_account: Новая заявка на создание аккаунта
|
||||||
|
quote: Кто-то процитировал вас
|
||||||
reblog: Мой пост продвинули
|
reblog: Мой пост продвинули
|
||||||
report: Новое обращение отправлено
|
report: Новое обращение отправлено
|
||||||
software_updates:
|
software_updates:
|
||||||
|
@ -365,6 +367,9 @@ ru:
|
||||||
name: Название
|
name: Название
|
||||||
permissions_as_keys: Разрешения
|
permissions_as_keys: Разрешения
|
||||||
position: Приоритет
|
position: Приоритет
|
||||||
|
username_block:
|
||||||
|
allow_with_approval: Разрешить регистрацию с одобрением
|
||||||
|
comparison: Метод сравнения
|
||||||
webhook:
|
webhook:
|
||||||
events: Включенные события
|
events: Включенные события
|
||||||
template: Шаблон полезной нагрузки
|
template: Шаблон полезной нагрузки
|
||||||
|
|
|
@ -73,8 +73,8 @@ module Paperclip
|
||||||
@url_generator.for_as_default(style_name)
|
@url_generator.for_as_default(style_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
STOPLIGHT_COOL_OFF_TIME = 30
|
||||||
STOPLIGHT_THRESHOLD = 10
|
STOPLIGHT_THRESHOLD = 10
|
||||||
STOPLIGHT_COOLDOWN = 30
|
|
||||||
|
|
||||||
# We overwrite this method to put a circuit breaker around
|
# We overwrite this method to put a circuit breaker around
|
||||||
# calls to object storage, to stop hitting APIs that are slow
|
# calls to object storage, to stop hitting APIs that are slow
|
||||||
|
@ -84,11 +84,12 @@ module Paperclip
|
||||||
# Don't go through Stoplight if we don't have anything object-storage-oriented to do
|
# Don't go through Stoplight if we don't have anything object-storage-oriented to do
|
||||||
return super if @queued_for_delete.empty? && @queued_for_write.empty? && !dirty?
|
return super if @queued_for_delete.empty? && @queued_for_write.empty? && !dirty?
|
||||||
|
|
||||||
Stoplight('object-storage')
|
Stoplight(
|
||||||
.with_threshold(STOPLIGHT_THRESHOLD)
|
'object-storage',
|
||||||
.with_cool_off_time(STOPLIGHT_COOLDOWN)
|
cool_off_time: STOPLIGHT_COOL_OFF_TIME,
|
||||||
.with_error_handler { |error, handle| error.is_a?(Seahorse::Client::NetworkingError) ? handle.call(error) : raise(error) }
|
threshold: STOPLIGHT_THRESHOLD,
|
||||||
.run { super }
|
tracked_errors: [Seahorse::Client::NetworkingError]
|
||||||
|
).run { super }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
"eslint-import-resolver-typescript": "^4.2.5",
|
"eslint-import-resolver-typescript": "^4.2.5",
|
||||||
"eslint-plugin-formatjs": "^5.3.1",
|
"eslint-plugin-formatjs": "^5.3.1",
|
||||||
"eslint-plugin-import": "~2.32.0",
|
"eslint-plugin-import": "~2.32.0",
|
||||||
"eslint-plugin-jsdoc": "^52.0.0",
|
"eslint-plugin-jsdoc": "^53.0.0",
|
||||||
"eslint-plugin-jsx-a11y": "~6.10.2",
|
"eslint-plugin-jsx-a11y": "~6.10.2",
|
||||||
"eslint-plugin-promise": "~7.2.1",
|
"eslint-plugin-promise": "~7.2.1",
|
||||||
"eslint-plugin-react": "^7.37.4",
|
"eslint-plugin-react": "^7.37.4",
|
||||||
|
|
|
@ -316,6 +316,23 @@ RSpec.describe ActivityPub::FetchRemoteStatusService do
|
||||||
expect(existing_status.edits).to_not be_empty
|
expect(existing_status.edits).to_not be_empty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'with an implicit update to quoting policy' do
|
||||||
|
let(:object) do
|
||||||
|
note.merge({
|
||||||
|
'content' => existing_status.text,
|
||||||
|
'interactionPolicy' => {
|
||||||
|
'canQuote' => {
|
||||||
|
'automaticApproval' => ['https://www.w3.org/ns/activitystreams#Public'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'updates status' do
|
||||||
|
expect(existing_status.reload.quote_approval_policy).to eq(Status::QUOTE_APPROVAL_POLICY_FLAGS[:public] << 16)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
22
yarn.lock
22
yarn.lock
|
@ -2680,7 +2680,7 @@ __metadata:
|
||||||
eslint-import-resolver-typescript: "npm:^4.2.5"
|
eslint-import-resolver-typescript: "npm:^4.2.5"
|
||||||
eslint-plugin-formatjs: "npm:^5.3.1"
|
eslint-plugin-formatjs: "npm:^5.3.1"
|
||||||
eslint-plugin-import: "npm:~2.32.0"
|
eslint-plugin-import: "npm:~2.32.0"
|
||||||
eslint-plugin-jsdoc: "npm:^52.0.0"
|
eslint-plugin-jsdoc: "npm:^53.0.0"
|
||||||
eslint-plugin-jsx-a11y: "npm:~6.10.2"
|
eslint-plugin-jsx-a11y: "npm:~6.10.2"
|
||||||
eslint-plugin-promise: "npm:~7.2.1"
|
eslint-plugin-promise: "npm:~7.2.1"
|
||||||
eslint-plugin-react: "npm:^7.37.4"
|
eslint-plugin-react: "npm:^7.37.4"
|
||||||
|
@ -6986,9 +6986,9 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"eslint-plugin-jsdoc@npm:^52.0.0":
|
"eslint-plugin-jsdoc@npm:^53.0.0":
|
||||||
version: 52.0.2
|
version: 53.0.1
|
||||||
resolution: "eslint-plugin-jsdoc@npm:52.0.2"
|
resolution: "eslint-plugin-jsdoc@npm:53.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@es-joy/jsdoccomment": "npm:~0.52.0"
|
"@es-joy/jsdoccomment": "npm:~0.52.0"
|
||||||
are-docs-informative: "npm:^0.0.2"
|
are-docs-informative: "npm:^0.0.2"
|
||||||
|
@ -7002,7 +7002,7 @@ __metadata:
|
||||||
spdx-expression-parse: "npm:^4.0.0"
|
spdx-expression-parse: "npm:^4.0.0"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
|
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
|
||||||
checksum: 10c0/e36d8c75a5a100f71f4f5287ce12ffdf15474194b2877dbe1e06c3c24a1c0c0c7f13c2d92cb289a80515b6fe1e43c4c0b19814b5c5b22a46ac2ca7df23ab55ad
|
checksum: 10c0/d629863faa98026edc09535e8095669d97be4e77173bfe6cbe7ea0fcd641cd2537bec58e25db433cc6f4103d9a2a13c1bbb3916a8ed4ff05b18c566971dec472
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -10308,8 +10308,8 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"pino@npm:^9.0.0":
|
"pino@npm:^9.0.0":
|
||||||
version: 9.7.0
|
version: 9.8.0
|
||||||
resolution: "pino@npm:9.7.0"
|
resolution: "pino@npm:9.8.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
atomic-sleep: "npm:^1.0.0"
|
atomic-sleep: "npm:^1.0.0"
|
||||||
fast-redact: "npm:^3.1.1"
|
fast-redact: "npm:^3.1.1"
|
||||||
|
@ -10324,7 +10324,7 @@ __metadata:
|
||||||
thread-stream: "npm:^3.0.0"
|
thread-stream: "npm:^3.0.0"
|
||||||
bin:
|
bin:
|
||||||
pino: bin.js
|
pino: bin.js
|
||||||
checksum: 10c0/c7f8a83a9a9d728b4eff6d0f4b9367f031c91bcaa5806fbf0eedcc8e77faba593d59baf11a8fba0dd1c778bb17ca7ed01418ac1df4ec129faeedd4f3ecaff66f
|
checksum: 10c0/a6de40d8c777520a0f2bdd1727512db2dba51d0d8098500ec8326f1f95412e4e704ee4301287ccbbafbf7a7ab07999d5659333a7079d1b70341d0d69e4d40b29
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -13898,8 +13898,8 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0, vite@npm:^7.1.1":
|
"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0, vite@npm:^7.1.1":
|
||||||
version: 7.1.1
|
version: 7.1.2
|
||||||
resolution: "vite@npm:7.1.1"
|
resolution: "vite@npm:7.1.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: "npm:^0.25.0"
|
esbuild: "npm:^0.25.0"
|
||||||
fdir: "npm:^6.4.6"
|
fdir: "npm:^6.4.6"
|
||||||
|
@ -13948,7 +13948,7 @@ __metadata:
|
||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
vite: bin/vite.js
|
vite: bin/vite.js
|
||||||
checksum: 10c0/391a5c8b8f287b7b1653dedbe952fb4cb93bf7c99b19dab915cf63497892427198fef637e943a3391eacfecf7f2e8f55c40d0fa065fabdd885641430d0b74af7
|
checksum: 10c0/4ed825b20bc0f49db99cd382de9506b2721ccd47dcebd4a68e0ef65e3cdd2347fded52b306c34178308e0fd7fe78fd5ff517623002cb00710182ad3012c92ced
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user