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

Conflicts:
	db/schema.rb
shrike
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 ||= 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)
@ -33,4 +33,8 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
::FetchRemoteStatusService.new.call(@object['url'])
end
end
def announceable?(status)
status.public_visibility? || status.unlisted_visibility?
end
end

View File

@ -26,6 +26,9 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
cached_reblog = reblog
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
ApplicationRecord.transaction do

View File

@ -1,5 +1,5 @@
- 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
- if @account.user&.setting_noindex

View File

@ -53,7 +53,7 @@ class Rack::Attack
req.ip if req.api_request?
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
end

View File

@ -39,6 +39,7 @@ ru:
followers: Подписчики
following: Подписан(а)
media: Медиаконтент
moved_html: "%{name} переехал(а) на %{new_profile_link}:"
nothing_here: Здесь ничего нет!
people_followed_by: Люди, на которых подписан(а) %{name}
people_who_follow: Подписчики %{name}
@ -59,9 +60,13 @@ ru:
destroyed_msg: Заметка модератора успешно удалена!
accounts:
are_you_sure: Вы уверены?
by_domain: Домен
confirm: Подтвердить
confirmed: Подтверждено
demote: Разжаловать
disable: Отключить
disable_two_factor_authentication: Отключить 2FA
disabled: Отключено
display_name: Отображаемое имя
domain: Домен
edit: Изменить
@ -77,7 +82,9 @@ ru:
local: Локальные
remote: Удаленные
title: Размещение
login_status: Статус аккаунта
media_attachments: Мультимедийные вложения
memorialize: Превратить в Памятник
moderation:
all: Все
silenced: Заглушенные
@ -94,6 +101,7 @@ ru:
outbox_url: URL исходящих
perform_full_suspension: Полная блокировка
profile_url: URL профиля
promote: Повысить
protocol: Протокол
public: Публичный
push_subscription_expires: Подписка PuSH истекает
@ -101,6 +109,12 @@ ru:
reset: Сбросить
reset_password: Сбросить пароль
resubscribe: Переподписаться
role: Разрешения
roles:
admin: Администратор
moderator: Модератор
staff: Персонал
user: Пользователь
salmon_url: Salmon URL
search: Поиск
shared_inbox_url: URL общих входящих
@ -117,6 +131,32 @@ ru:
unsubscribe: Отписаться
username: Имя пользователя
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:
copied_msg: Локальная копия эмодзи успешно создана
copy: Скопироват
@ -130,11 +170,16 @@ ru:
enable: Включить
enabled_msg: Эмодзи успешно включено
image_hint: PNG до 50KB
listed: В списке
new:
title: Добавить новое эмодзи
title: Добавить новый эмодзи
overwrite: Заменить
shortcode: Шорткод
shortcode_hint: Как минимум 2 символа, только алфавитно-цифровые символы и подчеркивания
title: Собственные эмодзи
unlisted: Не в списке
update_failed_msg: Невозможно обновить этот эмодзи
updated_msg: Эмодзи обновлён!
upload: Загрузить
domain_blocks:
add_new: Добавить новую
@ -186,6 +231,13 @@ ru:
reset: Сбросить
search: Поиск
title: Известные узлы
invites:
filter:
all: Все
available: Актуальные
expired: Истёкшие
title: Фильтр
title: Приглашения
reports:
action_taken_by: 'Действие предпринято:'
are_you_sure: Вы уверены?
@ -199,6 +251,7 @@ ru:
'false': Показать мультимедийные вложения
'true': Скрыть мультимедийные вложения
report: 'Жалоба #%{id}'
report_contents: Содержимое
reported_account: Аккаунт нарушителя
reported_by: Отправитель жалобы
resolved: Разрешено
@ -210,12 +263,18 @@ ru:
unresolved: Неразрешенные
view: Просмотреть
settings:
activity_api_enabled:
desc_html: Подсчёт количества локальных статусов, активных пользователей и новых регистраций на еженедельной основе
title: Публикация агрегированной статистики активности пользователей
bootstrap_timeline_accounts:
desc_html: Разделяйте имена пользователей запятыми. Сработает только для локальных незакрытых аккаунтов. По умолчанию включены все локальные администраторы.
title: Подписки по умолчанию для новых пользователей
contact_information:
email: Введите публичный e-mail
username: Введите имя пользователя
peers_api_enabled:
desc_html: Домены, которые были замечены этим узлом среди всей федерации
title: Публикация списка обнаруженных узлов
registrations:
closed_message:
desc_html: Отображается на титульной странице, когда закрыта регистрация<br>Можно использовать HTML-теги
@ -223,9 +282,15 @@ ru:
deletion:
desc_html: Позволяет всем удалять собственные аккаунты
title: Разрешить удаление аккаунтов
min_invite_role:
disabled: Никого
title: Разрешает приглашения от
open:
desc_html: Позволяет любому создавать аккаунт
title: Открыть регистрацию
show_staff_badge:
desc_html: Показывать метку персонала на странице пользователя
title: Показывать метку персонала
site_description:
desc_html: Отображается в качестве параграфа на титульной странице и используется в качестве мета-тега.<br>Можно использовать HTML-теги, в особенности <code>&lt;a&gt;</code> и <code>&lt;em&gt;</code>.
title: Описание сайта
@ -293,6 +358,8 @@ ru:
invalid_reset_password_token: Токен сброса пароля неверен или устарел. Пожалуйста, запросите новый.
login: Войти
logout: Выйти
migrate_account: Перенести аккаунт
migrate_account_html: Если Вы хотите перенести этот аккаунт на другой, вы можете <a href="%{path}">сделать это здесь</a>.
register: Зарегистрироваться
resend_confirmation: Повторить отправку инструкции для подтверждения
reset_password: Сбросить пароль
@ -374,12 +441,43 @@ ru:
following: Подписки
muting: Список глушения
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_signup_html: Если у Вас его нет, вы можете <a href="%{sign_up_path}">зарегистрироваться здесь</a>.
lists:
errors:
limit: Вы достигли максимального числа списков
media_attachments:
validations:
images_and_video: Нельзя добавить видео к статусу с изображениями
too_many: Нельзя добавить более 4 файлов
migrations:
acct: имя@домен нового аккаунта
currently_redirecting: 'Ваш профиль будет перенаправлен на:'
proceed: Сохранить
updated_msg: Настройки миграции Вашего аккаунта обновлены!
moderation:
title: Модерация
notification_mailer:
digest:
body: 'Кратко о пропущенном Вами на %{instance} с Вашего последнего захода %{since}:'
@ -484,6 +582,8 @@ ru:
windows: Windows
windows_mobile: Windows Mobile
windows_phone: Windows Phone
revoke: Завершить
revoke_success: Сессия завершена успешно
title: Сессии
settings:
authorized_apps: Авторизованные приложения
@ -494,6 +594,7 @@ ru:
export: Экспорт данных
followers: Авторизованные подписчики
import: Импорт
migrate: Перенос аккаунта
notifications: Уведомления
preferences: Настройки
settings: Опции
@ -503,7 +604,7 @@ ru:
open_in_web: Открыть в WWW
over_character_limit: превышен лимит символов (%{max})
pin_errors:
limit: Слишком много закрепленных статусов
limit: Вы закрепили максимально возможное число статусов
ownership: Нельзя закрепить чужой статус
private: Нельзя закрепить непубличный статус
reblog: Нельзя закрепить продвинутый статус
@ -517,10 +618,52 @@ ru:
unlisted_long: Показывать всем, но не отображать в публичных лентах
stream_entries:
click_to_show: Показать
pinned: Закреплённое сообщение
reblogged: продвинул(а)
sensitive_content: Чувствительный контент
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}
themes:
default: Mastodon
time:
formats:
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.
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
enable_extension "plpgsql"
@ -419,7 +419,7 @@ ActiveRecord::Schema.define(version: 20171226094803) do
t.bigint "application_id"
t.bigint "in_reply_to_account_id"
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 ["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"