Merge remote-tracking branch 'origin/kb_lts' into kb_development

This commit is contained in:
KMY 2023-09-22 07:02:33 +09:00
commit a96b317922
45 changed files with 1154 additions and 1133 deletions

1680
AUTHORS.md

File diff suppressed because it is too large Load diff

View file

@ -2,13 +2,13 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## [4.2.0] - UNRELEASED ## [4.2.0] - 2023-09-21
The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by [@danielmbrasil](https://github.com/danielmbrasil), [@mjankowski](https://github.com/mjankowski), [@nschonni](https://github.com/nschonni), [@renchap](https://github.com/renchap), and [@takayamaki](https://github.com/takayamaki). The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by [@danielmbrasil](https://github.com/danielmbrasil), [@mjankowski](https://github.com/mjankowski), [@nschonni](https://github.com/nschonni), [@renchap](https://github.com/renchap), and [@takayamaki](https://github.com/takayamaki).
### Added ### Added
- **Add full-text search of opted-in public posts and rework search operators** ([Gargron](https://github.com/mastodon/mastodon/pull/26485), [jsgoldstein](https://github.com/mastodon/mastodon/pull/26344), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26657), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26650), [jsgoldstein](https://github.com/mastodon/mastodon/pull/26659), [Gargron](https://github.com/mastodon/mastodon/pull/26660), [Gargron](https://github.com/mastodon/mastodon/pull/26663), [Gargron](https://github.com/mastodon/mastodon/pull/26688), [Gargron](https://github.com/mastodon/mastodon/pull/26689), [Gargron](https://github.com/mastodon/mastodon/pull/26686), [Gargron](https://github.com/mastodon/mastodon/pull/26687), [Gargron](https://github.com/mastodon/mastodon/pull/26692), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26697), [Gargron](https://github.com/mastodon/mastodon/pull/26699), [Gargron](https://github.com/mastodon/mastodon/pull/26701), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26710), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26739), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26754), [Gargron](https://github.com/mastodon/mastodon/pull/26662), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26755), [Gargron](https://github.com/mastodon/mastodon/pull/26781), [Gargron](https://github.com/mastodon/mastodon/pull/26782), [Gargron](https://github.com/mastodon/mastodon/pull/26760), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26756), [Gargron](https://github.com/mastodon/mastodon/pull/26784), [Gargron](https://github.com/mastodon/mastodon/pull/26807), [Gargron](https://github.com/mastodon/mastodon/pull/26835), [Gargron](https://github.com/mastodon/mastodon/pull/26847), [Gargron](https://github.com/mastodon/mastodon/pull/26834), [arbolitoloco1](https://github.com/mastodon/mastodon/pull/26893), [tribela](https://github.com/mastodon/mastodon/pull/26896), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26927), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26959)) - **Add full-text search of opted-in public posts and rework search operators** ([Gargron](https://github.com/mastodon/mastodon/pull/26485), [jsgoldstein](https://github.com/mastodon/mastodon/pull/26344), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26657), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26650), [jsgoldstein](https://github.com/mastodon/mastodon/pull/26659), [Gargron](https://github.com/mastodon/mastodon/pull/26660), [Gargron](https://github.com/mastodon/mastodon/pull/26663), [Gargron](https://github.com/mastodon/mastodon/pull/26688), [Gargron](https://github.com/mastodon/mastodon/pull/26689), [Gargron](https://github.com/mastodon/mastodon/pull/26686), [Gargron](https://github.com/mastodon/mastodon/pull/26687), [Gargron](https://github.com/mastodon/mastodon/pull/26692), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26697), [Gargron](https://github.com/mastodon/mastodon/pull/26699), [Gargron](https://github.com/mastodon/mastodon/pull/26701), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26710), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26739), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26754), [Gargron](https://github.com/mastodon/mastodon/pull/26662), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26755), [Gargron](https://github.com/mastodon/mastodon/pull/26781), [Gargron](https://github.com/mastodon/mastodon/pull/26782), [Gargron](https://github.com/mastodon/mastodon/pull/26760), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26756), [Gargron](https://github.com/mastodon/mastodon/pull/26784), [Gargron](https://github.com/mastodon/mastodon/pull/26807), [Gargron](https://github.com/mastodon/mastodon/pull/26835), [Gargron](https://github.com/mastodon/mastodon/pull/26847), [Gargron](https://github.com/mastodon/mastodon/pull/26834), [arbolitoloco1](https://github.com/mastodon/mastodon/pull/26893), [tribela](https://github.com/mastodon/mastodon/pull/26896), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26927), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26959), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27014))
This introduces a new `public_statuses` Elasticsearch index for public posts by users who have opted in to their posts being searchable (`toot#indexable` flag). This introduces a new `public_statuses` Elasticsearch index for public posts by users who have opted in to their posts being searchable (`toot#indexable` flag).
This also revisits the other indexes to provide more useful indexing, and adds new search operators such as `from:me`, `before:2022-11-01`, `after:2022-11-01`, `during:2022-11-01`, `language:fr`, `has:poll`, or `in:library` (for searching only in posts you have written or interacted with). This also revisits the other indexes to provide more useful indexing, and adds new search operators such as `from:me`, `before:2022-11-01`, `after:2022-11-01`, `during:2022-11-01`, `language:fr`, `has:poll`, or `in:library` (for searching only in posts you have written or interacted with).
Results are now ordered chronologically. Results are now ordered chronologically.
@ -27,15 +27,16 @@ The following changelog entries focus on changes visible to users, administrator
- Add `ONE_CLICK_SSO_LOGIN` environment variable to directly link to the Single-Sign On provider if there is only one sign up method available ([CSDUMMI](https://github.com/mastodon/mastodon/pull/26083), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26368), [CSDUMMI](https://github.com/mastodon/mastodon/pull/26857), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26901)) - Add `ONE_CLICK_SSO_LOGIN` environment variable to directly link to the Single-Sign On provider if there is only one sign up method available ([CSDUMMI](https://github.com/mastodon/mastodon/pull/26083), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26368), [CSDUMMI](https://github.com/mastodon/mastodon/pull/26857), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26901))
- **Add webhook templating** ([Gargron](https://github.com/mastodon/mastodon/pull/23289)) - **Add webhook templating** ([Gargron](https://github.com/mastodon/mastodon/pull/23289))
- **Add webhooks for local `status.created`, `status.updated`, `account.updated` and `report.updated`** ([VyrCossont](https://github.com/mastodon/mastodon/pull/24133), [VyrCossont](https://github.com/mastodon/mastodon/pull/24243), [VyrCossont](https://github.com/mastodon/mastodon/pull/24211)) - **Add webhooks for local `status.created`, `status.updated`, `account.updated` and `report.updated`** ([VyrCossont](https://github.com/mastodon/mastodon/pull/24133), [VyrCossont](https://github.com/mastodon/mastodon/pull/24243), [VyrCossont](https://github.com/mastodon/mastodon/pull/24211))
- **Add exclusive lists** ([dariusk](https://github.com/mastodon/mastodon/pull/22048), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25324)) - **Add exclusive lists** ([dariusk, necropolina](https://github.com/mastodon/mastodon/pull/22048), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25324))
- **Add a confirmation screen when suspending a domain** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25144), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25603)) - **Add a confirmation screen when suspending a domain** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25144), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25603))
- **Add support for importing lists** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25203), [mgmn](https://github.com/mastodon/mastodon/pull/26120), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26372)) - **Add support for importing lists** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25203), [mgmn](https://github.com/mastodon/mastodon/pull/26120), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26372))
- **Add optional hCaptcha support** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25019), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25057), [Gargron](https://github.com/mastodon/mastodon/pull/25395), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26388)) - **Add optional hCaptcha support** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25019), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25057), [Gargron](https://github.com/mastodon/mastodon/pull/25395), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26388))
- **Add lines to threads in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24549), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24677), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24696), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24711), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24713), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24715), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24800), [teeerevor](https://github.com/mastodon/mastodon/pull/25706), [renchap](https://github.com/mastodon/mastodon/pull/25807)) - **Add lines to threads in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24549), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24677), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24696), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24711), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24713), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24715), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24800), [teeerevor](https://github.com/mastodon/mastodon/pull/25706), [renchap](https://github.com/mastodon/mastodon/pull/25807))
- **Add new onboarding flow to web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24619), [Gargron](https://github.com/mastodon/mastodon/pull/24646), [Gargron](https://github.com/mastodon/mastodon/pull/24705), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24872), [ThisIsMissEm](https://github.com/mastodon/mastodon/pull/24883), [Gargron](https://github.com/mastodon/mastodon/pull/24954), [stevenjlm](https://github.com/mastodon/mastodon/pull/24959), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25010), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25275), [Gargron](https://github.com/mastodon/mastodon/pull/25559), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25561)) - **Add new onboarding flow to web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24619), [Gargron](https://github.com/mastodon/mastodon/pull/24646), [Gargron](https://github.com/mastodon/mastodon/pull/24705), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24872), [ThisIsMissEm](https://github.com/mastodon/mastodon/pull/24883), [Gargron](https://github.com/mastodon/mastodon/pull/24954), [stevenjlm](https://github.com/mastodon/mastodon/pull/24959), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25010), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25275), [Gargron](https://github.com/mastodon/mastodon/pull/25559), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25561))
- **Add `S3_DISABLE_CHECKSUM_MODE` environment variable for compatibility with some S3-compatible providers** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26435))
- **Add auto-refresh of accounts we get new messages/edits of** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26510)) - **Add auto-refresh of accounts we get new messages/edits of** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26510))
- **Add Elasticsearch cluster health check and indexes mismatch check to dashboard** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26448), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26605), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26658)) - **Add Elasticsearch cluster health check and indexes mismatch check to dashboard** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26448), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26605), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26658))
- Add `hide_collections`, `discoverable` and `indexable` attributes to credentials API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26998))
- Add `S3_ENABLE_CHECKSUM_MODE` environment variable to enable checksum verification on compatible S3-providers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26435))
- Add admin API for managing tags ([rrgeorge](https://github.com/mastodon/mastodon/pull/26872)) - Add admin API for managing tags ([rrgeorge](https://github.com/mastodon/mastodon/pull/26872))
- Add a link to hashtag timelines from the Trending hashtags moderation interface ([gunchleoc](https://github.com/mastodon/mastodon/pull/26724)) - Add a link to hashtag timelines from the Trending hashtags moderation interface ([gunchleoc](https://github.com/mastodon/mastodon/pull/26724))
- Add timezone to datetimes in e-mails ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26822)) - Add timezone to datetimes in e-mails ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26822))
@ -53,7 +54,7 @@ The following changelog entries focus on changes visible to users, administrator
- Add `CACHE_BUSTER_HTTP_METHOD` environment variable ([renchap](https://github.com/mastodon/mastodon/pull/26528), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26542)) - Add `CACHE_BUSTER_HTTP_METHOD` environment variable ([renchap](https://github.com/mastodon/mastodon/pull/26528), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26542))
- Add support for `DB_PASS` when using `DATABASE_URL` ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26295)) - Add support for `DB_PASS` when using `DATABASE_URL` ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26295))
- Add `GET /api/v1/instance/languages` to REST API ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24443)) - Add `GET /api/v1/instance/languages` to REST API ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24443))
- Add primary key to `preview_cards_statuses` join table ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25243), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26384), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26447), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26737)) - Add primary key to `preview_cards_statuses` join table ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25243), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26384), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26447), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26737), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26979))
- Add client-side timeout on resend confirmation button ([Gargron](https://github.com/mastodon/mastodon/pull/26300)) - Add client-side timeout on resend confirmation button ([Gargron](https://github.com/mastodon/mastodon/pull/26300))
- Add published date and author to news on the explore screen in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26155)) - Add published date and author to news on the explore screen in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26155))
- Add `lang` attribute to various UI components ([c960657](https://github.com/mastodon/mastodon/pull/23869), [c960657](https://github.com/mastodon/mastodon/pull/23891), [c960657](https://github.com/mastodon/mastodon/pull/26111), [c960657](https://github.com/mastodon/mastodon/pull/26149)) - Add `lang` attribute to various UI components ([c960657](https://github.com/mastodon/mastodon/pull/23869), [c960657](https://github.com/mastodon/mastodon/pull/23891), [c960657](https://github.com/mastodon/mastodon/pull/26111), [c960657](https://github.com/mastodon/mastodon/pull/26149))
@ -174,7 +175,7 @@ The following changelog entries focus on changes visible to users, administrator
- Change account search in moderation interface to allow searching by username including the leading `@` ([HeitorMC](https://github.com/mastodon/mastodon/pull/24242)) - Change account search in moderation interface to allow searching by username including the leading `@` ([HeitorMC](https://github.com/mastodon/mastodon/pull/24242))
- Change all components to use the same error page in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24512)) - Change all components to use the same error page in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24512))
- Change search pop-out in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24305)) - Change search pop-out in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24305))
- Change user settings to be stored in a more optimal way ([Gargron](https://github.com/mastodon/mastodon/pull/23630), [c960657](https://github.com/mastodon/mastodon/pull/24321), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24453), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24460), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24558), [Gargron](https://github.com/mastodon/mastodon/pull/24761), [Gargron](https://github.com/mastodon/mastodon/pull/24783), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25508), [jsgoldstein](https://github.com/mastodon/mastodon/pull/25340), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26884)) - Change user settings to be stored in a more optimal way ([Gargron](https://github.com/mastodon/mastodon/pull/23630), [c960657](https://github.com/mastodon/mastodon/pull/24321), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24453), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24460), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24558), [Gargron](https://github.com/mastodon/mastodon/pull/24761), [Gargron](https://github.com/mastodon/mastodon/pull/24783), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25508), [jsgoldstein](https://github.com/mastodon/mastodon/pull/25340), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26884), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27012))
- Change media upload limits and remove client-side resizing ([Gargron](https://github.com/mastodon/mastodon/pull/23726)) - Change media upload limits and remove client-side resizing ([Gargron](https://github.com/mastodon/mastodon/pull/23726))
- Change design of account rows in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24247), [Gargron](https://github.com/mastodon/mastodon/pull/24343), [Gargron](https://github.com/mastodon/mastodon/pull/24956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25131)) - Change design of account rows in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24247), [Gargron](https://github.com/mastodon/mastodon/pull/24343), [Gargron](https://github.com/mastodon/mastodon/pull/24956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25131))
- Change log-out to use Single Logout when using external log-in through OIDC ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24020)) - Change log-out to use Single Logout when using external log-in through OIDC ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24020))
@ -306,8 +307,8 @@ The following changelog entries focus on changes visible to users, administrator
### Security ### Security
- Fix missing HTML sanitization in translation API (CVE-2023-42452) - Fix missing HTML sanitization in translation API (CVE-2023-42452, [GHSA-2693-xr3m-jhqr](https://github.com/mastodon/mastodon/security/advisories/GHSA-2693-xr3m-jhqr))
- Fix incorrect domain name normalization (CVE-2023-42451) - Fix incorrect domain name normalization (CVE-2023-42451, [GHSA-v3xf-c9qf-j667](https://github.com/mastodon/mastodon/security/advisories/GHSA-v3xf-c9qf-j667))
## [4.1.7] - 2023-09-05 ## [4.1.7] - 2023-09-05

View file

@ -1,42 +0,0 @@
# kmyblueインストール手順
## 共通の注意事項
### 必須ソフトウェアのバージョン
Ruby、ElasticSearch、ImageMagick、PostgreSQLなど必須ソフトウェアのバージョンは、本家Mastodonに準じます。リリースートに対応する本家Mastodonバージョンが記載されていますので、本家Mastodonのリリースートから対応するバージョンを探して調べてください。
### 一般的な注意事項
kmyblueは頻繁にバージョンアップを行います。
- 本家Mastodonの開発中のバージョンを平然と取り込みます
- バグが含まれていることがあります
- 特に最新コミットでは、デバッグ用コードや、`kmy.blue`本番サーバーで動作確認を行うためのコードが含まれている場合があります。ブランチの最新コミットではなく最新タグを取り込むことを強くおすすめします
Mastodonの最新バージョンでは、`dist`フォルダに`mastodon-streaming@.service`が追加されています。これは現在の一般的な手順書には存在しません。各サービスファイルをコピーするとき、`mastodon-streaming@.service`をコピーし忘れないようにしてください。
### ElasticSearchを使用する場合
kmyblueでは、sudachiの使用を前提としています。
下記URLより、ElasticSearchにSudachiプラグインを追加してください。
ただし辞書ファイルsudachi dictionary archiveは手順書で指示されたパスではなく`/etc/elasticsearch/sudachi`に格納してください。
https://github.com/WorksApplications/elasticsearch-sudachi
Sudachiインストール終了後、追加で`/etc/elasticsearch/sudachi/config.json`に下記を記述して保存してください。`system_full.dic`を使用する場合は適宜`systemDict`プロパティの内容を置き換えてください。
```json
{
"systemDict": "system_core.dic"
}
```
## インストール手順
[Wiki](https://github.com/kmycode/mastodon/wiki/Installation)を参照してください
## アップデート手順
[Wiki](https://github.com/kmycode/mastodon/wiki/Updation)を参照してください

View file

@ -15,7 +15,7 @@ kmyblueは、特に未収載投稿の検索が強化されているため、ロ
## インストール方法 ## インストール方法
INSTALL.mdや[Wiki](https://github.com/kmycode/mastodon/wiki/Installation)を参照してください。 [Wiki](https://github.com/kmycode/mastodon/wiki/Installation)を参照してください。
## 開発への参加方法 ## 開発への参加方法
@ -52,6 +52,7 @@ kmyblueは絵文字リアクションに対応しているフォークの
- **main** - 管理者が本家MastodonにPRするときに使うことがあります - **main** - 管理者が本家MastodonにPRするときに使うことがあります
- **kb_development** - 現在kmyblue本体で使われているソースコードです - **kb_development** - 現在kmyblue本体で使われているソースコードです
- **kb_lts** - LTSの管理に使います。LTSはこのブランチから公開されます - **kb_lts** - LTSの管理に使います。LTSはこのブランチから公開されます
- **kb_patch** - 修正パッチの管理に使います。マイナーバージョンアップデートは通常このブランチから公開されます
- **kb_migration** - 本家Mastodonへの追従を目的としたブランチです。`kb_development`上で開発を進めているときに利用します - **kb_migration** - 本家Mastodonへの追従を目的としたブランチです。`kb_development`上で開発を進めているときに利用します
- **kb_migration_development** - 本家Mastodonへ追従し、かつその上で開発するときに使うブランチです。最新の本家コードでリファクタリングが行われ、`kb_development``kb_migration`の互換性の維持が困難になったときに利用します。ここで追加された機能は原則、本家Mastodonのバージョンアップと同時に`kb_development`に反映されます - **kb_migration_development** - 本家Mastodonへ追従し、かつその上で開発するときに使うブランチです。最新の本家コードでリファクタリングが行われ、`kb_development``kb_migration`の互換性の維持が困難になったときに利用します。ここで追加された機能は原則、本家Mastodonのバージョンアップと同時に`kb_development`に反映されます

View file

@ -1,18 +0,0 @@
# frozen_string_literal: true
module Admin
class MediaAttachmentsController < BaseController
def index
authorize :account, :index?
@media_attachments = filtered_attachments.page(params[:page])
@form = Form::MediaAttachmentsBatch.new
end
private
def filtered_attachments
MediaAttachment.local_attached.reverse_order
end
end
end

View file

@ -1,31 +0,0 @@
# frozen_string_literal: true
class Api::V1::Statuses::EmojiReactionedByAccountsSlimController < Api::BaseController
include Authorization
before_action -> { authorize_if_got_token! :read, :'read:accounts' }
before_action :set_status
def index
@accounts = load_emoji_reactions
# TODO: for serialize hash object
# render json: @accounts, each_serializer: REST::EmojiReactedBySlimSerializer
# Hide WIP api for hide account secret
not_found
end
private
def load_emoji_reactions
@status.generate_emoji_reactions_grouped_by_account
end
def set_status
@status = Status.find(params[:status_id])
authorize @status, :show?
rescue Mastodon::NotPermittedError
not_found
end
end

View file

@ -156,7 +156,6 @@ class Results extends PureComponent {
let filteredResults; let filteredResults;
if (!isLoading) {
const accounts = results.get('accounts', ImmutableList()); const accounts = results.get('accounts', ImmutableList());
const hashtags = results.get('hashtags', ImmutableList()); const hashtags = results.get('hashtags', ImmutableList());
const statuses = results.get('statuses', ImmutableList()); const statuses = results.get('statuses', ImmutableList());
@ -195,7 +194,6 @@ class Results extends PureComponent {
filteredResults = renderStatuses(statuses); filteredResults = renderStatuses(statuses);
break; break;
} }
}
return ( return (
<> <>

View file

@ -24,6 +24,7 @@ const Account = connect(state => ({
const messages = defineMessages({ const messages = defineMessages({
search: { id: 'navigation_bar.search', defaultMessage: 'Search' }, search: { id: 'navigation_bar.search', defaultMessage: 'Search' },
reload: { id: 'navigation_bar.reload', defaultMessage: 'Reload' },
}); });
const mapStateToProps = (state) => ({ const mapStateToProps = (state) => ({
@ -58,6 +59,11 @@ class Header extends PureComponent {
dispatchServer(); dispatchServer();
} }
handleReload (e) {
e.preventDefault();
window.location.reload();
}
render () { render () {
const { signedIn } = this.context.identity; const { signedIn } = this.context.identity;
const { location, openClosedRegistrationsModal, signupUrl, intl } = this.props; const { location, openClosedRegistrationsModal, signupUrl, intl } = this.props;
@ -67,6 +73,7 @@ class Header extends PureComponent {
if (signedIn) { if (signedIn) {
content = ( content = (
<> <>
{<button onClick={this.handleReload} className='button button-secondary' aria-label={intl.formatMessage(messages.reload)}><Icon id='refresh' /></button>}
{location.pathname !== '/search' && <Link to='/search' className='button button-secondary' aria-label={intl.formatMessage(messages.search)}><Icon id='search' /></Link>} {location.pathname !== '/search' && <Link to='/search' className='button button-secondary' aria-label={intl.formatMessage(messages.search)}><Icon id='search' /></Link>}
{location.pathname !== '/publish' && <Link to='/publish' className='button button-secondary'><FormattedMessage id='compose_form.publish_form' defaultMessage='New post' /></Link>} {location.pathname !== '/publish' && <Link to='/publish' className='button button-secondary'><FormattedMessage id='compose_form.publish_form' defaultMessage='New post' /></Link>}
<Account /> <Account />

View file

@ -414,6 +414,7 @@
"navigation_bar.lists": "Спісы", "navigation_bar.lists": "Спісы",
"navigation_bar.logout": "Выйсці", "navigation_bar.logout": "Выйсці",
"navigation_bar.mutes": "Ігнараваныя карыстальнікі", "navigation_bar.mutes": "Ігнараваныя карыстальнікі",
"navigation_bar.opened_in_classic_interface": "Допісы, уліковыя запісы і іншыя спецыфічныя старонкі па змоўчанні адчыняюцца ў класічным вэб-інтэрфейсе.",
"navigation_bar.personal": "Асабістае", "navigation_bar.personal": "Асабістае",
"navigation_bar.pins": "Замацаваныя допісы", "navigation_bar.pins": "Замацаваныя допісы",
"navigation_bar.preferences": "Параметры", "navigation_bar.preferences": "Параметры",

View file

@ -169,7 +169,7 @@
"confirmations.delete.confirm": "Löschen", "confirmations.delete.confirm": "Löschen",
"confirmations.delete.message": "Möchtest du diesen Beitrag wirklich löschen?", "confirmations.delete.message": "Möchtest du diesen Beitrag wirklich löschen?",
"confirmations.delete_list.confirm": "Löschen", "confirmations.delete_list.confirm": "Löschen",
"confirmations.delete_list.message": "Möchtest du diese Liste endgültig löschen?", "confirmations.delete_list.message": "Möchtest du diese Liste für immer löschen?",
"confirmations.discard_edit_media.confirm": "Verwerfen", "confirmations.discard_edit_media.confirm": "Verwerfen",
"confirmations.discard_edit_media.message": "Du hast Änderungen an der Medienbeschreibung oder -vorschau vorgenommen, die noch nicht gespeichert sind. Trotzdem verwerfen?", "confirmations.discard_edit_media.message": "Du hast Änderungen an der Medienbeschreibung oder -vorschau vorgenommen, die noch nicht gespeichert sind. Trotzdem verwerfen?",
"confirmations.domain_block.confirm": "Domain blockieren", "confirmations.domain_block.confirm": "Domain blockieren",
@ -434,7 +434,7 @@
"notification.status": "{name} hat gerade etwas gepostet", "notification.status": "{name} hat gerade etwas gepostet",
"notification.update": "{name} bearbeitete einen Beitrag", "notification.update": "{name} bearbeitete einen Beitrag",
"notifications.clear": "Benachrichtigungen löschen", "notifications.clear": "Benachrichtigungen löschen",
"notifications.clear_confirmation": "Möchtest du diese Benachrichtigung für immer löschen?", "notifications.clear_confirmation": "Möchtest du wirklich alle Benachrichtigungen für immer löschen?",
"notifications.column_settings.admin.report": "Neue Meldungen:", "notifications.column_settings.admin.report": "Neue Meldungen:",
"notifications.column_settings.admin.sign_up": "Neue Registrierungen:", "notifications.column_settings.admin.sign_up": "Neue Registrierungen:",
"notifications.column_settings.alert": "Desktop-Benachrichtigungen", "notifications.column_settings.alert": "Desktop-Benachrichtigungen",

View file

@ -389,7 +389,7 @@
"lists.delete": "Delete list", "lists.delete": "Delete list",
"lists.edit": "Edit list", "lists.edit": "Edit list",
"lists.edit.submit": "Change title", "lists.edit.submit": "Change title",
"lists.exclusive": "Hide these posts from home or STL", "lists.exclusive": "Hide list or antenna account posts from home",
"lists.new.create": "Add list", "lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title", "lists.new.title_placeholder": "New list title",
"lists.replies_policy.followed": "Any followed user", "lists.replies_policy.followed": "Any followed user",
@ -431,6 +431,7 @@
"navigation_bar.preferences": "Preferences", "navigation_bar.preferences": "Preferences",
"navigation_bar.public_timeline": "Federated timeline", "navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.reaction_deck": "Reaction deck", "navigation_bar.reaction_deck": "Reaction deck",
"navigation_bar.refresh": "Refresh",
"navigation_bar.search": "Search", "navigation_bar.search": "Search",
"navigation_bar.security": "Security", "navigation_bar.security": "Security",
"not_signed_in_indicator.not_signed_in": "You need to login to access this resource.", "not_signed_in_indicator.not_signed_in": "You need to login to access this resource.",

View file

@ -464,7 +464,7 @@
"lists.delete": "リストを削除", "lists.delete": "リストを削除",
"lists.edit": "リストを編集", "lists.edit": "リストを編集",
"lists.edit.submit": "タイトルを変更", "lists.edit.submit": "タイトルを変更",
"lists.exclusive": "ホームタイムラインとSTLからこれらの投稿を非表示にする", "lists.exclusive": "ホームからリスト・アンテナに登録されたアカウントの投稿を非表示にする",
"lists.new.create": "リストを作成", "lists.new.create": "リストを作成",
"lists.new.title_placeholder": "新規リスト名", "lists.new.title_placeholder": "新規リスト名",
"lists.replies_policy.followed": "フォロー中のユーザー全員", "lists.replies_policy.followed": "フォロー中のユーザー全員",
@ -508,6 +508,7 @@
"navigation_bar.preferences": "ユーザー設定", "navigation_bar.preferences": "ユーザー設定",
"navigation_bar.public_timeline": "連合タイムライン", "navigation_bar.public_timeline": "連合タイムライン",
"navigation_bar.reaction_deck": "絵文字デッキ", "navigation_bar.reaction_deck": "絵文字デッキ",
"navigation_bar.refresh": "画面をリロード",
"navigation_bar.search": "検索", "navigation_bar.search": "検索",
"navigation_bar.security": "セキュリティ", "navigation_bar.security": "セキュリティ",
"not_signed_in_indicator.not_signed_in": "この機能を使うにはログインする必要があります。", "not_signed_in_indicator.not_signed_in": "この機能を使うにはログインする必要があります。",

View file

@ -308,11 +308,11 @@
"home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_reblogs": "부스트 표시",
"home.column_settings.show_replies": "답글 표시", "home.column_settings.show_replies": "답글 표시",
"home.explore_prompt.body": "홈 피드에는 내가 팔로우한 해시태그 그리고 팔로우한 사람과 부스트가 함께 나타나요. 너무 고요하게 느껴진다면, 다음 것들을 살펴볼 수 있어요:", "home.explore_prompt.body": "홈 피드에는 내가 팔로우한 해시태그 그리고 팔로우한 사람과 부스트가 함께 나타나요. 너무 고요하게 느껴진다면, 다음 것들을 살펴볼 수 있어요:",
"home.explore_prompt.title": "여기가 Mastodon 이용의 본거지예요.", "home.explore_prompt.title": "이곳은 마스토돈의 내 본거지입니다.",
"home.hide_announcements": "공지사항 숨기기", "home.hide_announcements": "공지사항 숨기기",
"home.pending_critical_update.body": "가능한 한 빨리 마스토돈 서버를 업데이트 하세요!", "home.pending_critical_update.body": "서둘러 마스토돈 서버를 업데이트 하세요!",
"home.pending_critical_update.link": "업데이트 보기", "home.pending_critical_update.link": "업데이트 보기",
"home.pending_critical_update.title": "긴급한 보안 업데이트가 있습니다!", "home.pending_critical_update.title": "긴급 보안 업데이트가 있어요!",
"home.show_announcements": "공지사항 보기", "home.show_announcements": "공지사항 보기",
"interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 좋아하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.", "interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 좋아하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.",
"interaction_modal.description.follow": "마스토돈 계정을 통해, {name} 님을 팔로우 하고 그의 게시물을 홈 피드에서 받아 볼 수 있습니다.", "interaction_modal.description.follow": "마스토돈 계정을 통해, {name} 님을 팔로우 하고 그의 게시물을 홈 피드에서 받아 볼 수 있습니다.",

View file

@ -1,5 +1,5 @@
{ {
"about.blocks": "Beperkte en opgeschorte servers", "about.blocks": "Gelimiteerde en opgeschorte servers",
"about.contact": "Contact:", "about.contact": "Contact:",
"about.disclaimer": "Mastodon is vrije, opensourcesoftware en een handelsmerk van Mastodon gGmbH.", "about.disclaimer": "Mastodon is vrije, opensourcesoftware en een handelsmerk van Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Reden niet beschikbaar", "about.domain_blocks.no_reason_available": "Reden niet beschikbaar",

View file

@ -136,7 +136,7 @@
"compose.language.change": "Chọn ngôn ngữ tút", "compose.language.change": "Chọn ngôn ngữ tút",
"compose.language.search": "Tìm ngôn ngữ...", "compose.language.search": "Tìm ngôn ngữ...",
"compose.published.body": "Đã đăng.", "compose.published.body": "Đã đăng.",
"compose.published.open": "Mở", "compose.published.open": "Xem lại",
"compose.saved.body": "Đã lưu tút.", "compose.saved.body": "Đã lưu tút.",
"compose_form.direct_message_warning_learn_more": "Tìm hiểu thêm", "compose_form.direct_message_warning_learn_more": "Tìm hiểu thêm",
"compose_form.encryption_warning": "Các tút trên Mastodon không được mã hóa đầu cuối. Không chia sẻ bất kỳ thông tin nhạy cảm nào qua Mastodon.", "compose_form.encryption_warning": "Các tút trên Mastodon không được mã hóa đầu cuối. Không chia sẻ bất kỳ thông tin nhạy cảm nào qua Mastodon.",

View file

@ -2243,8 +2243,8 @@ $ui-header-height: 55px;
&__links { &__links {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 10px; gap: 8px;
padding: 0 10px; padding: 0 9px;
overflow: hidden; overflow: hidden;
.button { .button {

View file

@ -411,7 +411,7 @@ class FeedManager
def filter_from_home?(status, receiver_id, crutches, timeline_type = :home, stl_home = false) # rubocop:disable Style/OptionalBooleanParameter def filter_from_home?(status, receiver_id, crutches, timeline_type = :home, stl_home = false) # rubocop:disable Style/OptionalBooleanParameter
return false if receiver_id == status.account_id return false if receiver_id == status.account_id
return true if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?) return true if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?)
return true if (timeline_type != :list || stl_home) && crutches[:exclusive_list_users][status.account_id].present? return true if (timeline_type != :list || stl_home) && (crutches[:exclusive_list_users][status.account_id].present? || crutches[:exclusive_antenna_users][status.account_id].present?)
return true if crutches[:languages][status.account_id].present? && status.language.present? && !crutches[:languages][status.account_id].include?(status.language) return true if crutches[:languages][status.account_id].present? && status.language.present? && !crutches[:languages][status.account_id].include?(status.language)
check_for_blocks = crutches[:active_mentions][status.id] || [] check_for_blocks = crutches[:active_mentions][status.id] || []
@ -602,6 +602,7 @@ class FeedManager
end end
lists = List.where(account_id: receiver_id, exclusive: true) lists = List.where(account_id: receiver_id, exclusive: true)
antennas = Antenna.where(list: lists, insert_feeds: true)
crutches[:following] = Follow.where(account_id: receiver_id, target_account_id: statuses.filter_map(&:in_reply_to_account_id)).pluck(:target_account_id).index_with(true) crutches[:following] = Follow.where(account_id: receiver_id, target_account_id: statuses.filter_map(&:in_reply_to_account_id)).pluck(:target_account_id).index_with(true)
crutches[:languages] = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:account_id)).pluck(:target_account_id, :languages).to_h crutches[:languages] = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:account_id)).pluck(:target_account_id, :languages).to_h
@ -611,6 +612,7 @@ class FeedManager
crutches[:domain_blocking] = AccountDomainBlock.where(account_id: receiver_id, domain: statuses.flat_map { |s| [s.account.domain, s.reblog&.account&.domain] }.compact).pluck(:domain).index_with(true) crutches[:domain_blocking] = AccountDomainBlock.where(account_id: receiver_id, domain: statuses.flat_map { |s| [s.account.domain, s.reblog&.account&.domain] }.compact).pluck(:domain).index_with(true)
crutches[:blocked_by] = Block.where(target_account_id: receiver_id, account_id: statuses.map { |s| [s.account_id, s.reblog&.account_id] }.flatten.compact).pluck(:account_id).index_with(true) crutches[:blocked_by] = Block.where(target_account_id: receiver_id, account_id: statuses.map { |s| [s.account_id, s.reblog&.account_id] }.flatten.compact).pluck(:account_id).index_with(true)
crutches[:exclusive_list_users] = ListAccount.where(list: lists, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true) crutches[:exclusive_list_users] = ListAccount.where(list: lists, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true)
crutches[:exclusive_antenna_users] = AntennaAccount.where(antenna: antennas, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true)
crutches crutches
end end

View file

@ -1,12 +0,0 @@
# frozen_string_literal: true
class Form::MediaAttachmentsBatch
include ActiveModel::Model
include Authorization
include AccountableConcern
include Payloadable
attr_accessor :query
def save; end
end

View file

@ -1,16 +0,0 @@
# frozen_string_literal: true
class StatusEmojiReactionsGroupedByAccountObject
def initialize(account, emoji_reactions)
@account = account
@emoji_reactions = emoji_reactions
end
def read_attribute_for_serialization(_)
REST::EmojiReactedBySlimSerializer
end
def model_name
'EmojiReaction'
end
end

View file

@ -16,6 +16,9 @@ class REST::CredentialAccountSerializer < REST::AccountSerializer
note: object.note, note: object.note,
fields: object.fields.map(&:to_h), fields: object.fields.map(&:to_h),
follow_requests_count: FollowRequest.where(target_account: object).limit(40).count, follow_requests_count: FollowRequest.where(target_account: object).limit(40).count,
hide_collections: object.hide_collections,
discoverable: object.discoverable,
indexable: object.indexable,
} }
end end

View file

@ -1,27 +0,0 @@
# frozen_string_literal: true
class REST::EmojiReactedBySlimReactionSerializer < ActiveModel::Serializer
include RoutingHelper
attributes :name
attribute :url, if: :custom_emoji?
attribute :static_url, if: :custom_emoji?
attribute :domain, if: :custom_emoji?
def url
full_asset_url(object.custom_emoji.image.url)
end
def static_url
full_asset_url(object.custom_emoji.image.url(:static))
end
def domain
object.custom_emoji.domain
end
def custom_emoji?
object.custom_emoji.present?
end
end

View file

@ -1,20 +0,0 @@
# frozen_string_literal: true
class REST::EmojiReactedBySlimSerializer < ActiveModel::Serializer
belongs_to :account, serializer: REST::AccountSerializer
has_many :emoji_reactions, serializer: REST::EmojiReactedBySlimReactionSerializer
def attributes
{ account => emoji_reactions }
end
private
def account
object.first
end
def emoji_reactions
object.last
end
end

View file

@ -1,30 +0,0 @@
.batch-table__row{ class: ['batch-table__row--attention'] }
.batch-table__row__content.batch-table__row__content--unpadded
%table.media-attachments-table
%tbody
%tr
%td
%img.image{ src: media_attachment.url, alt: '' }
.detailed-status__meta
- if media_attachment.status.application
= media_attachment.status.application.name
·
= link_to ActivityPub::TagManager.instance.url_for(media_attachment.status), class: 'detailed-status__datetime', target: stream_link_target, rel: 'noopener noreferrer' do
%time.formatted{ datetime: media_attachment.status.created_at.iso8601, title: l(media_attachment.status.created_at) }= l(media_attachment.status.created_at)
- if media_attachment.status.edited?
·
= link_to t('statuses.edited_at_html', date: content_tag(:time, l(media_attachment.status.edited_at), datetime: media_attachment.status.edited_at.iso8601, title: l(media_attachment.status.edited_at), class: 'formatted')), admin_account_status_path(media_attachment.status.account_id, media_attachment.status), class: 'detailed-status__datetime'
- if media_attachment.status.discarded?
·
%span.negative-hint= t('admin.statuses.deleted')
·
- if media_attachment.status.reblog?
= fa_icon('retweet fw')
= t('statuses.boosted_from_html', acct_link: admin_account_inline_link_to(media_attachment.status.proper.account))
- else
= fa_visibility_icon(media_attachment.status)
= t("statuses.visibilities.#{media_attachment.status.visibility}")
- if media_attachment.status.proper.sensitive?
·
= fa_icon('eye-slash fw')
= t('stream_entries.sensitive_content')

View file

@ -1,30 +0,0 @@
- content_for :page_title do
= t('admin.media_attachments.title')
- content_for :header_tags do
= javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous'
= form_for(@form, url: admin_media_attachments_path) do |f|
= hidden_field_tag :page, params[:page] || 1
= hidden_field_tag :select_all_matching, '0'
- AccountFilter::KEYS.each do |key|
= hidden_field_tag key, params[key] if params[key].present?
.batch-table
.batch-table__toolbar
- if @media_attachments.total_count > @media_attachments.size
.batch-table__select-all
.not-selected.active
%span= t('generic.all_items_on_page_selected_html', count: @media_attachments.size)
%button{ type: 'button' }= t('generic.select_all_matching_items', count: @media_attachments.total_count)
.selected
%span= t('generic.all_matching_items_selected_html', count: @media_attachments.total_count)
%button{ type: 'button' }= t('generic.deselect')
.batch-table__body
- if @media_attachments.empty?
= nothing_here 'nothing-here--under-tabs'
- else
= render partial: 'media_attachment', collection: @media_attachments, locals: { f: f }
= paginate @media_attachments

View file

@ -64,8 +64,5 @@
.fields-group .fields-group
= f.input :my_actor_type, collection: ['person', 'bot'],label_method: lambda { |item| safe_join([t("simple_form.labels.defaults.#{item}"), content_tag(:span, I18n.t("simple_form.hints.defaults.#{item}"), class: 'hint')]) }, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', wrapper: :with_floating_label = f.input :my_actor_type, collection: ['person', 'bot'],label_method: lambda { |item| safe_join([t("simple_form.labels.defaults.#{item}"), content_tag(:span, I18n.t("simple_form.hints.defaults.#{item}"), class: 'hint')]) }, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', wrapper: :with_floating_label
.fields-group
= f.input :group_allow_private_message, as: :boolean, wrapper: :with_label, kmyblue: true, hint: t('simple_form.hints.defaults.group_allow_private_message')
.actions .actions
= f.button :button, t('generic.save_changes'), type: :submit = f.button :button, t('generic.save_changes'), type: :submit

View file

@ -91,7 +91,6 @@ if ENV['S3_ENABLED'] == 'true'
# Some S3-compatible providers might not actually be compatible with some APIs # Some S3-compatible providers might not actually be compatible with some APIs
# used by kt-paperclip, see https://github.com/mastodon/mastodon/issues/16822 # used by kt-paperclip, see https://github.com/mastodon/mastodon/issues/16822
# and https://github.com/mastodon/mastodon/issues/26394 # and https://github.com/mastodon/mastodon/issues/26394
if ENV['S3_FORCE_SINGLE_REQUEST'] == 'true' || ENV['S3_DISABLE_CHECKSUM_MODE'] == 'true'
module Paperclip module Paperclip
module Storage module Storage
module S3Extensions module S3Extensions
@ -100,7 +99,7 @@ if ENV['S3_ENABLED'] == 'true'
options = {} options = {}
options[:mode] = 'single_request' if ENV['S3_FORCE_SINGLE_REQUEST'] == 'true' options[:mode] = 'single_request' if ENV['S3_FORCE_SINGLE_REQUEST'] == 'true'
options[:checksum_mode] = 'DISABLED' if ENV['S3_DISABLE_CHECKSUM_MODE'] == 'true' options[:checksum_mode] = 'DISABLED' unless ENV['S3_ENABLE_CHECKSUM_MODE'] == 'true'
s3_object(style).download_file(local_dest_path, options) s3_object(style).download_file(local_dest_path, options)
rescue Aws::Errors::ServiceError => e rescue Aws::Errors::ServiceError => e
@ -112,7 +111,6 @@ if ENV['S3_ENABLED'] == 'true'
end end
Paperclip::Storage::S3.prepend(Paperclip::Storage::S3Extensions) Paperclip::Storage::S3.prepend(Paperclip::Storage::S3Extensions)
end
elsif ENV['SWIFT_ENABLED'] == 'true' elsif ENV['SWIFT_ENABLED'] == 'true'
require 'fog/openstack' require 'fog/openstack'

View file

@ -314,7 +314,7 @@ be:
unpublish: Зняць з публікацыі unpublish: Зняць з публікацыі
unpublished_msg: Аб'ява паспяхова схована! unpublished_msg: Аб'ява паспяхова схована!
updated_msg: Аб'ява паспяхова адноўлена! updated_msg: Аб'ява паспяхова адноўлена!
critical_update_pending: Чакаецца крытычнае абнаўленне critical_update_pending: Чакаецца абнаўленне
custom_emojis: custom_emojis:
assign_category: Прызначыць катэгорыю assign_category: Прызначыць катэгорыю
by_domain: Дамен by_domain: Дамен
@ -800,13 +800,16 @@ be:
open: Любому магчыма зарэгістравацца open: Любому магчыма зарэгістравацца
security: security:
authorized_fetch: Патрабаваць аўтэнтыфікацыю ад федэратыўных сервераў authorized_fetch: Патрабаваць аўтэнтыфікацыю ад федэратыўных сервераў
authorized_fetch_hint: Патрабаванне аўтэнтыфікацыі ад федэратыўных сервераў дазваляе больш строга выконваць блакіроўкі як на ўзроўні карыстача, так і на ўзроўні сервера. Аднак пры гэтым зніжаецца прадукцыйнасць, памяншаецца ахоп вашых адказаў на допісы і могуць узнікнуць праблемы сумяшчальнасці з некаторымі федэратыўнымі сэрвісамі. Акрамя таго, гэта не перашкодзіць атрымліваць вашыя публічныя допісы і ўліковыя запісы.
authorized_fetch_overridden_hint: Вы не можаце змяніць гэты параметр, паколькі ён перавызначаны зменнай асяроддзя. authorized_fetch_overridden_hint: Вы не можаце змяніць гэты параметр, паколькі ён перавызначаны зменнай асяроддзя.
federation_authentication: Патрабаванне аўтэнтыфікацыі ад федэратыўных сэрвісаў
title: Налады сервера title: Налады сервера
site_uploads: site_uploads:
delete: Выдаліць запампаваны файл delete: Выдаліць запампаваны файл
destroyed_msg: Загрузка сайту паспяхова выдалена! destroyed_msg: Загрузка сайту паспяхова выдалена!
software_updates: software_updates:
critical_update: Крытычна - зрабіце абнаўленне як мага хутчэй critical_update: Крытычна - зрабіце абнаўленне як мага хутчэй
description: Рэкамендуецца падтрымліваць усталёўку Mastodon у актуальным стане, каб карыстацца апошнімі выпраўленнямі і магчымасцямі. Акрамя таго, часам вельмі важна своечасова абнаўляць Mastodon, каб пазбегнуць праблем з бяспекай. Па гэтых прычынах Mastodon правярае наяўнасць абнаўленняў кожныя 30 хвілін і паведамляе вам пра гэта ў адпаведнасці з вашымі наладамі апавяшчэнняў па электроннай пошце.
documentation_link: Даведацца больш documentation_link: Даведацца больш
release_notes: Журнал змен release_notes: Журнал змен
title: Даступныя абнаўленні title: Даступныя абнаўленні
@ -814,6 +817,7 @@ be:
types: types:
major: Буйны рэліз major: Буйны рэліз
minor: Малы рэліз minor: Малы рэліз
patch: Патч-рэліз — выпраўленні памылак і простыя ва ўжыванні змены
version: Версія version: Версія
statuses: statuses:
account: Аўтар account: Аўтар
@ -884,6 +888,7 @@ be:
message_html: Даступна крытычнае абнаўленне Mastodon, калі ласка, зрабіце абнаўленне як мага хутчэй. message_html: Даступна крытычнае абнаўленне Mastodon, калі ласка, зрабіце абнаўленне як мага хутчэй.
software_version_patch_check: software_version_patch_check:
action: Прагледзець даступныя абнаўленні action: Прагледзець даступныя абнаўленні
message_html: Даступна абнаўленне Mastodon з выпраўленнем памылак.
upload_check_privacy_error: upload_check_privacy_error:
action: Для падрабязнасцей націсніце тут action: Для падрабязнасцей націсніце тут
message_html: "<strong>Ваш сервер не наладжаны. Прыватнасць карыстальнікаў пад пагрозай.</strong>" message_html: "<strong>Ваш сервер не наладжаны. Прыватнасць карыстальнікаў пад пагрозай.</strong>"
@ -1006,6 +1011,7 @@ be:
next_steps: Вы можаце ўхваліць апеляцыю каб адмяніць рашэнне мадэратараў ці ігнараваць яе. next_steps: Вы можаце ўхваліць апеляцыю каб адмяніць рашэнне мадэратараў ці ігнараваць яе.
subject: "%{username} абскарджвае рашэнне мадэратараў на %{instance}" subject: "%{username} абскарджвае рашэнне мадэратараў на %{instance}"
new_critical_software_updates: new_critical_software_updates:
body: Выпушчаны новыя крытычныя версіі Mastodon, неабходна абнавіцца як мага хутчэй!
subject: Даступны крытычныя абнаўленні Mastodon для %{instance}! subject: Даступны крытычныя абнаўленні Mastodon для %{instance}!
new_pending_account: new_pending_account:
body: Падрабязнасці новага ўліковага запісу прыведзены ніжэй. Вы можаце зацвердзіць або адхіліць гэтую заяўку. body: Падрабязнасці новага ўліковага запісу прыведзены ніжэй. Вы можаце зацвердзіць або адхіліць гэтую заяўку.

View file

@ -481,7 +481,7 @@ de:
back_to_limited: Stummgeschaltet back_to_limited: Stummgeschaltet
back_to_warning: Warnung back_to_warning: Warnung
by_domain: Domain by_domain: Domain
confirm_purge: Möchtest du die Daten von dieser Domain wirklich dauerhaft löschen? confirm_purge: Möchtest du die Daten von dieser Domain wirklich für immer löschen?
content_policies: content_policies:
comment: Interne Notiz comment: Interne Notiz
description_html: Du kannst Inhaltsrichtlinien definieren, die auf alle Konten dieser Domain und einer ihrer Subdomains angewendet werden. description_html: Du kannst Inhaltsrichtlinien definieren, die auf alle Konten dieser Domain und einer ihrer Subdomains angewendet werden.

View file

@ -745,12 +745,16 @@ en:
manage_federation_description: Allows users to block or allow federation with other domains, and control deliverability manage_federation_description: Allows users to block or allow federation with other domains, and control deliverability
manage_invites: Manage Invites manage_invites: Manage Invites
manage_invites_description: Allows users to browse and deactivate invite links manage_invites_description: Allows users to browse and deactivate invite links
manage_ng_words: Manage NG words
manage_ng_words_description: Allows users to manage NG words. We will be very careful in handling this as it is a deligate part of the submission
manage_reports: Manage Reports manage_reports: Manage Reports
manage_reports_description: Allows users to review reports and perform moderation actions against them manage_reports_description: Allows users to review reports and perform moderation actions against them
manage_roles: Manage Roles manage_roles: Manage Roles
manage_roles_description: Allows users to manage and assign roles below theirs manage_roles_description: Allows users to manage and assign roles below theirs
manage_rules: Manage Rules manage_rules: Manage Rules
manage_rules_description: Allows users to change server rules manage_rules_description: Allows users to change server rules
manage_sensitive_words: Manage Sentive Words
manage_sensitive_words_description: Allows users to manage sensitive words. Note that regular expressions are available
manage_settings: Manage Settings manage_settings: Manage Settings
manage_settings_description: Allows users to change site settings manage_settings_description: Allows users to change site settings
manage_taxonomies: Manage Taxonomies manage_taxonomies: Manage Taxonomies

View file

@ -954,11 +954,11 @@ gd:
listable: Gabhaidh a mholadh listable: Gabhaidh a mholadh
no_tag_selected: Cha deach taga sam bith atharrachadh o nach deach gin dhiubh a thaghadh no_tag_selected: Cha deach taga sam bith atharrachadh o nach deach gin dhiubh a thaghadh
not_listable: Cha dèid a mholadh not_listable: Cha dèid a mholadh
not_trendable: Cha nochd e am measg nan treandaichean not_trendable: Na nochd sna treandaichean
not_usable: Cha ghabh a chleachdadh not_usable: Cha ghabh a chleachdadh
peaked_on_and_decaying: Air a bhàrr %{date}, a crìonadh an-dràsta peaked_on_and_decaying: Air a bhàrr %{date}, a crìonadh an-dràsta
title: Tagaichean hais a treandadh title: Tagaichean hais a treandadh
trendable: Nochd am measg nan treandaichean trendable: Nochd sna treandaichean
trending_rank: 'A treandadh #%{rank}' trending_rank: 'A treandadh #%{rank}'
usable: Gabhaidh a chleachdadh usable: Gabhaidh a chleachdadh
usage_comparison: Chaidh a chleachdadh %{today} tura(i)s an-diugh an coimeas ri %{yesterday} an-dè usage_comparison: Chaidh a chleachdadh %{today} tura(i)s an-diugh an coimeas ri %{yesterday} an-dè
@ -1683,7 +1683,7 @@ gd:
preferences: Roghainnean preferences: Roghainnean
profile: Pròifil phoblach profile: Pròifil phoblach
relationships: Dàimhean leantainn relationships: Dàimhean leantainn
statuses_cleanup: Sguabadh às fèin-obrachail phostaichean statuses_cleanup: Sguabadh às phostaichean
strikes: Rabhaidhean na maorsainneachd strikes: Rabhaidhean na maorsainneachd
two_factor_authentication: Dearbhadh dà-cheumnach two_factor_authentication: Dearbhadh dà-cheumnach
webauthn_authentication: Iuchraichean tèarainteachd webauthn_authentication: Iuchraichean tèarainteachd

View file

@ -741,12 +741,16 @@ ja:
manage_federation_description: ユーザーが他のドメインとの連合をブロックまたは許可したり、配信を制御したりできます。 manage_federation_description: ユーザーが他のドメインとの連合をブロックまたは許可したり、配信を制御したりできます。
manage_invites: 招待を管理 manage_invites: 招待を管理
manage_invites_description: 招待リンクの閲覧・解除を可能にする。 manage_invites_description: 招待リンクの閲覧・解除を可能にする。
manage_ng_words: NGワードを管理
manage_ng_words_description: NGワードの管理を可能にします。投稿の受け入れ可否に関わるデリゲートな部分のため、扱いは慎重にします
manage_reports: レポートの管理 manage_reports: レポートの管理
manage_reports_description: ユーザーがレポートを確認したり、モデレーションアクションを実行したりできます。 manage_reports_description: ユーザーがレポートを確認したり、モデレーションアクションを実行したりできます。
manage_roles: ロールの管理 manage_roles: ロールの管理
manage_roles_description: ユーザーが自分より下の役割を管理し、割り当てることができます。 manage_roles_description: ユーザーが自分より下の役割を管理し、割り当てることができます。
manage_rules: ルールの管理 manage_rules: ルールの管理
manage_rules_description: ユーザーがサーバールールを変更できるようにします manage_rules_description: ユーザーがサーバールールを変更できるようにします
manage_sensitive_words: センシティブワードを管理
manage_sensitive_words_description: センシティブワードの管理を可能にします。正規表現の利用が可能であるため、注意が必要です
manage_settings: 設定の管理 manage_settings: 設定の管理
manage_settings_description: ユーザーがサイト設定を変更できるようにします manage_settings_description: ユーザーがサイト設定を変更できるようにします
manage_taxonomies: 分類の管理 manage_taxonomies: 分類の管理

View file

@ -305,7 +305,7 @@ ko:
unpublish: 게시 취소 unpublish: 게시 취소
unpublished_msg: 공지가 성공적으로 발행 취소되었습니다! unpublished_msg: 공지가 성공적으로 발행 취소되었습니다!
updated_msg: 공지가 성공적으로 업데이트되었습니다! updated_msg: 공지가 성공적으로 업데이트되었습니다!
critical_update_pending: 긴급 업데이트 보류 중 critical_update_pending: 긴급 업데이트 보류 중
custom_emojis: custom_emojis:
assign_category: 분류 지정 assign_category: 분류 지정
by_domain: 도메인 by_domain: 도메인
@ -843,7 +843,7 @@ ko:
message_html: "%{value} 큐에 대한 사이드킥 프로세스가 발견되지 않았습니다. 사이드킥 설정을 검토해주세요" message_html: "%{value} 큐에 대한 사이드킥 프로세스가 발견되지 않았습니다. 사이드킥 설정을 검토해주세요"
software_version_critical_check: software_version_critical_check:
action: 사용 가능한 업데이트 보기 action: 사용 가능한 업데이트 보기
message_html: 긴급한 마스토돈 업데이트가 사용 가능합니다. 되도록 빨리 업데이트 해주세요. message_html: 긴급 마스토돈 업데이트가 있으니, 가능한 서둘러 업데이트 해주세요.
software_version_patch_check: software_version_patch_check:
action: 사용 가능한 업데이트 보기 action: 사용 가능한 업데이트 보기
message_html: 마스토돈 버그픽스 업데이트가 있습니다. message_html: 마스토돈 버그픽스 업데이트가 있습니다.
@ -957,8 +957,8 @@ ko:
next_steps: 중재 결정사항을 되돌리기 위해서 상소를 승인하거나, 무시할 수 있습니다. next_steps: 중재 결정사항을 되돌리기 위해서 상소를 승인하거나, 무시할 수 있습니다.
subject: "%{username} 님이 %{instance}에서 발생한 중재 결정에 대해 소명을 제출했습니다" subject: "%{username} 님이 %{instance}에서 발생한 중재 결정에 대해 소명을 제출했습니다"
new_critical_software_updates: new_critical_software_updates:
body: 마스토돈의 긴급한 업데이트가 릴리스되었습니다. 되도록 빨리 업데이트 하시길 바랍니다! body: 마스토돈의 긴급 업데이트가 릴리스 되었으니, 가능한 서둘러 업데이트를 바랍니다!
subject: "%{instance}에 대해 긴급 업데이트가 있습니다!" subject: "%{instance}에 대해 긴급 업데이트가 있습니다!"
new_pending_account: new_pending_account:
body: 아래에 새 계정에 대한 상세정보가 있습니다. 이 가입을 승인하거나 거부할 수 있습니다. body: 아래에 새 계정에 대한 상세정보가 있습니다. 이 가입을 승인하거나 거부할 수 있습니다.
subject: '%{instance}의 새 계정(%{username})에 대한 심사가 대기중입니다' subject: '%{instance}의 새 계정(%{username})에 대한 심사가 대기중입니다'
@ -1498,7 +1498,7 @@ ko:
privacy: 개인정보 privacy: 개인정보
privacy_hint_html: 다른 이들을 위해 노출할 수 있는 정보의 양을 조절합니다. 누군가는 다른 이들의 팔로우를 둘러보고 어떤 앱에서 게시물을 올렸는지 살피면서 흥미로운 프로필과 멋진 앱을 발견할 수 있지만, 누군가는 이를 숨기고 싶을 수도 있겠죠. privacy_hint_html: 다른 이들을 위해 노출할 수 있는 정보의 양을 조절합니다. 누군가는 다른 이들의 팔로우를 둘러보고 어떤 앱에서 게시물을 올렸는지 살피면서 흥미로운 프로필과 멋진 앱을 발견할 수 있지만, 누군가는 이를 숨기고 싶을 수도 있겠죠.
reach: 도달 reach: 도달
reach_hint_html: 새로운 사람들이 나를 발견하고 팔로우하도록 허용할지 여부를 제어합니다. 발견하기 화면에 게시물이 표시되기를 바라나요? 다른 사람들의 팔로우 추천에 표시되기를 바라나요? 모든 새 팔로워를 자동으로 수락하거나 각 팔로워를 세세하게 제어할까요? reach_hint_html: 새로운 사람들이 나를 발견하고 팔로우하도록 허용할지 여부를 제어합니다. 둘러보기 화면에 게시물이 표시되기를 바라나요? 다른 사람들의 팔로우 추천에 표시되기를 바라나요? 모든 새 팔로워를 자동으로 수락하거나 각 팔로워를 세세하게 제어할까요?
search: 검색 search: 검색
search_hint_html: 내가 어떻게 발견될지를 제어합니다. 내가 공개적으로 게시한 것들로 인해 사람들이 날 발견하길 원하나요? 마스토돈 바깥의 사람들이 웹에서 검색을 통해 내 프로필을 발견하길 원하나요? 공개적인 정보에 대해서 모든 검색엔진의 검색결과에서 제외하는 것은 보장할 수 없다는 점에 주의해주세요. search_hint_html: 내가 어떻게 발견될지를 제어합니다. 내가 공개적으로 게시한 것들로 인해 사람들이 날 발견하길 원하나요? 마스토돈 바깥의 사람들이 웹에서 검색을 통해 내 프로필을 발견하길 원하나요? 공개적인 정보에 대해서 모든 검색엔진의 검색결과에서 제외하는 것은 보장할 수 없다는 점에 주의해주세요.
title: 개인정보와 도달 title: 개인정보와 도달

View file

@ -1737,7 +1737,7 @@ nl:
default: "%d %B %Y om %H:%M" default: "%d %B %Y om %H:%M"
month: "%b %Y" month: "%b %Y"
time: "%H:%M" time: "%H:%M"
with_time_zone: "%d %b, %Y, %H:%M %Z" with_time_zone: "%d %b %Y, %H:%M %Z"
translation: translation:
errors: errors:
quota_exceeded: Het gebruikersquotum voor de vertaaldienst is overschreden. quota_exceeded: Het gebruikersquotum voor de vertaaldienst is overschreden.

View file

@ -295,6 +295,7 @@ be:
critical: Апавяшчаць толькі аб крытычных абнаўленнях critical: Апавяшчаць толькі аб крытычных абнаўленнях
label: Даступная новая версія Mastodon label: Даступная новая версія Mastodon
none: Не апавяшчаць аб абнаўленнях (не рэкамендуецца) none: Не апавяшчаць аб абнаўленнях (не рэкамендуецца)
patch: Апавяшчаць аб абнаўленнях з выпраўленнем памылак
trending_tag: Новы трэнд патрабуе разгляду trending_tag: Новы трэнд патрабуе разгляду
rule: rule:
text: Правіла text: Правіла

View file

@ -292,7 +292,7 @@ ko:
report: 새 신고가 접수되었을 때 report: 새 신고가 접수되었을 때
software_updates: software_updates:
all: 모든 업데이트에 대해 알림 all: 모든 업데이트에 대해 알림
critical: 긴급 업데이트에 대해서만 알림 critical: 긴급 업데이트에 대해서만 알림
label: 새 마스토돈 버전이 사용 가능합니다 label: 새 마스토돈 버전이 사용 가능합니다
none: 업데이트에 대해 알리지 않기 (비추천) none: 업데이트에 대해 알리지 않기 (비추천)
patch: 버그픽스 업데이트에 대해 알림 patch: 버그픽스 업데이트에 대해 알림

View file

@ -47,7 +47,6 @@ SimpleNavigation::Configuration.run do |navigation|
n.item :moderation, safe_join([fa_icon('gavel fw'), t('moderation.title')]), nil, if: -> { current_user.can?(:manage_reports, :view_audit_log, :manage_users, :manage_invites, :manage_taxonomies, :manage_federation, :manage_blocks, :manage_ng_words, :manage_sensitive_words) } do |s| n.item :moderation, safe_join([fa_icon('gavel fw'), t('moderation.title')]), nil, if: -> { current_user.can?(:manage_reports, :view_audit_log, :manage_users, :manage_invites, :manage_taxonomies, :manage_federation, :manage_blocks, :manage_ng_words, :manage_sensitive_words) } do |s|
s.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_path, highlights_on: %r{/admin/reports}, if: -> { current_user.can?(:manage_reports) } s.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_path, highlights_on: %r{/admin/reports}, if: -> { current_user.can?(:manage_reports) }
s.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_path(origin: 'local'), highlights_on: %r{/admin/accounts|/admin/pending_accounts|/admin/disputes|/admin/users}, if: -> { current_user.can?(:manage_users) } s.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_path(origin: 'local'), highlights_on: %r{/admin/accounts|/admin/pending_accounts|/admin/disputes|/admin/users}, if: -> { current_user.can?(:manage_users) }
s.item :media_attachments, safe_join([fa_icon('picture-o fw'), t('admin.media_attachments.title')]), admin_media_attachments_path, highlights_on: %r{/admin/media_attachments}, if: -> { current_user.can?(:manage_users) }
s.item :ng_words, safe_join([fa_icon('list fw'), t('admin.ng_words.title')]), admin_ng_words_path, highlights_on: %r{/admin/ng_words}, if: -> { current_user.can?(:manage_ng_words) } s.item :ng_words, safe_join([fa_icon('list fw'), t('admin.ng_words.title')]), admin_ng_words_path, highlights_on: %r{/admin/ng_words}, if: -> { current_user.can?(:manage_ng_words) }
s.item :sensitive_words, safe_join([fa_icon('list fw'), t('admin.sensitive_words.title')]), admin_sensitive_words_path, highlights_on: %r{/admin/sensitive_words}, if: -> { current_user.can?(:manage_sensitive_words) } s.item :sensitive_words, safe_join([fa_icon('list fw'), t('admin.sensitive_words.title')]), admin_sensitive_words_path, highlights_on: %r{/admin/sensitive_words}, if: -> { current_user.can?(:manage_sensitive_words) }
s.item :invites, safe_join([fa_icon('user-plus fw'), t('admin.invites.title')]), admin_invites_path, if: -> { current_user.can?(:manage_invites) } s.item :invites, safe_join([fa_icon('user-plus fw'), t('admin.invites.title')]), admin_invites_path, if: -> { current_user.can?(:manage_invites) }

View file

@ -32,7 +32,6 @@ namespace :admin do
resources :action_logs, only: [:index] resources :action_logs, only: [:index]
resources :warning_presets, except: [:new, :show] resources :warning_presets, except: [:new, :show]
resources :media_attachments, only: [:index]
resource :ng_words, only: [:show, :create] resource :ng_words, only: [:show, :create]
resource :sensitive_words, only: [:show, :create] resource :sensitive_words, only: [:show, :create]

View file

@ -11,7 +11,6 @@ namespace :api, format: false do
resources :reblogged_by, controller: :reblogged_by_accounts, only: :index resources :reblogged_by, controller: :reblogged_by_accounts, only: :index
resources :favourited_by, controller: :favourited_by_accounts, only: :index resources :favourited_by, controller: :favourited_by_accounts, only: :index
resources :emoji_reactioned_by, controller: :emoji_reactioned_by_accounts, only: :index resources :emoji_reactioned_by, controller: :emoji_reactioned_by_accounts, only: :index
resources :emoji_reactioned_by_slim, controller: :emoji_reactioned_by_accounts_slim, only: :index
resources :referred_by, controller: :referred_by_statuses, only: :index resources :referred_by, controller: :referred_by_statuses, only: :index
resources :bookmark_categories, only: :index resources :bookmark_categories, only: :index
resource :reblog, only: :create resource :reblog, only: :create

View file

@ -75,7 +75,7 @@ class MoveUserSettings < ActiveRecord::Migration[6.1]
MAPPING.each do |legacy_key, new_key| MAPPING.each do |legacy_key, new_key|
value = previous_settings[legacy_key]&.value value = previous_settings[legacy_key]&.value
next if value.blank? next if value.nil?
if value.is_a?(Hash) if value.is_a?(Hash)
value.each do |nested_key, nested_value| value.each do |nested_key, nested_value|

View file

@ -56,7 +56,7 @@ services:
web: web:
build: . build: .
image: ghcr.io/mastodon/mastodon:v4.1.6 image: ghcr.io/mastodon/mastodon:v4.2.0
restart: always restart: always
env_file: .env.production env_file: .env.production
command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"
@ -77,7 +77,7 @@ services:
streaming: streaming:
build: . build: .
image: ghcr.io/mastodon/mastodon:v4.1.6 image: ghcr.io/mastodon/mastodon:v4.2.0
restart: always restart: always
env_file: .env.production env_file: .env.production
command: node ./streaming command: node ./streaming
@ -95,7 +95,7 @@ services:
sidekiq: sidekiq:
build: . build: .
image: ghcr.io/mastodon/mastodon:v4.1.6 image: ghcr.io/mastodon/mastodon:v4.2.0
restart: always restart: always
env_file: .env.production env_file: .env.production
command: bundle exec sidekiq command: bundle exec sidekiq

View file

@ -29,7 +29,7 @@ module Mastodon
end end
def default_prerelease def default_prerelease
'rc2' ''
end end
def prerelease def prerelease

View file

@ -59,6 +59,11 @@ namespace :tests do
exit(1) exit(1)
end end
unless User.find(1).settings['web.trends'] == false
puts 'User settings not kept as expected'
exit(1)
end
unless Account.find_remote('bob', 'ActivityPub.com').domain == 'activitypub.com' unless Account.find_remote('bob', 'ActivityPub.com').domain == 'activitypub.com'
puts 'Account domains not properly normalized' puts 'Account domains not properly normalized'
exit(1) exit(1)
@ -131,7 +136,8 @@ namespace :tests do
INSERT INTO "settings" INSERT INTO "settings"
(id, thing_type, thing_id, var, value, created_at, updated_at) (id, thing_type, thing_id, var, value, created_at, updated_at)
VALUES VALUES
(3, 'User', 1, 'notification_emails', E'--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nfollow: false\nreblog: true\nfavourite: true\nmention: false\nfollow_request: true\ndigest: true\nreport: true\npending_account: false\ntrending_tag: true\nappeal: true\n', now(), now()); (3, 'User', 1, 'notification_emails', E'--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nfollow: false\nreblog: true\nfavourite: true\nmention: false\nfollow_request: true\ndigest: true\nreport: true\npending_account: false\ntrending_tag: true\nappeal: true\n', now(), now()),
(4, 'User', 1, 'trends', E'--- false\n', now(), now());
INSERT INTO "accounts" INSERT INTO "accounts"
(id, username, domain, private_key, public_key, created_at, updated_at) (id, username, domain, private_key, public_key, created_at, updated_at)
@ -146,7 +152,7 @@ namespace :tests do
INSERT INTO "settings" INSERT INTO "settings"
(id, thing_type, thing_id, var, value, created_at, updated_at) (id, thing_type, thing_id, var, value, created_at, updated_at)
VALUES VALUES
(4, 'User', 4, 'default_language', E'--- kmr\n', now(), now()); (5, 'User', 4, 'default_language', E'--- kmr\n', now(), now());
SQL SQL
end end

View file

@ -27,6 +27,7 @@ RSpec.describe FeedManager do
let(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com') } let(:bob) { Fabricate(:account, username: 'bob', domain: 'example.com') }
let(:jeff) { Fabricate(:account, username: 'jeff') } let(:jeff) { Fabricate(:account, username: 'jeff') }
let(:list) { Fabricate(:list, account: alice) } let(:list) { Fabricate(:list, account: alice) }
let(:antenna) { Fabricate(:antenna, account: alice, insert_feeds: true, list: list) }
context 'with home feed' do context 'with home feed' do
it 'returns false for followee\'s status' do it 'returns false for followee\'s status' do
@ -190,6 +191,42 @@ RSpec.describe FeedManager do
reblog = Fabricate(:status, reblog: status, account: jeff) reblog = Fabricate(:status, reblog: status, account: jeff)
expect(described_class.instance.filter?(:home, reblog, alice)).to be false expect(described_class.instance.filter?(:home, reblog, alice)).to be false
end end
it 'returns true for post from followee on exclusive antenna' do
list.exclusive = true
alice.follow!(bob)
antenna.accounts << bob
allow(Antenna).to receive(:where).and_return(antenna)
status = Fabricate(:status, text: 'I post a lot', account: bob)
expect(described_class.instance.filter?(:home, status, alice)).to be true
end
it 'returns true for reblog from followee on exclusive antenna' do
list.exclusive = true
alice.follow!(jeff)
antenna.accounts << jeff
allow(Antenna).to receive(:where).and_return(antenna)
status = Fabricate(:status, text: 'I post a lot', account: bob)
reblog = Fabricate(:status, reblog: status, account: jeff)
expect(described_class.instance.filter?(:home, reblog, alice)).to be true
end
it 'returns false for post from followee on non-exclusive antenna' do
list.exclusive = false
alice.follow!(bob)
antenna.accounts << bob
status = Fabricate(:status, text: 'I post a lot', account: bob)
expect(described_class.instance.filter?(:home, status, alice)).to be false
end
it 'returns false for reblog from followee on non-exclusive antenna' do
list.exclusive = false
alice.follow!(jeff)
antenna.accounts << jeff
status = Fabricate(:status, text: 'I post a lot', account: bob)
reblog = Fabricate(:status, reblog: status, account: jeff)
expect(described_class.instance.filter?(:home, reblog, alice)).to be false
end
end end
context 'with mentions feed' do context 'with mentions feed' do

View file

@ -0,0 +1,64 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'credentials API' do
let(:user) { Fabricate(:user, account_attributes: { discoverable: false, locked: true, indexable: false }) }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
let(:scopes) { 'read:accounts write:accounts' }
let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
describe 'GET /api/v1/accounts/verify_credentials' do
subject do
get '/api/v1/accounts/verify_credentials', headers: headers
end
it_behaves_like 'forbidden for wrong scope', 'write write:accounts'
it 'returns http success' do
subject
expect(response).to have_http_status(200)
end
it 'returns the expected content' do
subject
expect(body_as_json).to include({
source: hash_including({
discoverable: false,
indexable: false,
}),
locked: true,
})
end
end
describe 'POST /api/v1/accounts/update_credentials' do
subject do
patch '/api/v1/accounts/update_credentials', headers: headers, params: params
end
let(:params) { { discoverable: true, locked: false, indexable: true } }
it_behaves_like 'forbidden for wrong scope', 'read read:accounts'
it 'returns http success' do
subject
expect(response).to have_http_status(200)
end
it 'returns JSON with updated attributes' do
subject
expect(body_as_json).to include({
source: hash_including({
discoverable: true,
indexable: true,
}),
locked: false,
})
end
end
end

View file

@ -3341,13 +3341,13 @@ atob@^2.1.2:
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
autoprefixer@^10.4.14: autoprefixer@^10.4.14:
version "10.4.15" version "10.4.16"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8"
integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==
dependencies: dependencies:
browserslist "^4.21.10" browserslist "^4.21.10"
caniuse-lite "^1.0.30001520" caniuse-lite "^1.0.30001538"
fraction.js "^4.2.0" fraction.js "^4.3.6"
normalize-range "^0.1.2" normalize-range "^0.1.2"
picocolors "^1.0.0" picocolors "^1.0.0"
postcss-value-parser "^4.2.0" postcss-value-parser "^4.2.0"
@ -3950,15 +3950,10 @@ caniuse-lite@^1.0.30001502:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b"
integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==
caniuse-lite@^1.0.30001517: caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001538:
version "1.0.30001535" version "1.0.30001538"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001535.tgz#908a5b7ef11172f51f0b88f3d850aef1c6a3cf7b" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz#9dbc6b9af1ff06b5eb12350c2012b3af56744f3f"
integrity sha512-48jLyUkiWFfhm/afF7cQPqPjaUmSraEhK4j+FCTJpgnGGEZHqyLe3hmWH7lIooZdSzXL0ReMvHz0vKDoTBsrwg== integrity sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==
caniuse-lite@^1.0.30001520:
version "1.0.30001520"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz#62e2b7a1c7b35269594cf296a80bdf8cb9565006"
integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==
chalk@5.2.0: chalk@5.2.0:
version "5.2.0" version "5.2.0"
@ -5105,9 +5100,9 @@ electron-to-chromium@^1.4.428:
integrity sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA== integrity sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA==
electron-to-chromium@^1.4.477: electron-to-chromium@^1.4.477:
version "1.4.523" version "1.4.526"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz#f82f99243c827df05c26776d49712cb284972df6" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.526.tgz#1bcda5f2b8238e497c20fcdb41af5da907a770e2"
integrity sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg== integrity sha512-tjjTMjmZAx1g6COrintLTa2/jcafYKxKoiEkdQOrVdbLaHh2wCt2nsAF8ZHweezkrP+dl/VG9T5nabcYoo0U5Q==
elliptic@^6.5.3: elliptic@^6.5.3:
version "6.5.4" version "6.5.4"
@ -6070,10 +6065,10 @@ forwarded@0.2.0:
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
fraction.js@^4.2.0: fraction.js@^4.3.6:
version "4.2.0" version "4.3.6"
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d"
integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==
fragment-cache@^0.2.1: fragment-cache@^0.2.1:
version "0.2.1" version "0.2.1"
@ -6251,9 +6246,9 @@ glob-parent@^6.0.2:
is-glob "^4.0.3" is-glob "^4.0.3"
glob@^10.2.5, glob@^10.2.6: glob@^10.2.5, glob@^10.2.6:
version "10.3.4" version "10.3.5"
resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.4.tgz#c85c9c7ab98669102b6defda76d35c5b1ef9766f" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.5.tgz#4c0e46b5bccd78ac42b06a7eaaeb9ee34062968e"
integrity sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ== integrity sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==
dependencies: dependencies:
foreground-child "^3.1.0" foreground-child "^3.1.0"
jackspeak "^2.0.3" jackspeak "^2.0.3"
@ -7371,9 +7366,9 @@ iterator.prototype@^1.1.0:
reflect.getprototypeof "^1.0.3" reflect.getprototypeof "^1.0.3"
jackspeak@^2.0.3: jackspeak@^2.0.3:
version "2.3.1" version "2.3.3"
resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.1.tgz#ce2effa4c458e053640e61938865a5b5fae98456" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.3.tgz#95e4cbcc03b3eb357bf6bcce14a903fb3d1151e1"
integrity sha512-4iSY3Bh1Htv+kLhiiZunUhQ+OYXIn0ze3ulq8JeWrFKmhPAJSySV2+kdtRh2pGcCeF0s6oR8Oc+pYZynJj4t8A== integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==
dependencies: dependencies:
"@isaacs/cliui" "^8.0.2" "@isaacs/cliui" "^8.0.2"
optionalDependencies: optionalDependencies:
@ -11490,7 +11485,6 @@ stringz@^2.1.0:
char-regex "^1.0.2" char-regex "^1.0.2"
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
name strip-ansi-cjs
version "6.0.1" version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@ -12304,9 +12298,9 @@ upath@^1.1.1, upath@^1.2.0:
integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
update-browserslist-db@^1.0.11: update-browserslist-db@^1.0.11:
version "1.0.11" version "1.0.12"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.12.tgz#868ce670ac09b4a4d4c86b608701c0dee2dc41cd"
integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== integrity sha512-tE1smlR58jxbFMtrMpFNRmsrOXlpNXss965T1CrpwuZUzUAg/TBQc94SpyhDLSzrqrJS9xTRBthnZAGcE1oaxg==
dependencies: dependencies:
escalade "^3.1.1" escalade "^3.1.1"
picocolors "^1.0.0" picocolors "^1.0.0"