Merge remote-tracking branch 'origin/master' into merge-upstream

Conflicts:
	db/schema.rb
rebase/4.0.0rc2
David Yip 2018-01-09 14:16:45 -06:00
commit 991371af5f
No known key found for this signature in database
GPG Key ID: 7DA0036508FCC0CC
7 changed files with 167 additions and 7 deletions

View File

@ -5,7 +5,7 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
original_status = status_from_uri(object_uri) original_status = status_from_uri(object_uri)
original_status ||= fetch_remote_original_status original_status ||= fetch_remote_original_status
return if original_status.nil? || delete_arrived_first?(@json['id']) return if original_status.nil? || delete_arrived_first?(@json['id']) || !announceable?(original_status)
status = Status.find_by(account: @account, reblog: original_status) status = Status.find_by(account: @account, reblog: original_status)
@ -33,4 +33,8 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
::FetchRemoteStatusService.new.call(@object['url']) ::FetchRemoteStatusService.new.call(@object['url'])
end end
end end
def announceable?(status)
status.public_visibility? || status.unlisted_visibility?
end
end end

View File

@ -26,6 +26,9 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
cached_reblog = reblog cached_reblog = reblog
status = nil status = nil
# Skip if the reblogged status is not public
return if cached_reblog && !(cached_reblog.public_visibility? || cached_reblog.unlisted_visibility?)
media_attachments = save_media media_attachments = save_media
ApplicationRecord.transaction do ApplicationRecord.transaction do

View File

@ -1,5 +1,5 @@
- content_for :page_title do - content_for :page_title do
= t('statuses.title', name: display_name(@account), quote: truncate(@stream_entry.activity.text, length: 50, omission: '…')) = t('statuses.title', name: display_name(@account), quote: truncate(@stream_entry.activity.spoiler_text.presence || @stream_entry.activity.text, length: 50, omission: '…'))
- content_for :header_tags do - content_for :header_tags do
- if @account.user&.setting_noindex - if @account.user&.setting_noindex

View File

@ -53,7 +53,7 @@ class Rack::Attack
req.ip if req.api_request? req.ip if req.api_request?
end end
throttle('protected_paths', limit: 5, period: 5.minutes) do |req| throttle('protected_paths', limit: 25, period: 5.minutes) do |req|
req.ip if req.post? && req.path =~ PROTECTED_PATHS_REGEX req.ip if req.post? && req.path =~ PROTECTED_PATHS_REGEX
end end

View File

@ -39,6 +39,7 @@ ru:
followers: Подписчики followers: Подписчики
following: Подписан(а) following: Подписан(а)
media: Медиаконтент media: Медиаконтент
moved_html: "%{name} переехал(а) на %{new_profile_link}:"
nothing_here: Здесь ничего нет! nothing_here: Здесь ничего нет!
people_followed_by: Люди, на которых подписан(а) %{name} people_followed_by: Люди, на которых подписан(а) %{name}
people_who_follow: Подписчики %{name} people_who_follow: Подписчики %{name}
@ -59,9 +60,13 @@ ru:
destroyed_msg: Заметка модератора успешно удалена! destroyed_msg: Заметка модератора успешно удалена!
accounts: accounts:
are_you_sure: Вы уверены? are_you_sure: Вы уверены?
by_domain: Домен
confirm: Подтвердить confirm: Подтвердить
confirmed: Подтверждено confirmed: Подтверждено
demote: Разжаловать
disable: Отключить
disable_two_factor_authentication: Отключить 2FA disable_two_factor_authentication: Отключить 2FA
disabled: Отключено
display_name: Отображаемое имя display_name: Отображаемое имя
domain: Домен domain: Домен
edit: Изменить edit: Изменить
@ -77,7 +82,9 @@ ru:
local: Локальные local: Локальные
remote: Удаленные remote: Удаленные
title: Размещение title: Размещение
login_status: Статус аккаунта
media_attachments: Мультимедийные вложения media_attachments: Мультимедийные вложения
memorialize: Превратить в Памятник
moderation: moderation:
all: Все all: Все
silenced: Заглушенные silenced: Заглушенные
@ -94,6 +101,7 @@ ru:
outbox_url: URL исходящих outbox_url: URL исходящих
perform_full_suspension: Полная блокировка perform_full_suspension: Полная блокировка
profile_url: URL профиля profile_url: URL профиля
promote: Повысить
protocol: Протокол protocol: Протокол
public: Публичный public: Публичный
push_subscription_expires: Подписка PuSH истекает push_subscription_expires: Подписка PuSH истекает
@ -101,6 +109,12 @@ ru:
reset: Сбросить reset: Сбросить
reset_password: Сбросить пароль reset_password: Сбросить пароль
resubscribe: Переподписаться resubscribe: Переподписаться
role: Разрешения
roles:
admin: Администратор
moderator: Модератор
staff: Персонал
user: Пользователь
salmon_url: Salmon URL salmon_url: Salmon URL
search: Поиск search: Поиск
shared_inbox_url: URL общих входящих shared_inbox_url: URL общих входящих
@ -117,6 +131,32 @@ ru:
unsubscribe: Отписаться unsubscribe: Отписаться
username: Имя пользователя username: Имя пользователя
web: WWW web: WWW
action_logs:
actions:
confirm_user: "%{name} подтвердил(а) e-mail адрес пользователя %{target}"
create_custom_emoji: "%{name} загрузил(а) новый эмодзи %{target}"
create_domain_block: "%{name} заблокировал(а) домен %{target}"
create_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в чёрный список"
demote_user: "%{name} разжаловал(а) пользователя %{target}"
destroy_domain_block: "%{name} разблокировал(а) домен %{target}"
destroy_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в белый список"
destroy_status: "%{name} удалил(а) статус пользователя %{target}"
disable_2fa_user: "%{name} отключил(а) двухэтапную авторизацию у пользователя %{target}"
disable_custom_emoji: "%{name} отключил(а) эмодзи %{target}"
disable_user: "%{name} запретил(а) вход пользователя %{target}"
enable_custom_emoji: "%{name} включил(а) эмодзи %{target}"
enable_user: "%{name} включил(а) вход пользователя %{target}"
memorialize_account: "%{name} перевел(а) аккаунт пользователя %{target} в режим памятника"
promote_user: "%{name} повысил(а) пользователя %{target}"
reset_password_user: "%{name} сбросил(а) пароль пользователя %{target}"
resolve_report: "%{name} dismissed report %{target}"
silence_account: "%{name} заглушил(а) аккаунт %{target}"
suspend_account: "%{name} заморозил(а) аккаунт %{target}"
unsilence_account: "%{name} снял(а) глушение аккаунта %{target}"
unsuspend_account: "%{name} разморозил(а) аккаунт %{target}"
update_custom_emoji: "%{name} обновил(а) эмодзи %{target}"
update_status: "%{name} изменил(а) статус пользователя %{target}"
title: Журнал событий
custom_emojis: custom_emojis:
copied_msg: Локальная копия эмодзи успешно создана copied_msg: Локальная копия эмодзи успешно создана
copy: Скопироват copy: Скопироват
@ -130,11 +170,16 @@ ru:
enable: Включить enable: Включить
enabled_msg: Эмодзи успешно включено enabled_msg: Эмодзи успешно включено
image_hint: PNG до 50KB image_hint: PNG до 50KB
listed: В списке
new: new:
title: Добавить новое эмодзи title: Добавить новый эмодзи
overwrite: Заменить
shortcode: Шорткод shortcode: Шорткод
shortcode_hint: Как минимум 2 символа, только алфавитно-цифровые символы и подчеркивания shortcode_hint: Как минимум 2 символа, только алфавитно-цифровые символы и подчеркивания
title: Собственные эмодзи title: Собственные эмодзи
unlisted: Не в списке
update_failed_msg: Невозможно обновить этот эмодзи
updated_msg: Эмодзи обновлён!
upload: Загрузить upload: Загрузить
domain_blocks: domain_blocks:
add_new: Добавить новую add_new: Добавить новую
@ -186,6 +231,13 @@ ru:
reset: Сбросить reset: Сбросить
search: Поиск search: Поиск
title: Известные узлы title: Известные узлы
invites:
filter:
all: Все
available: Актуальные
expired: Истёкшие
title: Фильтр
title: Приглашения
reports: reports:
action_taken_by: 'Действие предпринято:' action_taken_by: 'Действие предпринято:'
are_you_sure: Вы уверены? are_you_sure: Вы уверены?
@ -199,6 +251,7 @@ ru:
'false': Показать мультимедийные вложения 'false': Показать мультимедийные вложения
'true': Скрыть мультимедийные вложения 'true': Скрыть мультимедийные вложения
report: 'Жалоба #%{id}' report: 'Жалоба #%{id}'
report_contents: Содержимое
reported_account: Аккаунт нарушителя reported_account: Аккаунт нарушителя
reported_by: Отправитель жалобы reported_by: Отправитель жалобы
resolved: Разрешено resolved: Разрешено
@ -210,12 +263,18 @@ ru:
unresolved: Неразрешенные unresolved: Неразрешенные
view: Просмотреть view: Просмотреть
settings: settings:
activity_api_enabled:
desc_html: Подсчёт количества локальных статусов, активных пользователей и новых регистраций на еженедельной основе
title: Публикация агрегированной статистики активности пользователей
bootstrap_timeline_accounts: bootstrap_timeline_accounts:
desc_html: Разделяйте имена пользователей запятыми. Сработает только для локальных незакрытых аккаунтов. По умолчанию включены все локальные администраторы. desc_html: Разделяйте имена пользователей запятыми. Сработает только для локальных незакрытых аккаунтов. По умолчанию включены все локальные администраторы.
title: Подписки по умолчанию для новых пользователей title: Подписки по умолчанию для новых пользователей
contact_information: contact_information:
email: Введите публичный e-mail email: Введите публичный e-mail
username: Введите имя пользователя username: Введите имя пользователя
peers_api_enabled:
desc_html: Домены, которые были замечены этим узлом среди всей федерации
title: Публикация списка обнаруженных узлов
registrations: registrations:
closed_message: closed_message:
desc_html: Отображается на титульной странице, когда закрыта регистрация<br>Можно использовать HTML-теги desc_html: Отображается на титульной странице, когда закрыта регистрация<br>Можно использовать HTML-теги
@ -223,9 +282,15 @@ ru:
deletion: deletion:
desc_html: Позволяет всем удалять собственные аккаунты desc_html: Позволяет всем удалять собственные аккаунты
title: Разрешить удаление аккаунтов title: Разрешить удаление аккаунтов
min_invite_role:
disabled: Никого
title: Разрешает приглашения от
open: open:
desc_html: Позволяет любому создавать аккаунт desc_html: Позволяет любому создавать аккаунт
title: Открыть регистрацию title: Открыть регистрацию
show_staff_badge:
desc_html: Показывать метку персонала на странице пользователя
title: Показывать метку персонала
site_description: site_description:
desc_html: Отображается в качестве параграфа на титульной странице и используется в качестве мета-тега.<br>Можно использовать HTML-теги, в особенности <code>&lt;a&gt;</code> и <code>&lt;em&gt;</code>. desc_html: Отображается в качестве параграфа на титульной странице и используется в качестве мета-тега.<br>Можно использовать HTML-теги, в особенности <code>&lt;a&gt;</code> и <code>&lt;em&gt;</code>.
title: Описание сайта title: Описание сайта
@ -293,6 +358,8 @@ ru:
invalid_reset_password_token: Токен сброса пароля неверен или устарел. Пожалуйста, запросите новый. invalid_reset_password_token: Токен сброса пароля неверен или устарел. Пожалуйста, запросите новый.
login: Войти login: Войти
logout: Выйти logout: Выйти
migrate_account: Перенести аккаунт
migrate_account_html: Если Вы хотите перенести этот аккаунт на другой, вы можете <a href="%{path}">сделать это здесь</a>.
register: Зарегистрироваться register: Зарегистрироваться
resend_confirmation: Повторить отправку инструкции для подтверждения resend_confirmation: Повторить отправку инструкции для подтверждения
reset_password: Сбросить пароль reset_password: Сбросить пароль
@ -374,12 +441,43 @@ ru:
following: Подписки following: Подписки
muting: Список глушения muting: Список глушения
upload: Загрузить upload: Загрузить
in_memoriam_html: Памятник.
invites:
delete: Удалить
expired: Истекло
expires_in:
'1800': 30 минут
'21600': 6 часов
'3600': 1 час
'43200': 12 часов
'86400': 1 день
expires_in_prompt: Никогда
generate: Сгенерировать
max_uses:
one: 1 исп.
other: "%{count} исп."
max_uses_prompt: Без лимита
prompt: Генерируйте и делитесь ссылками с другими, чтобы предоставить им доступ к этому узлу.
table:
expires_at: Истекает
uses: Исп.
title: Пригласить людей
landing_strip_html: "<strong>%{name}</strong> - пользователь на %{link_to_root_path}. Вы можете подписаться на него/нее и общаться с ним/ней, если у Вас есть аккаунт на любом узле общей сети." landing_strip_html: "<strong>%{name}</strong> - пользователь на %{link_to_root_path}. Вы можете подписаться на него/нее и общаться с ним/ней, если у Вас есть аккаунт на любом узле общей сети."
landing_strip_signup_html: Если у Вас его нет, вы можете <a href="%{sign_up_path}">зарегистрироваться здесь</a>. landing_strip_signup_html: Если у Вас его нет, вы можете <a href="%{sign_up_path}">зарегистрироваться здесь</a>.
lists:
errors:
limit: Вы достигли максимального числа списков
media_attachments: media_attachments:
validations: validations:
images_and_video: Нельзя добавить видео к статусу с изображениями images_and_video: Нельзя добавить видео к статусу с изображениями
too_many: Нельзя добавить более 4 файлов too_many: Нельзя добавить более 4 файлов
migrations:
acct: имя@домен нового аккаунта
currently_redirecting: 'Ваш профиль будет перенаправлен на:'
proceed: Сохранить
updated_msg: Настройки миграции Вашего аккаунта обновлены!
moderation:
title: Модерация
notification_mailer: notification_mailer:
digest: digest:
body: 'Кратко о пропущенном Вами на %{instance} с Вашего последнего захода %{since}:' body: 'Кратко о пропущенном Вами на %{instance} с Вашего последнего захода %{since}:'
@ -484,6 +582,8 @@ ru:
windows: Windows windows: Windows
windows_mobile: Windows Mobile windows_mobile: Windows Mobile
windows_phone: Windows Phone windows_phone: Windows Phone
revoke: Завершить
revoke_success: Сессия завершена успешно
title: Сессии title: Сессии
settings: settings:
authorized_apps: Авторизованные приложения authorized_apps: Авторизованные приложения
@ -494,6 +594,7 @@ ru:
export: Экспорт данных export: Экспорт данных
followers: Авторизованные подписчики followers: Авторизованные подписчики
import: Импорт import: Импорт
migrate: Перенос аккаунта
notifications: Уведомления notifications: Уведомления
preferences: Настройки preferences: Настройки
settings: Опции settings: Опции
@ -503,7 +604,7 @@ ru:
open_in_web: Открыть в WWW open_in_web: Открыть в WWW
over_character_limit: превышен лимит символов (%{max}) over_character_limit: превышен лимит символов (%{max})
pin_errors: pin_errors:
limit: Слишком много закрепленных статусов limit: Вы закрепили максимально возможное число статусов
ownership: Нельзя закрепить чужой статус ownership: Нельзя закрепить чужой статус
private: Нельзя закрепить непубличный статус private: Нельзя закрепить непубличный статус
reblog: Нельзя закрепить продвинутый статус reblog: Нельзя закрепить продвинутый статус
@ -517,10 +618,52 @@ ru:
unlisted_long: Показывать всем, но не отображать в публичных лентах unlisted_long: Показывать всем, но не отображать в публичных лентах
stream_entries: stream_entries:
click_to_show: Показать click_to_show: Показать
pinned: Закреплённое сообщение
reblogged: продвинул(а) reblogged: продвинул(а)
sensitive_content: Чувствительный контент sensitive_content: Чувствительный контент
terms: terms:
body_html: |
<h2>Privacy Policy</h2>
<h3 id="collect">What information do we collect?</h3>
<p>We collect information from you when you register on our site and gather data when you participate in the forum by reading, writing, and evaluating the content shared here.</p>
<p>When registering on our site, you may be asked to enter your name and e-mail address. You may, however, visit our site without registering. Your e-mail address will be verified by an email containing a unique link. If that link is visited, we know that you control the e-mail address.</p>
<p>When registered and posting, we record the IP address that the post originated from. We also may retain server logs which include the IP address of every request to our server.</p>
<h3 id="use">What do we use your information for?</h3>
<p>Any of the information we collect from you may be used in one of the following ways:</p>
<ul>
<li>To personalize your experience &mdash; your information helps us to better respond to your individual needs.</li>
<li>To improve our site &mdash; we continually strive to improve our site offerings based on the information and feedback we receive from you.</li>
<li>To improve customer service &mdash; your information helps us to more effectively respond to your customer service requests and support needs.</li>
<li>To send periodic emails &mdash; The email address you provide may be used to send you information, notifications that you request about changes to topics or in response to your user name, respond to inquiries, and/or other requests or questions.</li>
</ul>
<h3 id="protect">How do we protect your information?</h3>
<p>We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information.</p>
<h3 id="data-retention">What is your data retention policy?</h3>
<p>We will make a good faith effort to:</p>
<ul>
<li>Retain server logs containing the IP address of all requests to this server no more than 90 days.</li>
<li>Retain the IP addresses associated with registered users and their posts no more than 5 years.</li>
</ul>
<h3 id="cookies">Do we use cookies?</h3>
<p>Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.</p>
<p>We use cookies to understand and save your preferences for future visits and compile aggregate data about site traffic and site interaction so that we can offer better site experiences and tools in the future. We may contract with third-party service providers to assist us in better understanding our site visitors. These service providers are not permitted to use the information collected on our behalf except to help us conduct and improve our business.</p>
<h3 id="disclose">Do we disclose any information to outside parties?</h3>
<p>We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety. However, non-personally identifiable visitor information may be provided to other parties for marketing, advertising, or other uses.</p>
<h3 id="third-party">Third party links</h3>
<p>Occasionally, at our discretion, we may include or offer third party products or services on our site. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these linked sites. Nonetheless, we seek to protect the integrity of our site and welcome any feedback about these sites.</p>
<h3 id="coppa">Children's Online Privacy Protection Act Compliance</h3>
<p>Our site, products and services are all directed to people who are at least 13 years old. If this server is in the USA, and you are under the age of 13, per the requirements of COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) do not use this site.</p>
<h3 id="online">Online Privacy Policy Only</h3>
<p>This online privacy policy applies only to information collected through our site and not to information collected offline.</p>
<h3 id="consent">Your Consent</h3>
<p>By using our site, you consent to our web site privacy policy.</p>
<h3 id="changes">Changes to our Privacy Policy</h3>
<p>If we decide to change our privacy policy, we will post those changes on this page.</p>
<p>This document is CC-BY-SA. It was last updated May 31, 2013.</p>
<p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
title: Условия обслуживания и политика конфиденциальности %{instance} title: Условия обслуживания и политика конфиденциальности %{instance}
themes:
default: Mastodon
time: time:
formats: formats:
default: "%b %d, %Y, %H:%M" default: "%b %d, %Y, %H:%M"

View File

@ -0,0 +1,10 @@
class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
disable_ddl_transaction!
def change
safety_assured do
add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106
end
remove_index :statuses, name: :index_statuses_on_account_id_id
end
end

View File

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20171226094803) do ActiveRecord::Schema.define(version: 20180106000232) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -419,7 +419,7 @@ ActiveRecord::Schema.define(version: 20171226094803) do
t.bigint "application_id" t.bigint "application_id"
t.bigint "in_reply_to_account_id" t.bigint "in_reply_to_account_id"
t.boolean "local_only" t.boolean "local_only"
t.index ["account_id", "id"], name: "index_statuses_on_account_id_id" t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20180106", order: { id: :desc }
t.index ["conversation_id"], name: "index_statuses_on_conversation_id" t.index ["conversation_id"], name: "index_statuses_on_conversation_id"
t.index ["in_reply_to_id"], name: "index_statuses_on_in_reply_to_id" t.index ["in_reply_to_id"], name: "index_statuses_on_in_reply_to_id"
t.index ["reblog_of_id", "account_id"], name: "index_statuses_on_reblog_of_id_and_account_id" t.index ["reblog_of_id", "account_id"], name: "index_statuses_on_reblog_of_id_and_account_id"