From 377527ea0314185dce259970e96a80859402c3f3 Mon Sep 17 00:00:00 2001 From: ilja Date: Thu, 26 Jan 2023 10:11:29 +0100 Subject: [PATCH 001/178] Changes to pgtune docs I experienced that it may be better to tell pgtune you have lower resoures than what you have when you have other services running. I added that now. I also moved the examples as part of the pgtune section. --- docs/docs/configuration/postgresql.md | 48 ++++++++++++++------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/docs/docs/configuration/postgresql.md b/docs/docs/configuration/postgresql.md index 32ea97fe3..3d5b78c0d 100644 --- a/docs/docs/configuration/postgresql.md +++ b/docs/docs/configuration/postgresql.md @@ -6,6 +6,31 @@ Akkoma performance is largely dependent on performance of the underlying databas [PgTune](https://pgtune.leopard.in.ua) can be used to get recommended settings. Be sure to set "Number of Connections" to 20, otherwise it might produce settings hurtful to database performance. It is also recommended to not use "Network Storage" option. +If your server runs other services, you may want to take that into account. E.g. if you have 4G ram, but 1G of it is already used for other services, it may be better to tell PGTune you only have 3G. In the end, PGTune only provides recomended settings, you can always try to finetune further. + +### Example configurations + +Here are some configuration suggestions for PostgreSQL 10+. + +#### 1GB RAM, 1 CPU +``` +shared_buffers = 256MB +effective_cache_size = 768MB +maintenance_work_mem = 64MB +work_mem = 13107kB +``` + +#### 2GB RAM, 2 CPU +``` +shared_buffers = 512MB +effective_cache_size = 1536MB +maintenance_work_mem = 128MB +work_mem = 26214kB +max_worker_processes = 2 +max_parallel_workers_per_gather = 1 +max_parallel_workers = 2 +``` + ## Disable generic query plans When PostgreSQL receives a query, it decides on a strategy for searching the requested data, this is called a query plan. The query planner has two modes: generic and custom. Generic makes a plan for all queries of the same shape, ignoring the parameters, which is then cached and reused. Custom, on the contrary, generates a unique query plan based on query parameters. @@ -23,26 +48,3 @@ config :pleroma, Pleroma.Repo, ``` A more detailed explaination of the issue can be found at . - -## Example configurations - -Here are some configuration suggestions for PostgreSQL 10+. - -### 1GB RAM, 1 CPU -``` -shared_buffers = 256MB -effective_cache_size = 768MB -maintenance_work_mem = 64MB -work_mem = 13107kB -``` - -### 2GB RAM, 2 CPU -``` -shared_buffers = 512MB -effective_cache_size = 1536MB -maintenance_work_mem = 128MB -work_mem = 26214kB -max_worker_processes = 2 -max_parallel_workers_per_gather = 1 -max_parallel_workers = 2 -``` From ce6f652a9a4409fb18b604b4617e22d4f9d7941e Mon Sep 17 00:00:00 2001 From: ilja Date: Thu, 26 Jan 2023 13:40:51 +0100 Subject: [PATCH 002/178] Add more info to the development index file Credit where credit is due; I inspired myself by looking at the yunohost docs * https://yunohost.org/en/dev * https://yunohost.org/en/packaging_apps_start I try to be inviting to new developers and guide them in their first steps into Akkoma development. I try to keep the page itself as short as possible and link to relevant places. That way people can quickly skim over parts that they don't need, while people who do need more can simply follow the links. --- docs/docs/development/index.md | 49 +++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/docs/docs/development/index.md b/docs/docs/development/index.md index 01a617596..8f2dd52d0 100644 --- a/docs/docs/development/index.md +++ b/docs/docs/development/index.md @@ -1 +1,48 @@ -This section contains notes and guidelines for developers. +# Contributing to Akkoma + +You wish to add a new feature in Akkoma, but don't know how to proceed? This guide takes you through the various steps of the development and contribution process. + +If you're looking for stuff to implement or fix, check the [bug-tracker](https://akkoma.dev/AkkomaGang/akkoma/issues) or [forum](https://meta.akkoma.dev/c/requests/5). + +Come say hi to us in the [#akkoma-dev chat room](./../#irc)! + +## Akkoma Clients + +Akkoma is the back-end. Clients have their own repositories and often separate projects. You can check what clients work with Akkoma [on the clients page](../clients/). If you maintain a working client not listed yet, feel free to make a PR [to these docs](./#docs)! + +For resources on APIs and such, check the sidebar of this page. + +## Docs + +The docs are written in Markdown, including certain extensions, and can be found [in the docs folder of the Akkoma repo](https://akkoma.dev/AkkomaGang/akkoma/src/branch/develop/docs/). The content itself is stored in the `docs` subdirectory. + +## Technology + +Akkoma is written in [Elixir](https://elixir-lang.org/) and uses [Postgresql](https://www.postgresql.org/) for database. We use [Git](https://git-scm.com/) for collaboration and tracking code changes. Furthermore it can typically run on [Unix and Unix-like OS'es](https://en.wikipedia.org/wiki/Unix-like). For development, you should use an OS which [can run Akkoma](../installation/debian_based_en/). + +It's good to have at least some basic understanding of at least Git and Elixir. If this is completely new for you, there's some [videos explaining Git](https://git-scm.com/doc) and Codeberg has a nice article explaining the typical [pull requests Git flow](https://docs.codeberg.org/collaborating/pull-requests-and-git-flow/). For Elixir, you can follow Elixir's own [Getting Started guide](https://elixir-lang.org/getting-started/introduction.html). + +## Setting up a development environment + +The best way to start is getting the software to run from source so you can start poking on it. Check out the [guides for setting up an Akkoma instance for development](setting_up_akkoma_dev/#setting-up-a-akkoma-development-environment). + +## General overview +### Modules + +Akkoma has several modules. There are modules for [uploading](https://akkoma.dev/AkkomaGang/akkoma/src/branch/develop/lib/pleroma/uploaders), [upload filters](https://akkoma.dev/AkkomaGang/akkoma/src/branch/develop/lib/pleroma/upload/filter), [translators](https://akkoma.dev/AkkomaGang/akkoma/src/branch/develop/lib/pleroma/akkoma/translators)... The most famous ones are without a doubt the [MRF policies](https://akkoma.dev/AkkomaGang/akkoma/src/branch/develop/lib/pleroma/web/activity_pub/mrf). Modules are often self contained and a good way to start with development because you don't have to think about much more than just the module itself. We even have an example on [writing your own MRF policy](/configuration/mrf/#writing-your-own-mrf-policy)! + +Another easy entry point is the [mix tasks](https://akkoma.dev/AkkomaGang/akkoma/src/branch/develop/lib/mix/tasks/pleroma). They too are often self contained and don't need you to go through much of the code. + +### Activity Streams/Activity Pub + +Akkoma uses Activity Streams for both federation, as well as internal representation. It may be interesting to at least go over the specifications of [Activity Pub](https://www.w3.org/TR/activitypub/), [Activity Streams 2.0](https://www.w3.org/TR/activitystreams-core/), and [Activity Streams Vocabulary](https://www.w3.org/TR/activitystreams-vocabulary/). Note that these are not enough to have a full grasp of how everything works, but should at least give you the basics to understand how messages are passed between and inside Akkoma instances. + +## Don't forget + +When you make changes, you're expected to create [a Pull Request](https://akkoma.dev/AkkomaGang/akkoma/pulls). You don't have to wait until you finish to create the PR, but please do prefix the title of the PR with "WIP: " for as long as you're still working on it. The sooner you create your PR, the sooner people know what you are working on and the sooner you can get feedback and, if needed, help. You can then simply keep working on it until you are finished. + +When doing changes, don't forget to add it to the relevant parts of the [CHANGELOG.md](https://akkoma.dev/AkkomaGang/akkoma/src/branch/develop/CHANGELOG.md). + +You're expected to write [tests](https://elixirschool.com/en/lessons/testing/basics). While code is generally stored in the `lib` directory, tests are stored in the `test` directory using a similar folder structure. Feel free to peak at other tests to see how they are done. Obviously tests are expected to pass and properly test the functionality you added. If you feel really confident, you could even try to [write a test first and then write the code needed to make it pass](https://en.wikipedia.org/wiki/Test-driven_development)! + +Code is formatted using the default formatter that comes with Elixir. You can format a file with e.g. `mix format /path/to/file.ex`. To check if everything is properly formatted, you can run `mix format --check-formatted`. From e74e1efe1c2e8677d525582272cd7a3d2c4689f0 Mon Sep 17 00:00:00 2001 From: ilja Date: Thu, 26 Jan 2023 09:09:02 +0100 Subject: [PATCH 003/178] Change docs README for new way of building docs Docs used to be a separate repo who cloned pleroma and pelroma-fe. Now the docs are just the BE docs and completely part of the Akkoma repo. I moved back to using venv because that's what I used and cleaner imo since it keeps everything nice in the repo. (Iirc virtualenv stored things in the Home folder or smthng) --- .gitignore | 1 + docs/README.md | 46 ++++++++++++++++++++-------------------------- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 95b236af6..8821d8ce1 100644 --- a/.gitignore +++ b/.gitignore @@ -73,6 +73,7 @@ pleroma.iml # Generated documentation docs/site +docs/venv # docker stuff docker-db diff --git a/docs/README.md b/docs/README.md index fcf043f56..a9a17a2ab 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,33 +2,27 @@ You don't need to build and test the docs as long as you make sure the syntax is correct. But in case you do want to build the docs, feel free to do so. -You'll need to install mkdocs for which you can check the [mkdocs installation guide](https://www.mkdocs.org/#installation). Generally it's best to install it using `pip`. You'll also need to install the correct dependencies. +```sh +# Make sure you're in the same directory as this README +# From the root of the Akkoma repo, you'll need to do +cd docs -### Example using a Debian based distro +# Optionally use a virtual environment +python3 -m venv venv +source venv/bin/activate -#### 1. Install pipenv and dependencies +# Install dependencies +pip install -r requirements.txt -```shell -pip install pipenv -pipenv sync +# Run an http server who rebuilds when files change +# Accessable on http://127.0.0.1:8000 +mkdocs serve + +# Build the docs +# The static html pages will have been created in the folder "site" +# You can serve them from a server by pointing your server software (nginx, apache...) to this location +mkdocs build + +# To get out of the virtual environment, you do +deacivate ``` - -#### 2. (Optional) Activate the virtual environment - -Since dependencies are installed in a virtual environment, you can't use them directly. To use them you should either prefix the command with `pipenv run`, or activate the virtual environment for current shell by executing `pipenv shell` once. - -#### 3. Build the docs using the script - -```shell -[pipenv run] make all -``` - -#### 4. Serve the files - -A folder `site` containing the static html pages will have been created. You can serve them from a server by pointing your server software (nginx, apache...) to this location. During development, you can run locally with - -```shell -[pipenv run] mkdocs serve -``` - -This handles setting up an http server and rebuilding when files change. You can then access the docs on From 676cc0d0d7d6297fe532ac7ed7a90f1abf76d5ad Mon Sep 17 00:00:00 2001 From: Seirdy Date: Thu, 26 Jan 2023 21:41:27 -0800 Subject: [PATCH 004/178] Make default outgoing-blocks setting off This should help mitigate negative impacts related to block-retaliation and block-circumvention when blocks become visible to the blocked party. Instances interested in broadcasting blocks can turn this on if they wish. This should have always been the default. See also: https://akkoma.dev/AkkomaGang/akkoma-fe/pulls/274 --- config/config.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.exs b/config/config.exs index 0611f7c26..5eaa8ce76 100644 --- a/config/config.exs +++ b/config/config.exs @@ -354,7 +354,7 @@ config :pleroma, :activitypub, unfollow_blocked: true, - outgoing_blocks: true, + outgoing_blocks: false, blockers_visible: true, follow_handshake_timeout: 500, note_replies_output_limit: 5, From 7e3ede02f7fe3767fc85dda6d597a3d3841e3248 Mon Sep 17 00:00:00 2001 From: ilja Date: Sun, 29 Jan 2023 08:18:10 +0100 Subject: [PATCH 005/178] Add info on fe to setup of dev env I added info about installing front ends from the development branch I also rearanged the list of exceptions (what's different than "normal" installation) so the order is closer to how you'd encounter things in the installation docs + small fixes --- .../docs/development/setting_up_akkoma_dev.md | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/docs/docs/development/setting_up_akkoma_dev.md b/docs/docs/development/setting_up_akkoma_dev.md index 7184be485..feded9904 100644 --- a/docs/docs/development/setting_up_akkoma_dev.md +++ b/docs/docs/development/setting_up_akkoma_dev.md @@ -5,22 +5,37 @@ Akkoma requires some adjustments from the defaults for running the instance loca ## Installing 1. Install Akkoma as explained in [the docs](../installation/debian_based_en.md), with some exceptions: - * You can use your own fork of the repository and add akkoma as a remote `git remote add akkoma 'https://akkoma.dev/AkkomaGang/akkoma.git'` - * You can skip systemd and nginx and all that stuff * No need to create a dedicated akkoma user, it's easier to just use your own user - * For the DB you can still choose a dedicated user, the mix tasks set it up for you so it's no extra work for you + * You can use your own fork of the repository and add akkoma as a remote `git remote add akkoma 'https://akkoma.dev/AkkomaGang/akkoma.git'` * For domain you can use `localhost` + * For the DB you can still choose a dedicated user. The mix tasks sets it up, so it's no extra work for you * instead of creating a `prod.secret.exs`, create `dev.secret.exs` * No need to prefix with `MIX_ENV=prod`. We're using dev and that's the default MIX_ENV + * You can skip nginx and systemd + * For front-end, you'll probably want to install and use the develop branch instead of the stable branch. There's no guarantee that the stable branch of the FE will always work on the develop branch of the BE. 2. Change the dev.secret.exs + * Change the FE settings to use the installed branch (see also [Frontend Management](/configuration/frontend_management/)) * Change the scheme in `config :pleroma, Pleroma.Web.Endpoint` to http (see examples below) * If you want to change other settings, you can do that too -3. You can now start the server `mix phx.server`. Once it's build and started, you can access the instance on `http://:` (e.g.http://localhost:4000 ) and should be able to do everything locally you normaly can. +3. You can now start the server with `mix phx.server`. Once it's build and started, you can access the instance on `http://:` (e.g.http://localhost:4000 ) and should be able to do everything locally you normally can. + +Example on how to install pleroma-fe and admin-fe using it's develop branch +```sh +mix pleroma.frontend install pleroma-fe --ref develop +mix pleroma.frontend install admin-fe --ref develop +``` + +Example config to use the pleroma-fe and admin-fe installed from the develop branch +```elixir +config :pleroma, :frontends, + primary: %{"name" => "pleroma-fe", "ref" => "develop"}, + admin: %{"name" => "admin-fe", "ref" => "develop"} +``` Example config to change the scheme to http. Change the port if you want to run on another port. ```elixir - config :pleroma, Pleroma.Web.Endpoint, - url: [host: "localhost", scheme: "http", port: 4000], +config :pleroma, Pleroma.Web.Endpoint, + url: [host: "localhost", scheme: "http", port: 4000], ``` Example config to disable captcha. This makes it a bit easier to create test-users. @@ -94,4 +109,4 @@ Update Akkoma as explained in [the docs](../administration/updating.md). Just ma ## Working on multiple branches -If you develop on a separate branch, it's possible you did migrations that aren't merged into another branch you're working on. If you have multiple things you're working on, it's probably best to set up multiple Akkoma instances each with their own database. If you finished with a branch and want to switch back to develop to start a new branch from there, you can drop the database and recreate the database (e.g. by using `config/setup_db.psql`). The commands to drop and recreate the database can be found in [the docs](../administration/backup.md). +If you develop on a separate branch, it's possible you did migrations that aren't merged into another branch you're working on. In that case, it's probably best to set up multiple Akkoma instances each with their own database. If you finished with a branch and want to switch back to develop to start a new branch from there, you can drop the database and recreate the database (e.g. by using `config/setup_db.psql`). The commands to drop and recreate the database can be found in [the docs](../administration/backup.md). From 7f8932304f059a0a61f838520c213248c08169d1 Mon Sep 17 00:00:00 2001 From: ilja Date: Thu, 2 Feb 2023 14:37:45 +0100 Subject: [PATCH 006/178] typo + remove unneeded file --- Makefile | 7 ------- docs/README.md | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index bc8719e68..000000000 --- a/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -all: install - pipenv run mkdocs build - -install: - pipenv install -clean: - rm -rf docs diff --git a/docs/README.md b/docs/README.md index a9a17a2ab..3da3d1967 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,5 +24,5 @@ mkdocs serve mkdocs build # To get out of the virtual environment, you do -deacivate +deactivate ``` From aeb68a0ad151ed07d2daa41eafe1c6c282e78144 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Sat, 4 Feb 2023 20:51:17 +0000 Subject: [PATCH 007/178] paginate follow requests (#460) matches https://docs.joinmastodon.org/methods/follow_requests/#get mostly Co-authored-by: FloatingGhost Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/460 --- CHANGELOG.md | 1 + lib/pleroma/following_relationship.ex | 9 ++++---- lib/pleroma/user.ex | 8 ++++++- .../operations/follow_request_operation.ex | 19 ++++++++++++++++ .../controllers/follow_request_controller.ex | 15 ++++++++++--- .../web/mastodon_api/views/account_view.ex | 3 ++- .../block_validation_test.exs | 1 + test/pleroma/web/common_api_test.exs | 1 + .../follow_request_controller_test.exs | 22 +++++++++++++++++++ 9 files changed, 69 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0437033ee..e6effac78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Simplified HTTP signature processing - Rich media will now hard-exit after 5 seconds, to prevent timeline hangs - HTTP Content Security Policy is now far more strict to prevent any potential XSS/CSS leakages +- Follow requests are now paginated, matches mastodon API spec, so use the Link header to paginate. ### Fixed - /api/v1/accounts/lookup will now respect restrict\_unauthenticated diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index c489ccbbe..9e75458e5 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -155,14 +155,13 @@ def following_count(%User{} = user) do |> Repo.aggregate(:count, :id) end - def get_follow_requests(%User{id: id}) do + def get_follow_requests_query(%User{id: id}) do __MODULE__ - |> join(:inner, [r], f in assoc(r, :follower)) + |> join(:inner, [r], f in assoc(r, :follower), as: :follower) |> where([r], r.state == ^:follow_pending) |> where([r], r.following_id == ^id) - |> where([r, f], f.is_active == true) - |> select([r, f], f) - |> Repo.all() + |> where([r, follower: f], f.is_active == true) + |> select([r, follower: f], f) end def following?(%User{id: follower_id}, %User{id: followed_id}) do diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 1ddbd36a8..1572a895e 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -273,7 +273,13 @@ def cached_muted_users_ap_ids(user) do defdelegate following(user), to: FollowingRelationship defdelegate following?(follower, followed), to: FollowingRelationship defdelegate following_ap_ids(user), to: FollowingRelationship - defdelegate get_follow_requests(user), to: FollowingRelationship + defdelegate get_follow_requests_query(user), to: FollowingRelationship + + def get_follow_requests(user) do + get_follow_requests_query(user) + |> Repo.all() + end + defdelegate search(query, opts \\ []), to: User.Search @doc """ diff --git a/lib/pleroma/web/api_spec/operations/follow_request_operation.ex b/lib/pleroma/web/api_spec/operations/follow_request_operation.ex index 784019699..d6f59191b 100644 --- a/lib/pleroma/web/api_spec/operations/follow_request_operation.ex +++ b/lib/pleroma/web/api_spec/operations/follow_request_operation.ex @@ -19,6 +19,7 @@ def index_operation do summary: "Retrieve follow requests", security: [%{"oAuth" => ["read:follows", "follow"]}], operationId: "FollowRequestController.index", + parameters: pagination_params(), responses: %{ 200 => Operation.response("Array of Account", "application/json", %Schema{ @@ -62,4 +63,22 @@ defp id_param do required: true ) end + + defp pagination_params do + [ + Operation.parameter(:max_id, :query, :string, "Return items older than this ID"), + Operation.parameter( + :since_id, + :query, + :string, + "Return the oldest items newer than this ID" + ), + Operation.parameter( + :limit, + :query, + %Schema{type: :integer, default: 20}, + "Maximum number of items to return. Will be ignored if it's more than 40" + ) + ] + end end diff --git a/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex b/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex index d915298f1..e534d0388 100644 --- a/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex @@ -5,9 +5,13 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestController do use Pleroma.Web, :controller + import Pleroma.Web.ControllerHelper, + only: [add_link_headers: 2] + alias Pleroma.User alias Pleroma.Web.CommonAPI alias Pleroma.Web.Plugs.OAuthScopesPlug + alias Pleroma.Pagination plug(Pleroma.Web.ApiSpec.CastAndValidate) plug(:assign_follower when action != :index) @@ -24,10 +28,15 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.FollowRequestOperation @doc "GET /api/v1/follow_requests" - def index(%{assigns: %{user: followed}} = conn, _params) do - follow_requests = User.get_follow_requests(followed) + def index(%{assigns: %{user: followed}} = conn, params) do + follow_requests = + followed + |> User.get_follow_requests_query() + |> Pagination.fetch_paginated(params, :keyset, :follower) - render(conn, "index.json", for: followed, users: follow_requests, as: :user) + conn + |> add_link_headers(follow_requests) + |> render("index.json", for: followed, users: follow_requests, as: :user) end @doc "POST /api/v1/follow_requests/:id/authorize" diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 653a50e20..190d6ebf2 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -334,7 +334,8 @@ defp maybe_put_follow_requests_count( %User{id: user_id} ) do count = - User.get_follow_requests(user) + user + |> User.get_follow_requests() |> length() data diff --git a/test/pleroma/web/activity_pub/object_validators/block_validation_test.exs b/test/pleroma/web/activity_pub/object_validators/block_validation_test.exs index ad6190892..5e6757760 100644 --- a/test/pleroma/web/activity_pub/object_validators/block_validation_test.exs +++ b/test/pleroma/web/activity_pub/object_validators/block_validation_test.exs @@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.BlockValidationTest do describe "blocks" do setup do + clear_config([:activitypub, :outgoing_blocks], true) user = insert(:user, local: false) blocked = insert(:user) diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index 2b7a34be2..33709c8f3 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -71,6 +71,7 @@ test "it posts a poll" do test "it blocks and federates", %{blocker: blocker, blocked: blocked} do clear_config([:instance, :federating], true) + clear_config([:activitypub, :outgoing_blocks], true) with_mock Pleroma.Web.Federator, publish: fn _ -> nil end do diff --git a/test/pleroma/web/mastodon_api/controllers/follow_request_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/follow_request_controller_test.exs index 069ffb3d6..e3f59d886 100644 --- a/test/pleroma/web/mastodon_api/controllers/follow_request_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/follow_request_controller_test.exs @@ -10,6 +10,11 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestControllerTest do import Pleroma.Factory + defp extract_next_link_header(header) do + [_, next_link] = Regex.run(~r{<(?.*)>; rel="next"}, header) + next_link + end + describe "locked accounts" do setup do user = insert(:user, is_locked: true) @@ -31,6 +36,23 @@ test "/api/v1/follow_requests works", %{user: user, conn: conn} do assert to_string(other_user.id) == relationship["id"] end + test "/api/v1/follow_requests paginates", %{user: user, conn: conn} do + for _ <- 1..21 do + other_user = insert(:user) + {:ok, _, _, _activity} = CommonAPI.follow(other_user, user) + {:ok, _, _} = User.follow(other_user, user, :follow_pending) + end + + conn = get(conn, "/api/v1/follow_requests") + assert length(json_response_and_validate_schema(conn, 200)) == 20 + assert [link_header] = get_resp_header(conn, "link") + assert link_header =~ "rel=\"next\"" + next_link = extract_next_link_header(link_header) + assert next_link =~ "/api/v1/follow_requests" + conn = get(conn, next_link) + assert length(json_response_and_validate_schema(conn, 200)) == 1 + end + test "/api/v1/follow_requests/:id/authorize works", %{user: user, conn: conn} do other_user = insert(:user) From b71db2f82d91a6ae1406658374f15d948d8ad7e3 Mon Sep 17 00:00:00 2001 From: ilja Date: Sat, 4 Feb 2023 20:53:23 +0000 Subject: [PATCH 008/178] create_service_actor is now type Application This is used for internal fetch and for relay. Both represent the instance and therefore are an aplication. --- CHANGELOG.md | 1 + lib/pleroma/user.ex | 1 + ...tance_actors_to_actor_type_application.exs | 21 +++++++++++++++++++ test/pleroma/web/activity_pub/relay_test.exs | 6 ++++++ 4 files changed, 29 insertions(+) create mode 100644 priv/repo/migrations/20230202154409_instance_actors_to_actor_type_application.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index e6effac78..d66959efb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Rich media will now hard-exit after 5 seconds, to prevent timeline hangs - HTTP Content Security Policy is now far more strict to prevent any potential XSS/CSS leakages - Follow requests are now paginated, matches mastodon API spec, so use the Link header to paginate. +- `internal.fetch` and `relay` actors are now represented with the actor type `Application` ### Fixed - /api/v1/accounts/lookup will now respect restrict\_unauthenticated diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 1572a895e..7a1e5628e 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -2000,6 +2000,7 @@ defp create_service_actor(uri, nickname) do %User{ invisible: true, local: true, + actor_type: "Application", ap_id: uri, nickname: nickname, follower_address: uri <> "/followers" diff --git a/priv/repo/migrations/20230202154409_instance_actors_to_actor_type_application.exs b/priv/repo/migrations/20230202154409_instance_actors_to_actor_type_application.exs new file mode 100644 index 000000000..5bf10704a --- /dev/null +++ b/priv/repo/migrations/20230202154409_instance_actors_to_actor_type_application.exs @@ -0,0 +1,21 @@ +defmodule Pleroma.Repo.Migrations.InstanceActorsToActorTypeApplication do + use Ecto.Migration + + def up do + execute(""" + update users + set actor_type = 'Application' + where local + and (ap_id like '%/relay' or ap_id like '%/internal/fetch') + """) + end + + def down do + execute(""" + update users + set actor_type = 'Person' + where local + and (ap_id like '%/relay' or ap_id like '%/internal/fetch') + """) + end +end diff --git a/test/pleroma/web/activity_pub/relay_test.exs b/test/pleroma/web/activity_pub/relay_test.exs index d6de7d61e..0bbfc316b 100644 --- a/test/pleroma/web/activity_pub/relay_test.exs +++ b/test/pleroma/web/activity_pub/relay_test.exs @@ -19,6 +19,12 @@ test "gets an actor for the relay" do assert user.ap_id == "#{Pleroma.Web.Endpoint.url()}/relay" end + test "relay actor is an application" do + # See + user = Relay.get_actor() + assert user.actor_type == "Application" + end + test "relay actor is invisible" do user = Relay.get_actor() assert User.invisible?(user) From 439e915531f579424ae90c5308eb5eadabac7604 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 11 Feb 2023 10:48:52 +0000 Subject: [PATCH 009/178] bump version --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 93184a0f9..7cc4d1fa6 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.5.0"), + version: version("3.6.0"), elixir: "~> 1.12", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), From d2b57a7f9e283e550ccaa8f359c451cdcd8735b1 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 11 Feb 2023 10:56:53 +0000 Subject: [PATCH 010/178] bump elixir version in CI --- .woodpecker.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 9395567f4..69ea82a39 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -95,7 +95,7 @@ pipeline: # Canonical amd64 ubuntu22: - image: hexpm/elixir:1.14.2-erlang-25.1.2-ubuntu-jammy-20220428 + image: 1.14.3-erlang-25.2.2-ubuntu-jammy-20221130 <<: *on-release environment: MIX_ENV: prod @@ -122,7 +122,7 @@ pipeline: - /bin/sh /entrypoint.sh debian-bullseye: - image: hexpm/elixir:1.14.2-erlang-25.1.2-debian-bullseye-20221004 + image: 1.14.3-erlang-25.2.2-debian-bullseye-20230109 <<: *on-release environment: MIX_ENV: prod @@ -151,7 +151,7 @@ pipeline: # Canonical amd64-musl musl: - image: hexpm/elixir:1.14.2-erlang-25.1.2-alpine-3.16.2 + image: 1.14.3-erlang-25.2.2-alpine-3.17.0 <<: *on-stable environment: MIX_ENV: prod From 6e07ed6ea9846df6b7f810a55b3c7314d34f16db Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 11 Feb 2023 10:58:53 +0000 Subject: [PATCH 011/178] fix docker tag --- .woodpecker.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 69ea82a39..f478c13bd 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -95,7 +95,7 @@ pipeline: # Canonical amd64 ubuntu22: - image: 1.14.3-erlang-25.2.2-ubuntu-jammy-20221130 + image: hexpm/elixir:1.14.3-erlang-25.2.2-ubuntu-jammy-20221130 <<: *on-release environment: MIX_ENV: prod @@ -122,7 +122,7 @@ pipeline: - /bin/sh /entrypoint.sh debian-bullseye: - image: 1.14.3-erlang-25.2.2-debian-bullseye-20230109 + image: hexpm/elixir:1.14.3-erlang-25.2.2-debian-bullseye-20230109 <<: *on-release environment: MIX_ENV: prod @@ -151,7 +151,7 @@ pipeline: # Canonical amd64-musl musl: - image: 1.14.3-erlang-25.2.2-alpine-3.17.0 + image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.17.0 <<: *on-stable environment: MIX_ENV: prod From f92484fd01681a4506320f3eb008e33c6c35f31a Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 11 Feb 2023 11:19:33 +0000 Subject: [PATCH 012/178] add version in changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d66959efb..5e72b0d05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## Unreleased +## 2023.02 ### Added - Prometheus metrics exporting from `/api/v1/akkoma/metrics` From b4e37b03d81619bb17b9f698d7c9480be05e44b5 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 15 Feb 2023 22:08:55 +0000 Subject: [PATCH 013/178] use a slightly earlier alpine version --- .woodpecker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index f478c13bd..99811441e 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -151,7 +151,7 @@ pipeline: # Canonical amd64-musl musl: - image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.17.0 + image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.15.6 <<: *on-stable environment: MIX_ENV: prod From ef279ac53fecd684281b9e5df13a3e082c589aac Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 15 Feb 2023 22:09:31 +0000 Subject: [PATCH 014/178] build musl on develop --- .woodpecker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 99811441e..49718d630 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -152,7 +152,7 @@ pipeline: # Canonical amd64-musl musl: image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.15.6 - <<: *on-stable + <<: *on-release environment: MIX_ENV: prod commands: @@ -167,7 +167,7 @@ pipeline: release-musl: image: akkoma/releaser - <<: *on-stable + <<: *on-release secrets: *scw-secrets commands: - export SOURCE=akkoma-amd64-musl.zip From 439ec4913793b306706b148a1a6b9d344d0bc1df Mon Sep 17 00:00:00 2001 From: flisk Date: Sat, 18 Feb 2023 14:37:12 +0100 Subject: [PATCH 015/178] update backwards compat notice in admin_api.md --- docs/docs/development/API/admin_api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/development/API/admin_api.md b/docs/docs/development/API/admin_api.md index 79cb573ac..958388879 100644 --- a/docs/docs/development/API/admin_api.md +++ b/docs/docs/development/API/admin_api.md @@ -2,7 +2,7 @@ Authentication is required and the user must be an admin. -The `/api/v1/pleroma/admin/*` path is backwards compatible with `/api/pleroma/admin/*` (`/api/pleroma/admin/*` will be deprecated in the future). +Backwards-compatibility for admin API endpoints without version prefixes (`/api/pleroma/admin/*`) has been removed as of Akkoma 3.6.0. Please use `/api/v1/pleroma/admin/*` instead. ## `GET /api/v1/pleroma/admin/users` From da4c87b2263084b77ada3744c8e0e2ee50451d3e Mon Sep 17 00:00:00 2001 From: flisk Date: Sat, 18 Feb 2023 14:39:22 +0100 Subject: [PATCH 016/178] update prometheus docs --- docs/docs/development/API/prometheus.md | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/docs/docs/development/API/prometheus.md b/docs/docs/development/API/prometheus.md index 39ecc5d38..b990593f0 100644 --- a/docs/docs/development/API/prometheus.md +++ b/docs/docs/development/API/prometheus.md @@ -5,27 +5,16 @@ Akkoma includes support for exporting metrics via the [prometheus_ex](https://gi Config example: ``` -config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, - enabled: true, - auth: {:basic, "myusername", "mypassword"}, - ip_whitelist: ["127.0.0.1"], - path: "/api/pleroma/app_metrics", - format: :text +config :pleroma, :instance, + export_prometheus_metrics: true ``` -* `enabled` (Akkoma extension) enables the endpoint -* `ip_whitelist` (Akkoma extension) could be used to restrict access only to specified IPs -* `auth` sets the authentication (`false` for no auth; configurable to HTTP Basic Auth, see [prometheus-plugs](https://github.com/deadtrickster/prometheus-plugs#exporting) documentation) -* `format` sets the output format (`:text` or `:protobuf`) -* `path` sets the path to app metrics page - - -## `/api/pleroma/app_metrics` +## `/api/v1/akkoma/metrics` ### Exports Prometheus application metrics * Method: `GET` -* Authentication: not required by default (see configuration options above) +* Authentication: required * Params: none * Response: text @@ -37,7 +26,7 @@ The following is a config example to use with [Grafana](https://grafana.com) ``` - job_name: 'beam' - metrics_path: /api/pleroma/app_metrics + metrics_path: /api/v1/akkoma/metrics scheme: https static_configs: - targets: ['otp.akkoma.dev'] From a18b5755b4faaee04c9597370b5bde0ffc74e1b2 Mon Sep 17 00:00:00 2001 From: flisk Date: Sat, 18 Feb 2023 14:58:35 +0100 Subject: [PATCH 017/178] run mix gettext.extract seems like this hasn't been run in a while. putting this in a separate commit so the changes i'm about to make don't get drowned in all of this stuff. --- priv/gettext/config_descriptions.pot | 3382 +++++++++++++------------- priv/gettext/default.pot | 174 +- priv/gettext/errors.pot | 256 +- priv/gettext/static_pages.pot | 249 +- 4 files changed, 2087 insertions(+), 1974 deletions(-) diff --git a/priv/gettext/config_descriptions.pot b/priv/gettext/config_descriptions.pot index 1a55bfe68..ba3bd90a5 100644 --- a/priv/gettext/config_descriptions.pot +++ b/priv/gettext/config_descriptions.pot @@ -10,6002 +10,5966 @@ msgid "" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :esshd" -msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :logger" msgid "Logger-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :mime" msgid "Mime Types settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma" msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma" msgid "Authenticator" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :quack" -msgid "Quack-related settings" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :cors_plug" msgid "CORS plug config" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :esshd" -msgid "ESSHD" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :logger" msgid "Logger" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :mime" msgid "Mime Types" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma" msgid "Pleroma Admin Token" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma" msgid "Pleroma Authenticator" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :quack" -msgid "Quack Logger" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :logger-:console" msgid "Console logger settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :logger-:ex_syslogger" msgid "ExSyslogger-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:activitypub" msgid "ActivityPub-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:assets" msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:auth" msgid "Authentication / authorization settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:connections_pool" -msgid "Advanced settings for `Gun` connections pool" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:email_notifications" msgid "Email notifications settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:features" msgid "Customizable features" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:feed" msgid "Configure feed rendering" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:frontend_configurations" -msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:frontends" msgid "Installed frontends management" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:gopher" -msgid "Gopher settings" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools" -msgid "Advanced settings for `Hackney` connections pools" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:http" msgid "HTTP settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:http_security" msgid "HTTP security settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance" msgid "Instance-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instances_favicons" msgid "Control favicons for instances" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap" msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:majic_pool" msgid "Majic/libmagic configuration" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:manifest" msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_preview_proxy" msgid "Media preview proxy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy" msgid "Media proxy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:modules" msgid "Custom Runtime Modules" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf" msgid "General MRF settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_activity_expiration" msgid "Adds automatic expiration to all local activities" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_follow_bot" msgid "Automatically follows newly discovered accounts." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_hashtag" msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_hellthread" msgid "Block messages with excessive user mentions" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_keyword" msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_mention" msgid "Block messages which mention a specific user" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_normalize_markup" msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_object_age" msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_rejectnonpublic" msgid "RejectNonPublic drops posts with non-public visibility settings." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple" msgid "Simple ingress policies" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_steal_emoji" msgid "Steals emojis from selected instances when it sees them." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_subchain" msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_vocabulary" msgid "Filter messages which belong to certain activity vocabularies" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:oauth2" msgid "Configure OAuth 2 provider capabilities" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools" -msgid "Advanced settings for `Gun` workers pools" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:populate_hashtags_table" msgid "`populate_hashtags_table` background migration settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rate_limit" msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:restrict_unauthenticated" -msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:rich_media" msgid "If enabled the instance will parse metadata from attached links to generate link previews" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:shout" -msgid "Pleroma shout settings" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:static_fe" msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:streamer" msgid "Settings for notifications streamer" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:uri_schemes" msgid "URI schemes related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:web_cache_ttl" msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:welcome" msgid "Welcome messages settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:workers" msgid "Includes custom worker options not interpretable directly by `Oban`" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-ConcurrentLimiter" msgid "Limits configuration for background tasks." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban" msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Captcha" msgid "Captcha-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" msgid "Mailer-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" msgid "New users admin email digest" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" msgid "Email template settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Formatter" msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" msgid "Scheduled activities settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload" msgid "Upload general settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" msgid "Filter replaces the filename of the upload" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" msgid "Uploads mogrify filter settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" msgid "Local uploader-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" msgid "S3 uploader-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.User.Backup" msgid "Account Backup" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" msgid "HTTP invalidate settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" msgid "Invalidation script settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Metadata" msgid "Metadata-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Preload" msgid "Preload-related settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Expired activities settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" -msgid "Prometheus app metrics endpoint configuration" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :web_push_encryption-:vapid_details" msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :ex_aws-:s3" msgid "S3" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger-:console" msgid "Console Logger" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger-:ex_syslogger" msgid "ExSyslogger" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:activitypub" msgid "ActivityPub" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:assets" msgid "Assets" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:auth" msgid "Auth" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:connections_pool" -msgid "Connections pool" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:email_notifications" msgid "Email notifications" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:emoji" msgid "Emoji" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:features" msgid "Features" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:feed" msgid "Feed" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations" msgid "Frontend configurations" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends" msgid "Frontends" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:gopher" -msgid "Gopher" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools" -msgid "Hackney pools" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:http" msgid "HTTP" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:http_security" msgid "HTTP security" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance" msgid "Instance" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instances_favicons" msgid "Instances favicons" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap" msgid "LDAP" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:majic_pool" msgid "Majic pool" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:manifest" msgid "Manifest" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:markup" msgid "Markup Settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_preview_proxy" msgid "Media preview proxy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy" msgid "Media proxy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:modules" msgid "Modules" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf" msgid "MRF" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_activity_expiration" msgid "MRF Activity Expiration Policy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_follow_bot" msgid "MRF FollowBot Policy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_hashtag" msgid "MRF Hashtag" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_hellthread" msgid "MRF Hellthread" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_keyword" msgid "MRF Keyword" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_mention" msgid "MRF Mention" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_normalize_markup" msgid "MRF Normalize Markup" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_object_age" msgid "MRF Object Age" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_rejectnonpublic" msgid "MRF Reject Non Public" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple" msgid "MRF Simple" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_steal_emoji" msgid "MRF Emojis" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_subchain" msgid "MRF Subchain" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_vocabulary" msgid "MRF Vocabulary" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:oauth2" msgid "OAuth2" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools" -msgid "Pools" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:populate_hashtags_table" msgid "Populate hashtags table" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rate_limit" msgid "Rate limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated" msgid "Restrict Unauthenticated" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rich_media" msgid "Rich media" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:shout" -msgid "Shout" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:static_fe" msgid "Static FE" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:streamer" msgid "Streamer" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:uri_schemes" msgid "URI Schemes" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:user" msgid "User" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:web_cache_ttl" msgid "Web cache TTL" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome" msgid "Welcome" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:workers" msgid "Workers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-ConcurrentLimiter" msgid "ConcurrentLimiter" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban" msgid "Oban" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Captcha" msgid "Pleroma.Captcha" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" msgid "Pleroma.Captcha.Kocaptcha" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" msgid "Pleroma.Emails.Mailer" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" msgid "Pleroma.Emails.NewUsersDigestEmail" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" msgid "Pleroma.Emails.UserEmail" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Formatter" msgid "Linkify" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" msgid "Pleroma.ScheduledActivity" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload" msgid "Pleroma.Upload" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" msgid "Pleroma.Upload.Filter.AnonymizeFilename" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" msgid "Pleroma.Upload.Filter.Mogrify" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" msgid "Pleroma.Uploaders.Local" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" msgid "Pleroma.Uploaders.S3" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.User" msgid "Pleroma.User" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.User.Backup" msgid "Pleroma.User.Backup" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" msgid "Pleroma.Web.ApiSpec.CastAndValidate" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" msgid "Pleroma.Web.MediaProxy.Invalidation.Http" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" msgid "Pleroma.Web.MediaProxy.Invalidation.Script" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Metadata" msgid "Pleroma.Web.Metadata" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" msgid "Pleroma.Web.Plugs.RemoteIp" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Preload" msgid "Pleroma.Web.Preload" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Pleroma.Workers.PurgeExpiredActivity" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" -msgid "Pleroma.Web.Endpoint.MetricsExporter" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :web_push_encryption-:vapid_details" msgid "Vapid Details" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :esshd > :enabled" -msgid "Enables SSH" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :esshd > :handler" -msgid "Handler module" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :esshd > :password_authenticator" -msgid "Authenticator module" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :esshd > :port" -msgid "Port to connect" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :esshd > :priv_dir" -msgid "Dir with SSH keys" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :ex_aws-:s3 > :access_key_id" msgid "S3 access key ID" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :ex_aws-:s3 > :host" msgid "S3 host" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :ex_aws-:s3 > :region" msgid "S3 region (for AWS)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :ex_aws-:s3 > :secret_access_key" msgid "Secret access key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :logger > :backends" msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :logger-:console > :format" msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :logger-:console > :level" msgid "Log level" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :logger-:ex_syslogger > :format" msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :logger-:ex_syslogger > :ident" msgid "A string that's prepended to every message, and is typically set to the app name" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :logger-:ex_syslogger > :level" msgid "Log level" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma > :admin_token" msgid "Admin token" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:activitypub > :blockers_visible" msgid "Whether a user can see someone who has blocked them" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" msgid "Following handshake timeout" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" msgid "Whether to federate blocks to other instances" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" msgid "Sign object fetches with HTTP signatures" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" msgid "Whether blocks result in people getting unfollowed" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:assets > :default_mascot" msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:assets > :default_user_avatar" msgid "URL of the default user avatar" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:assets > :mascots" msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:auth > :auth_template" msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" -msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" -msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" -msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:connections_pool > :max_connections" -msgid "Maximum number of connections in the pool. Default: 250 connections." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" -msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:email_notifications > :digest" msgid "emails of \"what you've missed\" for users who have been inactive for a while" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:email_notifications > :digest > :active" msgid "Globally enable or disable digest emails" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" msgid "Minimum user inactivity threshold" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" msgid "Minimum interval between digest emails to one user" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:emoji > :default_manifest" msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:emoji > :groups" msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:emoji > :pack_extensions" msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:emoji > :shortcode_globs" msgid "Location of custom emoji files. * can be used as a wildcard." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:feed > :post_title" msgid "Configure title rendering" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:feed > :post_title > :max_length" msgid "Maximum number of characters before truncating title" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:feed > :post_title > :omission" msgid "Replacement which will be used after truncating string" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" msgid "Settings for Pleroma FE" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" msgid "When disabled, auto-hide the subject field if it's empty" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" msgid "URL of the background, unless viewing a user profile with a background that is set" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" msgid "When a message has a subject (aka Content Warning), collapse it by default" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" msgid "Enables green text on lines prefixed with the > character" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" msgid "Hides filtered statuses from timelines" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" msgid "Hides muted statuses from timelines" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" msgid "Hide notices statistics (repeats, favorites, ...)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" -msgid "Hides instance name from PleromaFE banner" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" msgid "URL of the logo, defaults to Pleroma's logo" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" -msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" msgid "URL of the image to use for hiding NSFW media attachments in the timeline" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" msgid "Default post formatting option" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" msgid "Relative URL which indicates where to redirect when a user is logged in" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" msgid "Relative URL which indicates where to redirect when a user isn't logged in" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" msgid "Copy the scope (private/unlisted/public) in replies to posts by default" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" msgid "Enables panel displaying functionality of the instance on the About page" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" msgid "Whether to show the instance's custom panel" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" msgid "Change alignment of sidebar and panels to the right" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" msgid "Which theme to use. Available themes are defined in styles.json" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :admin" msgid "Admin frontend" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :admin > name" msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :admin > ref" msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :available" msgid "A map containing available frontends and parameters for their installation." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :available > build_dir" msgid "The directory inside the zip file " msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :available > build_url" msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" msgid "The custom HTTP headers for the frontend" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :available > git" msgid "URL of the git repository of the frontend" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :available > name" msgid "Name of the frontend." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :available > ref" msgid "Reference of the frontend to be used." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :primary" msgid "Primary frontend, the one that is served for all pages by default" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :primary > name" msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:frontends > :primary > ref" msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:gopher > :dstport" -msgid "Port advertised in URLs (optional, defaults to port)" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:gopher > :enabled" -msgid "Enables the gopher interface" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:gopher > :ip" -msgid "IP address to bind to" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:gopher > :port" -msgid "Port to bind to" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools > :federation" -msgid "Settings for federation pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" -msgid "Number workers in the pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools > :media" -msgid "Settings for media pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" -msgid "Number workers in the pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools > :upload" -msgid "Settings for upload pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" -msgid "Number workers in the pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:http > :adapter" msgid "Adapter specific options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" msgid "SSL options for HTTP adapter" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" msgid "List of TLS version to use" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:http > :proxy_url" -msgid "Proxy URL" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:http > :user_agent" msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:http_security > :enabled" msgid "Whether the managed content security policy is enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:http_security > :referrer_policy" msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:http_security > :report_uri" msgid "Adds the specified URL to report-uri and report-to group in CSP header" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:http_security > :sts" msgid "Whether to additionally send a Strict-Transport-Security header" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:http_security > :sts_max_age" msgid "The maximum age for the Strict-Transport-Security header if sent" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :account_activation_required" msgid "Require users to confirm their emails before signing in" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :account_approval_required" msgid "Require users to be manually approved by an admin before signing in" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :account_field_name_length" msgid "An account field name maximum length. Default: 512." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :account_field_value_length" msgid "An account field value maximum length. Default: 2048." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :allow_relay" msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :allowed_post_formats" msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :attachment_links" msgid "Enable to automatically add attachment link text to statuses" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" msgid "Set to nicknames of (local) users that every new user should automatically follow" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" msgid "Set to nicknames of (local) users that automatically follows every newly registered user" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" msgid "File size limit of user's profile avatars" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :background_upload_limit" msgid "File size limit of user's profile backgrounds" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :banner_upload_limit" msgid "File size limit of user's profile banners" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:instance > :birthday_min_age" -msgid "Minimum required age for users to create account. Only used if birthday is required." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:instance > :birthday_required" -msgid "Require users to enter their birthday." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:instance > :cleanup_attachments" msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :description" msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :email" msgid "Email used to reach an Administrator/Moderator of the instance" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :extended_nickname_format" msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :external_user_synchronization" msgid "Enabling following/followers counters synchronization for external users" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :federating" msgid "Enable federation with other instances" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :healthcheck" msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :instance_thumbnail" msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :invites_enabled" msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :limit" msgid "Posts character limit (CW/Subject included in the counter)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :limit_to_local_content" msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :max_account_fields" msgid "The maximum number of custom fields in the user profile. Default: 10." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:instance > :max_endorsed_users" -msgid "The maximum number of recommended accounts. 0 will disable the feature." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:instance > :max_media_attachments" -msgid "Maximum number of post media attachments" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" msgid "The maximum number of pinned statuses. 0 will disable the feature." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" msgid "The maximum number of custom fields in the remote user profile. Default: 20." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :max_report_comment_size" msgid "The maximum size of the report comment. Default: 1000." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" msgid "Multi-factor authentication settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" msgid "MFA backup codes settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" msgid "Number of backup codes to generate." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" msgid "TOTP settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :name" msgid "Name of the instance" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :notify_email" msgid "Envelope FROM address for mail sent via Pleroma" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :poll_limits" msgid "A map with poll limits for local polls" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" msgid "Maximum expiration time (in seconds)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" msgid "Maximum number of characters per option" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" msgid "Maximum number of options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" msgid "Minimum expiration time (in seconds)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:instance > :privileged_staff" -msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:instance > :profile_directory" msgid "Enable profile directory." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:instance > :public" -msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:instance > :quarantined_instances" -msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:instance > :registration_reason_length" msgid "Maximum registration reason length. Default: 500." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :registrations_open" msgid "Enable registrations for anyone. Invitations require this setting to be disabled." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :remote_limit" msgid "Hard character limit beyond which remote posts will be dropped" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" msgid "The default amount of days to retain remote posts when pruning the database" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :show_reactions" msgid "Let favourites and emoji reactions be viewed through the API." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :skip_thread_containment" msgid "Skip filtering out broken threads. Default: enabled." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :static_dir" msgid "Instance static directory" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :upload_limit" msgid "File size limit of uploads (except for avatar, background, banner)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :user_bio_length" msgid "A user bio maximum length. Default: 5000." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :user_name_length" msgid "A user name maximum length. Default: 100." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instances_favicons > :enabled" msgid "Allow/disallow displaying and getting instances favicons" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :base" msgid "LDAP base, e.g. \"dc=example,dc=com\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :enabled" msgid "Enables LDAP authentication" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :host" msgid "LDAP server hostname" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :port" msgid "LDAP port, e.g. 389 or 636" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :ssl" msgid "Enable to use SSL, usually implies the port 636" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :sslopts" msgid "Additional SSL options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" msgid "Path to file with PEM encoded cacerts" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" msgid "Type of cert verification" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :tls" msgid "Enable to use STARTTLS, usually implies the port 389" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :tlsopts" msgid "Additional TLS options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" msgid "Path to file with PEM encoded cacerts" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" msgid "Type of cert verification" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:ldap > :uid" msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:majic_pool > :size" msgid "Number of majic workers to start." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:manifest > :background_color" -msgid "Describe the background color of the app" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:manifest > :icons" msgid "Describe the icons of the app" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:manifest > :theme_color" -msgid "Describe the theme color of the app" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:markup > :scrub_policy" msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy > :base_url" msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy > :enabled" msgid "Enables proxying of remote media via the instance's proxy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" msgid "Enables media cache object invalidation." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" msgid "Module which will be used to purge objects from the cache." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" msgid "Internal Pleroma.ReverseProxy settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" msgid "Timeout (in milliseconds) of GET request to the remote URI." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:media_proxy > :whitelist" msgid "List of hosts with scheme to bypass the MediaProxy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:modules > :runtime_dir" msgid "A path to custom Elixir modules (such as MRF policies)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf > :policies" msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf > :transparency" msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" msgid "Default global expiration time for all local activities (in days)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" msgid "The name of the bot account to use for following newly discovered users." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_hashtag > :reject" msgid "A list of hashtags which result in message being rejected." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_keyword > :reject" msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_keyword > :replace" msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_mention > :actors" msgid "A list of actors for which any post mentioning them will be dropped" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_object_age > :actions" msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_object_age > :threshold" msgid "Required age (in seconds) of a post before actions are taken." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" msgid "Whether to allow direct messages" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" msgid "Whether to allow followers-only posts" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :accept" msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" msgid "List of instances to strip avatars from and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" msgid "List of instances to strip banners from and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :followers_only" msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :media_removal" msgid "List of instances to strip media attachments from and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :reject" msgid "List of instances to reject activities from (except deletes) and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" msgid "List of instances to reject deletions from and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_simple > :report_removal" msgid "List of instances to reject reports from and the reason for doing so" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" msgid "List of hosts to steal emojis from" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" msgid "File size limit (in bytes), checked before an emoji is saved to the disk" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" msgid "Matches a series of regular expressions against the actor field" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" msgid "The lifetime in seconds of the access token" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :default" -msgid "Settings for default pool." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :default > :max_waiting" -msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :default > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :federation" -msgid "Settings for federation pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" -msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :federation > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :media" -msgid "Settings for media pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :media > :max_waiting" -msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :media > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :upload" -msgid "Settings for upload pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" -msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:pools > :upload > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" msgid "For registering user accounts from the same IP address" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rate_limit > :authentication" msgid "For authentication create / password check / user existence check requests" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" msgid "For actions on relation with a specific user (follow, unfollow)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rate_limit > :relations_actions" msgid "For actions on relationships with all users (follow, unfollow)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rate_limit > :search" msgid "For the search requests (account & status search etc.)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rate_limit > :status_id_action" msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rate_limit > :timeline" msgid "For requests to timelines (each timeline has it's own limiter)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" -msgid "Settings for statuses." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" -msgid "Disallow view local statuses." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" -msgid "Disallow view remote statuses." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" msgid "Settings for user profiles." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" -msgid "Disallow view local user profiles." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" -msgid "Disallow view remote user profiles." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" msgid "Settings for public and federated timelines." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" -msgid "Disallow view federated timeline." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" -msgid "Disallow view public timeline." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:rich_media > :enabled" msgid "Enables RichMedia parsing of URLs" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rich_media > :failure_backoff" msgid "Amount of milliseconds after request failure, during which the request will not be retried." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" msgid "List of hosts which will be ignored by the metadata parser" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rich_media > :ignore_tld" msgid "List TLDs (top-level domains) which will ignore for parse metadata" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rich_media > :parsers" msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:rich_media > :ttl_setters" msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:shout > :enabled" -msgid "Enables the backend Shoutbox chat feature." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:shout > :limit" -msgid "Shout message character limit." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:static_fe > :enabled" msgid "Enables the rendering of static HTML. Default: disabled." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:streamer > :overflow_workers" msgid "Maximum number of workers created if pool is empty" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:streamer > :workers" msgid "Number of workers to send notifications" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" msgid "List of the scheme part that is considered valid to be an URL" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" -msgid "Enables sending a chat message to newly registered users" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:welcome > :chat_message > :message" -msgid "A message that will be sent to newly registered users as a chat message" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" -msgid "The nickname of the local user that sends a welcome chat message" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" msgid "Enables sending a direct message to newly registered users" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:welcome > :direct_message > :message" msgid "A message that will be sent to newly registered users" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" msgid "The nickname of the local user that sends a welcome message" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:welcome > :email > :enabled" msgid "Enables sending an email to newly registered users" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:welcome > :email > :html" msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:welcome > :email > :sender" msgid "Email address and/or nickname that will be used to send the welcome email." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:welcome > :email > :subject" msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:welcome > :email > :text" msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:workers > :retries" msgid "Max retry attempts for failed jobs, per `Oban` queue" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" msgid "Max running concurrently jobs." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" msgid "Max waiting jobs." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" msgid "Concurrent limits configuration for getting RichMedia for activities." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" msgid "Max running concurrently jobs." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" msgid "Max waiting jobs." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :crontab" msgid "Settings for cron background jobs" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :log" msgid "Logs verbose mode" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues" msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" msgid "Activity expiration queue" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" msgid "Attachment deletion queue" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :background" msgid "Background queue" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :backup" msgid "Backup queue" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" msgid "Incoming federation queue" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" msgid "Outgoing federation queue" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :mailer" msgid "Email sender queue, see Pleroma.Emails.Mailer" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" msgid "Transmogrifier queue" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Oban > :queues > :web_push" msgid "Web push notifications queue" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" msgid "Whether the captcha should be shown on registration" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Captcha > :method" msgid "The method/service to use for captcha" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" msgid "The time in seconds for which the captcha is valid" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" msgid "The kocaptcha endpoint to use" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" msgid "SMTP AUTH enforcement mode" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" msgid "SMTP AUTH password" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" msgid "SMTP port" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" msgid "Hostname or IP address" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" msgid "SMTP temporary (4xx) error retries" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" msgid "Use Implicit SSL/TLS. e.g. port 465" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" msgid "Explicit TLS (STARTTLS) enforcement mode" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" msgid "SMTP AUTH username" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" msgid "Enables new users admin digest email when `true`" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" msgid "A map with color settings for email templates." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Formatter > :class" msgid "Specify the class to be added to the generated link. Disable to clear." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" msgid "Link URLs will open in a new window/tab." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" msgid "Override the rel attribute. Disable to clear." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" msgid "Strip the scheme prefix." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" msgid "Whether scheduled activities are sent to the job queue to be executed" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" msgid "Set max length of a filename to display. 0 = no limit. Default: 30" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload > :filters" msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" msgid "Module which will be used for uploads" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" msgid "Path where user's uploads will be saved" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" msgid "S3 bucket" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" msgid "S3 bucket namespace" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" msgid "List of email domains users may not register with." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" msgid "List of nicknames users may not register with." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" msgid "Limit user to export not more often than once per N days" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" msgid "Remove backup achives after N days" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" msgid "Enables strict input validation (useful in development, not recommended in production)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" msgid "HTTP headers of request" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" msgid "HTTP method of request. Default: :purge" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" msgid "Request options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" msgid "Path to executable script which will purge cached items." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" msgid "List of metadata providers to enable" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" msgid "When enabled NSFW attachments will be shown in previews" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" msgid "Enable/disable the plug. Default: disabled." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" msgid "List of preload providers to enable" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" msgid "Enables expired activities addition & deletion" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" msgid "Minimum lifetime for ephemeral activity (in seconds)" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" -msgid "Enables HTTP Basic Auth for app metrics endpoint." -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" -msgid "[Pleroma extension] Enables app metrics endpoint." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" -msgid "App metrics endpoint output format." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" -msgid "Restrict access of app metrics endpoint to the specified IP addresses." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" -msgid "App metrics endpoint URI path." -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :quack > :level" -msgid "Log level" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :quack > :meta" -msgid "Configure which metadata you want to report on" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :quack > :webhook_url" -msgid "Configure the Slack incoming webhook" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" msgid "VAPID private key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" msgid "VAPID public key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config description at :web_push_encryption-:vapid_details > :subject" msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :cors_plug > :credentials" msgid "Credentials" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :cors_plug > :expose" msgid "Expose" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :cors_plug > :headers" msgid "Headers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :cors_plug > :max_age" msgid "Max age" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :cors_plug > :methods" msgid "Methods" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :esshd > :enabled" -msgid "Enabled" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :esshd > :handler" -msgid "Handler" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :esshd > :password_authenticator" -msgid "Password authenticator" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :esshd > :port" -msgid "Port" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :esshd > :priv_dir" -msgid "Priv dir" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :ex_aws-:s3 > :access_key_id" msgid "Access key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :ex_aws-:s3 > :host" msgid "Host" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :ex_aws-:s3 > :region" msgid "Region" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :ex_aws-:s3 > :secret_access_key" msgid "Secret access key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger > :backends" msgid "Backends" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger-:console > :format" msgid "Format" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger-:console > :level" msgid "Level" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger-:console > :metadata" msgid "Metadata" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger-:ex_syslogger > :format" msgid "Format" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger-:ex_syslogger > :ident" msgid "Ident" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger-:ex_syslogger > :level" msgid "Level" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :logger-:ex_syslogger > :metadata" msgid "Metadata" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :mime > :types" msgid "Types" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :mime > :types > application/activity+json" msgid "\"application/activity+json\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :mime > :types > application/jrd+json" msgid "\"application/jrd+json\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :mime > :types > application/ld+json" msgid "\"application/ld+json\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :mime > :types > application/xml" msgid "\"application/xml\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :mime > :types > application/xrd+xml" msgid "\"application/xrd+xml\"" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma > :admin_token" msgid "Admin token" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" msgid "Pleroma.Web.Auth.Authenticator" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:activitypub > :blockers_visible" msgid "Blockers visible" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" msgid "Follow handshake timeout" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" msgid "Note replies output limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" msgid "Outgoing blocks" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" msgid "Sign object fetches" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" msgid "Unfollow blocked" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:assets > :default_mascot" msgid "Default mascot" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:assets > :default_user_avatar" msgid "Default user avatar" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:assets > :mascots" msgid "Mascots" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:auth > :auth_template" msgid "Auth template" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" msgid "Enforce OAuth admin scope usage" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" msgid "OAuth consumer strategies" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" msgid "OAuth consumer template" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" -msgid "Connect timeout" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" -msgid "Connection acquisition retries" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" -msgid "Connection acquisition wait" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:connections_pool > :max_connections" -msgid "Max connections" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" -msgid "Reclaim multiplier" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:email_notifications > :digest" msgid "Digest" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:email_notifications > :digest > :active" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" msgid "Inactivity threshold" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" msgid "Interval" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" msgid "Schedule" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:emoji > :default_manifest" msgid "Default manifest" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:emoji > :groups" msgid "Groups" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:emoji > :pack_extensions" msgid "Pack extensions" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" msgid "Shared pack cache s/file" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:emoji > :shortcode_globs" msgid "Shortcode globs" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" msgid "Improved hashtag timeline" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:feed > :post_title" msgid "Post title" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:feed > :post_title > :max_length" msgid "Max length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:feed > :post_title > :omission" msgid "Omission" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" msgid "Pleroma FE" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" msgid "Always show subject input" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" msgid "Background" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" msgid "Collapse message with subject" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" msgid "Greentext" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" msgid "Hide Filtered Statuses" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" msgid "Hide Muted Posts" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" msgid "Hide post stats" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" -msgid "Hide Sitename" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" msgid "Hide user stats" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" msgid "Logo" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" msgid "Logo margin" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" msgid "Logo mask" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" -msgid "Minimal scopes mode" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" msgid "NSFW Censor Image" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" msgid "Post Content Type" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" msgid "Redirect root login" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" msgid "Redirect root no login" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" msgid "Scope copy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" msgid "Show instance features panel" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" msgid "Show instance specific panel" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" msgid "Sidebar on Right" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" msgid "Subject line behavior" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" msgid "Theme" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :admin" msgid "Admin" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :admin > name" msgid "Name" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :admin > ref" msgid "Reference" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :available" msgid "Available" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :available > build_dir" msgid "Build directory" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :available > build_url" msgid "Build URL" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" msgid "Custom HTTP headers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :available > git" msgid "Git Repository URL" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :available > name" msgid "Name" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :available > ref" msgid "Reference" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :primary" msgid "Primary" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :primary > name" msgid "Name" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:frontends > :primary > ref" msgid "Reference" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:gopher > :dstport" -msgid "Dstport" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:gopher > :enabled" -msgid "Enabled" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:gopher > :ip" -msgid "IP" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:gopher > :port" -msgid "Port" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools > :federation" -msgid "Federation" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" -msgid "Max connections" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" -msgid "Timeout" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools > :media" -msgid "Media" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" -msgid "Max connections" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" -msgid "Timeout" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools > :upload" -msgid "Upload" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" -msgid "Max connections" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" -msgid "Timeout" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:http > :adapter" msgid "Adapter" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" msgid "SSL Options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" msgid "Versions" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:http > :proxy_url" msgid "Proxy URL" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:http > :send_user_agent" -msgid "Send user agent" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:http > :user_agent" msgid "User agent" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:http_security > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:http_security > :referrer_policy" msgid "Referrer policy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:http_security > :report_uri" msgid "Report URI" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:http_security > :sts" msgid "STS" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:http_security > :sts_max_age" msgid "STS max age" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :account_activation_required" msgid "Account activation required" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :account_approval_required" msgid "Account approval required" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :account_field_name_length" msgid "Account field name length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :account_field_value_length" msgid "Account field value length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :allow_relay" msgid "Allow relay" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :allowed_post_formats" msgid "Allowed post formats" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :attachment_links" msgid "Attachment links" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" msgid "Autofollowed nicknames" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" msgid "Autofollowing nicknames" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" msgid "Avatar upload limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :background_upload_limit" msgid "Background upload limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :banner_upload_limit" msgid "Banner upload limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:instance > :birthday_min_age" -msgid "Birthday min age" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:instance > :birthday_required" -msgid "Birthday required" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:instance > :cleanup_attachments" msgid "Cleanup attachments" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :description" msgid "Description" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :email" msgid "Admin Email Address" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :extended_nickname_format" msgid "Extended nickname format" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :external_user_synchronization" msgid "External user synchronization" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :federating" msgid "Federating" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" msgid "Fed. incoming replies max depth" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" msgid "Fed. reachability timeout days" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :healthcheck" msgid "Healthcheck" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :instance_thumbnail" msgid "Instance thumbnail" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :invites_enabled" msgid "Invites enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :limit" msgid "Limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :limit_to_local_content" msgid "Limit to local content" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :max_account_fields" msgid "Max account fields" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:instance > :max_endorsed_users" -msgid "Max endorsed users" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:instance > :max_media_attachments" -msgid "Max media attachments" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" msgid "Max pinned statuses" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" msgid "Max remote account fields" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :max_report_comment_size" msgid "Max report comment size" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" msgid "Multi factor authentication" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" msgid "Backup codes" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" msgid "Length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" msgid "Number" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" msgid "TOTP settings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" msgid "Digits" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" msgid "Period" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :name" msgid "Name" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :notify_email" msgid "Sender Email Address" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :poll_limits" msgid "Poll limits" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" msgid "Max expiration" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" msgid "Max option chars" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" msgid "Max options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" msgid "Min expiration" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :privileged_staff" msgid "Privileged staff" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :profile_directory" msgid "Profile directory" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :public" msgid "Public" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :quarantined_instances" msgid "Quarantined instances" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :registration_reason_length" msgid "Registration reason length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :registrations_open" msgid "Registrations open" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :remote_limit" msgid "Remote limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" msgid "Remote post retention days" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" msgid "Safe DM mentions" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :show_reactions" msgid "Show reactions" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :skip_thread_containment" msgid "Skip thread containment" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :static_dir" msgid "Static dir" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :upload_limit" msgid "Upload limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :user_bio_length" msgid "User bio length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instance > :user_name_length" msgid "User name length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:instances_favicons > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :base" msgid "Base" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :host" msgid "Host" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :port" msgid "Port" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :ssl" msgid "SSL" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :sslopts" msgid "SSL options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" msgid "Cacertfile" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" msgid "Verify" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :tls" msgid "TLS" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :tlsopts" msgid "TLS options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" msgid "Cacertfile" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" msgid "Verify" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:ldap > :uid" msgid "UID" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:majic_pool > :size" msgid "Size" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:manifest > :background_color" msgid "Background color" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:manifest > :icons" msgid "Icons" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:manifest > :theme_color" msgid "Theme color" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:markup > :allow_fonts" msgid "Allow fonts" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:markup > :allow_headings" msgid "Allow headings" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:markup > :allow_inline_images" msgid "Allow inline images" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:markup > :allow_tables" msgid "Allow tables" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:markup > :scrub_policy" msgid "Scrub policy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" msgid "Image quality" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" msgid "Min content length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" msgid "Thumbnail max height" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" msgid "Thumbnail max width" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :base_url" msgid "Base URL" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :invalidation" msgid "Invalidation" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" msgid "Provider" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" msgid "Advanced MediaProxy Options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" msgid "Max body length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" msgid "Max read duration" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" msgid "Redirect on failure" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:media_proxy > :whitelist" msgid "Whitelist" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:modules > :runtime_dir" msgid "Runtime dir" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf > :policies" msgid "Policies" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf > :transparency" msgid "MRF transparency" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" msgid "MRF transparency exclusions" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" msgid "Days" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" msgid "Follower nickname" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" msgid "Federated timeline removal" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_hashtag > :reject" msgid "Reject" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" msgid "Sensitive" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" msgid "Delist threshold" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" msgid "Reject threshold" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" msgid "Federated timeline removal" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_keyword > :reject" msgid "Reject" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_keyword > :replace" msgid "Replace" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_mention > :actors" msgid "Actors" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" msgid "Scrub policy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_object_age > :actions" msgid "Actions" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_object_age > :threshold" msgid "Threshold" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" msgid "Allow direct" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" msgid "Allow followers-only" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :accept" msgid "Accept" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" msgid "Avatar removal" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" msgid "Banner removal" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" msgid "Federated timeline removal" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :followers_only" msgid "Followers only" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" msgid "Media NSFW" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :media_removal" msgid "Media removal" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :reject" msgid "Reject" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" msgid "Reject deletes" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_simple > :report_removal" msgid "Report removal" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" msgid "Hosts" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" msgid "Rejected shortcodes" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" msgid "Size limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" msgid "Match actor" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" msgid "Accept" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" msgid "Reject" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" msgid "Clean expired tokens" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" msgid "Issue new refresh token" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" msgid "Token expires in" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :default" -msgid "Default" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :default > :max_waiting" -msgid "Max waiting" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" -msgid "Recv timeout" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :default > :size" -msgid "Size" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :federation" -msgid "Federation" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" -msgid "Max waiting" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" -msgid "Recv timeout" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :federation > :size" -msgid "Size" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :media" -msgid "Media" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :media > :max_waiting" -msgid "Max waiting" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" -msgid "Recv timeout" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :media > :size" -msgid "Size" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :upload" -msgid "Upload" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" -msgid "Max waiting" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" -msgid "Recv timeout" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:pools > :upload > :size" -msgid "Size" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" msgid "Fault rate allowance" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" msgid "Sleep interval ms" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" msgid "App account creation" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rate_limit > :authentication" msgid "Authentication" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" msgid "Relation ID action" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rate_limit > :relations_actions" msgid "Relations actions" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rate_limit > :search" msgid "Search" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rate_limit > :status_id_action" msgid "Status ID action" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" msgid "Statuses actions" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rate_limit > :timeline" msgid "Timeline" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" msgid "Activities" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" msgid "Local" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" msgid "Remote" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" msgid "Profiles" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" msgid "Local" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" msgid "Remote" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" msgid "Timelines" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" msgid "Federated" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" msgid "Local" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rich_media > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rich_media > :failure_backoff" msgid "Failure backoff" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" msgid "Ignore hosts" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rich_media > :ignore_tld" msgid "Ignore TLD" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rich_media > :parsers" msgid "Parsers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:rich_media > :ttl_setters" msgid "TTL setters" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:shout > :enabled" -msgid "Enabled" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:shout > :limit" -msgid "Limit" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:static_fe > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:streamer > :overflow_workers" msgid "Overflow workers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:streamer > :workers" msgid "Workers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" msgid "Valid schemes" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:user > :deny_follow_blocked" msgid "Deny follow blocked" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" msgid "Activity pub" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" msgid "Activity pub question" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:welcome > :chat_message" -msgid "Chat message" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" -msgid "Enabled" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:welcome > :chat_message > :message" -msgid "Message" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" -msgid "Sender nickname" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:welcome > :direct_message" msgid "Direct message" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome > :direct_message > :message" msgid "Message" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" msgid "Sender nickname" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome > :email" msgid "Email" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome > :email > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome > :email > :html" msgid "Html" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome > :email > :sender" msgid "Sender" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome > :email > :subject" msgid "Subject" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:welcome > :email > :text" msgid "Text" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-:workers > :retries" msgid "Retries" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" msgid "Max running" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" msgid "Max waiting" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" msgid "Pleroma.Web.RichMedia.Helpers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" msgid "Max running" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" msgid "Max waiting" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :crontab" msgid "Crontab" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :log" msgid "Log" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues" msgid "Queues" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" msgid "Activity expiration" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" msgid "Attachments cleanup" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :background" msgid "Background" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :backup" msgid "Backup" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" msgid "Federator incoming" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" msgid "Federator outgoing" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :mailer" msgid "Mailer" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" msgid "Scheduled activities" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" msgid "Transmogrifier" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Oban > :queues > :web_push" msgid "Web push" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Captcha > :method" msgid "Method" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" msgid "Seconds valid" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" msgid "Endpoint" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" msgid "Adapter" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" msgid "Mailer Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" msgid "AWS Access Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" msgid "AWS Region" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" msgid "AWS Secret Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" msgid "Dyn API Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" msgid "GMail API Access Token" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" msgid "Mailgun API Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" msgid "Domain" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" msgid "MailJet Public API Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" msgid "MailJet Private API Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" msgid "Mandrill API Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" msgid "Postmark API Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" msgid "AUTH Mode" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" msgid "Password" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" msgid "Port" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" msgid "Relay" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" msgid "Retries" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" msgid "Use SSL" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" msgid "STARTTLS Mode" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" msgid "Username" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" msgid "SendGrid API Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" msgid "Cmd args" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" msgid "Cmd path" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" msgid "Qmail compat mode" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" msgid "SocketLabs API Key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" msgid "Server ID" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" msgid "SparkPost API key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" msgid "Endpoint" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" msgid "Logo" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" msgid "Styling" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" msgid "Background color" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" msgid "Content background color" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" msgid "Header color" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" msgid "Link color" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" msgid "Text color" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" msgid "Text muted color" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Formatter > :class" msgid "Class" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" msgid "Extra" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" msgid "New window" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" msgid "Rel" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" msgid "Strip prefix" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" msgid "Truncate" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" msgid "Validate tld" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" msgid "Daily user limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" msgid "Total user limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" msgid "Base URL" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" msgid "Filename display max length" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload > :filters" msgid "Filters" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" msgid "Link name" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" msgid "Proxy remote" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" msgid "Uploader" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" msgid "Text" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" msgid "Args" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" msgid "Uploads" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" msgid "Bucket" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" msgid "Bucket namespace" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" msgid "Streaming enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" msgid "Truncated namespace" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" msgid "Email blacklist" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" msgid "Restricted nicknames" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" msgid "Limit days" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" msgid "Purge after days" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" msgid "Strict" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" msgid "Headers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" msgid "Method" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" msgid "Options" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" msgid "Params" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" msgid "Script path" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" msgid "URL Format" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" msgid "Providers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" msgid "Unfurl NSFW" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" msgid "Headers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" msgid "Proxies" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" msgid "Reserved" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" msgid "Providers" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" msgid "Enabled" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" msgid "Min lifetime" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" -msgid "Auth" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" -msgid "Enabled" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" -msgid "Format" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" -msgid "IP Whitelist" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" -msgid "Path" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :quack > :level" -msgid "Level" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :quack > :meta" -msgid "Meta" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :quack > :webhook_url" -msgid "Webhook URL" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" msgid "Private key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" msgid "Public key" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format msgctxt "config label at :web_push_encryption-:vapid_details > :subject" msgid "Subject" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" -msgid "Require HTTP signatures for AP fetches" -msgstr "" - #, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:instance > :short_description" -msgid "Shorter version of instance description. It can be seen on `/api/v1/instance`" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" msgid "Authorized fetch mode" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :pleroma-:instance > :short_description" -msgid "Short description" +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures on AP fetches" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :max_collection_objects" +msgid "The maximum number of items to fetch from a remote collections. Setting this too low can lead to only getting partial collections, but too high and you can end up fetching far too many objects." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:argos_translate" +msgid "ArgosTranslate Settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:argos_translate > :command_argos_translate" +msgid "command for `argos-translate`. Can be the command if it's in your PATH, or the full path to the file." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:argos_translate > :command_argospm" +msgid "command for `argospm`. Can be the command if it's in your PATH, or the full path to the file." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:argos_translate > :strip_html" +msgid "Strip html from the post before translating it." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:deepl" +msgid "DeepL Settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:deepl > :api_key" +msgid "API key for DeepL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:deepl > :tier" +msgid "API Tier" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe and masto_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :masto_fe" +msgid "Settings for Masto FE" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :masto_fe > :showInstanceSpecificPanel" +msgid "Whenether to show the instance's specific panel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :conversationDisplay" +msgid "How to display conversations (linear or tree)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSiteFavicon" +msgid "Whether to hide the instance favicon from the navbar" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSiteName" +msgid "Whether to hide the site name from the navbar" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :renderMisskeyMarkdown" +msgid "Whether to render Misskey-flavoured markdown" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showNavShortcuts" +msgid "Whether to put extra navigation options on the navbar" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showPanelNavShortcuts" +msgid "Whether to put timeline nav tabs on the top of the panel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showWiderShortcuts" +msgid "Whether to add extra space between navbar icons" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :stopGifs" +msgid "Whether to pause animated images until they're hovered on" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :mastodon" +msgid "Mastodon frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :mastodon > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :mastodon > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :swagger" +msgid "Swagger API reference frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :swagger > enabled" +msgid "Whether to have this enabled at all" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :swagger > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :swagger > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :pool_size" +msgid "Number of concurrent outbound HTTP requests to allow. Default 50." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :pool_timeout" +msgid "Timeout for initiating HTTP requests (in ms, default 5000)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL - of the format http://host:port. Advise setting in .exs instead of admin-fe due to this being set at boot-time." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :receive_timeout" +msgid "Timeout for waiting on remote servers to respond to HTTP requests (in ms, default 15000)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :export_prometheus_metrics" +msgid "Enable prometheus metrics (at /api/v1/akkoma/metrics)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :languages" +msgid "Languages the instance uses" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :local_bubble" +msgid "List of instances that make up your local bubble (closely-related instances). Used to populate the 'bubble' timeline (domain only)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :public" +msgid "Switching this on will allow unauthenticated users access to all public resources on your instance Switching it off is useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "(Deprecated, will be removed in next release) List of ActivityPub instances where activities will not be sent, and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instances_nodeinfo" +msgid "Control favicons for instances" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instances_nodeinfo > :enabled" +msgid "Allow/disallow getting instance nodeinfo" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:libre_translate" +msgid "LibreTranslate Settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:libre_translate > :api_key" +msgid "API key for libretranslate" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:libre_translate > :url" +msgid "URL for libretranslate" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app - this is only used for mastodon-fe" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app - this is only used for mastodon-fe" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "Obfuscate domains in MRF transparency. This is useful if the domain you're blocking contains words you don't want displayed, but still want to disclose the MRF settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_inline_quote" +msgid "Force quote post URLs inline" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix before the link" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :handle_threads" +msgid "Enable to filter replies to threads based from their originating instance, using the reject and accept rules" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow unauthenticated viewing of timelines, user profiles and statuses." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for posts." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow viewing local posts." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow viewing remote posts." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow viewing local user profiles." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow viewing remote user profiles." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow viewing the whole known network timeline." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow viewing the public timeline." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:translator" +msgid "Translation Settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:translator > :enabled" +msgid "Is translation enabled?" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:translator > :module" +msgid "Translation module." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:workers > :timeout" +msgid "Timeout for jobs, per `Oban` queue, in ms" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search" +msgid "General search settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search > :module" +msgid "Selected search module." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "The API module used by Elasticsearch. Should always be Elasticsearch.API.HTTP" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes" +msgid "The indices to set up in Elasticsearch" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities" +msgid "Config for the index to use for activities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :bulk_page_size" +msgid "Size for bulk put requests, mostly used on building the index" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :bulk_wait_interval" +msgid "Time to wait between bulk put requests (in ms)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :settings" +msgid "Path to the file containing index settings for the activities index. Should contain a mapping." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :sources" +msgid "The internal types to use for this index" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :store" +msgid "The internal store module" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :json_library" +msgid "The JSON module used to encode/decode when communicating with Elasticsearch" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :password" +msgid "Password to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Elasticsearch URL." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :username" +msgid "Username to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch" +msgid "Meilisearch settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch > :initial_indexing_chunk_size" +msgid "Amount of posts in a batch when running the initial indexing operation. Should probably not be more than 100000 since there's a limit on maximum insert size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "Private key for meilisearch authentication, or `nil` to disable private key authentication." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Meilisearch URL." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "Specific provider to hand out themes to instances that scrape index.html" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :theme_color" +msgid "The 'accent color' of the instance, used in places like misskey's instance ticker" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :max_collection_objects" +msgid "Max collection objects" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:argos_translate" +msgid "Argos translate" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:argos_translate > :command_argos_translate" +msgid "Command argos translate" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:argos_translate > :command_argospm" +msgid "Command argospm" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:argos_translate > :strip_html" +msgid "Strip html" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:deepl" +msgid "DeepL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:deepl > :api_key" +msgid "Api key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:deepl > :tier" +msgid "Tier" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :masto_fe" +msgid "Masto FE" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :masto_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :conversationDisplay" +msgid "Conversation display style" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSiteFavicon" +msgid "Hide site favicon" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSiteName" +msgid "Hide site name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :renderMisskeyMarkdown" +msgid "Render misskey markdown" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showNavShortcuts" +msgid "Show navbar shortcuts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showPanelNavShortcuts" +msgid "Show timeline panel nav shortcuts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showWiderShortcuts" +msgid "Increase navbar shortcut spacing" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :stopGifs" +msgid "Stop Gifs" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :mastodon" +msgid "Mastodon" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :mastodon > name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :mastodon > ref" +msgid "Reference" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :swagger" +msgid "Swagger" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :swagger > enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :swagger > name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :swagger > ref" +msgid "Reference" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :pool_size" +msgid "Pool size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :pool_timeout" +msgid "HTTP Pool Request Timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :receive_timeout" +msgid "HTTP Receive Timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :export_prometheus_metrics" +msgid "Export prometheus metrics" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :languages" +msgid "Languages" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :local_bubble" +msgid "Local bubble" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instances_nodeinfo" +msgid "Instances nodeinfo" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instances_nodeinfo > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:libre_translate" +msgid "Libre translate" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:libre_translate > :api_key" +msgid "Api key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:libre_translate > :url" +msgid "Url" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "MRF domain obfuscation" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_inline_quote" +msgid "MRF Inline Quote" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :handle_threads" +msgid "Apply to entire threads" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:translator" +msgid "Translator" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:translator > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:translator > :module" +msgid "Module" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:workers > :timeout" +msgid "Timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search" +msgid "Search" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search > :module" +msgid "Module" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "Api" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes" +msgid "Indexes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities" +msgid "Activities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :bulk_page_size" +msgid "Bulk page size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :bulk_wait_interval" +msgid "Bulk wait interval" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :settings" +msgid "Settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :sources" +msgid "Sources" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :store" +msgid "Store" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :json_library" +msgid "Json library" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :password" +msgid "Password" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Url" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :username" +msgid "Username" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch" +msgid "Pleroma.Search.Meilisearch" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :initial_indexing_chunk_size" +msgid "Initial indexing chunk size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "Private key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Url" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "Pleroma.Web.Metadata.Providers.Theme" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :theme_color" +msgid "Theme color" msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 10a62d2a8..2302a2f16 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -10,176 +10,266 @@ msgid "" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:122 +#, elixir-autogen, elixir-format msgid "%{name} - %{count} is not a multiple of %{multiple}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:131 +#, elixir-autogen, elixir-format msgid "%{name} - %{value} is larger than exclusive maximum %{max}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:140 +#, elixir-autogen, elixir-format msgid "%{name} - %{value} is larger than inclusive maximum %{max}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:149 +#, elixir-autogen, elixir-format msgid "%{name} - %{value} is smaller than exclusive minimum %{min}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:158 +#, elixir-autogen, elixir-format msgid "%{name} - %{value} is smaller than inclusive minimum %{min}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:102 +#, elixir-autogen, elixir-format msgid "%{name} - Array items must be unique." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:114 +#, elixir-autogen, elixir-format msgid "%{name} - Array length %{length} is larger than maxItems: %{}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:106 +#, elixir-autogen, elixir-format msgid "%{name} - Array length %{length} is smaller than minItems: %{min}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:166 +#, elixir-autogen, elixir-format msgid "%{name} - Invalid %{type}. Got: %{value}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:174 +#, elixir-autogen, elixir-format msgid "%{name} - Invalid format. Expected %{format}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:51 +#, elixir-autogen, elixir-format msgid "%{name} - Invalid schema.type. Got: %{type}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:178 +#, elixir-autogen, elixir-format msgid "%{name} - Invalid value for enum." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:95 +#, elixir-autogen, elixir-format msgid "%{name} - String length is larger than maxLength: %{length}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:88 +#, elixir-autogen, elixir-format msgid "%{name} - String length is smaller than minLength: %{length}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:63 +#, elixir-autogen, elixir-format msgid "%{name} - null value where %{type} expected." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:60 +#, elixir-autogen, elixir-format msgid "%{name} - null value." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:182 +#, elixir-autogen, elixir-format msgid "Failed to cast to any schema in %{polymorphic_type}" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:71 +#, elixir-autogen, elixir-format msgid "Failed to cast value as %{invalid_schema}. Value must be castable using `allOf` schemas listed." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:84 +#, elixir-autogen, elixir-format msgid "Failed to cast value to one of: %{failed_schemas}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:78 +#, elixir-autogen, elixir-format msgid "Failed to cast value using any of: %{failed_schemas}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:212 +#, elixir-autogen, elixir-format msgid "Invalid value for header: %{name}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:204 +#, elixir-autogen, elixir-format msgid "Missing field: %{name}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:208 +#, elixir-autogen, elixir-format msgid "Missing header: %{name}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:196 +#, elixir-autogen, elixir-format msgid "No value provided for required discriminator `%{field}`." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:216 +#, elixir-autogen, elixir-format msgid "Object property count %{property_count} is greater than maxProperties: %{max_properties}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:224 +#, elixir-autogen, elixir-format msgid "Object property count %{property_count} is less than minProperties: %{min_properties}" msgstr "" -#, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/static_fe/static_fe/error.html.eex:2 -msgid "Oops" -msgstr "" - -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:188 +#, elixir-autogen, elixir-format msgid "Unexpected field: %{name}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:200 +#, elixir-autogen, elixir-format msgid "Unknown schema: %{name}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:192 +#, elixir-autogen, elixir-format msgid "Value used as discriminator for `%{field}` matches no schemas." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/embed/show.html.eex:43 -#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:37 +#, elixir-autogen, elixir-format msgid "announces" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/embed/show.html.eex:44 -#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:38 +#, elixir-autogen, elixir-format msgid "likes" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/embed/show.html.eex:42 -#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:36 +#, elixir-autogen, elixir-format msgid "replies" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/embed/show.html.eex:27 -#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:22 +#, elixir-autogen, elixir-format msgid "sensitive media" msgstr "" + +#: lib/pleroma/web/templates/layout/static_fe.html.eex:29 +#, elixir-autogen, elixir-format +msgid "About %{instance}" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:24 +#, elixir-autogen, elixir-format +msgid "Admin" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:30 +#, elixir-autogen, elixir-format +msgid "Bot" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/conversation.html.eex:3 +#, elixir-autogen, elixir-format +msgid "Conversation" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:59 +#, elixir-autogen, elixir-format +msgid "Edited %{timeago}" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/error.html.eex:3 +#, elixir-autogen, elixir-format +msgid "Error" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:56 +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:91 +#, elixir-autogen, elixir-format +msgid "Followers" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:52 +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:84 +#, elixir-autogen, elixir-format +msgid "Following" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:53 +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:57 +#, elixir-autogen, elixir-format +msgid "Hidden" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/_attachment.html.eex:4 +#, elixir-autogen, elixir-format +msgid "Hover to show content" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:97 +#, elixir-autogen, elixir-format +msgid "Media" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:27 +#, elixir-autogen, elixir-format +msgid "Moderator" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:48 +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:73 +#, elixir-autogen, elixir-format +msgid "Posts" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:46 +#, elixir-autogen, elixir-format +msgid "Reply to" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:67 +#, elixir-autogen, elixir-format +msgid "Show content" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:102 +#, elixir-autogen, elixir-format +msgid "Show newer" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:140 +#, elixir-autogen, elixir-format +msgid "Show older" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:78 +#, elixir-autogen, elixir-format +msgid "With Replies" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:127 +#, elixir-autogen, elixir-format +msgid "repeated" +msgstr "" diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot index 85854d23e..8d62a1726 100644 --- a/priv/gettext/errors.pot +++ b/priv/gettext/errors.pot @@ -89,376 +89,363 @@ msgstr "" msgid "must be equal to %{number}" msgstr "" +#: lib/pleroma/web/common_api.ex:503 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:523 msgid "Account not found" msgstr "" +#: lib/pleroma/web/common_api.ex:263 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:316 msgid "Already voted" msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:427 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:402 msgid "Bad request" msgstr "" +#: lib/pleroma/web/controller_helper.ex:105 #, elixir-autogen, elixir-format -#: lib/pleroma/web/controller_helper.ex:97 -#: lib/pleroma/web/controller_helper.ex:103 msgid "Can't display this activity" msgstr "" +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:334 #, elixir-autogen, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:325 msgid "Can't find user" msgstr "" +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:61 #, elixir-autogen, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:80 msgid "Can't get favorites" msgstr "" +#: lib/pleroma/web/common_api/utils.ex:473 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api/utils.ex:482 msgid "Cannot post an empty status without attachments" msgstr "" +#: lib/pleroma/web/common_api/utils.ex:461 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api/utils.ex:441 msgid "Comment must be up to %{max_size} characters" msgstr "" +#: lib/pleroma/config_db.ex:199 #, elixir-autogen, elixir-format -#: lib/pleroma/config_db.ex:200 msgid "Config with params %{params} not found" msgstr "" +#: lib/pleroma/web/common_api.ex:114 +#: lib/pleroma/web/common_api.ex:118 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:167 -#: lib/pleroma/web/common_api.ex:171 msgid "Could not delete" msgstr "" +#: lib/pleroma/web/common_api.ex:164 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:217 msgid "Could not favorite" msgstr "" +#: lib/pleroma/web/common_api.ex:201 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:254 msgid "Could not unfavorite" msgstr "" +#: lib/pleroma/web/common_api.ex:149 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:202 msgid "Could not unrepeat" msgstr "" +#: lib/pleroma/web/common_api.ex:510 +#: lib/pleroma/web/common_api.ex:519 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:530 -#: lib/pleroma/web/common_api.ex:539 msgid "Could not update state" msgstr "" +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:245 #, elixir-autogen, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:205 msgid "Error." msgstr "" +#: lib/pleroma/web/twitter_api/twitter_api.ex:104 #, elixir-autogen, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:105 msgid "Invalid CAPTCHA" msgstr "" +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:143 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:660 #, elixir-autogen, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:144 -#: lib/pleroma/web/o_auth/o_auth_controller.ex:631 msgid "Invalid credentials" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:42 +#, elixir-autogen, elixir-format msgid "Invalid credentials." msgstr "" +#: lib/pleroma/web/common_api.ex:284 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:337 msgid "Invalid indices" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:29 +#, elixir-autogen, elixir-format msgid "Invalid parameters" msgstr "" +#: lib/pleroma/web/common_api/utils.ex:369 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api/utils.ex:349 msgid "Invalid password." msgstr "" +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:264 #, elixir-autogen, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:255 msgid "Invalid request" msgstr "" +#: lib/pleroma/web/twitter_api/twitter_api.ex:107 #, elixir-autogen, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:108 msgid "Kocaptcha service unavailable" msgstr "" +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:139 #, elixir-autogen, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:140 msgid "Missing parameters" msgstr "" +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:151 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:177 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:219 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api/utils.ex:477 -msgid "No such conversation" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:171 -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:197 -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:239 msgid "No such permission_group" msgstr "" -#, elixir-autogen, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:515 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:502 #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 #: lib/pleroma/web/feed/tag_controller.ex:16 -#: lib/pleroma/web/feed/user_controller.ex:69 -#: lib/pleroma/web/o_status/o_status_controller.ex:132 -#: lib/pleroma/web/plugs/uploaded_media.ex:84 +#: lib/pleroma/web/feed/user_controller.ex:70 +#: lib/pleroma/web/o_status/o_status_controller.ex:135 +#: lib/pleroma/web/plugs/uploaded_media.ex:83 +#, elixir-autogen, elixir-format msgid "Not found" msgstr "" +#: lib/pleroma/web/common_api.ex:255 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:308 msgid "Poll's author can't vote" msgstr "" -#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:477 #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 #: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:39 #: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:51 #: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:52 -#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:326 #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 +#, elixir-autogen, elixir-format msgid "Record not found" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:35 -#: lib/pleroma/web/feed/user_controller.ex:78 +#: lib/pleroma/web/feed/user_controller.ex:79 #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:42 -#: lib/pleroma/web/o_status/o_status_controller.ex:138 +#: lib/pleroma/web/o_status/o_status_controller.ex:141 +#, elixir-autogen, elixir-format msgid "Something went wrong" msgstr "" +#: lib/pleroma/web/common_api/activity_draft.ex:156 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api/activity_draft.ex:143 msgid "The message visibility must be direct" msgstr "" +#: lib/pleroma/web/common_api/utils.ex:483 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api/utils.ex:492 msgid "The status is over the character limit" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex:36 +#, elixir-autogen, elixir-format msgid "This resource requires authentication." msgstr "" +#: lib/pleroma/web/plugs/rate_limiter.ex:214 #, elixir-autogen, elixir-format -#: lib/pleroma/web/plugs/rate_limiter.ex:208 msgid "Throttled" msgstr "" +#: lib/pleroma/web/common_api.ex:285 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:338 msgid "Too many choices" msgstr "" +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:248 #, elixir-autogen, elixir-format -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:268 msgid "You can't revoke your own admin status." msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:267 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:358 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:243 -#: lib/pleroma/web/o_auth/o_auth_controller.ex:333 msgid "Your account is currently disabled" msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:229 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:381 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:205 -#: lib/pleroma/web/o_auth/o_auth_controller.ex:356 msgid "Your login is missing a confirmed e-mail address" msgstr "" +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:390 #, elixir-autogen, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:403 msgid "can't read inbox of %{nickname} as %{as_nickname}" msgstr "" +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:489 #, elixir-autogen, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:502 msgid "can't update outbox of %{nickname} as %{as_nickname}" msgstr "" +#: lib/pleroma/web/common_api.ex:455 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:475 msgid "conversation is already muted" msgstr "" +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:508 #, elixir-autogen, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:521 msgid "error" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:34 +#, elixir-autogen, elixir-format msgid "mascots can only be images" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:63 +#, elixir-autogen, elixir-format msgid "not found" msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:462 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:437 msgid "Bad OAuth request." msgstr "" +#: lib/pleroma/web/twitter_api/twitter_api.ex:113 #, elixir-autogen, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:114 msgid "CAPTCHA already used" msgstr "" +#: lib/pleroma/web/twitter_api/twitter_api.ex:110 #, elixir-autogen, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:111 msgid "CAPTCHA expired" msgstr "" +#: lib/pleroma/web/plugs/uploaded_media.ex:56 #, elixir-autogen, elixir-format -#: lib/pleroma/web/plugs/uploaded_media.ex:57 msgid "Failed" msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:478 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:453 msgid "Failed to authenticate: %{message}." msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:509 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:484 msgid "Failed to set up user account." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/o_auth_scopes_plug.ex:37 +#, elixir-autogen, elixir-format msgid "Insufficient permissions: %{permissions}." msgstr "" +#: lib/pleroma/web/plugs/uploaded_media.ex:98 #, elixir-autogen, elixir-format -#: lib/pleroma/web/plugs/uploaded_media.ex:111 msgid "Internal Error" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/fallback_controller.ex:22 #: lib/pleroma/web/o_auth/fallback_controller.ex:29 +#, elixir-autogen, elixir-format msgid "Invalid Username/Password" msgstr "" +#: lib/pleroma/web/twitter_api/twitter_api.ex:116 #, elixir-autogen, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:117 msgid "Invalid answer data" msgstr "" +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:130 #, elixir-autogen, elixir-format -#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:33 msgid "Nodeinfo schema version not handled" msgstr "" -#, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:194 -msgid "This action is outside the authorized scopes" -msgstr "" - -#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/fallback_controller.ex:14 +#, elixir-autogen, elixir-format msgid "Unknown error, please check the details and try again." msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:158 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:204 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:136 -#: lib/pleroma/web/o_auth/o_auth_controller.ex:180 msgid "Unlisted redirect_uri." msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:458 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:433 msgid "Unsupported OAuth provider: %{provider}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/uploaders/uploader.ex:74 +#, elixir-autogen, elixir-format msgid "Uploader callback timeout" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/uploader_controller.ex:23 +#, elixir-autogen, elixir-format msgid "bad request" msgstr "" +#: lib/pleroma/web/twitter_api/twitter_api.ex:101 #, elixir-autogen, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:102 msgid "CAPTCHA Error" msgstr "" +#: lib/pleroma/web/common_api.ex:213 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:266 msgid "Could not add reaction emoji" msgstr "" +#: lib/pleroma/web/common_api.ex:224 #, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api.ex:277 msgid "Could not remove reaction emoji" msgstr "" +#: lib/pleroma/web/twitter_api/twitter_api.ex:127 #, elixir-autogen, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:128 msgid "Invalid CAPTCHA (Missing parameter: %{name})" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:96 +#, elixir-autogen, elixir-format msgid "List not found" msgstr "" +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:150 #, elixir-autogen, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:151 msgid "Missing parameter: %{name}" msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:256 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:371 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:232 -#: lib/pleroma/web/o_auth/o_auth_controller.ex:346 msgid "Password reset is required" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/tests/auth_test_controller.ex:9 #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 #: lib/pleroma/web/admin_api/controllers/announcement_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/chat_controller.ex:6 #: lib/pleroma/web/admin_api/controllers/config_controller.ex:6 #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 #: lib/pleroma/web/admin_api/controllers/frontend_controller.ex:6 @@ -471,6 +458,9 @@ msgstr "" #: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 #: lib/pleroma/web/admin_api/controllers/status_controller.ex:6 #: lib/pleroma/web/admin_api/controllers/user_controller.ex:6 +#: lib/pleroma/web/akkoma_api/controllers/frontend_settings_controller.ex:2 +#: lib/pleroma/web/akkoma_api/controllers/metrics_controller.ex:2 +#: lib/pleroma/web/akkoma_api/controllers/translation_controller.ex:2 #: lib/pleroma/web/controller_helper.ex:6 #: lib/pleroma/web/embed_controller.ex:6 #: lib/pleroma/web/fallback/redirect_controller.ex:6 @@ -478,6 +468,7 @@ msgstr "" #: lib/pleroma/web/feed/user_controller.ex:6 #: lib/pleroma/web/mailer/subscription_controller.ex:6 #: lib/pleroma/web/manifest_controller.ex:6 +#: lib/pleroma/web/masto_fe_controller.ex:6 #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 #: lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex:6 #: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:11 @@ -502,6 +493,7 @@ msgstr "" #: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 #: lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/tag_controller.ex:3 #: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 #: lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 #: lib/pleroma/web/mongoose_im/mongoose_im_controller.ex:6 @@ -513,7 +505,6 @@ msgstr "" #: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/app_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/backup_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 #: lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:6 @@ -522,7 +513,6 @@ msgstr "" #: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/report_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 #: lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex:6 #: lib/pleroma/web/static_fe/static_fe_controller.ex:6 @@ -532,79 +522,99 @@ msgstr "" #: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 #: lib/pleroma/web/uploader_controller.ex:6 #: lib/pleroma/web/web_finger/web_finger_controller.ex:6 +#, elixir-autogen, elixir-format msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:32 +#, elixir-autogen, elixir-format msgid "Two-factor authentication enabled, you must use a access token." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 +#, elixir-autogen, elixir-format msgid "Web push subscription is disabled on this Pleroma instance" msgstr "" +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:214 #, elixir-autogen, elixir-format -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:234 msgid "You can't revoke your own admin/moderator status." msgstr "" +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:169 #, elixir-autogen, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:129 msgid "authorization required for timeline view" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:24 +#, elixir-autogen, elixir-format msgid "Access denied" msgstr "" +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:331 #, elixir-autogen, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:322 msgid "This API requires an authenticated user" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:26 #: lib/pleroma/web/plugs/user_is_admin_plug.ex:21 +#, elixir-autogen, elixir-format msgid "User is not an admin." msgstr "" +#: lib/pleroma/user/backup.ex:73 #, elixir-format -#: lib/pleroma/user/backup.ex:75 msgid "Last export was less than a day ago" msgid_plural "Last export was less than %{days} days ago" msgstr[0] "" msgstr[1] "" +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:421 #, elixir-autogen, elixir-format -#: lib/pleroma/user/backup.ex:93 -msgid "Backups require enabled email" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:434 msgid "Character limit (%{limit} characters) exceeded, contains %{length} characters" msgstr "" -#, elixir-autogen, elixir-format -#: lib/pleroma/user/backup.ex:98 -msgid "Email is required" -msgstr "" - -#, elixir-autogen, elixir-format -#: lib/pleroma/web/common_api/utils.ex:507 -msgid "Too many attachments" -msgstr "" - -#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:33 #: lib/pleroma/web/plugs/user_is_staff_plug.ex:20 +#, elixir-autogen, elixir-format msgid "User is not a staff member." msgstr "" +#: lib/pleroma/web/o_auth/o_auth_controller.ex:391 #, elixir-autogen, elixir-format -#: lib/pleroma/web/o_auth/o_auth_controller.ex:366 msgid "Your account is awaiting approval." msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:255 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:258 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:261 +#, elixir-autogen, elixir-format +msgid "File is too large" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/tag_controller.ex:37 +#: lib/pleroma/web/mastodon_api/controllers/tag_controller.ex:48 +#: lib/pleroma/web/mastodon_api/controllers/tag_controller.ex:59 +#, elixir-autogen, elixir-format +msgid "Hashtag not found" +msgstr "" + +#: lib/pleroma/web/common_api/activity_draft.ex:144 +#, elixir-autogen, elixir-format +msgid "Invalid language" +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:218 +#, elixir-autogen, elixir-format +msgid "This action is outside of authorized scopes" +msgstr "" + +#: lib/pleroma/web/common_api/activity_draft.ex:129 +#, elixir-autogen, elixir-format +msgid "You can only quote public or unlisted statuses" +msgstr "" + +#: lib/pleroma/web/common_api/activity_draft.ex:126 +#, elixir-autogen, elixir-format +msgid "You can't quote a status that doesn't exist" +msgstr "" diff --git a/priv/gettext/static_pages.pot b/priv/gettext/static_pages.pot index 8e1b1d9db..8fe1f3358 100644 --- a/priv/gettext/static_pages.pot +++ b/priv/gettext/static_pages.pot @@ -10,504 +10,553 @@ msgid "" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 +#, elixir-autogen, elixir-format msgctxt "remote follow authorization button" msgid "Authorize" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 +#, elixir-autogen, elixir-format msgctxt "remote follow error" msgid "Error fetching user" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 +#, elixir-autogen, elixir-format msgctxt "remote follow header" msgid "Remote follow" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 +#, elixir-autogen, elixir-format msgctxt "placeholder text for auth code entry" msgid "Authentication code" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 +#, elixir-autogen, elixir-format msgctxt "placeholder text for password entry" msgid "Password" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 +#, elixir-autogen, elixir-format msgctxt "placeholder text for username entry" msgid "Username" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 +#, elixir-autogen, elixir-format msgctxt "remote follow authorization button for login" msgid "Authorize" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 +#, elixir-autogen, elixir-format msgctxt "remote follow authorization button for mfa" msgid "Authorize" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 +#, elixir-autogen, elixir-format msgctxt "remote follow error" msgid "Error following account" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 +#, elixir-autogen, elixir-format msgctxt "remote follow header, need login" msgid "Log in to follow" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 +#, elixir-autogen, elixir-format msgctxt "remote follow mfa header" msgid "Two-factor authentication" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 +#, elixir-autogen, elixir-format msgctxt "remote follow success" msgid "Account followed!" msgstr "" -#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:7 #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 +#, elixir-autogen, elixir-format msgctxt "placeholder text for account id" msgid "Your account ID, e.g. lain@quitter.se" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 +#, elixir-autogen, elixir-format msgctxt "remote follow authorization button for following with a remote account" msgid "Follow" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 +#, elixir-autogen, elixir-format msgctxt "remote follow error" msgid "Error: %{error}" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 +#, elixir-autogen, elixir-format msgctxt "remote follow header" msgid "Remotely follow %{nickname}" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 +#, elixir-autogen, elixir-format msgctxt "password reset button" msgid "Reset" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 +#, elixir-autogen, elixir-format msgctxt "password reset failed homepage link" msgid "Homepage" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 +#, elixir-autogen, elixir-format msgctxt "password reset failed message" msgid "Password reset failed" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 +#, elixir-autogen, elixir-format msgctxt "password reset form confirm password prompt" msgid "Confirmation" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 +#, elixir-autogen, elixir-format msgctxt "password reset form password prompt" msgid "Password" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 +#, elixir-autogen, elixir-format msgctxt "password reset invalid token message" msgid "Invalid Token" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 +#, elixir-autogen, elixir-format msgctxt "password reset successful homepage link" msgid "Homepage" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 +#, elixir-autogen, elixir-format msgctxt "password reset successful message" msgid "Password changed!" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 #: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 +#, elixir-autogen, elixir-format msgctxt "tag feed description" msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:3 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 msgctxt "oauth authorization exists page title" msgid "Authorization exists" msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 msgctxt "oauth authorize approve button" msgid "Approve" msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:35 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 msgctxt "oauth authorize cancel button" msgid "Cancel" msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:26 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 msgctxt "oauth authorize message" msgid "Application %{client_name} is requesting access to your account." msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:3 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 msgctxt "oauth authorized page title" msgid "Successfully authorized" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 +#, elixir-autogen, elixir-format msgctxt "oauth external provider page title" msgid "Sign in with external provider" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 +#, elixir-autogen, elixir-format msgctxt "oauth external provider sign in button" msgid "Sign in with %{strategy}" msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:59 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 msgctxt "oauth login button" msgid "Log In" msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:56 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 msgctxt "oauth login password prompt" msgid "Password" msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:52 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 msgctxt "oauth login username prompt" msgid "Username" msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:44 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 msgctxt "oauth register nickname prompt" msgid "Pleroma Handle" msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:42 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 msgctxt "oauth register nickname unchangeable warning" msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 +#, elixir-autogen, elixir-format msgctxt "oauth register page email prompt" msgid "Email" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 +#, elixir-autogen, elixir-format msgctxt "oauth register page fill form prompt" msgid "If you'd like to register a new account, please provide the details below." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 +#, elixir-autogen, elixir-format msgctxt "oauth register page login button" msgid "Proceed as existing user" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 +#, elixir-autogen, elixir-format msgctxt "oauth register page login password prompt" msgid "Password" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 +#, elixir-autogen, elixir-format msgctxt "oauth register page login prompt" msgid "Alternatively, sign in to connect to existing account." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 +#, elixir-autogen, elixir-format msgctxt "oauth register page login username prompt" msgid "Name or email" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 +#, elixir-autogen, elixir-format msgctxt "oauth register page nickname prompt" msgid "Nickname" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 +#, elixir-autogen, elixir-format msgctxt "oauth register page register button" msgid "Proceed as new user" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 +#, elixir-autogen, elixir-format msgctxt "oauth register page title" msgid "Registration Details" msgstr "" -#, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 -msgctxt "oauth register page title" -msgid "This is the first time you visit! Please enter your Pleroma handle." -msgstr "" - -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 +#, elixir-autogen, elixir-format msgctxt "oauth scopes message" msgid "The following permissions will be granted" msgstr "" +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:6 +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:6 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 -#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 msgctxt "oauth token code message" msgid "Token code is
%{token}" msgstr "" +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:14 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 msgctxt "mfa auth code prompt" msgid "Authentication code" msgstr "" +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:9 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 msgctxt "mfa auth page title" msgid "Two-factor authentication" msgstr "" +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:25 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 msgctxt "mfa auth page use recovery code link" msgid "Enter a two-factor recovery code" msgstr "" +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:22 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 msgctxt "mfa auth verify code button" msgid "Verify" msgstr "" +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:9 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 msgctxt "mfa recover page title" msgid "Two-factor recovery" msgstr "" +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:14 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 msgctxt "mfa recover recovery code prompt" msgid "Recovery code" msgstr "" +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:25 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 msgctxt "mfa recover use 2fa code link" msgid "Enter a two-factor code" msgstr "" +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:22 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 msgctxt "mfa recover verify recovery code button" msgid "Verify" msgstr "" +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:42 #, elixir-autogen, elixir-format -#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 msgctxt "static fe profile page remote follow button" msgid "Remote follow" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:163 +#, elixir-autogen, elixir-format msgctxt "digest email header line" msgid "Hey %{nickname}, here is what you've missed!" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:544 +#, elixir-autogen, elixir-format msgctxt "digest email receiver address" msgid "The email address you are subscribed as is %{email}. " msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:538 +#, elixir-autogen, elixir-format msgctxt "digest email sending reason" msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format msgctxt "digest email unsubscribe action" msgid "To unsubscribe, please go %{here}." msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format msgctxt "digest email unsubscribe action link text" msgid "here" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 +#, elixir-autogen, elixir-format msgctxt "mailer unsubscribe failed message" msgid "UNSUBSCRIBE FAILURE" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 +#, elixir-autogen, elixir-format msgctxt "mailer unsubscribe successful message" msgid "UNSUBSCRIBE SUCCESSFUL" msgstr "" -#, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:385 +#, elixir-format msgctxt "new followers count header" msgid "%{count} New Follower" msgid_plural "%{count} New Followers" msgstr[0] "" msgstr[1] "" -#, elixir-autogen, elixir-format -#: lib/pleroma/emails/user_email.ex:356 -msgctxt "account archive email body - self-requested" -msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" -msgstr "" - -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:384 +#, elixir-autogen, elixir-format msgctxt "account archive email subject" msgid "Your account archive is ready" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:188 +#, elixir-autogen, elixir-format msgctxt "approval pending email body" msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:202 +#, elixir-autogen, elixir-format msgctxt "approval pending email subject" msgid "Your account is awaiting approval" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:158 +#, elixir-autogen, elixir-format msgctxt "confirmation email body" msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:174 +#, elixir-autogen, elixir-format msgctxt "confirmation email subject" msgid "%{instance_name} account confirmation" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:310 +#, elixir-autogen, elixir-format msgctxt "digest email subject" msgid "Your digest from %{instance_name}" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:81 +#, elixir-autogen, elixir-format msgctxt "password reset email body" msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:98 +#, elixir-autogen, elixir-format msgctxt "password reset email subject" msgid "Password reset" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:215 +#, elixir-autogen, elixir-format msgctxt "successful registration email body" msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:231 +#, elixir-autogen, elixir-format msgctxt "successful registration email subject" msgid "Account registered on %{instance_name}" msgstr "" -#, elixir-autogen, elixir-format -#: lib/pleroma/emails/user_email.ex:119 -msgctxt "user invitation email body" -msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" -msgstr "" - -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:136 +#, elixir-autogen, elixir-format msgctxt "user invitation email subject" msgid "Invitation to %{instance_name}" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:53 +#, elixir-autogen, elixir-format msgctxt "welcome email html body" msgid "Welcome to %{instance_name}!" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:41 +#, elixir-autogen, elixir-format msgctxt "welcome email subject" msgid "Welcome to %{instance_name}!" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:65 +#, elixir-autogen, elixir-format msgctxt "welcome email text body" msgid "Welcome to %{instance_name}!" msgstr "" -#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:368 +#, elixir-autogen, elixir-format msgctxt "account archive email body - admin requested" -msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgid "

Admin @%{admin_nickname} requested a full backup of your Akkoma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:356 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - self-requested" +msgid "

You requested a full backup of your Akkoma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:41 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "This is your first visit! Please enter your Akkoma handle." +msgstr "" + +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:123 +#, elixir-autogen, elixir-format +msgctxt "remote follow error message - unknown error" +msgid "Something went wrong." +msgstr "" + +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:67 +#, elixir-autogen, elixir-format +msgctxt "remote follow error message - user not found" +msgid "Could not find user" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "status interact authorization button" +msgid "Interact" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "status interact error" +msgid "Error: %{error}" +msgstr "" + +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:95 +#, elixir-autogen, elixir-format +msgctxt "status interact error message - status not found" +msgid "Could not find status" +msgstr "" + +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:144 +#, elixir-autogen, elixir-format +msgctxt "status interact error message - unknown error" +msgid "Something went wrong." +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "status interact header" +msgid "Interacting with %{nickname}'s %{status_link}" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "status interact header - status link text" +msgid "status" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:119 +#, elixir-autogen, elixir-format +msgctxt "user invitation email body" +msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Akkoma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" msgstr "" From 292f0444d01bda454d52b47abe758c61ed705033 Mon Sep 17 00:00:00 2001 From: flisk Date: Sat, 18 Feb 2023 14:59:46 +0100 Subject: [PATCH 018/178] update healthcheck route in locale string --- config/description.exs | 2 +- priv/gettext/config_descriptions.pot | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/config/description.exs b/config/description.exs index 6b151a59f..2a2d70a7b 100644 --- a/config/description.exs +++ b/config/description.exs @@ -790,7 +790,7 @@ %{ key: :healthcheck, type: :boolean, - description: "If enabled, system data will be shown on `/api/pleroma/healthcheck`" + description: "If enabled, system data will be shown on `/api/v1/pleroma/healthcheck`" }, %{ key: :remote_post_retention_days, diff --git a/priv/gettext/config_descriptions.pot b/priv/gettext/config_descriptions.pot index ba3bd90a5..c85c7cc32 100644 --- a/priv/gettext/config_descriptions.pot +++ b/priv/gettext/config_descriptions.pot @@ -1498,12 +1498,6 @@ msgctxt "config description at :pleroma-:instance > :federation_reachability_tim msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" msgstr "" -#: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format -msgctxt "config description at :pleroma-:instance > :healthcheck" -msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" -msgstr "" - #: lib/pleroma/docs/translator.ex:5 #, elixir-autogen, elixir-format msgctxt "config description at :pleroma-:instance > :instance_thumbnail" @@ -5973,3 +5967,9 @@ msgstr "" msgctxt "config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :theme_color" msgid "Theme color" msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/v1/pleroma/healthcheck`" +msgstr "" From b4952a81fe2eeec9c033bf8c69148e53e1f40be2 Mon Sep 17 00:00:00 2001 From: ilja Date: Sat, 18 Feb 2023 19:30:27 +0100 Subject: [PATCH 019/178] Interpret `\n` as newline for MFM Markdown doesn't generally consider `\n` a newline, but Misskey does for MFM. Now we do to for MFM (and not for Markdown) :) --- lib/pleroma/formatter.ex | 4 ++-- .../object_validators/article_note_page_validator.ex | 8 +++++--- lib/pleroma/web/common_api/utils.ex | 2 +- test/fixtures/misskey/mfm_x_format.json | 2 +- .../article_note_page_validator_test.exs | 2 ++ 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 575bf9b2d..fc841a550 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -124,8 +124,8 @@ def mentions_escape(text, options \\ []) do end end - def markdown_to_html(text) do - Earmark.as_html!(text, %Earmark.Options{compact_output: true}) + def markdown_to_html(text, opts \\ %{}) do + Earmark.as_html!(text, %Earmark.Options{compact_output: true} |> Map.merge(opts)) end def html_escape({text, mentions, hashtags}, type) do diff --git a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex index 09b68c977..d4beed78d 100644 --- a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex @@ -104,9 +104,9 @@ defp remote_mention_resolver( end end - # https://github.com/misskey-dev/misskey/pull/8787 - # Misskey has an awful tendency to drop all custom formatting when it sends remotely - # So this basically reprocesses their MFM source + # See https://akkoma.dev/FoundKeyGang/FoundKey/issues/343 + # Misskey/Foundkey drops some of the custom formatting when it sends remotely + # So this basically reprocesses the MFM source defp fix_misskey_content( %{"source" => %{"mediaType" => "text/x.misskeymarkdown", "content" => content}} = object ) @@ -121,6 +121,8 @@ defp fix_misskey_content( Map.put(object, "content", linked) end + # See https://github.com/misskey-dev/misskey/pull/8787 + # This is for compatibility with older Misskey instances defp fix_misskey_content(%{"_misskey_content" => content} = object) when is_binary(content) do mention_handler = fn nick, buffer, opts, acc -> remote_mention_resolver(object, nick, buffer, opts, acc) diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 345c5d10d..54918d13c 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -289,7 +289,7 @@ def format_input(text, "text/html", options) do def format_input(text, "text/x.misskeymarkdown", options) do text - |> Formatter.markdown_to_html() + |> Formatter.markdown_to_html(%{breaks: true}) |> MfmParser.Parser.parse() |> MfmParser.Encoder.to_html() |> Formatter.linkify(options) diff --git a/test/fixtures/misskey/mfm_x_format.json b/test/fixtures/misskey/mfm_x_format.json index 590e399fe..ecbbddadd 100644 --- a/test/fixtures/misskey/mfm_x_format.json +++ b/test/fixtures/misskey/mfm_x_format.json @@ -5,7 +5,7 @@ "summary": null, "content": "this does not get replaced", "source": { - "content": "@akkoma_user @remote_user @full_tag_remote_user@misskey.local.live @oops_not_a_mention linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa", + "content": "@akkoma_user @remote_user @full_tag_remote_user@misskey.local.live @oops_not_a_mention linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa\n\nsome text\nnewline", "mediaType": "text/x.misskeymarkdown" }, "published": "2022-07-10T15:37:36.368Z", diff --git a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs index 62ac5e051..523a17c17 100644 --- a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs +++ b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs @@ -136,6 +136,8 @@ test "a misskey MFM status with a content field should work and be linked", _ do assert content =~ "mfm goes here

aaa" + + assert content =~ "some text
newline" end test "a misskey MFM status with a _misskey_content field should work and be linked", _ do From 9dc3f8fcdce2fef279e1910c0e3310283caefde2 Mon Sep 17 00:00:00 2001 From: Mahito TANNO Date: Wed, 22 Feb 2023 22:43:17 +0900 Subject: [PATCH 020/178] docs: remark that Pinafore is now unmaintained --- docs/docs/clients.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/clients.md b/docs/docs/clients.md index fb8408718..12e8734c1 100644 --- a/docs/docs/clients.md +++ b/docs/docs/clients.md @@ -45,10 +45,10 @@ Apps listed here might not support all of Akkoma's features. ## Alternative Web Interfaces ### Pinafore +- Note: Pinafore is unmaintained (See [the author's original article](https://nolanlawson.com/2023/01/09/retiring-pinafore/) for details) - Homepage: - Source Code: - Contact: [@pinafore@mastodon.technology](https://mastodon.technology/users/pinafore) -- Note: Pleroma support is a secondary goal - Features: MastoAPI, No Streaming ### Sengi From 3f03f1df9cf89cc4dfc41433d7ad0ed130b15164 Mon Sep 17 00:00:00 2001 From: Mahito TANNO Date: Wed, 22 Feb 2023 22:50:18 +0900 Subject: [PATCH 021/178] docs: update URL hosting husky's sourse code --- docs/docs/clients.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/clients.md b/docs/docs/clients.md index 12e8734c1..139796471 100644 --- a/docs/docs/clients.md +++ b/docs/docs/clients.md @@ -25,7 +25,7 @@ Apps listed here might not support all of Akkoma's features. - Features: MastoAPI, Streaming Ready, Moderation, Text Formatting ### Husky -- Source code: +- Source code: - Contact: [@captainepoch@stereophonic.space](https://stereophonic.space/captainepoch) - Platforms: Android - Features: MastoAPI, No Streaming, Emoji Reactions, Text Formatting, FE Stickers From d3089ec399d3699c07ddf459eaaf2587f7dd237b Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 23 Feb 2023 11:00:55 +0000 Subject: [PATCH 022/178] Ensure we can update contentMap on update --- lib/pleroma/constants.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/constants.ex b/lib/pleroma/constants.ex index 7343ef8c3..234dde1c9 100644 --- a/lib/pleroma/constants.ex +++ b/lib/pleroma/constants.ex @@ -38,7 +38,8 @@ defmodule Pleroma.Constants do "summary", "sensitive", "attachment", - "generator" + "generator", + "contentMap" ] ) From 9f34294332bf4d433bd76f4e8a767f1828f1df45 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 23 Feb 2023 11:07:59 +0000 Subject: [PATCH 023/178] Add changelog entry --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e72b0d05..1da10fae4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## Unreleased + +## Fixed + +- Allowed contentMap to be updated on edit + ## 2023.02 ### Added From 8b2adc4fb405cfafd6cca5daa8baf8af24230a7a Mon Sep 17 00:00:00 2001 From: ilja Date: Fri, 27 Jan 2023 16:06:27 +0100 Subject: [PATCH 024/178] Rename users_ap_id_COALESCE_follower_address_index for faster db restoration By default Postgresql first restores the data and then the indexes when dumping and restoring the database. Restoring index activities_visibility_index took a very long time. users_ap_id_COALESCE_follower_address_index was later added because having this could speed up the restoration tremendously. The problem now is that restoration apparently happens in alphabetical order, so this new index wasn't created yet by the time activities_visibility_index needed it. There were several work-arounds which included more complex steps during backup/restore. By renaming this index, it should be restored first and thus activities_visibility_index can make use of it. This speeds up restoration significantly without requiring more complex or unexpected steps from people. --- ..._ap_id_coalesce_follower_address_index.exs | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 priv/repo/migrations/20230127143303_rename_index_users_ap_id_coalesce_follower_address_index.exs diff --git a/priv/repo/migrations/20230127143303_rename_index_users_ap_id_coalesce_follower_address_index.exs b/priv/repo/migrations/20230127143303_rename_index_users_ap_id_coalesce_follower_address_index.exs new file mode 100644 index 000000000..f9b9b12c7 --- /dev/null +++ b/priv/repo/migrations/20230127143303_rename_index_users_ap_id_coalesce_follower_address_index.exs @@ -0,0 +1,23 @@ +defmodule Pleroma.Repo.Migrations.RenameIndexUsersApId_COALESCEFollowerAddressIndex do + alias Pleroma.Repo + + use Ecto.Migration + + def up do + # By default Postgresql first restores the data and then the indexes when dumping and restoring the database. + # Restoring index activities_visibility_index took a very long time. + # users_ap_id_COALESCE_follower_address_index was later added because having this could speed up the restoration tremendously. + # The problem now is that restoration apparently happens in alphabetical order, so this new index wasn't created yet + # by the time activities_visibility_index needed it. + # There were several work-arounds which included more complex steps during backup/restore. + # By renaming this index, it should be restored first and thus activities_visibility_index can make use of it. + # This speeds up restoration significantly without requiring more complex or unexpected steps from people. + Repo.query!("ALTER INDEX public.\"users_ap_id_COALESCE_follower_address_index\" + RENAME TO \"aa_users_ap_id_COALESCE_follower_address_index\";") + end + + def down do + Repo.query!("ALTER INDEX public.\"aa_users_ap_id_COALESCE_follower_address_index\" + RENAME TO \"users_ap_id_COALESCE_follower_address_index\";") + end +end From 3b634dcbe7a4cbdd261872fd6f58ec64df89e199 Mon Sep 17 00:00:00 2001 From: ilja Date: Fri, 27 Jan 2023 16:20:34 +0100 Subject: [PATCH 025/178] Remove the note about activities_visibility_index We renamed another index is the previous commit so that this work-around isn't needed any more --- CHANGELOG.md | 4 +++- docs/docs/administration/backup.md | 24 +++--------------------- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1da10fae4..a611b3c06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased ## Fixed - - Allowed contentMap to be updated on edit +### Changed +- Restoring the database from a dump now goes much faster without need for work-arounds + ## 2023.02 ### Added diff --git a/docs/docs/administration/backup.md b/docs/docs/administration/backup.md index cf2f7d1b0..5c5df88ce 100644 --- a/docs/docs/administration/backup.md +++ b/docs/docs/administration/backup.md @@ -21,33 +21,15 @@ 6. Restore the database schema and akkoma role using either of the following options * You can use the original `setup_db.psql` if you have it[²]: `sudo -Hu postgres psql -f config/setup_db.psql`. * Or recreate the database and user yourself (replace the password with the one you find in the config file) `sudo -Hu postgres psql -c "CREATE USER akkoma WITH ENCRYPTED PASSWORD ''; CREATE DATABASE akkoma OWNER akkoma;"`. -7. Now restore the Akkoma instance's data into the empty database schema[¹][³]: `sudo -Hu postgres pg_restore -d akkoma -v -1 ` -8. If you installed a newer Akkoma version, you should run `MIX_ENV=prod mix ecto.migrate`[⁴]. This task performs database migrations, if there were any. +7. Now restore the Akkoma instance's data into the empty database schema[¹]: `sudo -Hu postgres pg_restore -d akkoma -v -1 ` +8. If you installed a newer Akkoma version, you should run `MIX_ENV=prod mix ecto.migrate`[³]. This task performs database migrations, if there were any. 9. Restart the Akkoma service. 10. Run `sudo -Hu postgres vacuumdb --all --analyze-in-stages`. This will quickly generate the statistics so that postgres can properly plan queries. 11. If setting up on a new server configure Nginx by using the `installation/akkoma.nginx` config sample or reference the Akkoma installation guide for your OS which contains the Nginx configuration instructions. [¹]: We assume the database name and user are both "akkoma". If not, you can find the correct name in your config files. [²]: You can recreate the `config/setup_db.psql` by running the `mix pleroma.instance gen` task again. You can ignore most of the questions, but make the database user, name, and password the same as found in your backed up config file. This will also create a new `config/generated_config.exs` file which you may delete as it is not needed. -[³]: `pg_restore` will add data before adding indexes. The indexes are added in alphabetical order. There's one index, `activities_visibility_index` which may take a long time because it can't make use of an index that's only added later. You can significantly speed up restoration by skipping this index and add it afterwards. For that, you can do the following (we assume the akkoma.pgdump is in the directory you're running the commands): - -```sh -pg_restore -l akkoma.pgdump > db.list - -# Comment out the step for creating activities_visibility_index by adding a semi colon at the start of the line -sed -i -E 's/(.*activities_visibility_index.*)/;\1/' db.list - -# We restore the database using the db.list list-file -sudo -Hu postgres pg_restore -L db.list -d akkoma -v -1 akkoma.pgdump - -# You can see the sql statement with which to create the index using -grep -Eao 'CREATE INDEX activities_visibility_index.*' akkoma.pgdump - -# Then create the index manually -# Make sure that the command to create is correct! You never know it has changed since writing this guide -sudo -Hu postgres psql -d pleroma_ynh -c "CREATE INDEX activities_visibility_index ON public.activities USING btree (public.activity_visibility(actor, recipients, data), id DESC NULLS LAST) WHERE ((data ->> 'type'::text) = 'Create'::text);" -``` -[⁴]: Prefix with `MIX_ENV=prod` to run it using the production config file. +[³]: Prefix with `MIX_ENV=prod` to run it using the production config file. ## Remove From a7ec6e039cdc9ca5a0cc744fbd51511c5ede9f29 Mon Sep 17 00:00:00 2001 From: ilja Date: Sat, 7 Jan 2023 20:52:02 +0100 Subject: [PATCH 026/178] prune_objects can prune orphaned activities We add an option to also prune remote activities who don't have existing objects any more they reference. Rn, we only check for activities who only reference one object, not an array or embeded object. --- lib/mix/tasks/pleroma/database.ex | 40 ++++++- test/mix/tasks/pleroma/database_test.exs | 128 +++++++++++++++++++++++ 2 files changed, 167 insertions(+), 1 deletion(-) diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index be59e2271..0f428ca03 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -69,7 +69,8 @@ def run(["prune_objects" | args]) do strict: [ vacuum: :boolean, keep_threads: :boolean, - keep_non_public: :boolean + keep_non_public: :boolean, + prune_orphaned_activities: :boolean ] ) @@ -94,6 +95,21 @@ def run(["prune_objects" | args]) do log_message end + log_message = + if Keyword.get(options, :prune_orphaned_activities) do + log_message <> ", pruning orphaned activities" + else + log_message + end + + log_message = + if Keyword.get(options, :vacuum) do + log_message <> + ", doing a full vacuum (you shouldn't do this as a recurring maintanance task)" + else + log_message + end + Logger.info(log_message) if Keyword.get(options, :keep_threads) do @@ -155,6 +171,28 @@ def run(["prune_objects" | args]) do end |> Repo.delete_all(timeout: :infinity) + if Keyword.get(options, :prune_orphaned_activities) do + """ + delete from public.activities + where id in ( + select a.id from public.activities a + left join public.objects o on a.data ->> 'object' = o.data ->> 'id' + left join public.activities a2 on a.data ->> 'object' = a2.data ->> 'id' + left join public.users u on a.data ->> 'object' = u.ap_id + -- Only clean up remote activities + where not a.local + -- For now we only focus on activities with direct links to objects + -- e.g. not json objects (in case of embedded objects) or json arrays (in case of multiple objects) + and jsonb_typeof(a."data" -> 'object') = 'string' + -- Find Activities that don't have existing objects + and o.id is null + and a2.id is null + and u.id is null + ) + """ + |> Repo.query() + end + prune_hashtags_query = """ DELETE FROM hashtags AS ht WHERE NOT EXISTS ( diff --git a/test/mix/tasks/pleroma/database_test.exs b/test/mix/tasks/pleroma/database_test.exs index 447a4404e..7f5cd91a9 100644 --- a/test/mix/tasks/pleroma/database_test.exs +++ b/test/mix/tasks/pleroma/database_test.exs @@ -353,6 +353,134 @@ test "with the --keep-threads option it keeps old threads with bookmarked posts" assert length(Repo.all(Object)) == 1 end + + test "We don't have unexpected tables which can contain objects that are referenced by activities" do + # We can delete orphaned activities. For that we look for the objects they reference in the 'objects', 'activities', and 'users' table. + # If someone adds another table with objects (idk, maybe with separate relations, or collections or w/e), then we need to make sure we + # add logic for that in the 'prune_objects' task so that we don't wrongly delete their corresponding activities. + # So when someone adds (or removes) a table, this test will fail. + # Either the table contains objects which can be referenced from the activities table + # => in that case the prune_objects job should be adapted so we don't delete activities who still have the referenced object. + # Or it doesn't contain objects which can be referenced from the activities table + # => in that case you can add/remove the table to/from this (sorted) list. + + assert Repo.query!( + "SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE';" + ).rows + |> Enum.sort() == [ + ["activities"], + ["announcement_read_relationships"], + ["announcements"], + ["apps"], + ["backups"], + ["bookmarks"], + ["chat_message_references"], + ["chats"], + ["config"], + ["conversation_participation_recipient_ships"], + ["conversation_participations"], + ["conversations"], + ["counter_cache"], + ["data_migration_failed_ids"], + ["data_migrations"], + ["deliveries"], + ["filters"], + ["following_relationships"], + ["hashtags"], + ["hashtags_objects"], + ["instances"], + ["lists"], + ["markers"], + ["mfa_tokens"], + ["moderation_log"], + ["notifications"], + ["oauth_authorizations"], + ["oauth_tokens"], + ["oban_jobs"], + ["oban_peers"], + ["objects"], + ["password_reset_tokens"], + ["push_subscriptions"], + ["registrations"], + ["report_notes"], + ["scheduled_activities"], + ["schema_migrations"], + ["thread_mutes"], + ["user_follows_hashtag"], + ["user_frontend_setting_profiles"], + ["user_invite_tokens"], + ["user_notes"], + ["user_relationships"], + ["users"] + ] + end + + test "it prunes orphaned activities with the --prune-orphaned-activities" do + # Add a remote activity which references an Object + %Object{} |> Map.merge(%{data: %{"id" => "object_for_activity"}}) |> Repo.insert() + + %Activity{} + |> Map.merge(%{ + local: false, + data: %{"id" => "remote_activity_with_object", "object" => "object_for_activity"} + }) + |> Repo.insert() + + # Add a remote activity which references an activity + %Activity{} + |> Map.merge(%{ + local: false, + data: %{ + "id" => "remote_activity_with_activity", + "object" => "remote_activity_with_object" + } + }) + |> Repo.insert() + + # Add a remote activity which references an Actor + %User{} |> Map.merge(%{ap_id: "actor"}) |> Repo.insert() + + %Activity{} + |> Map.merge(%{ + local: false, + data: %{"id" => "remote_activity_with_actor", "object" => "actor"} + }) + |> Repo.insert() + + # Add a remote activity without existing referenced object, activity or actor + %Activity{} + |> Map.merge(%{ + local: false, + data: %{ + "id" => "remote_activity_without_existing_referenced_object", + "object" => "non_existing" + } + }) + |> Repo.insert() + + # Add a local activity without existing referenced object, activity or actor + %Activity{} + |> Map.merge(%{ + local: true, + data: %{"id" => "local_activity_with_actor", "object" => "non_existing"} + }) + |> Repo.insert() + + # The remote activities without existing reference, and only the remote activities without existing reference, are deleted + # if, and only if, we provide the --prune-orphaned-activities option + assert length(Repo.all(Activity)) == 5 + Mix.Tasks.Pleroma.Database.run(["prune_objects"]) + assert length(Repo.all(Activity)) == 5 + Mix.Tasks.Pleroma.Database.run(["prune_objects", "--prune-orphaned-activities"]) + activities = Repo.all(Activity) + + assert "remote_activity_without_existing_referenced_object" not in Enum.map( + activities, + fn a -> a.data["id"] end + ) + + assert length(activities) == 4 + end end describe "running update_users_following_followers_counts" do From 57eef6d76492e772f83acba2402d50ecb6a69f6b Mon Sep 17 00:00:00 2001 From: ilja Date: Sun, 8 Jan 2023 18:22:53 +0100 Subject: [PATCH 027/178] prune_objects can prune orphaned activities who reference an array of objects E.g. Flag activities have an array of objects We prune the activity when NONE of the objects can be found Note that the cost of finding and deleting these is ~4x higher than finding and deleting the non-array ones Only string: Delete on activities (cost=506573.48..506580.38 rows=0 width=0) Only Array: Delete on activities (cost=3570359.68..4276365.34 rows=0 width=0) (They are still executed separately, so the total cost is the sum of the two) --- lib/mix/tasks/pleroma/database.ex | 47 ++++++++++------- test/mix/tasks/pleroma/database_test.exs | 65 +++++++++++++++++++++++- 2 files changed, 94 insertions(+), 18 deletions(-) diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index 0f428ca03..726a22d41 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -172,35 +172,48 @@ def run(["prune_objects" | args]) do |> Repo.delete_all(timeout: :infinity) if Keyword.get(options, :prune_orphaned_activities) do + # Prune activities who link to a single object """ delete from public.activities where id in ( - select a.id from public.activities a - left join public.objects o on a.data ->> 'object' = o.data ->> 'id' - left join public.activities a2 on a.data ->> 'object' = a2.data ->> 'id' - left join public.users u on a.data ->> 'object' = u.ap_id - -- Only clean up remote activities - where not a.local - -- For now we only focus on activities with direct links to objects - -- e.g. not json objects (in case of embedded objects) or json arrays (in case of multiple objects) - and jsonb_typeof(a."data" -> 'object') = 'string' - -- Find Activities that don't have existing objects - and o.id is null - and a2.id is null - and u.id is null + select a.id from public.activities a + left join public.objects o on a.data ->> 'object' = o.data ->> 'id' + left join public.activities a2 on a.data ->> 'object' = a2.data ->> 'id' + left join public.users u on a.data ->> 'object' = u.ap_id + where not a.local + and jsonb_typeof(a."data" -> 'object') = 'string' + and o.id is null + and a2.id is null + and u.id is null ) """ - |> Repo.query() + |> Repo.query([], timeout: :infinity) + + # Prune activities who link to an array of objects + """ + delete from public.activities + where id in ( + select a.id from public.activities a + join json_array_elements_text((a."data" -> 'object')::json) as j on jsonb_typeof(a."data" -> 'object') = 'array' + left join public.objects o on j.value = o.data ->> 'id' + left join public.activities a2 on j.value = a2.data ->> 'id' + left join public.users u on j.value = u.ap_id + group by a.id + having max(o.data ->> 'id') is null + and max(a2.data ->> 'id') is null + and max(u.ap_id) is null + ) + """ + |> Repo.query([], timeout: :infinity) end - prune_hashtags_query = """ + """ DELETE FROM hashtags AS ht WHERE NOT EXISTS ( SELECT 1 FROM hashtags_objects hto WHERE ht.id = hto.hashtag_id) """ - - Repo.query(prune_hashtags_query) + |> Repo.query() if Keyword.get(options, :vacuum) do Maintenance.vacuum("full") diff --git a/test/mix/tasks/pleroma/database_test.exs b/test/mix/tasks/pleroma/database_test.exs index 7f5cd91a9..402856f3d 100644 --- a/test/mix/tasks/pleroma/database_test.exs +++ b/test/mix/tasks/pleroma/database_test.exs @@ -354,7 +354,7 @@ test "with the --keep-threads option it keeps old threads with bookmarked posts" assert length(Repo.all(Object)) == 1 end - test "We don't have unexpected tables which can contain objects that are referenced by activities" do + test "We don't have unexpected tables which may contain objects that are referenced by activities" do # We can delete orphaned activities. For that we look for the objects they reference in the 'objects', 'activities', and 'users' table. # If someone adds another table with objects (idk, maybe with separate relations, or collections or w/e), then we need to make sure we # add logic for that in the 'prune_objects' task so that we don't wrongly delete their corresponding activities. @@ -481,6 +481,69 @@ test "it prunes orphaned activities with the --prune-orphaned-activities" do assert length(activities) == 4 end + + test "it prunes orphaned activities with the --prune-orphaned-activities when the objects are referenced from an array" do + %Object{} |> Map.merge(%{data: %{"id" => "existing_object"}}) |> Repo.insert() + %User{} |> Map.merge(%{ap_id: "existing_actor"}) |> Repo.insert() + + # Multiple objects, one object exists (keep) + %Activity{} + |> Map.merge(%{ + local: false, + data: %{ + "id" => "remote_activity_existing_object", + "object" => ["non_ existing_object", "existing_object"] + } + }) + |> Repo.insert() + + # Multiple objects, one actor exists (keep) + %Activity{} + |> Map.merge(%{ + local: false, + data: %{ + "id" => "remote_activity_existing_actor", + "object" => ["non_ existing_object", "existing_actor"] + } + }) + |> Repo.insert() + + # Multiple objects, one activity exists (keep) + %Activity{} + |> Map.merge(%{ + local: false, + data: %{ + "id" => "remote_activity_existing_activity", + "object" => ["non_ existing_object", "remote_activity_existing_actor"] + } + }) + |> Repo.insert() + + # Multiple objects none exist (prune) + %Activity{} + |> Map.merge(%{ + local: false, + data: %{ + "id" => "remote_activity_without_existing_referenced_object", + "object" => ["owo", "whats_this"] + } + }) + |> Repo.insert() + + assert length(Repo.all(Activity)) == 4 + Mix.Tasks.Pleroma.Database.run(["prune_objects"]) + assert length(Repo.all(Activity)) == 4 + Mix.Tasks.Pleroma.Database.run(["prune_objects", "--prune-orphaned-activities"]) + activities = Repo.all(Activity) + assert length(activities) == 3 + + assert "remote_activity_without_existing_referenced_object" not in Enum.map( + activities, + fn a -> a.data["id"] end + ) + + assert length(activities) == 3 + end end describe "running update_users_following_followers_counts" do From c1c962e1a80873a22cdc328fffb446f550892b10 Mon Sep 17 00:00:00 2001 From: ilja Date: Mon, 23 Jan 2023 09:07:44 +0100 Subject: [PATCH 028/178] Add docs for pleroma_ctl database prune_objects --prune-orphaned-activities I also added extra info on VACUUM FULL --- docs/docs/administration/CLI_tasks/database.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/docs/administration/CLI_tasks/database.md b/docs/docs/administration/CLI_tasks/database.md index 915139cf7..3d7424d1c 100644 --- a/docs/docs/administration/CLI_tasks/database.md +++ b/docs/docs/administration/CLI_tasks/database.md @@ -21,7 +21,6 @@ Replaces embedded objects with references to them in the `objects` table. Only n mix pleroma.database remove_embedded_objects [option ...] ``` - ### Options - `--vacuum` - run `VACUUM FULL` after the embedded objects are replaced with their references @@ -29,8 +28,11 @@ Replaces embedded objects with references to them in the `objects` table. Only n This will prune remote posts older than 90 days (configurable with [`config :pleroma, :instance, remote_post_retention_days`](../../configuration/cheatsheet.md#instance)) from the database. Pruned posts may be refetched in some cases. +!!! note + The disk space will only be reclaimed after a proper vacuum. By default Postgresql does this for you on a regular basis, but if your instance has been running for a long time and there are many rows deleted, it may be advantageous to use `VACUUM FULL` (e.g. by using the `--vacuum` option). + !!! danger - The disk space will only be reclaimed after `VACUUM FULL`. You may run out of disk space during the execution of the task or vacuuming if you don't have about 1/3rds of the database size free. + You may run out of disk space during the execution of the task or vacuuming if you don't have about 1/3rds of the database size free. Vacuum causes a substantial increase in I/O traffic, and may lead to a degraded experience while it is running. === "OTP" @@ -46,9 +48,10 @@ This will prune remote posts older than 90 days (configurable with [`config :ple ### Options -- `--keep-threads` - don't prune posts when they are part of a thread where at least one post has seen local interaction (e.g. one of the posts is a local post, or is favourited by a local user, or has been repeated by a local user...) -- `--keep-non-public` - keep non-public posts like DM's and followers-only, even if they are remote -- `--vacuum` - run `VACUUM FULL` after the objects are pruned +- `--keep-threads` - Don't prune posts when they are part of a thread where at least one post has seen local interaction (e.g. one of the posts is a local post, or is favourited by a local user, or has been repeated by a local user...). It also wont delete posts when at least one of the posts in that thread is kept (e.g. because one of the posts has seen recent activity). +- `--keep-non-public` - Keep non-public posts like DM's and followers-only, even if they are remote. +- `--prune-orphaned-activities` - Also prune orphaned activities afterwards. Activities are things like Like, Create, Announce, Flag (aka reports)... They can significantly help reduce the database size. +- `--vacuum` - Run `VACUUM FULL` after the objects are pruned. This should not be used on a regular basis, but is useful if your instance has been running for a long time before pruning. ## Create a conversation for all existing DMs @@ -96,6 +99,9 @@ Can be safely re-run ## Vacuum the database +!!! note + By default Postgresql has an autovacuum deamon running. While the tasks described here can help in some cases, they shouldn't be needed on a regular basis. See [the Postgresql docs on vacuuming](https://www.postgresql.org/docs/current/sql-vacuum.html) for more information on this. + ### Analyze Running an `analyze` vacuum job can improve performance by updating statistics used by the query planner. **It is safe to cancel this.** From 328b4d93b750f181966b08bff048f0912e2ad6b3 Mon Sep 17 00:00:00 2001 From: ilja Date: Mon, 23 Jan 2023 09:43:16 +0100 Subject: [PATCH 029/178] Changelog + remove some unneeded comments from the tests --- CHANGELOG.md | 4 +++- test/mix/tasks/pleroma/database_test.exs | 11 ----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1da10fae4..0295b1860 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased ## Fixed - - Allowed contentMap to be updated on edit +### Added +- Extend the mix task `prune_objects` with option `--prune-orphaned-activities` to also prune orphaned activities, allowing to reclaim even more database space + ## 2023.02 ### Added diff --git a/test/mix/tasks/pleroma/database_test.exs b/test/mix/tasks/pleroma/database_test.exs index 402856f3d..9edb2c115 100644 --- a/test/mix/tasks/pleroma/database_test.exs +++ b/test/mix/tasks/pleroma/database_test.exs @@ -416,7 +416,6 @@ test "We don't have unexpected tables which may contain objects that are referen end test "it prunes orphaned activities with the --prune-orphaned-activities" do - # Add a remote activity which references an Object %Object{} |> Map.merge(%{data: %{"id" => "object_for_activity"}}) |> Repo.insert() %Activity{} @@ -426,7 +425,6 @@ test "it prunes orphaned activities with the --prune-orphaned-activities" do }) |> Repo.insert() - # Add a remote activity which references an activity %Activity{} |> Map.merge(%{ local: false, @@ -437,7 +435,6 @@ test "it prunes orphaned activities with the --prune-orphaned-activities" do }) |> Repo.insert() - # Add a remote activity which references an Actor %User{} |> Map.merge(%{ap_id: "actor"}) |> Repo.insert() %Activity{} @@ -447,7 +444,6 @@ test "it prunes orphaned activities with the --prune-orphaned-activities" do }) |> Repo.insert() - # Add a remote activity without existing referenced object, activity or actor %Activity{} |> Map.merge(%{ local: false, @@ -458,7 +454,6 @@ test "it prunes orphaned activities with the --prune-orphaned-activities" do }) |> Repo.insert() - # Add a local activity without existing referenced object, activity or actor %Activity{} |> Map.merge(%{ local: true, @@ -466,8 +461,6 @@ test "it prunes orphaned activities with the --prune-orphaned-activities" do }) |> Repo.insert() - # The remote activities without existing reference, and only the remote activities without existing reference, are deleted - # if, and only if, we provide the --prune-orphaned-activities option assert length(Repo.all(Activity)) == 5 Mix.Tasks.Pleroma.Database.run(["prune_objects"]) assert length(Repo.all(Activity)) == 5 @@ -486,7 +479,6 @@ test "it prunes orphaned activities with the --prune-orphaned-activities when th %Object{} |> Map.merge(%{data: %{"id" => "existing_object"}}) |> Repo.insert() %User{} |> Map.merge(%{ap_id: "existing_actor"}) |> Repo.insert() - # Multiple objects, one object exists (keep) %Activity{} |> Map.merge(%{ local: false, @@ -497,7 +489,6 @@ test "it prunes orphaned activities with the --prune-orphaned-activities when th }) |> Repo.insert() - # Multiple objects, one actor exists (keep) %Activity{} |> Map.merge(%{ local: false, @@ -508,7 +499,6 @@ test "it prunes orphaned activities with the --prune-orphaned-activities when th }) |> Repo.insert() - # Multiple objects, one activity exists (keep) %Activity{} |> Map.merge(%{ local: false, @@ -519,7 +509,6 @@ test "it prunes orphaned activities with the --prune-orphaned-activities when th }) |> Repo.insert() - # Multiple objects none exist (prune) %Activity{} |> Map.merge(%{ local: false, From 08d49fba7d52e3eda5292913f1a466326f6b0cdf Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 26 Feb 2023 21:25:57 +0000 Subject: [PATCH 030/178] fine then no fun allowed, y'all don't deserve it --- priv/scrubbers/default.ex | 2 -- 1 file changed, 2 deletions(-) diff --git a/priv/scrubbers/default.ex b/priv/scrubbers/default.ex index 771f27ac1..37ffaef3a 100644 --- a/priv/scrubbers/default.ex +++ b/priv/scrubbers/default.ex @@ -56,8 +56,6 @@ defmodule Pleroma.HTML.Scrubber.Default do Meta.allow_tag_with_these_attributes(:u, []) Meta.allow_tag_with_these_attributes(:ul, []) - Meta.allow_tags_with_style_attributes([:span]) - Meta.allow_tag_with_this_attribute_values(:span, "class", [ "h-card", "quote-inline", From 45a11aa20ff9dd1909ec5bee54abcafbf50f4c6f Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 26 Feb 2023 22:12:31 +0000 Subject: [PATCH 031/178] add changelog entry for MFM --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef288366e..859a09e7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - Extend the mix task `prune_objects` with option `--prune-orphaned-activities` to also prune orphaned activities, allowing to reclaim even more database space +### Removed +- Possibility of using the `style` parameter on `span` elements. This will break certain MFM parameters. + ## 2023.02 ### Added From 531a55018429236d01db83832b7525b0a99a346e Mon Sep 17 00:00:00 2001 From: flisk Date: Sat, 18 Feb 2023 14:13:04 +0100 Subject: [PATCH 032/178] fix invalid proxy_hide_header in example config --- docs/docs/configuration/storing_remote_media.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/docs/configuration/storing_remote_media.md b/docs/docs/configuration/storing_remote_media.md index ebea01339..1d60053ca 100644 --- a/docs/docs/configuration/storing_remote_media.md +++ b/docs/docs/configuration/storing_remote_media.md @@ -23,7 +23,8 @@ as soon as the post is received by your instance. proxy_buffering on; chunked_transfer_encoding on; proxy_ignore_headers Cache-Control Expires; - proxy_hide_header Cache-Control Expires; + proxy_hide_header Cache-Control; + proxy_hide_header Expires; proxy_pass http://127.0.0.1:4000; } ``` From cb28b8f0fea6fba2e5370dec6e35da1e022a93bd Mon Sep 17 00:00:00 2001 From: flisk Date: Sun, 26 Feb 2023 23:42:28 +0100 Subject: [PATCH 033/178] updating docs: start akko first, then upgrade frontend --- docs/docs/administration/updating.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/docs/administration/updating.md b/docs/docs/administration/updating.md index d0c955e1a..6cea56e5c 100644 --- a/docs/docs/administration/updating.md +++ b/docs/docs/administration/updating.md @@ -26,11 +26,11 @@ su -s "$SHELL" akkoma # Run database migrations ./bin/pleroma_ctl migrate -# Update frontend(s). See Frontend Configuration doc for more information. -./bin/pleroma_ctl frontend install pleroma-fe --ref stable - # Start akkoma ./bin/pleroma daemon # or using the system service manager (e.g. systemctl start akkoma) + +# Update frontend(s). See Frontend Configuration doc for more information. +./bin/pleroma_ctl frontend install pleroma-fe --ref stable ``` If you selected an alternate flavour on installation, @@ -59,9 +59,9 @@ sudo systemctl stop akkoma # Run database migrations mix ecto.migrate -# Update Pleroma-FE frontend to latest stable. For other Frontends see Frontend Configration doc for more information. -mix pleroma.frontend install pleroma-fe --ref stable - # Start akkoma (replace with your system service manager's equivalent if different) sudo systemctl start akkoma + +# Update Pleroma-FE frontend to latest stable. For other Frontends see Frontend Configuration doc for more information. +mix pleroma.frontend install pleroma-fe --ref stable ``` From 1ab0b3a0e23c7c6648e42093b18fdeec7dfa7fab Mon Sep 17 00:00:00 2001 From: flisk Date: Sun, 26 Feb 2023 23:39:18 +0100 Subject: [PATCH 034/178] match nginx config to install config and extend docs a bit --- .../configuration/storing_remote_media.md | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/docs/docs/configuration/storing_remote_media.md b/docs/docs/configuration/storing_remote_media.md index 1d60053ca..deb1651b8 100644 --- a/docs/docs/configuration/storing_remote_media.md +++ b/docs/docs/configuration/storing_remote_media.md @@ -6,34 +6,46 @@ as soon as the post is received by your instance. ## Nginx -``` - proxy_cache_path /long/term/storage/path/akkoma-media-cache levels=1:2 - keys_zone=akkoma_media_cache:10m inactive=1y use_temp_path=off; +The following are excerpts from the [suggested nginx config](../../../installation/nginx/akkoma.nginx) that demonstrates the necessary config for the media proxy to work. +A `proxy_cache_path` must be defined, for example: + +``` +proxy_cache_path /long/term/storage/path/akkoma-media-cache levels=1:2 + keys_zone=akkoma_media_cache:10m inactive=1y use_temp_path=off; +``` + +The `proxy_cache_path` must then be configured for use with media proxy paths: + +``` location ~ ^/(media|proxy) { proxy_cache akkoma_media_cache; slice 1m; proxy_cache_key $host$uri$is_args$args$slice_range; proxy_set_header Range $slice_range; - proxy_http_version 1.1; - proxy_cache_valid 206 301 302 304 1h; - proxy_cache_valid 200 1y; - proxy_cache_use_stale error timeout invalid_header updating; + proxy_cache_valid 200 206 301 304 1h; + proxy_cache_lock on; proxy_ignore_client_abort on; proxy_buffering on; chunked_transfer_encoding on; - proxy_ignore_headers Cache-Control Expires; - proxy_hide_header Cache-Control; - proxy_hide_header Expires; - proxy_pass http://127.0.0.1:4000; + proxy_pass http://phoenix; } +} ``` +Ensure that `proxy_http_version 1.1;` is set for the above `location` block. In the suggested config, this is already the case. + ## Akkoma -Add to your `prod.secret.exs`: +### File-based Configuration + +If you're using static file configuration, add the `MediaProxyWarmingPolicy` to your MRF policies. For example: ``` config :pleroma, :mrf, policies: [Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy] ``` + +### Database Configuration + +In the admin interface, add `MediaProxyWarmingPolicy` to the `Policies` option under `Settings` → `MRF`. From b88e6560e0775aa15e47fd50e34fe9dfc0c1ae80 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 2 Mar 2023 11:04:27 +0000 Subject: [PATCH 035/178] Reblog content should be "" Fixes #450 --- lib/pleroma/web/mastodon_api/views/status_view.ex | 2 +- .../object_validators/article_note_page_validator_test.exs | 2 +- test/pleroma/web/mastodon_api/views/status_view_test.exs | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 48756e78b..79438571c 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -183,7 +183,7 @@ def render( in_reply_to_id: nil, in_reply_to_account_id: nil, reblog: reblogged, - content: reblogged[:content] || "", + content: "", created_at: created_at, reblogs_count: 0, replies_count: 0, diff --git a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs index 523a17c17..f1aee27d4 100644 --- a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs +++ b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs @@ -135,7 +135,7 @@ test "a misskey MFM status with a content field should work and be linked", _ do assert content =~ "@oops_not_a_mention" assert content =~ - "mfm goes here

aaa" + "mfm goes here

aaa" assert content =~ "some text
newline" end diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index b3f0a1781..682c633f4 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -594,6 +594,7 @@ test "a reblog" do represented = StatusView.render("show.json", %{for: user, activity: reblog}) assert represented[:id] == to_string(reblog.id) + assert represented[:content] == "" assert represented[:reblog][:id] == to_string(activity.id) assert represented[:emojis] == [] assert_schema(represented, "Status", Pleroma.Web.ApiSpec.spec()) From 87d5e5b06a9fff960c1918ba4256c43e2545abc5 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 8 Mar 2023 17:39:35 +0000 Subject: [PATCH 036/178] Allow moderators to get the admin scope again Fixes #463 --- lib/pleroma/web/o_auth/scopes.ex | 2 ++ .../web/o_auth/o_auth_controller_test.exs | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/lib/pleroma/web/o_auth/scopes.ex b/lib/pleroma/web/o_auth/scopes.ex index 344ecd631..a170eb33b 100644 --- a/lib/pleroma/web/o_auth/scopes.ex +++ b/lib/pleroma/web/o_auth/scopes.ex @@ -71,6 +71,8 @@ def validate(scopes, app_scopes, _user) do """ def filter_admin_scopes(scopes, %Pleroma.User{is_admin: true}), do: scopes + def filter_admin_scopes(scopes, %Pleroma.User{is_moderator: true}), do: scopes + def filter_admin_scopes(scopes, _user) do drop_scopes = OAuthScopesPlug.filter_descendants(scopes, ["admin"]) Enum.reject(scopes, fn scope -> Enum.member?(drop_scopes, scope) end) diff --git a/test/pleroma/web/o_auth/o_auth_controller_test.exs b/test/pleroma/web/o_auth/o_auth_controller_test.exs index 303bc2cf2..9924023fe 100644 --- a/test/pleroma/web/o_auth/o_auth_controller_test.exs +++ b/test/pleroma/web/o_auth/o_auth_controller_test.exs @@ -728,6 +728,42 @@ test "redirects with oauth authorization, " <> assert auth.scopes == scopes_subset end + test "redirects with oauth authorization, " <> + "granting requested app-supported scopes to moderators" do + app_scopes = ["read", "write", "admin", "secret_scope"] + app = insert(:oauth_app, scopes: app_scopes) + redirect_uri = OAuthController.default_redirect_uri(app) + scopes_subset = ["read:subscope", "write", "admin"] + admin = insert(:user, is_moderator: true) + + # In case scope param is missing, expecting _all_ app-supported scopes to be granted + conn = + post( + build_conn(), + "/oauth/authorize", + %{ + "authorization" => %{ + "name" => admin.nickname, + "password" => "test", + "client_id" => app.client_id, + "redirect_uri" => redirect_uri, + "scope" => scopes_subset, + "state" => "statepassed" + } + } + ) + + target = redirected_to(conn) + assert target =~ redirect_uri + + query = URI.parse(target).query |> URI.query_decoder() |> Map.new() + + assert %{"state" => "statepassed", "code" => code} = query + auth = Repo.get_by(Authorization, token: code) + assert auth + assert auth.scopes == scopes_subset + end + test "redirects with oauth authorization, " <> "granting requested app-supported scopes for non-admin users" do app_scopes = ["read", "write", "secret_scope", "admin"] From 8a4437d2bee6ae5f07935a8a6471e8c8dac7f3b1 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 9 Mar 2023 19:13:14 +0000 Subject: [PATCH 037/178] Allow expires_at in filter requests Fixes #492 --- .../api_spec/operations/filter_operation.ex | 6 ++++ lib/pleroma/web/plugs/http_security_plug.ex | 2 ++ .../masto_fe/fedibird.index.html.eex | 1 + .../controllers/filter_controller_test.exs | 34 +++++++++++++++++++ .../web/o_auth/o_auth_controller_test.exs | 2 +- 5 files changed, 44 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/filter_operation.ex b/lib/pleroma/web/api_spec/operations/filter_operation.ex index 5102921bc..ac0444aef 100644 --- a/lib/pleroma/web/api_spec/operations/filter_operation.ex +++ b/lib/pleroma/web/api_spec/operations/filter_operation.ex @@ -225,6 +225,12 @@ defp update_request do type: :integer, description: "Number of seconds from now the filter should expire. Otherwise, null for a filter that doesn't expire." + }, + expires_at: %Schema{ + nullable: true, + type: :string, + description: + "When the filter should no longer be applied. String (ISO 8601 Datetime), or null if the filter does not expire." } }, required: [:phrase, :context], diff --git a/lib/pleroma/web/plugs/http_security_plug.ex b/lib/pleroma/web/plugs/http_security_plug.ex index b1f1ada94..6841b13aa 100644 --- a/lib/pleroma/web/plugs/http_security_plug.ex +++ b/lib/pleroma/web/plugs/http_security_plug.ex @@ -116,6 +116,8 @@ defp csp_string(conn) do script_src = "script-src 'self' '#{nonce_tag}'" + script_src = if Mix.env() == :dev, do: [script_src, " 'unsafe-eval'"], else: script_src + report = if report_uri, do: ["report-uri ", report_uri, ";report-to csp-endpoint"] insecure = if scheme == "https", do: "upgrade-insecure-requests" diff --git a/lib/pleroma/web/templates/masto_fe/fedibird.index.html.eex b/lib/pleroma/web/templates/masto_fe/fedibird.index.html.eex index 02c421831..6730c0ecc 100644 --- a/lib/pleroma/web/templates/masto_fe/fedibird.index.html.eex +++ b/lib/pleroma/web/templates/masto_fe/fedibird.index.html.eex @@ -19,6 +19,7 @@ + diff --git a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs index 99f037483..1d8a67e6b 100644 --- a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs @@ -85,6 +85,40 @@ test "a filter with expires_in", %{conn: conn, user: user} do assert Repo.aggregate(Filter, :count, :id) == 0 end + + test "a filter with expires_at", %{conn: conn, user: user} do + response = + with_mock NaiveDateTime, [:passthrough], utc_now: fn -> ~N[2017-03-17 17:09:58] end do + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/filters", %{ + "phrase" => "bad memes", + context: ["home"], + expires_at: "2017-03-17T17:19:58.000Z" + }) + |> json_response_and_validate_schema(200) + end + + assert response["irreversible"] == false + + assert response["expires_at"] == "2017-03-17T17:19:58.000Z" + + filter = Filter.get(response["id"], user) + + id = filter.id + + assert_enqueued( + worker: PurgeExpiredFilter, + args: %{filter_id: filter.id} + ) + + assert {:ok, %{id: ^id}} = + perform_job(PurgeExpiredFilter, %{ + filter_id: filter.id + }) + + assert Repo.aggregate(Filter, :count, :id) == 0 + end end test "fetching a list of filters" do diff --git a/test/pleroma/web/o_auth/o_auth_controller_test.exs b/test/pleroma/web/o_auth/o_auth_controller_test.exs index 9924023fe..c996a403c 100644 --- a/test/pleroma/web/o_auth/o_auth_controller_test.exs +++ b/test/pleroma/web/o_auth/o_auth_controller_test.exs @@ -729,7 +729,7 @@ test "redirects with oauth authorization, " <> end test "redirects with oauth authorization, " <> - "granting requested app-supported scopes to moderators" do + "granting requested app-supported scopes to moderators" do app_scopes = ["read", "write", "admin", "secret_scope"] app = insert(:oauth_app, scopes: app_scopes) redirect_uri = OAuthController.default_redirect_uri(app) From 964a85531948a9fa338f8277e18aecb8ca2f4c4e Mon Sep 17 00:00:00 2001 From: foxing Date: Thu, 9 Mar 2023 20:40:28 +0000 Subject: [PATCH 038/178] Display Quote posts in the api features list to allow external clients to enable compatibility with it. (#496) Expose quote posting in the api as a feature. Copies what the quote post PR for pleroma does to allow external clients to enable and disable features based on the feature-set of the instance. As far as I am aware, akkoma doesn't allow you to disable quote posting, so this doesn't need anything fancy and it's just a hard on switch. I tried to get one for the bubble tl to work also, but I'm not quite sure how to do it so that it switches off the feature when the bubble tl is disabled. I would argue that it could and ideally should be done as well though. I also discovered a pretty tame bug in the testing of it, that deleting the DB entry for the bubble tl does not stop the bubble TL from actually working and it will continue to display the panel on the about page, I'll just leave it as a note here. Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/496 Co-authored-by: foxing Co-committed-by: foxing --- lib/pleroma/web/mastodon_api/views/instance_view.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index 4fed1af74..2717da99d 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -65,6 +65,7 @@ def features do "shareable_emoji_packs", "multifetch", "pleroma:api/v1/notifications:include_types_filter", + "quote_posting", "editing", if Config.get([:media_proxy, :enabled]) do "media_proxy" From b2112302ce49a4bdf0d0a0779854cd9f1a838ff3 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 10 Mar 2023 03:51:24 +0000 Subject: [PATCH 039/178] Add more information about failed verifications --- lib/pleroma/user.ex | 10 +++++++--- lib/pleroma/web/rel_me.ex | 15 +++++++++------ test/pleroma/web/rel_me_test.exs | 7 +++---- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 7a1e5628e..f94202af5 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -2077,10 +2077,14 @@ def parse_bio(bio, user) when is_binary(bio) and bio != "" do # TODO: get profile URLs other than user.ap_id profile_urls = [user.ap_id] - bio - |> CommonUtils.format_input("text/plain", + CommonUtils.format_input(bio, "text/plain", mentions_format: :full, - rel: &RelMe.maybe_put_rel_me(&1, profile_urls) + rel: fn link -> + case RelMe.maybe_put_rel_me(link, profile_urls) do + "me" -> "me" + _ -> nil + end + end ) |> elem(0) end diff --git a/lib/pleroma/web/rel_me.ex b/lib/pleroma/web/rel_me.ex index 98a3ae8ee..afb525dbe 100644 --- a/lib/pleroma/web/rel_me.ex +++ b/lib/pleroma/web/rel_me.ex @@ -37,15 +37,18 @@ defp parse_url(url) do end def maybe_put_rel_me("http" <> _ = target_page, profile_urls) when is_list(profile_urls) do - {:ok, rel_me_hrefs} = parse(target_page) - true = Enum.any?(rel_me_hrefs, fn x -> x in profile_urls end) - - "me" + with {:parse, {:ok, rel_me_hrefs}} <- {:parse, parse(target_page)}, + {:link_match, true} <- + {:link_match, Enum.any?(rel_me_hrefs, fn x -> x in profile_urls end)} do + "me" + else + e -> {:error, {:could_not_verify, target_page, e}} + end rescue - _ -> nil + e -> {:error, {:could_not_fetch, target_page, e}} end def maybe_put_rel_me(_, _) do - nil + {:error, :invalid_url} end end diff --git a/test/pleroma/web/rel_me_test.exs b/test/pleroma/web/rel_me_test.exs index 313b163b5..fc7abd732 100644 --- a/test/pleroma/web/rel_me_test.exs +++ b/test/pleroma/web/rel_me_test.exs @@ -26,13 +26,12 @@ test "parse/1" do test "maybe_put_rel_me/2" do profile_urls = ["https://social.example.org/users/lain"] attr = "me" - fallback = nil assert Pleroma.Web.RelMe.maybe_put_rel_me("http://example.com/rel_me/null", profile_urls) == - fallback + {:error, {:could_not_verify, "http://example.com/rel_me/null", {:link_match, false}}} - assert Pleroma.Web.RelMe.maybe_put_rel_me("http://example.com/rel_me/error", profile_urls) == - fallback + assert {:error, {:could_not_fetch, "http://example.com/rel_me/error", _}} = + Pleroma.Web.RelMe.maybe_put_rel_me("http://example.com/rel_me/error", profile_urls) assert Pleroma.Web.RelMe.maybe_put_rel_me("http://example.com/rel_me/anchor", profile_urls) == attr From f1e836b1838a11232c5bc8978ee1f0cc7c6d226e Mon Sep 17 00:00:00 2001 From: quad Date: Fri, 10 Mar 2023 15:51:56 +0000 Subject: [PATCH 040/178] Fix typo in installation/akkoma.service --- installation/akkoma.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installation/akkoma.service b/installation/akkoma.service index 3d7c062ff..012e9185e 100644 --- a/installation/akkoma.service +++ b/installation/akkoma.service @@ -7,7 +7,7 @@ ExecReload=/bin/kill $MAINPID Restart=on-failure ; Uncomment this if you're on Arch Linux -; Evironment="PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl" +; Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl" ; Name of the user that runs the Akkoma service. User=akkoma From e124a109c1897529b4b9eae563f550b9fb5dfb50 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Fri, 10 Mar 2023 18:46:49 +0000 Subject: [PATCH 041/178] Remove _misskey_reaction matching (#500) Co-authored-by: FloatingGhost Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/500 --- lib/pleroma/emoji.ex | 4 +++ .../emoji_react_validator.ex | 6 +--- .../web/activity_pub/transmogrifier.ex | 29 +++++++----------- mix.lock | 30 +++++++++---------- .../transmogrifier/like_handling_test.exs | 2 +- 5 files changed, 31 insertions(+), 40 deletions(-) diff --git a/lib/pleroma/emoji.ex b/lib/pleroma/emoji.ex index dbe9abe8d..933f4275a 100644 --- a/lib/pleroma/emoji.ex +++ b/lib/pleroma/emoji.ex @@ -21,6 +21,7 @@ defmodule Pleroma.Emoji do :named_table, {:read_concurrency, true} ] + @emoji_regex ~r/:[A-Za-z0-9_-]+(@.+)?:/ defstruct [:code, :file, :tags, :safe_code, :safe_file] @@ -205,4 +206,7 @@ def fully_qualify_emoji(unquote(unqualified)), do: unquote(qualified) end def fully_qualify_emoji(emoji), do: emoji + + def matches_shortcode?(nil), do: false + def matches_shortcode?(s), do: Regex.match?(@emoji_regex, s) end diff --git a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex index 6109a0355..80ec65cd7 100644 --- a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex @@ -13,7 +13,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations @primary_key false - @emoji_regex ~r/:[A-Za-z0-9_-]+(@.+)?:/ embedded_schema do quote do @@ -75,9 +74,6 @@ defp fix(data) do end end - defp matches_shortcode?(nil), do: false - defp matches_shortcode?(s), do: Regex.match?(@emoji_regex, s) - defp fix_emoji_qualification(%{"content" => emoji} = data) do new_emoji = Pleroma.Emoji.fully_qualify_emoji(emoji) @@ -98,7 +94,7 @@ defp fix_emoji_qualification(data), do: data defp validate_emoji(cng) do content = get_field(cng, :content) - if Emoji.is_unicode_emoji?(content) || matches_shortcode?(content) do + if Emoji.is_unicode_emoji?(content) || Emoji.matches_shortcode?(content) do cng else cng diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 2ff0e8a74..7081213e7 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -419,28 +419,19 @@ def handle_incoming(%{"id" => id}, _options) when is_binary(id) and byte_size(id def handle_incoming( %{ "type" => "Like", - "_misskey_reaction" => reaction, - "tag" => _ + "content" => reaction } = data, options ) do - data - |> Map.put("type", "EmojiReact") - |> Map.put("content", reaction) - |> handle_incoming(options) - end - - def handle_incoming( - %{ - "type" => "Like", - "_misskey_reaction" => reaction - } = data, - options - ) do - data - |> Map.put("type", "EmojiReact") - |> Map.put("content", reaction) - |> handle_incoming(options) + if Pleroma.Emoji.is_unicode_emoji?(reaction) or Pleroma.Emoji.matches_shortcode?(reaction) do + data + |> Map.put("type", "EmojiReact") + |> handle_incoming(options) + else + data + |> Map.delete("content") + |> handle_incoming(options) + end end def handle_incoming( diff --git a/mix.lock b/mix.lock index ae78425d8..369d1ed25 100644 --- a/mix.lock +++ b/mix.lock @@ -5,10 +5,10 @@ "bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"}, "benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"}, "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, - "cachex": {:hex, :cachex, "3.5.0", "f715390a9e93125980187dcd7c4036ece92d273fbd9ec009a8ffa480abdc51f8", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "fac2ebfa200dd9ffba08cdcef404426ccadfcb92281ca34f810535712d02b049"}, + "cachex": {:hex, :cachex, "3.6.0", "14a1bfbeee060dd9bec25a5b6f4e4691e3670ebda28c8ba2884b12fe30b36bf8", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "ebf24e373883bc8e0c8d894a63bbe102ae13d918f790121f5cfe6e485cc8e2e2"}, "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.1.201603 or ~> 0.5.20 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "e0f16822d578866e186a0974d65ad58cddc1e2ab", [ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"]}, - "castore": {:hex, :castore, "0.1.20", "62a0126cbb7cb3e259257827b9190f88316eb7aa3fdac01fd6f2dfd64e7f46e9", [:mix], [], "hexpm", "a020b7650529c986c454a4035b6b13a328e288466986307bea3aadb4c95ac98a"}, + "castore": {:hex, :castore, "0.1.22", "4127549e411bedd012ca3a308dede574f43819fe9394254ca55ab4895abfa1a2", [:mix], [], "hexpm", "c17576df47eb5aa1ee40cc4134316a99f5cad3e215d5c77b8dd3cfef12a22cac"}, "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"}, @@ -24,8 +24,8 @@ "decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "dialyxir": {:hex, :dialyxir, "1.2.0", "58344b3e87c2e7095304c81a9ae65cb68b613e28340690dfe1a5597fd08dec37", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "61072136427a851674cab81762be4dbeae7679f85b1272b6d25c3a839aff8463"}, - "earmark": {:hex, :earmark, "1.4.34", "d7f89d3bbd7567a0bffc465e0a949f8f8dcbe43909c3acf96f4761a302cea10c", [:mix], [{:earmark_parser, "~> 1.4.29", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "90b106f3dad85b133b10d7d628167c88246123fd1cecb4557d83d21ec9e65504"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.29", "149d50dcb3a93d9f3d6f3ecf18c918fb5a2d3c001b5d3305c926cddfbd33355b", [:mix], [], "hexpm", "4902af1b3eb139016aed210888748db8070b8125c2342ce3dcae4f38dcc63503"}, + "earmark": {:hex, :earmark, "1.4.37", "56ce845c543393aa3f9b294c818c3d783452a4a67e4ab18c4303a954a8b59363", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "d86d5e12868db86d5321b00e62a4bbcb4150346e4acc9a90a041fb188a5cb106"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.31", "a93921cdc6b9b869f519213d5bc79d9e218ba768d7270d46fdcf1c01bacff9e2", [:mix], [], "hexpm", "317d367ee0335ef037a87e46c91a2269fef6306413f731e8ec11fc45a7efd059"}, "eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"}, "ecto": {:hex, :ecto, "3.9.4", "3ee68e25dbe0c36f980f1ba5dd41ee0d3eb0873bccae8aeaf1a2647242bffa35", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "de5f988c142a3aa4ec18b85a4ec34a2390b65b24f02385c1144252ff6ff8ee75"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, @@ -38,7 +38,7 @@ "ex_aws": {:hex, :ex_aws, "2.1.9", "dc4865ecc20a05190a34a0ac5213e3e5e2b0a75a0c2835e923ae7bfeac5e3c31", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "3e6c776703c9076001fbe1f7c049535f042cb2afa0d2cbd3b47cbc4e92ac0d10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.4.0", "ce8decb6b523381812798396bc0e3aaa62282e1b40520125d1f4eff4abdff0f4", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "85dda6e27754d94582869d39cba3241d9ea60b6aa4167f9c88e309dc687e56bb"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.29.1", "b1c652fa5f92ee9cf15c75271168027f92039b3877094290a75abcaac82a9f77", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "b7745fa6374a36daf484e2a2012274950e084815b936b1319aeebcf7809574f6"}, + "ex_doc": {:hex, :ex_doc, "0.29.2", "dfa97532ba66910b2a3016a4bbd796f41a86fc71dd5227e96f4c8581fdf0fdf0", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "6b5d7139eda18a753e3250e27e4a929f8d2c880dd0d460cb9986305dea3e03af"}, "ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.15.1", "83c8cf7973dd9d1d853dce37a2fb98aaf29b564bf7d01866e409abf59dac2c0e", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "f8416bd90c0082d56a2178cf46c837595a06575f70a5624f164a1ffe37de07e7"}, @@ -47,7 +47,7 @@ "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, "finch": {:hex, :finch, "0.14.0", "619bfdee18fc135190bf590356c4bf5d5f71f916adb12aec94caa3fa9267a4bc", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5459acaf18c4fdb47a8c22fb3baff5d8173106217c8e56c5ba0b93e66501a8dd"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, - "floki": {:hex, :floki, "0.34.0", "002d0cc194b48794d74711731db004fafeb328fe676976f160685262d43706a8", [:mix], [], "hexpm", "9c3a9f43f40dde00332a589bd9d389b90c1f518aef500364d00636acc5ebc99c"}, + "floki": {:hex, :floki, "0.34.2", "5fad07ef153b3b8ec110b6b155ec3780c4b2c4906297d0b4be1a7162d04a7e02", [:mix], [], "hexpm", "26b9d50f0f01796bc6be611ca815c5e0de034d2128e39cc9702eee6b66a4d1c8"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, "gettext": {:hex, :gettext, "0.20.0", "75ad71de05f2ef56991dbae224d35c68b098dd0e26918def5bb45591d5c8d429", [:mix], [], "hexpm", "1c03b177435e93a47441d7f681a7040bd2a816ece9e2666d1c9001035121eb3d"}, "hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~> 2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"}, @@ -58,7 +58,7 @@ "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"}, - "joken": {:hex, :joken, "2.5.0", "09be497d804b8115eb6f07615cef2e60c2a1008fb89dc0aef0d4c4b4609b99aa", [:mix], [{:jose, "~> 1.11.2", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "22b25c89617c5ed8ca7b31026340a25ea0f9ca7160f9706b79be9ed81fdf74e7"}, + "joken": {:hex, :joken, "2.6.0", "b9dd9b6d52e3e6fcb6c65e151ad38bf4bc286382b5b6f97079c47ade6b1bcc6a", [:mix], [{:jose, "~> 1.11.5", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "5a95b05a71cd0b54abd35378aeb1d487a23a52c324fa7efdffc512b655b5aaa7"}, "jose": {:hex, :jose, "1.11.5", "3bc2d75ffa5e2c941ca93e5696b54978323191988eb8d225c2e663ddfefd515e", [:mix, :rebar3], [], "hexpm", "dcd3b215bafe02ea7c5b23dafd3eb8062a5cd8f2d904fd9caa323d37034ab384"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, "linkify": {:git, "https://akkoma.dev/AkkomaGang/linkify.git", "2567e2c1073fa371fd26fd66dfa5bc77b6919c16", [branch: "bugfix/line-ending-buffer"]}, @@ -72,7 +72,7 @@ "mfm_parser": {:git, "https://akkoma.dev/AkkomaGang/mfm-parser.git", "912fba81152d4d572e457fd5427f9875b2bc3dbe", [ref: "912fba81152d4d572e457fd5427f9875b2bc3dbe"]}, "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, - "mint": {:hex, :mint, "1.4.2", "50330223429a6e1260b2ca5415f69b0ab086141bc76dc2fbf34d7c389a6675b2", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "ce75a5bbcc59b4d7d8d70f8b2fc284b1751ffb35c7b6a6302b5192f8ab4ddd80"}, + "mint": {:hex, :mint, "1.5.1", "8db5239e56738552d85af398798c80648db0e90f343c8469f6c6d8898944fb6f", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "4a63e1e76a7c3956abd2c72f370a0d0aecddc3976dea5c27eccbecfa5e7d5b1e"}, "mock": {:hex, :mock, "0.3.7", "75b3bbf1466d7e486ea2052a73c6e062c6256fb429d6797999ab02fa32f29e03", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "4da49a4609e41fd99b7836945c26f373623ea968cfb6282742bcb94440cf7e5c"}, "mogrify": {:hex, :mogrify, "0.9.2", "b360984adea7dd6a55f18028e6327973c58de7f548fdb86c9859848aa904d5b0", [:mix], [], "hexpm", "c18d10fd70ca20e2585301616c89f6e4f7159d92efc9cc8ee579e00c886f699d"}, "mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"}, @@ -80,20 +80,20 @@ "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, "nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"}, "oban": {:hex, :oban, "2.12.1", "f604d7e6a8be9fda4a9b0f6cebbd633deba569f85dbff70c4d25d99a6f023177", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b1844c2b74e0d788b73e5144b0c9d5674cb775eae29d88a36f3c3b48d42d058"}, - "open_api_spex": {:hex, :open_api_spex, "3.16.0", "9843af4e87550cd8ac5821b10e4c74f1d51f0d4e3310f824d780614743423b25", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "bb0be24a648b73e8fc8cbda17f514b8486262275e8b33e8b5ae66283df972129"}, + "open_api_spex": {:hex, :open_api_spex, "3.16.1", "8137c338129d63060b4b04947c6c57429f86267045c479c703a38a6d3f98dee1", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "ef6fd778ac121af866b48b75ad4ad256b6ff33949113ea4aa1629af8bfdfdbfb"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, - "phoenix": {:hex, :phoenix, "1.6.15", "0a1d96bbc10747fd83525370d691953cdb6f3ccbac61aa01b4acb012474b047d", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d70ab9fbf6b394755ea88b644d34d79d8b146e490973151f248cacd122d20672"}, + "phoenix": {:hex, :phoenix, "1.6.16", "e5bdd18c7a06da5852a25c7befb72246de4ddc289182285f8685a40b7b5f5451", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e15989ff34f670a96b95ef6d1d25bad0d9c50df5df40b671d8f4a669e050ac39"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"}, - "phoenix_html": {:hex, :phoenix_html, "3.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"}, + "phoenix_html": {:hex, :phoenix_html, "3.3.1", "4788757e804a30baac6b3fc9695bf5562465dd3f1da8eb8460ad5b404d9a2178", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "bed1906edd4906a15fd7b412b85b05e521e1f67c9a85418c55999277e553d0d3"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.7.2", "97cc4ff2dba1ebe504db72cb45098cb8e91f11160528b980bd282cc45c73b29c", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.18.3", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "0e5fdf063c7a3b620c566a30fcf68b7ee02e5e46fe48ee46a6ec3ba382dc05b7"}, - "phoenix_live_view": {:hex, :phoenix_live_view, "0.18.6", "460c36977643d76fc8e0b6b3c4bba703c0ef21abc74233cf7dc15d1c1696832f", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ce2768fb44c3c370df13fc4f0dc70623b662a93a201d8d7d87c4ba6542bc6b73"}, + "phoenix_live_view": {:hex, :phoenix_live_view, "0.18.17", "74938b02f3c531bed3f87fe1ea39af6b5b2d26ab1405e77e76b8ef5df9ffa8a1", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f4b5710e19a29b8dc93b7af4bab4739c067a3cb759af01ffc3057165453dce38"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.3.4", "615f8f393135de7e0cbb4bd00ba238b1e0cd324b0d90efbaee613c2f02ca5e5c", [:mix], [{:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.0", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "3971221846232021ab5e3c7489fd62ec5bfd6a2e01cae10a317ccf6fb350571c"}, - "phoenix_template": {:hex, :phoenix_template, "1.0.0", "c57bc5044f25f007dc86ab21895688c098a9f846a8dda6bc40e2d0ddc146e38f", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "1b066f99a26fd22064c12b2600a9a6e56700f591bf7b20b418054ea38b4d4357"}, + "phoenix_template": {:hex, :phoenix_template, "1.0.1", "85f79e3ad1b0180abb43f9725973e3b8c2c3354a87245f91431eec60553ed3ef", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "157dc078f6226334c91cb32c1865bf3911686f8bcd6bcff86736f6253e6993ee"}, "phoenix_view": {:hex, :phoenix_view, "2.0.2", "6bd4d2fd595ef80d33b439ede6a19326b78f0f1d8d62b9a318e3d9c1af351098", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "a929e7230ea5c7ee0e149ffcf44ce7cf7f4b6d2bfe1752dd7c084cdff152d36f"}, "plug": {:hex, :plug, "1.14.0", "ba4f558468f69cbd9f6b356d25443d0b796fbdc887e03fa89001384a9cac638f", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bf020432c7d4feb7b3af16a0c2701455cbbbb95e5b6866132cb09eb0c29adc14"}, "plug_cowboy": {:hex, :plug_cowboy, "2.6.0", "d1cf12ff96a1ca4f52207c5271a6c351a4733f413803488d75b70ccf44aebec2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "073cf20b753ce6682ed72905cd62a2d4bd9bad1bf9f7feb02a1b8e525bd94fa6"}, - "plug_crypto": {:hex, :plug_crypto, "1.2.3", "8f77d13aeb32bfd9e654cb68f0af517b371fb34c56c9f2b58fe3df1235c1251a", [:mix], [], "hexpm", "b5672099c6ad5c202c45f5a403f21a3411247f164e4a8fab056e5cd8a290f4a2"}, + "plug_crypto": {:hex, :plug_crypto, "1.2.4", "34c380ef387cc7e8d537854ddd4b7096c79a4397d53587cb80419c782b03fdbc", [:mix], [], "hexpm", "4de415f03faec94d9da9be8c12cb51e9c98cbf66d732b6df669d4562d8e91acc"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "5.0.0", "d2b54589ab4157bbb82ec2050757779bfed724463a544b6e20d79855a9e43b24", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "11dc6117c501b80c62a7594f941d043982a1bd05a1184280c0d9166eb4d8d3fc"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, @@ -120,7 +120,7 @@ "timex": {:hex, :timex, "3.7.9", "790cdfc4acfce434e442f98c02ea6d84d0239073bfd668968f82ac63e9a6788d", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "64691582e5bb87130f721fc709acfb70f24405833998fabf35be968984860ce1"}, "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"}, "tzdata": {:hex, :tzdata, "1.1.1", "20c8043476dfda8504952d00adac41c6eda23912278add38edc140ae0c5bcc46", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a69cec8352eafcd2e198dea28a34113b60fdc6cb57eb5ad65c10292a6ba89787"}, - "ueberauth": {:hex, :ueberauth, "0.10.3", "4a3bd7ab7b5d93d301d264f0f6858392654ee92171f4437d067d1ae227c051d9", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "1394f36a6c64e97f2038cf95228e7e52b4cb75417962e30418fbe9902b30e6d3"}, + "ueberauth": {:hex, :ueberauth, "0.10.5", "806adb703df87e55b5615cf365e809f84c20c68aa8c08ff8a416a5a6644c4b02", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "3efd1f31d490a125c7ed453b926f7c31d78b97b8a854c755f5c40064bf3ac9e1"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, "vex": {:hex, :vex, "0.9.0", "613ea5eb3055662e7178b83e25b2df0975f68c3d8bb67c1645f0573e1a78d606", [:mix], [], "hexpm", "c69fff44d5c8aa3f1faee71bba1dcab05dd36364c5a629df8bb11751240c857f"}, diff --git a/test/pleroma/web/activity_pub/transmogrifier/like_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/like_handling_test.exs index ad3692f74..4890d5135 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/like_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/like_handling_test.exs @@ -63,7 +63,7 @@ test "it works for incoming misskey likes that contain unicode emojis, turning t File.read!("test/fixtures/misskey-like.json") |> Jason.decode!() |> Map.put("object", activity.data["object"]) - |> Map.put("_misskey_reaction", "⭐") + |> Map.put("content", "⭐") _actor = insert(:user, ap_id: data["actor"], local: false) From 99775886126ba35476db47ae116afb0f1dc2f0e6 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 10 Mar 2023 18:49:08 +0000 Subject: [PATCH 042/178] we should probably use || --- lib/pleroma/web/activity_pub/transmogrifier.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 7081213e7..5c96bf060 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -423,7 +423,7 @@ def handle_incoming( } = data, options ) do - if Pleroma.Emoji.is_unicode_emoji?(reaction) or Pleroma.Emoji.matches_shortcode?(reaction) do + if Pleroma.Emoji.is_unicode_emoji?(reaction) || Pleroma.Emoji.matches_shortcode?(reaction) do data |> Map.put("type", "EmojiReact") |> handle_incoming(options) From 19eb8264249ff41a516834fc0728cf652cafb6b9 Mon Sep 17 00:00:00 2001 From: foxing Date: Sat, 11 Mar 2023 03:26:48 +0000 Subject: [PATCH 043/178] Show bubble_timeline in the api if any instances are set in it, do not show if none are set --- lib/pleroma/web/mastodon_api/views/instance_view.ex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index 2717da99d..d06c80a12 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -67,6 +67,9 @@ def features do "pleroma:api/v1/notifications:include_types_filter", "quote_posting", "editing", + if Config.get([:instance, :local_bubble], []) != [] do + "bubble_timeline" + end, if Config.get([:media_proxy, :enabled]) do "media_proxy" end, From 5ca22c2459fb7d9c0d734aaa892c8058d6ab56c0 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 11 Mar 2023 17:24:49 +0000 Subject: [PATCH 044/178] ensure we can't have a null in appends --- lib/pleroma/web/mastodon_api/views/status_view.ex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 79438571c..3868da8d9 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -227,8 +227,10 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} |> Enum.filter(fn tag -> is_map(tag) and tag["type"] == "Mention" end) |> Enum.map(fn tag -> tag["href"] end) + to_data = if is_nil(object.data["to"]), do: [], else: object.data["to"] + mentions = - (object.data["to"] ++ tag_mentions) + (to_data ++ tag_mentions) |> Enum.uniq() |> Enum.map(fn Pleroma.Constants.as_public() -> nil From 800fe40407fe6408a0c4db3a71d5186a78539bf8 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 11 Mar 2023 17:26:21 +0000 Subject: [PATCH 045/178] Bump version --- CHANGELOG.md | 4 +++- mix.exs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 859a09e7d..d620c4f3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## Unreleased +## 2023.03 ## Fixed - Allowed contentMap to be updated on edit +- Filter creation now accepts expires\_at ### Changed - Restoring the database from a dump now goes much faster without need for work-arounds +- Misskey reaction matching uses `content` parameter now ### Added - Extend the mix task `prune_objects` with option `--prune-orphaned-activities` to also prune orphaned activities, allowing to reclaim even more database space diff --git a/mix.exs b/mix.exs index 7cc4d1fa6..8d8f4b5b9 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.6.0"), + version: version("3.7.0"), elixir: "~> 1.12", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), From 70803d796601428f52f585d6fdd3b218f5f3912c Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 11 Mar 2023 18:24:44 +0000 Subject: [PATCH 046/178] Remove mix.env reference --- lib/pleroma/web/plugs/http_security_plug.ex | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/pleroma/web/plugs/http_security_plug.ex b/lib/pleroma/web/plugs/http_security_plug.ex index 6841b13aa..b1f1ada94 100644 --- a/lib/pleroma/web/plugs/http_security_plug.ex +++ b/lib/pleroma/web/plugs/http_security_plug.ex @@ -116,8 +116,6 @@ defp csp_string(conn) do script_src = "script-src 'self' '#{nonce_tag}'" - script_src = if Mix.env() == :dev, do: [script_src, " 'unsafe-eval'"], else: script_src - report = if report_uri, do: ["report-uri ", report_uri, ";report-to csp-endpoint"] insecure = if scheme == "https", do: "upgrade-insecure-requests" From 58f75ac062aa54a139125c1742f3fe59563a345b Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 11 Mar 2023 18:24:57 +0000 Subject: [PATCH 047/178] patch version --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 8d8f4b5b9..098ea15b0 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.7.0"), + version: version("3.7.1"), elixir: "~> 1.12", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), From 6c396fcab49f5de8b3f73a8353748d3606687966 Mon Sep 17 00:00:00 2001 From: ilja Date: Mon, 6 Mar 2023 12:04:35 +0100 Subject: [PATCH 048/178] Remove "default" image description When no image description is filled in, Pleroma allowed fallbacks. Those were (based on a setting) either the filename, or a fixed description. Neither are good options for image descriptions imo, so here we remove this. Note that there's two tests removed who supposedly tested something else. But examining closer, they didn't seem to test what they claimed to test, so I removed them rather than try to "fix" them. --- CHANGELOG.md | 1 + config/config.exs | 1 - config/test.exs | 3 +-- docs/docs/configuration/cheatsheet.md | 1 - lib/pleroma/upload.ex | 11 +--------- test/pleroma/upload_test.exs | 17 ++------------ .../web/activity_pub/activity_pub_test.exs | 22 ------------------- 7 files changed, 5 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 859a09e7d..b451f297f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Removed - Possibility of using the `style` parameter on `span` elements. This will break certain MFM parameters. +- Option for "default" image description. ## 2023.02 diff --git a/config/config.exs b/config/config.exs index 5eaa8ce76..4d8fd52c4 100644 --- a/config/config.exs +++ b/config/config.exs @@ -65,7 +65,6 @@ link_name: false, proxy_remote: false, filename_display_max_length: 30, - default_description: nil, base_url: nil config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads" diff --git a/config/test.exs b/config/test.exs index 3056dbd03..4448eeb73 100644 --- a/config/test.exs +++ b/config/test.exs @@ -23,8 +23,7 @@ config :pleroma, Pleroma.Upload, filters: [], - link_name: false, - default_description: :filename + link_name: false config :pleroma, Pleroma.Uploaders.Local, uploads: "test/uploads" diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index 4e84b9a44..1c4d9ec5d 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -562,7 +562,6 @@ the source code is here: [kocaptcha](https://github.com/koto-bank/kocaptcha). Th * `proxy_remote`: If you're using a remote uploader, Akkoma will proxy media requests instead of redirecting to it. * `proxy_opts`: Proxy options, see `Pleroma.ReverseProxy` documentation. * `filename_display_max_length`: Set max length of a filename to display. 0 = no limit. Default: 30. -* `default_description`: Sets which default description an image has if none is set explicitly. Options: nil (default) - Don't set a default, :filename - use the filename of the file, a string (e.g. "attachment") - Use this string !!! warning `strip_exif` has been replaced by `Pleroma.Upload.Filter.Mogrify`. diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex index 3b5419db7..2f65540be 100644 --- a/lib/pleroma/upload.ex +++ b/lib/pleroma/upload.ex @@ -65,15 +65,6 @@ defmodule Pleroma.Upload do } defstruct [:id, :name, :tempfile, :content_type, :width, :height, :blurhash, :path] - defp get_description(opts, upload) do - case {opts[:description], Pleroma.Config.get([Pleroma.Upload, :default_description])} do - {description, _} when is_binary(description) -> description - {_, :filename} -> upload.name - {_, str} when is_binary(str) -> str - _ -> "" - end - end - @spec store(source, options :: [option()]) :: {:ok, Map.t()} | {:error, any()} @doc "Store a file. If using a `Plug.Upload{}` as the source, be sure to use `Majic.Plug` to ensure its content_type and filename is correct." def store(upload, opts \\ []) do @@ -82,7 +73,7 @@ def store(upload, opts \\ []) do with {:ok, upload} <- prepare_upload(upload, opts), upload = %__MODULE__{upload | path: upload.path || "#{upload.id}/#{upload.name}"}, {:ok, upload} <- Pleroma.Upload.Filter.filter(opts.filters, upload), - description = get_description(opts, upload), + description = Map.get(opts, :description) || "", {_, true} <- {:description_limit, String.length(description) <= Pleroma.Config.get([:instance, :description_limit])}, diff --git a/test/pleroma/upload_test.exs b/test/pleroma/upload_test.exs index 8f242630f..ad6065b43 100644 --- a/test/pleroma/upload_test.exs +++ b/test/pleroma/upload_test.exs @@ -54,7 +54,7 @@ test "it returns file" do assert result == %{ "id" => result["id"], - "name" => "image.jpg", + "name" => "", "type" => "Document", "mediaType" => "image/jpeg", "url" => [ @@ -154,19 +154,6 @@ test "copies the file to the configured folder with deduping" do "e30397b58d226d6583ab5b8b3c5defb0c682bda5c31ef07a9f57c1c4986e3781.jpg" end - test "copies the file to the configured folder without deduping" do - File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg") - - file = %Plug.Upload{ - content_type: "image/jpeg", - path: Path.absname("test/fixtures/image_tmp.jpg"), - filename: "an [image.jpg" - } - - {:ok, data} = Upload.store(file) - assert data["name"] == "an [image.jpg" - end - test "fixes incorrect content type when base64 is given" do params = %{ img: "data:image/png;base64,#{Base.encode64(File.read!("test/fixtures/image.jpg"))}" @@ -184,7 +171,7 @@ test "adds extension when base64 is given" do } {:ok, data} = Upload.store(params) - assert String.ends_with?(data["name"], ".jpg") + assert String.ends_with?(List.first(data["url"])["href"], ".jpg") end test "copies the file to the configured folder with anonymizing filename" do diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 17c52fc91..20435d149 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -1308,28 +1308,6 @@ test "sets a description if given", %{test_file: file} do assert object.data["name"] == "a cool file" end - test "it sets the default description depending on the configuration", %{test_file: file} do - clear_config([Pleroma.Upload, :default_description]) - - clear_config([Pleroma.Upload, :default_description], nil) - {:ok, %Object{} = object} = ActivityPub.upload(file) - assert object.data["name"] == "" - - clear_config([Pleroma.Upload, :default_description], :filename) - {:ok, %Object{} = object} = ActivityPub.upload(file) - assert object.data["name"] == "an_image.jpg" - - clear_config([Pleroma.Upload, :default_description], "unnamed attachment") - {:ok, %Object{} = object} = ActivityPub.upload(file) - assert object.data["name"] == "unnamed attachment" - end - - test "copies the file to the configured folder", %{test_file: file} do - clear_config([Pleroma.Upload, :default_description], :filename) - {:ok, %Object{} = object} = ActivityPub.upload(file) - assert object.data["name"] == "an_image.jpg" - end - test "works with base64 encoded images" do file = %{ img: data_uri() From 0c77be9308102cb2e4710fbad02035e9dc7125c3 Mon Sep 17 00:00:00 2001 From: flisk Date: Sun, 12 Mar 2023 18:14:05 +0100 Subject: [PATCH 049/178] don't crash on malformed avatar and banner values weird values in href will cause base64 encoding to fail later down the line, so let's make sure the value we're passing on is somewhat sane, or at the very least a binary this fixes #482 --- lib/pleroma/user.ex | 24 ++++++++++++------------ test/pleroma/user_test.exs | 10 ++++++++++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index f94202af5..480521984 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -366,21 +366,21 @@ def invisible?(%User{invisible: true}), do: true def invisible?(_), do: false def avatar_url(user, options \\ []) do - case user.avatar do - %{"url" => [%{"href" => href} | _]} -> - href - - _ -> - unless options[:no_default] do - Config.get([:assets, :default_user_avatar], "#{Endpoint.url()}/images/avi.png") - end - end + default = Config.get([:assets, :default_user_avatar], "#{Endpoint.url()}/images/avi.png") + do_optional_url(user.avatar, default, options) end def banner_url(user, options \\ []) do - case user.banner do - %{"url" => [%{"href" => href} | _]} -> href - _ -> !options[:no_default] && "#{Endpoint.url()}/images/banner.png" + do_optional_url(user.banner, "#{Endpoint.url()}/images/banner.png", options) + end + + defp do_optional_url(field, default, options \\ []) do + case field do + %{"url" => [%{"href" => href} | _]} when is_binary(href) -> + href + + _ -> + unless options[:no_default], do: default end end diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index a590946c2..12ccc6bf4 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -2509,6 +2509,16 @@ test "avatar fallback" do assert User.avatar_url(user, no_default: true) == nil end + test "avatar object with nil in href" do + user = insert(:user, avatar: %{"url" => [%{"href" => nil}]}) + assert User.avatar_url(user) != nil + end + + test "banner object with nil in href" do + user = insert(:user, banner: %{"url" => [%{"href" => nil}]}) + assert User.banner_url(user) != nil + end + test "get_host/1" do user = insert(:user, ap_id: "https://lain.com/users/lain", nickname: "lain") assert User.get_host(user) == "lain.com" From 3f76de76dac266ea2909dbd1dc88a9533d972952 Mon Sep 17 00:00:00 2001 From: foxing Date: Sun, 12 Mar 2023 19:13:56 +0000 Subject: [PATCH 050/178] Apply Patch --- lib/pleroma/web/activity_pub/activity_pub.ex | 11 +++++++- .../web/activity_pub/activity_pub_test.exs | 8 ++++++ .../controllers/media_controller_test.exs | 17 +++++++++++ .../mastodon_api/update_credentials_test.exs | 28 +++++++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 8e55df0d8..649bf9095 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1502,13 +1502,22 @@ def fetch_activities_bounded( @spec upload(Upload.source(), keyword()) :: {:ok, Object.t()} | {:error, any()} def upload(file, opts \\ []) do - with {:ok, data} <- Upload.store(file, opts) do + with {:ok, data} <- Upload.store(sanitize_upload_file(file), opts) do obj_data = Maps.put_if_present(data, "actor", opts[:actor]) Repo.insert(%Object{data: obj_data}) end end + defp sanitize_upload_file(%Plug.Upload{filename: filename} = upload) when is_binary(filename) do + %Plug.Upload{ + upload + | filename: Path.basename(filename) + } + end + + defp sanitize_upload_file(upload), do: upload + @spec get_actor_url(any()) :: binary() | nil defp get_actor_url(url) when is_binary(url), do: url defp get_actor_url(%{"href" => href}) when is_binary(href), do: href diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 17c52fc91..e95e4490a 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -1303,6 +1303,14 @@ test "returns reblogs for users for whom reblogs have not been muted" do %{test_file: test_file} end + test "strips / from filename", %{test_file: file} do + file = %Plug.Upload{file | filename: "../../../../../nested/bad.jpg"} + {:ok, %Object{} = object} = ActivityPub.upload(file) + [%{"href" => href}] = object.data["url"] + assert Regex.match?(~r"/bad.jpg$", href) + refute Regex.match?(~r"/nested/", href) + end + test "sets a description if given", %{test_file: file} do {:ok, %Object{} = object} = ActivityPub.upload(file, description: "a cool file") assert object.data["name"] == "a cool file" diff --git a/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs index 50b9febea..7ff8cff6b 100644 --- a/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs @@ -124,6 +124,23 @@ test "/api/v2/media, upload_limit", %{conn: conn, user: user} do assert :ok == File.rm(Path.absname("test/tmp/large_binary.data")) end + + test "Do not allow nested filename", %{conn: conn, image: image} do + image = %Plug.Upload{ + image + | filename: "../../../../../nested/file.jpg" + } + + desc = "Description of the image" + + media = + conn + |> put_req_header("content-type", "multipart/form-data") + |> post("/api/v1/media", %{"file" => image, "description" => desc}) + |> json_response_and_validate_schema(:ok) + + refute Regex.match?(~r"/nested/", media["url"]) + end end describe "Update media description" do diff --git a/test/pleroma/web/mastodon_api/update_credentials_test.exs b/test/pleroma/web/mastodon_api/update_credentials_test.exs index e9b8825bf..4aec31eac 100644 --- a/test/pleroma/web/mastodon_api/update_credentials_test.exs +++ b/test/pleroma/web/mastodon_api/update_credentials_test.exs @@ -396,6 +396,34 @@ test "updates the user's background, upload_limit, returns a HTTP 413", %{ assert :ok == File.rm(Path.absname("test/tmp/large_binary.data")) end + test "Strip / from upload files", %{user: user, conn: conn} do + new_image = %Plug.Upload{ + content_type: "image/jpeg", + path: Path.absname("test/fixtures/image.jpg"), + filename: "../../../../nested/an_image.jpg" + } + + assert user.avatar == %{} + + res = + patch(conn, "/api/v1/accounts/update_credentials", %{ + "avatar" => new_image, + "header" => new_image, + "pleroma_background_image" => new_image + }) + + assert user_response = json_response_and_validate_schema(res, 200) + assert user_response["avatar"] + assert user_response["header"] + assert user_response["pleroma"]["background_image"] + refute Regex.match?(~r"/nested/", user_response["avatar"]) + refute Regex.match?(~r"/nested/", user_response["header"]) + refute Regex.match?(~r"/nested/", user_response["pleroma"]["background_image"]) + + user = User.get_by_id(user.id) + refute user.avatar == %{} + end + test "requires 'write:accounts' permission" do token1 = insert(:oauth_token, scopes: ["read"]) token2 = insert(:oauth_token, scopes: ["write", "follow"]) From 3d964a997033ea65e97cbd08b6549f9cdf445fc9 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 12 Mar 2023 23:24:07 +0000 Subject: [PATCH 051/178] Add frontend preference route --- config/config.exs | 3 + .../frontend_settings_controller.ex | 28 +++++++++ .../operations/frontend_settings_operation.ex | 59 +++++++++++++++++-- lib/pleroma/web/router.ex | 16 +++++ 4 files changed, 102 insertions(+), 4 deletions(-) diff --git a/config/config.exs b/config/config.exs index 5eaa8ce76..8ed3c9cd9 100644 --- a/config/config.exs +++ b/config/config.exs @@ -745,6 +745,9 @@ primary: %{"name" => "pleroma-fe", "ref" => "stable"}, admin: %{"name" => "admin-fe", "ref" => "stable"}, mastodon: %{"name" => "mastodon-fe", "ref" => "akkoma"}, + pickable: [ + "pleroma-fe/stable" + ], swagger: %{ "name" => "swagger-ui", "ref" => "stable", diff --git a/lib/pleroma/web/akkoma_api/controllers/frontend_settings_controller.ex b/lib/pleroma/web/akkoma_api/controllers/frontend_settings_controller.ex index c13ff9096..307d35643 100644 --- a/lib/pleroma/web/akkoma_api/controllers/frontend_settings_controller.ex +++ b/lib/pleroma/web/akkoma_api/controllers/frontend_settings_controller.ex @@ -5,6 +5,16 @@ defmodule Pleroma.Web.AkkomaAPI.FrontendSettingsController do alias Pleroma.Akkoma.FrontendSettingsProfile @unauthenticated_access %{fallback: :proceed_unauthenticated, scopes: []} + + plug( + OAuthScopesPlug, + @unauthenticated_access + when action in [ + :available_frontends, + :update_preferred_frontend + ] + ) + plug( OAuthScopesPlug, %{@unauthenticated_access | scopes: ["read:accounts"]} @@ -93,4 +103,22 @@ def update_profile(%{body_params: %{settings: settings, version: version}} = con |> json(profile.settings) end end + + @doc "GET /api/v1/akkoma/preferred_frontend/available" + def available_frontends(conn, _params) do + available = Pleroma.Config.get([:frontends, :pickable]) + + conn + |> json(available) + end + + @doc "PUT /api/v1/akkoma/preferred_frontend" + def update_preferred_frontend( + %{body_params: %{frontend_name: preferred_frontend}} = conn, + _params + ) do + conn + |> put_resp_cookie("preferred_frontend", preferred_frontend) + |> json(%{frontend_name: preferred_frontend}) + end end diff --git a/lib/pleroma/web/api_spec/operations/frontend_settings_operation.ex b/lib/pleroma/web/api_spec/operations/frontend_settings_operation.ex index 40e81ad55..867a751b3 100644 --- a/lib/pleroma/web/api_spec/operations/frontend_settings_operation.ex +++ b/lib/pleroma/web/api_spec/operations/frontend_settings_operation.ex @@ -12,7 +12,7 @@ def open_api_operation(action) do @spec list_profiles_operation() :: Operation.t() def list_profiles_operation() do %Operation{ - tags: ["Retrieve frontend setting profiles"], + tags: ["Frontends"], summary: "Frontend Settings Profiles", description: "List frontend setting profiles", operationId: "AkkomaAPI.FrontendSettingsController.list_profiles", @@ -37,7 +37,7 @@ def list_profiles_operation() do @spec get_profile_operation() :: Operation.t() def get_profile_operation() do %Operation{ - tags: ["Retrieve frontend setting profile"], + tags: ["Frontends"], summary: "Frontend Settings Profile", description: "Get frontend setting profile", operationId: "AkkomaAPI.FrontendSettingsController.get_profile", @@ -60,7 +60,7 @@ def get_profile_operation() do @spec delete_profile_operation() :: Operation.t() def delete_profile_operation() do %Operation{ - tags: ["Delete frontend setting profile"], + tags: ["Frontends"], summary: "Delete frontend Settings Profile", description: "Delete frontend setting profile", operationId: "AkkomaAPI.FrontendSettingsController.delete_profile", @@ -76,7 +76,7 @@ def delete_profile_operation() do @spec update_profile_operation() :: Operation.t() def update_profile_operation() do %Operation{ - tags: ["Update frontend setting profile"], + tags: ["Frontends"], summary: "Frontend Settings Profile", description: "Update frontend setting profile", operationId: "AkkomaAPI.FrontendSettingsController.update_profile_operation", @@ -90,6 +90,57 @@ def update_profile_operation() do } end + def available_frontends_operation() do + %Operation{ + tags: ["Frontends"], + summary: "Frontend Settings Profiles", + description: "List frontend setting profiles", + operationId: "AkkomaAPI.FrontendSettingsController.available_frontends", + responses: %{ + 200 => + Operation.response("Frontends", "application/json", %Schema{ + type: :array, + items: %Schema{ + type: :string + } + }) + } + } + end + + def update_preferred_frontend_operation() do + %Operation{ + tags: ["Frontends"], + summary: "Frontend Settings Profiles", + description: "List frontend setting profiles", + operationId: "AkkomaAPI.FrontendSettingsController.available_frontends", + requestBody: + request_body( + "Frontend", + %Schema{ + type: :object, + required: [:frontend_name], + properties: %{ + frontend_name: %Schema{ + type: :string, + description: "Frontend name" + } + } + }, + required: true + ), + responses: %{ + 200 => + Operation.response("Frontends", "application/json", %Schema{ + type: :array, + items: %Schema{ + type: :string + } + }) + } + } + end + def frontend_name_param do Operation.parameter(:frontend_name, :path, :string, "Frontend name", example: "pleroma-fe", diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index faaf3d679..3db8ddab7 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -466,6 +466,22 @@ defmodule Pleroma.Web.Router do put("/statuses/:id/emoji_reactions/:emoji", EmojiReactionController, :create) end + scope "/api/v1/akkoma", Pleroma.Web.AkkomaAPI do + pipe_through(:api) + + get( + "/api/v1/akkoma/preferred_frontend/available", + FrontendSettingsController, + :available_frontends + ) + + put( + "/api/v1/akkoma/preferred_frontend", + FrontendSettingsController, + :update_preferred_frontend + ) + end + scope "/api/v1/akkoma", Pleroma.Web.AkkomaAPI do pipe_through(:authenticated_api) get("/metrics", MetricsController, :show) From 643b8c5f152bb71ef11074edd4a78f1405f360da Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 12 Mar 2023 23:59:10 +0000 Subject: [PATCH 052/178] ensure we send the right files for preferred fe --- .../web/fallback/redirect_controller.ex | 11 ++--- lib/pleroma/web/plugs/frontend_static.ex | 45 ++++++++++++++++--- lib/pleroma/web/plugs/instance_static.ex | 4 +- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/lib/pleroma/web/fallback/redirect_controller.ex b/lib/pleroma/web/fallback/redirect_controller.ex index 49f659cf0..2e57fa426 100644 --- a/lib/pleroma/web/fallback/redirect_controller.ex +++ b/lib/pleroma/web/fallback/redirect_controller.ex @@ -20,7 +20,7 @@ def api_not_implemented(conn, _params) do def redirector(conn, _params, code \\ 200) do conn |> put_resp_content_type("text/html") - |> send_file(code, index_file_path()) + |> send_file(code, index_file_path(conn)) end def redirector_with_meta(conn, %{"maybe_nickname_or_id" => maybe_nickname_or_id} = params) do @@ -33,7 +33,7 @@ def redirector_with_meta(conn, %{"maybe_nickname_or_id" => maybe_nickname_or_id} end def redirector_with_meta(conn, params) do - {:ok, index_content} = File.read(index_file_path()) + {:ok, index_content} = File.read(index_file_path(conn)) tags = build_tags(conn, params) preloads = preload_data(conn, params) @@ -53,7 +53,7 @@ def redirector_with_preload(conn, %{"path" => ["pleroma", "admin"]}) do end def redirector_with_preload(conn, params) do - {:ok, index_content} = File.read(index_file_path()) + {:ok, index_content} = File.read(index_file_path(conn)) preloads = preload_data(conn, params) tags = Metadata.build_static_tags(params) title = "#{Pleroma.Config.get([:instance, :name])}" @@ -77,8 +77,9 @@ def empty(conn, _params) do |> text("") end - defp index_file_path do - Pleroma.Web.Plugs.InstanceStatic.file_path("index.html") + defp index_file_path(conn) do + frontend_type = Pleroma.Web.Plugs.FrontendStatic.preferred_or_fallback(conn, :primary) + Pleroma.Web.Plugs.InstanceStatic.file_path("index.html", frontend_type) end defp build_tags(conn, params) do diff --git a/lib/pleroma/web/plugs/frontend_static.ex b/lib/pleroma/web/plugs/frontend_static.ex index 40f51e149..62283353e 100644 --- a/lib/pleroma/web/plugs/frontend_static.ex +++ b/lib/pleroma/web/plugs/frontend_static.ex @@ -5,17 +5,23 @@ defmodule Pleroma.Web.Plugs.FrontendStatic do require Pleroma.Constants + @frontend_cookie_name "preferred_frontend" + @moduledoc """ This is a shim to call `Plug.Static` but with runtime `from` configuration`. It dispatches to the different frontends. """ @behaviour Plug - def file_path(path, frontend_type \\ :primary) do - if configuration = Pleroma.Config.get([:frontends, frontend_type]) do - instance_static_path = Pleroma.Config.get([:instance, :static_dir], "instance/static") + defp instance_static_path do + Pleroma.Config.get([:instance, :static_dir], "instance/static") + end + def file_path(path, frontend_type \\ :primary) + + def file_path(path, frontend_type) when is_atom(frontend_type) do + if configuration = Pleroma.Config.get([:frontends, frontend_type]) do Path.join([ - instance_static_path, + instance_static_path(), "frontends", configuration["name"], configuration["ref"], @@ -26,6 +32,15 @@ def file_path(path, frontend_type \\ :primary) do end end + def file_path(path, frontend_type) when is_binary(frontend_type) do + Path.join([ + instance_static_path(), + "frontends", + frontend_type, + path + ]) + end + def init(opts) do opts |> Keyword.put(:from, "__unconfigured_frontend_static_plug") @@ -38,7 +53,8 @@ def call(conn, opts) do with false <- api_route?(conn.path_info), false <- invalid_path?(conn.path_info), true <- enabled?(opts[:if]), - frontend_type <- Map.get(opts, :frontend_type, :primary), + fallback_frontend_type <- Map.get(opts, :frontend_type, :primary), + frontend_type <- preferred_or_fallback(conn, fallback_frontend_type), path when not is_nil(path) <- file_path("", frontend_type) do call_static(conn, opts, path) else @@ -47,6 +63,24 @@ def call(conn, opts) do end end + def preferred_frontend(conn) do + %{req_cookies: cookies} = + conn + |> Plug.Conn.fetch_cookies() + + Map.get(cookies, @frontend_cookie_name) + end + + def preferred_or_fallback(conn, fallback) do + case preferred_frontend(conn) do + nil -> + fallback + + frontend -> + frontend + end + end + defp enabled?(if_opt) when is_function(if_opt), do: if_opt.() defp enabled?(true), do: true defp enabled?(_), do: false @@ -68,6 +102,7 @@ defp api_route?([h | t]) do defp call_static(conn, opts, from) do opts = Map.put(opts, :from, from) + IO.inspect(opts, label: "opts") Plug.Static.call(conn, opts) end end diff --git a/lib/pleroma/web/plugs/instance_static.ex b/lib/pleroma/web/plugs/instance_static.ex index 723b25679..5f9a6ee83 100644 --- a/lib/pleroma/web/plugs/instance_static.ex +++ b/lib/pleroma/web/plugs/instance_static.ex @@ -12,11 +12,11 @@ defmodule Pleroma.Web.Plugs.InstanceStatic do """ @behaviour Plug - def file_path(path) do + def file_path(path, frontend_type \\ :primary) do instance_path = Path.join(Pleroma.Config.get([:instance, :static_dir], "instance/static/"), path) - frontend_path = Pleroma.Web.Plugs.FrontendStatic.file_path(path, :primary) + frontend_path = Pleroma.Web.Plugs.FrontendStatic.file_path(path, frontend_type) (File.exists?(instance_path) && instance_path) || (frontend_path && File.exists?(frontend_path) && frontend_path) || From ba635e97c8ddcf92946e3d221dbf813189d21ab8 Mon Sep 17 00:00:00 2001 From: foxing Date: Mon, 13 Mar 2023 03:40:20 +0000 Subject: [PATCH 053/178] Use enum empty instead --- lib/pleroma/web/mastodon_api/views/instance_view.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index d06c80a12..2b5354873 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -67,7 +67,7 @@ def features do "pleroma:api/v1/notifications:include_types_filter", "quote_posting", "editing", - if Config.get([:instance, :local_bubble], []) != [] do + if !Enum.empty?(Config.get([:instance, :local_bubble], [])) do "bubble_timeline" end, if Config.get([:media_proxy, :enabled]) do From 9464d505628d9f9dc20e54055d8853bea1d6722b Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 15 Mar 2023 22:13:18 +0000 Subject: [PATCH 054/178] Add publicTimelineVisibility to nodeinfo --- .../web/nodeinfo/nodeinfo_controller.ex | 6 +++- test/pleroma/web/node_info_test.exs | 30 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index a0dee7c6b..9a76574d5 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -89,7 +89,11 @@ def raw_nodeinfo do features: features, restrictedNicknames: Config.get([Pleroma.User, :restricted_nicknames]), skipThreadContainment: Config.get([:instance, :skip_thread_containment], false), - localBubbleInstances: Config.get([:instance, :local_bubble], []) + localBubbleInstances: Config.get([:instance, :local_bubble], []), + publicTimelineVisibility: %{ + federated: !Config.restrict_unauthenticated_access?(:timelines, :federated), + local: !Config.restrict_unauthenticated_access?(:timelines, :local) + } } } end diff --git a/test/pleroma/web/node_info_test.exs b/test/pleroma/web/node_info_test.exs index 05a078266..5f001be85 100644 --- a/test/pleroma/web/node_info_test.exs +++ b/test/pleroma/web/node_info_test.exs @@ -292,4 +292,34 @@ test "shows extra information in the mrf_simple_info field for relevant entries" assert response["metadata"]["federation"]["mrf_simple_info"] == expected_config end end + + describe "public timeline visibility" do + test "shows public timeline visibility", %{conn: conn} do + clear_config([:restrict_unauthenticated, :timelines], %{local: false, federated: false}) + response = + conn + |> get("/nodeinfo/2.1.json") + |> json_response(:ok) + + assert response["metadata"]["publicTimelineVisibility"]["local"] == true + assert response["metadata"]["publicTimelineVisibility"]["federated"] == true + + clear_config([:restrict_unauthenticated, :timelines], %{local: true, federated: false}) + response = + conn + |> get("/nodeinfo/2.1.json") + |> json_response(:ok) + assert response["metadata"]["publicTimelineVisibility"]["local"] == false + assert response["metadata"]["publicTimelineVisibility"]["federated"] == true + + clear_config([:restrict_unauthenticated, :timelines], %{local: false, federated: true}) + response = + conn + |> get("/nodeinfo/2.1.json") + |> json_response(:ok) + + assert response["metadata"]["publicTimelineVisibility"]["local"] == true + assert response["metadata"]["publicTimelineVisibility"]["federated"] == false + end + end end From 2c9e02429aaab2b9080b75a193142a4dd191631e Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 15 Mar 2023 22:19:52 +0000 Subject: [PATCH 055/178] mix format --- test/pleroma/web/node_info_test.exs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/pleroma/web/node_info_test.exs b/test/pleroma/web/node_info_test.exs index 5f001be85..ff14db460 100644 --- a/test/pleroma/web/node_info_test.exs +++ b/test/pleroma/web/node_info_test.exs @@ -296,6 +296,7 @@ test "shows extra information in the mrf_simple_info field for relevant entries" describe "public timeline visibility" do test "shows public timeline visibility", %{conn: conn} do clear_config([:restrict_unauthenticated, :timelines], %{local: false, federated: false}) + response = conn |> get("/nodeinfo/2.1.json") @@ -305,14 +306,17 @@ test "shows public timeline visibility", %{conn: conn} do assert response["metadata"]["publicTimelineVisibility"]["federated"] == true clear_config([:restrict_unauthenticated, :timelines], %{local: true, federated: false}) + response = conn |> get("/nodeinfo/2.1.json") |> json_response(:ok) + assert response["metadata"]["publicTimelineVisibility"]["local"] == false assert response["metadata"]["publicTimelineVisibility"]["federated"] == true clear_config([:restrict_unauthenticated, :timelines], %{local: false, federated: true}) + response = conn |> get("/nodeinfo/2.1.json") From 86a5cf3c822e8566925564974d3849039e3b392f Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 15 Mar 2023 22:20:32 +0000 Subject: [PATCH 056/178] Changelog entry --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d620c4f3b..c3b6f775a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## Unreleased + +## Added +- Nodeinfo keys for unauthenticated timeline visibility + ## 2023.03 ## Fixed From fe7045632b77576b727281b0fa7a8d87b9b9b44a Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 15 Mar 2023 22:59:58 +0000 Subject: [PATCH 057/178] also put publicVisibility in preloaded nodeinfo --- lib/pleroma/web/nodeinfo/nodeinfo.ex | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/nodeinfo/nodeinfo.ex b/lib/pleroma/web/nodeinfo/nodeinfo.ex index bf0d65f45..14e39e6b3 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo.ex @@ -71,7 +71,11 @@ def get_nodeinfo("2.0") do restrictedNicknames: Config.get([Pleroma.User, :restricted_nicknames]), skipThreadContainment: Config.get([:instance, :skip_thread_containment], false), privilegedStaff: Config.get([:instance, :privileged_staff]), - localBubbleInstances: Config.get([:instance, :local_bubble], []) + localBubbleInstances: Config.get([:instance, :local_bubble], []), + publicTimelineVisibility: %{ + federated: !Config.restrict_unauthenticated_access?(:timelines, :federated), + local: !Config.restrict_unauthenticated_access?(:timelines, :local) + } } } end From 4a5164be9301deb04506bda8dfee5a5bcf309960 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Thu, 16 Mar 2023 12:53:38 -0400 Subject: [PATCH 058/178] Update required elixir version in mix.exs to 1.14 --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 098ea15b0..aa1dde667 100644 --- a/mix.exs +++ b/mix.exs @@ -5,7 +5,7 @@ def project do [ app: :pleroma, version: version("3.7.1"), - elixir: "~> 1.12", + elixir: "~> 1.14", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), elixirc_options: [warnings_as_errors: warnings_as_errors()], From f22bba6359d14dcd7572e504e1541e28b240347a Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Thu, 16 Mar 2023 12:54:15 -0400 Subject: [PATCH 059/178] Update elixir version in elixir_buildpack.config --- elixir_buildpack.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/elixir_buildpack.config b/elixir_buildpack.config index 946408c12..ee9e051a6 100644 --- a/elixir_buildpack.config +++ b/elixir_buildpack.config @@ -1,2 +1,2 @@ -elixir_version=1.9.4 -erlang_version=22.3.4.1 +elixir_version=1.14.3 +erlang_version=25.3 From 3c30666d3f422e6b94e2b81744c6b305f4699aa3 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Thu, 16 Mar 2023 12:54:38 -0400 Subject: [PATCH 060/178] Update elixir and erlang versions in docs --- docs/docs/installation/generic_dependencies.include | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/installation/generic_dependencies.include b/docs/docs/installation/generic_dependencies.include index 68c61129a..d8cf9f9da 100644 --- a/docs/docs/installation/generic_dependencies.include +++ b/docs/docs/installation/generic_dependencies.include @@ -1,8 +1,8 @@ ## Required dependencies * PostgreSQL 9.6+ -* Elixir 1.12+ (1.13+ recommended) -* Erlang OTP 22.2+ +* Elixir 1.14+ +* Erlang OTP 24+ * git * file / libmagic * gcc (clang might also work) From 63870c2c170e95bb8377805957cffe8ef020d9b1 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Thu, 16 Mar 2023 12:55:04 -0400 Subject: [PATCH 061/178] Update base image in Dockerfile to newer elixir version --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 0551a4c9e..c6506c48c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM hexpm/elixir:1.13.4-erlang-24.3.4.5-alpine-3.15.6 +FROM hexpm/elixir:1.14.3-erlang-25.3-alpine-3.17.2 ENV MIX_ENV=prod ENV ERL_EPMD_ADDRESS=127.0.0.1 From dd44387f1addcad910dae3a148b55e53157004c0 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 17 Mar 2023 15:33:28 +0000 Subject: [PATCH 062/178] Add timeline visibility options --- CHANGELOG.md | 2 + config/config.exs | 5 +- config/description.exs | 6 ++ lib/pleroma/instances/instance.ex | 2 +- .../api_spec/operations/timeline_operation.ex | 3 +- .../controllers/timeline_controller.ex | 46 +++++---- lib/pleroma/web/nodeinfo/nodeinfo.ex | 10 +- .../web/nodeinfo/nodeinfo_controller.ex | 95 +------------------ lib/pleroma/web/router.ex | 2 +- .../controllers/timeline_controller_test.exs | 41 +++++++- .../mastodon_api/views/account_view_test.exs | 4 +- 11 files changed, 90 insertions(+), 126 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3b6f775a..1bf6253af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Added - Nodeinfo keys for unauthenticated timeline visibility +- Option to disable federated timeline +- Option to make the bubble timeline publicly accessible ## 2023.03 diff --git a/config/config.exs b/config/config.exs index 5eaa8ce76..e216caf9d 100644 --- a/config/config.exs +++ b/config/config.exs @@ -261,7 +261,8 @@ privileged_staff: false, local_bubble: [], max_frontend_settings_json_chars: 100_000, - export_prometheus_metrics: true + export_prometheus_metrics: true, + federated_timeline_available: true config :pleroma, :welcome, direct_message: [ @@ -810,7 +811,7 @@ private_instance? = :if_instance_is_private config :pleroma, :restrict_unauthenticated, - timelines: %{local: private_instance?, federated: private_instance?}, + timelines: %{local: private_instance?, federated: private_instance?, bubble: true}, profiles: %{local: private_instance?, remote: private_instance?}, activities: %{local: private_instance?, remote: private_instance?} diff --git a/config/description.exs b/config/description.exs index 2a2d70a7b..f8496760f 100644 --- a/config/description.exs +++ b/config/description.exs @@ -969,6 +969,12 @@ key: :export_prometheus_metrics, type: :boolean, description: "Enable prometheus metrics (at /api/v1/akkoma/metrics)" + }, + %{ + key: :federated_timeline_available, + type: :boolean, + description: + "Let people view the 'firehose' feed of all public statuses from all instances." } ] }, diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex index 6ddfa5042..5c70748b6 100644 --- a/lib/pleroma/instances/instance.ex +++ b/lib/pleroma/instances/instance.ex @@ -162,7 +162,7 @@ def local do %Instance{ host: Pleroma.Web.Endpoint.host(), favicon: Pleroma.Web.Endpoint.url() <> "/favicon.png", - nodeinfo: Pleroma.Web.Nodeinfo.NodeinfoController.raw_nodeinfo() + nodeinfo: Pleroma.Web.Nodeinfo.Nodeinfo.get_nodeinfo("2.1") } end diff --git a/lib/pleroma/web/api_spec/operations/timeline_operation.ex b/lib/pleroma/web/api_spec/operations/timeline_operation.ex index 3eb6f700b..45c97cab6 100644 --- a/lib/pleroma/web/api_spec/operations/timeline_operation.ex +++ b/lib/pleroma/web/api_spec/operations/timeline_operation.ex @@ -70,7 +70,8 @@ def public_operation do operationId: "TimelineController.public", responses: %{ 200 => Operation.response("Array of Status", "application/json", array_of_statuses()), - 401 => Operation.response("Error", "application/json", ApiError) + 401 => Operation.response("Error", "application/json", ApiError), + 404 => Operation.response("Error", "application/json", ApiError) } } end diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 2d0e36420..c9960187d 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -16,7 +16,7 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do alias Pleroma.Web.Plugs.RateLimiter plug(Pleroma.Web.ApiSpec.CastAndValidate) - plug(:skip_public_check when action in [:public, :hashtag]) + plug(:skip_public_check when action in [:public, :hashtag, :bubble]) # TODO: Replace with a macro when there is a Phoenix release with the following commit in it: # https://github.com/phoenixframework/phoenix/commit/2e8c63c01fec4dde5467dbbbf9705ff9e780735e @@ -28,13 +28,13 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do plug(RateLimiter, [name: :timeline, bucket_name: :list_timeline] when action == :list) plug(RateLimiter, [name: :timeline, bucket_name: :bubble_timeline] when action == :bubble) - plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in [:home, :direct, :bubble]) + plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in [:home, :direct]) plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action == :list) plug( OAuthScopesPlug, %{scopes: ["read:statuses"], fallback: :proceed_unauthenticated} - when action in [:public, :hashtag] + when action in [:public, :hashtag, :bubble] ) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.TimelineOperation @@ -96,21 +96,19 @@ def direct(%{assigns: %{user: user}} = conn, params) do ) end - defp restrict_unauthenticated?(true = _local_only) do - Config.restrict_unauthenticated_access?(:timelines, :local) - end - - defp restrict_unauthenticated?(_) do - Config.restrict_unauthenticated_access?(:timelines, :federated) + defp restrict_unauthenticated?(type) do + Config.restrict_unauthenticated_access?(:timelines, type) end # GET /api/v1/timelines/public def public(%{assigns: %{user: user}} = conn, params) do local_only = params[:local] + timeline_type = if local_only, do: :local, else: :federated - if is_nil(user) and restrict_unauthenticated?(local_only) do - fail_on_bad_auth(conn) - else + with {:enabled, true} <- + {:enabled, local_only || Config.get([:instance, :federated_timeline_available], true)}, + {:authenticated, true} <- + {:authenticated, !(is_nil(user) and restrict_unauthenticated?(timeline_type))} do activities = params |> Map.put(:type, ["Create"]) @@ -131,20 +129,28 @@ def public(%{assigns: %{user: user}} = conn, params) do as: :activity, with_muted: Map.get(params, :with_muted, false) ) + else + {:enabled, false} -> + conn + |> put_status(404) + |> json(%{error: "Federated timeline is disabled"}) + + {:authenticated, false} -> + fail_on_bad_auth(conn) end end # GET /api/v1/timelines/bubble def bubble(%{assigns: %{user: user}} = conn, params) do - bubble_instances = - Enum.uniq( - Config.get([:instance, :local_bubble], []) ++ - [Pleroma.Web.Endpoint.host()] - ) - - if is_nil(user) do + if is_nil(user) and restrict_unauthenticated?(:bubble) do fail_on_bad_auth(conn) else + bubble_instances = + Enum.uniq( + Config.get([:instance, :local_bubble], []) ++ + [Pleroma.Web.Endpoint.host()] + ) + activities = params |> Map.put(:type, ["Create"]) @@ -195,7 +201,7 @@ defp hashtag_fetching(params, user, local_only) do def hashtag(%{assigns: %{user: user}} = conn, params) do local_only = params[:local] - if is_nil(user) and restrict_unauthenticated?(local_only) do + if is_nil(user) and restrict_unauthenticated?(if local_only, do: :local, else: :federated) do fail_on_bad_auth(conn) else activities = hashtag_fetching(params, user, local_only) diff --git a/lib/pleroma/web/nodeinfo/nodeinfo.ex b/lib/pleroma/web/nodeinfo/nodeinfo.ex index 14e39e6b3..532ae53a7 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo.ex @@ -73,9 +73,13 @@ def get_nodeinfo("2.0") do privilegedStaff: Config.get([:instance, :privileged_staff]), localBubbleInstances: Config.get([:instance, :local_bubble], []), publicTimelineVisibility: %{ - federated: !Config.restrict_unauthenticated_access?(:timelines, :federated), - local: !Config.restrict_unauthenticated_access?(:timelines, :local) - } + federated: + !Config.restrict_unauthenticated_access?(:timelines, :federated) && + Config.get([:instance, :federated_timeline_available], true), + local: !Config.restrict_unauthenticated_access?(:timelines, :local), + bubble: !Config.restrict_unauthenticated_access?(:timelines, :bubble) + }, + federatedTimelineAvailable: Config.get([:instance, :federated_timeline_available], true) } } end diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 9a76574d5..4c5a36895 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -11,6 +11,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do alias Pleroma.Web.Federator.Publisher alias Pleroma.Web.MastodonAPI.InstanceView alias Pleroma.Web.Endpoint + alias Pleroma.Web.Nodeinfo.Nodeinfo def schemas(conn, _params) do response = %{ @@ -29,105 +30,15 @@ def schemas(conn, _params) do json(conn, response) end - # returns a nodeinfo 2.0 map, since 2.1 just adds a repository field - # under software. - def raw_nodeinfo do - stats = Stats.get_stats() - - staff_accounts = - User.all_superusers() - |> Enum.map(fn u -> u.ap_id end) - |> Enum.filter(fn u -> not Enum.member?(Config.get([:instance, :staff_transparency]), u) end) - - features = InstanceView.features() - federation = InstanceView.federation() - - %{ - version: "2.0", - software: %{ - name: Pleroma.Application.name() |> String.downcase(), - version: Pleroma.Application.version() - }, - protocols: Publisher.gather_nodeinfo_protocol_names(), - services: %{ - inbound: [], - outbound: [] - }, - openRegistrations: Config.get([:instance, :registrations_open]), - usage: %{ - users: %{ - total: Map.get(stats, :user_count, 0) - }, - localPosts: Map.get(stats, :status_count, 0) - }, - metadata: %{ - nodeName: Config.get([:instance, :name]), - nodeDescription: Config.get([:instance, :description]), - private: !Config.get([:instance, :public], true), - suggestions: %{ - enabled: false - }, - staffAccounts: staff_accounts, - federation: federation, - pollLimits: Config.get([:instance, :poll_limits]), - postFormats: Config.get([:instance, :allowed_post_formats]), - uploadLimits: %{ - general: Config.get([:instance, :upload_limit]), - avatar: Config.get([:instance, :avatar_upload_limit]), - banner: Config.get([:instance, :banner_upload_limit]), - background: Config.get([:instance, :background_upload_limit]) - }, - fieldsLimits: %{ - maxFields: Config.get([:instance, :max_account_fields]), - maxRemoteFields: Config.get([:instance, :max_remote_account_fields]), - nameLength: Config.get([:instance, :account_field_name_length]), - valueLength: Config.get([:instance, :account_field_value_length]) - }, - accountActivationRequired: Config.get([:instance, :account_activation_required], false), - invitesEnabled: Config.get([:instance, :invites_enabled], false), - mailerEnabled: Config.get([Pleroma.Emails.Mailer, :enabled], false), - features: features, - restrictedNicknames: Config.get([Pleroma.User, :restricted_nicknames]), - skipThreadContainment: Config.get([:instance, :skip_thread_containment], false), - localBubbleInstances: Config.get([:instance, :local_bubble], []), - publicTimelineVisibility: %{ - federated: !Config.restrict_unauthenticated_access?(:timelines, :federated), - local: !Config.restrict_unauthenticated_access?(:timelines, :local) - } - } - } - end - # Schema definition: https://github.com/jhass/nodeinfo/blob/master/schemas/2.0/schema.json # and https://github.com/jhass/nodeinfo/blob/master/schemas/2.1/schema.json - def nodeinfo(conn, %{"version" => "2.0"}) do + def nodeinfo(conn, %{"version" => version}) when version in ["2.0", "2.1"] do conn |> put_resp_header( "content-type", "application/json; profile=http://nodeinfo.diaspora.software/ns/schema/2.0#; charset=utf-8" ) - |> json(raw_nodeinfo()) - end - - def nodeinfo(conn, %{"version" => "2.1"}) do - raw_response = raw_nodeinfo() - - updated_software = - raw_response - |> Map.get(:software) - |> Map.put(:repository, Pleroma.Application.repository()) - - response = - raw_response - |> Map.put(:software, updated_software) - |> Map.put(:version, "2.1") - - conn - |> put_resp_header( - "content-type", - "application/json; profile=http://nodeinfo.diaspora.software/ns/schema/2.1#; charset=utf-8" - ) - |> json(response) + |> json(Nodeinfo.get_nodeinfo(version)) end def nodeinfo(conn, _) do diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index faaf3d679..24ca5c37b 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -598,7 +598,6 @@ defmodule Pleroma.Web.Router do get("/timelines/home", TimelineController, :home) get("/timelines/direct", TimelineController, :direct) get("/timelines/list/:list_id", TimelineController, :list) - get("/timelines/bubble", TimelineController, :bubble) get("/announcements", AnnouncementController, :index) post("/announcements/:id/dismiss", AnnouncementController, :mark_read) @@ -653,6 +652,7 @@ defmodule Pleroma.Web.Router do get("/timelines/public", TimelineController, :public) get("/timelines/tag/:tag", TimelineController, :hashtag) + get("/timelines/bubble", TimelineController, :bubble) get("/polls/:id", PollController, :show) diff --git a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs index aa9006681..fcc7a204e 100644 --- a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs @@ -408,6 +408,26 @@ test "should not return local-only posts for anonymous users" do assert [] = result end + + test "should return 404 if disabled" do + clear_config([:instance, :federated_timeline_available], false) + + result = + build_conn() + |> get("/api/v1/timelines/public") + |> json_response_and_validate_schema(404) + + assert %{"error" => "Federated timeline is disabled"} = result + end + + test "should not return 404 if local is specified" do + clear_config([:instance, :federated_timeline_available], false) + + result = + build_conn() + |> get("/api/v1/timelines/public?local=true") + |> json_response_and_validate_schema(200) + end end defp local_and_remote_activities do @@ -1036,9 +1056,8 @@ test "with `%{local: true, federated: false}`, forbids unauthenticated access to end describe "bubble" do - setup do: oauth_access(["read:statuses"]) - - test "filtering", %{conn: conn, user: user} do + test "filtering" do + %{conn: conn, user: user} = oauth_access(["read:statuses"]) clear_config([:instance, :local_bubble], []) # our endpoint host has a port in it so let's set the AP ID local_user = insert(:user, %{ap_id: "https://localhost/users/user"}) @@ -1060,7 +1079,7 @@ test "filtering", %{conn: conn, user: user} do assert local_activity.id in one_instance - # If we have others, also include theirs + # If we have others, also include theirs clear_config([:instance, :local_bubble], ["example.com"]) two_instances = @@ -1072,6 +1091,20 @@ test "filtering", %{conn: conn, user: user} do assert local_activity.id in two_instances assert remote_activity.id in two_instances end + + test "restrict_unauthenticated with bubble timeline", %{conn: conn} do + clear_config([:restrict_unauthenticated, :timelines, :bubble], true) + + conn + |> get("/api/v1/timelines/bubble") + |> json_response_and_validate_schema(:unauthorized) + + clear_config([:restrict_unauthenticated, :timelines, :bubble], false) + + conn + |> get("/api/v1/timelines/bubble") + |> json_response_and_validate_schema(200) + end end defp create_remote_activity(user) do diff --git a/test/pleroma/web/mastodon_api/views/account_view_test.exs b/test/pleroma/web/mastodon_api/views/account_view_test.exs index c9036d67d..6ef89f799 100644 --- a/test/pleroma/web/mastodon_api/views/account_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/account_view_test.exs @@ -269,8 +269,8 @@ test "Represent a Service(bot) account" do } with_mock( - Pleroma.Web.Nodeinfo.NodeinfoController, - raw_nodeinfo: fn -> %{version: "2.0"} end + Pleroma.Web.Nodeinfo.Nodeinfo, + get_nodeinfo: fn _ -> %{version: "2.0"} end ) do assert expected == AccountView.render("show.json", %{user: user, skip_visibility_check: true}) From f94e8a3713e5cadb67b53ea05a2bc38eb562c2f5 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 18 Mar 2023 20:49:43 +0000 Subject: [PATCH 063/178] add bubble visibility to description --- config/description.exs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/description.exs b/config/description.exs index f8496760f..6520bc29a 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2999,6 +2999,11 @@ key: :federated, type: :boolean, description: "Disallow viewing the whole known network timeline." + }, + %{ + key: :bubble, + type: :boolean, + description: "Disallow viewing the bubble timeline." } ] }, From 4bbe9c8f5ca0482a75c09335892c788c8de06a45 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 27 Mar 2023 10:03:12 +0100 Subject: [PATCH 064/178] Ship with hehe --- config/custom_emoji.txt | 2 ++ mix.lock | 14 +++++++------- priv/static/emoji/hehe.png | Bin 0 -> 15993 bytes priv/static/emoji/nothehe.png | Bin 0 -> 13628 bytes 4 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 priv/static/emoji/hehe.png create mode 100644 priv/static/emoji/nothehe.png diff --git a/config/custom_emoji.txt b/config/custom_emoji.txt index e69de29bb..7b2e51265 100644 --- a/config/custom_emoji.txt +++ b/config/custom_emoji.txt @@ -0,0 +1,2 @@ +hehe, /emoji/hehe.png, Akkoma +nothehe, /emoji/nothehe.png, Akkoma diff --git a/mix.lock b/mix.lock index 369d1ed25..bee2c1585 100644 --- a/mix.lock +++ b/mix.lock @@ -27,7 +27,7 @@ "earmark": {:hex, :earmark, "1.4.37", "56ce845c543393aa3f9b294c818c3d783452a4a67e4ab18c4303a954a8b59363", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "d86d5e12868db86d5321b00e62a4bbcb4150346e4acc9a90a041fb188a5cb106"}, "earmark_parser": {:hex, :earmark_parser, "1.4.31", "a93921cdc6b9b869f519213d5bc79d9e218ba768d7270d46fdcf1c01bacff9e2", [:mix], [], "hexpm", "317d367ee0335ef037a87e46c91a2269fef6306413f731e8ec11fc45a7efd059"}, "eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"}, - "ecto": {:hex, :ecto, "3.9.4", "3ee68e25dbe0c36f980f1ba5dd41ee0d3eb0873bccae8aeaf1a2647242bffa35", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "de5f988c142a3aa4ec18b85a4ec34a2390b65b24f02385c1144252ff6ff8ee75"}, + "ecto": {:hex, :ecto, "3.9.5", "9f0aa7ae44a1577b651c98791c6988cd1b69b21bc724e3fd67090b97f7604263", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d4f3115d8cbacdc0bfa4b742865459fb1371d0715515842a1fb17fe31920b74c"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.10", "e14d400930f401ca9f541b3349212634e44027d7f919bbb71224d7ac0d0e8acd", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.15.7 or ~> 0.16.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "505e8cd81e4f17c090be0f99e92b1b3f0fd915f98e76965130b8ccfb891e7088"}, "ecto_sql": {:hex, :ecto_sql, "3.9.2", "34227501abe92dba10d9c3495ab6770e75e79b836d114c41108a4bf2ce200ad5", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.9.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "1eb5eeb4358fdbcd42eac11c1fbd87e3affd7904e639d77903c1358b2abd3f70"}, @@ -38,7 +38,7 @@ "ex_aws": {:hex, :ex_aws, "2.1.9", "dc4865ecc20a05190a34a0ac5213e3e5e2b0a75a0c2835e923ae7bfeac5e3c31", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "3e6c776703c9076001fbe1f7c049535f042cb2afa0d2cbd3b47cbc4e92ac0d10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.4.0", "ce8decb6b523381812798396bc0e3aaa62282e1b40520125d1f4eff4abdff0f4", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "85dda6e27754d94582869d39cba3241d9ea60b6aa4167f9c88e309dc687e56bb"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.29.2", "dfa97532ba66910b2a3016a4bbd796f41a86fc71dd5227e96f4c8581fdf0fdf0", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "6b5d7139eda18a753e3250e27e4a929f8d2c880dd0d460cb9986305dea3e03af"}, + "ex_doc": {:hex, :ex_doc, "0.29.3", "f07444bcafb302db86e4f02d8bbcd82f2e881a0dcf4f3e4740e4b8128b9353f7", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "3dc6787d7b08801ec3b51e9bd26be5e8826fbf1a17e92d1ebc252e1a1c75bfe1"}, "ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.15.1", "83c8cf7973dd9d1d853dce37a2fb98aaf29b564bf7d01866e409abf59dac2c0e", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "f8416bd90c0082d56a2178cf46c837595a06575f70a5624f164a1ffe37de07e7"}, @@ -86,14 +86,14 @@ "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"}, "phoenix_html": {:hex, :phoenix_html, "3.3.1", "4788757e804a30baac6b3fc9695bf5562465dd3f1da8eb8460ad5b404d9a2178", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "bed1906edd4906a15fd7b412b85b05e521e1f67c9a85418c55999277e553d0d3"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.7.2", "97cc4ff2dba1ebe504db72cb45098cb8e91f11160528b980bd282cc45c73b29c", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.18.3", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "0e5fdf063c7a3b620c566a30fcf68b7ee02e5e46fe48ee46a6ec3ba382dc05b7"}, - "phoenix_live_view": {:hex, :phoenix_live_view, "0.18.17", "74938b02f3c531bed3f87fe1ea39af6b5b2d26ab1405e77e76b8ef5df9ffa8a1", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f4b5710e19a29b8dc93b7af4bab4739c067a3cb759af01ffc3057165453dce38"}, + "phoenix_live_view": {:hex, :phoenix_live_view, "0.18.18", "1f38fbd7c363723f19aad1a04b5490ff3a178e37daaf6999594d5f34796c47fc", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a5810d0472f3189ede6d2a95bda7f31c6113156b91784a3426cb0ab6a6d85214"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.3.4", "615f8f393135de7e0cbb4bd00ba238b1e0cd324b0d90efbaee613c2f02ca5e5c", [:mix], [{:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.0", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "3971221846232021ab5e3c7489fd62ec5bfd6a2e01cae10a317ccf6fb350571c"}, "phoenix_template": {:hex, :phoenix_template, "1.0.1", "85f79e3ad1b0180abb43f9725973e3b8c2c3354a87245f91431eec60553ed3ef", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "157dc078f6226334c91cb32c1865bf3911686f8bcd6bcff86736f6253e6993ee"}, "phoenix_view": {:hex, :phoenix_view, "2.0.2", "6bd4d2fd595ef80d33b439ede6a19326b78f0f1d8d62b9a318e3d9c1af351098", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "a929e7230ea5c7ee0e149ffcf44ce7cf7f4b6d2bfe1752dd7c084cdff152d36f"}, - "plug": {:hex, :plug, "1.14.0", "ba4f558468f69cbd9f6b356d25443d0b796fbdc887e03fa89001384a9cac638f", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bf020432c7d4feb7b3af16a0c2701455cbbbb95e5b6866132cb09eb0c29adc14"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.6.0", "d1cf12ff96a1ca4f52207c5271a6c351a4733f413803488d75b70ccf44aebec2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "073cf20b753ce6682ed72905cd62a2d4bd9bad1bf9f7feb02a1b8e525bd94fa6"}, - "plug_crypto": {:hex, :plug_crypto, "1.2.4", "34c380ef387cc7e8d537854ddd4b7096c79a4397d53587cb80419c782b03fdbc", [:mix], [], "hexpm", "4de415f03faec94d9da9be8c12cb51e9c98cbf66d732b6df669d4562d8e91acc"}, + "plug": {:hex, :plug, "1.14.2", "cff7d4ec45b4ae176a227acd94a7ab536d9b37b942c8e8fa6dfc0fff98ff4d80", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "842fc50187e13cf4ac3b253d47d9474ed6c296a8732752835ce4a86acdf68d13"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"}, + "plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "5.0.0", "d2b54589ab4157bbb82ec2050757779bfed724463a544b6e20d79855a9e43b24", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "11dc6117c501b80c62a7594f941d043982a1bd05a1184280c0d9166eb4d8d3fc"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, @@ -117,7 +117,7 @@ "telemetry_poller": {:hex, :telemetry_poller, "0.5.1", "21071cc2e536810bac5628b935521ff3e28f0303e770951158c73eaaa01e962a", [:rebar3], [{:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4cab72069210bc6e7a080cec9afffad1b33370149ed5d379b81c7c5f0c663fd4"}, "temple": {:git, "https://akkoma.dev/AkkomaGang/temple.git", "066a699ade472d8fa42a9d730b29a61af9bc8b59", [ref: "066a699ade472d8fa42a9d730b29a61af9bc8b59"]}, "tesla": {:hex, :tesla, "1.4.4", "bb89aa0c9745190930366f6a2ac612cdf2d0e4d7fff449861baa7875afd797b2", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.3", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "d5503a49f9dec1b287567ea8712d085947e247cb11b06bc54adb05bfde466457"}, - "timex": {:hex, :timex, "3.7.9", "790cdfc4acfce434e442f98c02ea6d84d0239073bfd668968f82ac63e9a6788d", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "64691582e5bb87130f721fc709acfb70f24405833998fabf35be968984860ce1"}, + "timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"}, "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"}, "tzdata": {:hex, :tzdata, "1.1.1", "20c8043476dfda8504952d00adac41c6eda23912278add38edc140ae0c5bcc46", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a69cec8352eafcd2e198dea28a34113b60fdc6cb57eb5ad65c10292a6ba89787"}, "ueberauth": {:hex, :ueberauth, "0.10.5", "806adb703df87e55b5615cf365e809f84c20c68aa8c08ff8a416a5a6644c4b02", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "3efd1f31d490a125c7ed453b926f7c31d78b97b8a854c755f5c40064bf3ac9e1"}, diff --git a/priv/static/emoji/hehe.png b/priv/static/emoji/hehe.png new file mode 100644 index 0000000000000000000000000000000000000000..c02592d97604befbb241ef16c2016d84bc2bb89d GIT binary patch literal 15993 zcmZX*cT^MI7d9G-G-*LVKxza81nE)?JxCI&p(vq=3R0w((4=>y2%&|pKxlziAoPw3 z3ZWCEi*%3xBA{U4CvD8di`2oePV!lMCzv#U$tTL6Hc3;?k66aY}o0RV1#=C?fp zU)`X2rmqJ9T>ft_?!;yQ0BWyb5G}KSIk!&d8oZ@H=Ly(#kIcN8AKYD8URzaL>&~(# z&NX+RS(F|^@%&Dr2}pzv%^DFWpe3511sg0Lq!+xa`QxDf?a^(aZ&`n+ve+V`dPP5f z_8*{9Yf0YQsjPCX_2@Wd+;2a%bzL7&Z=Op~u9A3tR;qg1wI6tj91V)~`$OBc*AE0j zT)T)g#jVDx$}F>;&J%kZ@635q^#hy`gxQ*2Lv9@eJu5$O<;_9h(sr6cYQJ*17aZ*c zHRYFV;l?gHw)vcrNJMwuBeWjML&|92xx7`@`r#_=z~su#ju#vzEKZB?I(qiZC+~B} z`AGq`DAZqm)Y(9IQYLxz+q*&|EcwFsn}7f~=-*O1i>sCHi=2jdF`z}pe|YnRA*=Qz zs|U=tCl_*zrj2%;#Vu-5RNU_0<~|=tEp1{6{XRQYbxktbafQI^i88h7H)V6RfOG$H zEZiiArqZD9&_jGo$FB7~RW1hF6P?(0-m_{#;^{J6qI0q`Wyy;>hs^(D7P$ zVnt$}Q1ln}H^q98=sY~J4{5}m7Kr&QtD`#sIJ@Q18LC=P2<}?iPklUtokV~b!+SrY z@6Z1|`Q*Md3=5}Ded3~zp^^f~Tjj~a94$(MDNA3@uDl)--qRtprG+>n(A~oi>llUW)YCy>I$v8YOQPfHpM6cJDvht`XM@4N zV&w8*@K!v}%8LDF-VNX*WO97{$JLXyfY+sT!rI>!lBQ3Wg0aLMQkjC1^9H_YW5eR+ z+e!N{RbJ9U7k-hDM=+yIfcAweucQI!05T9xRVr=ON|ouI@T5em1+b=}t`rQ?@<7{# z7slKV=&^coM3)p_6DdgPxqr#a7f97>s1SiWYbl^;7Uq|J z9v)Ax_y+A%wzC>Fxurak*MdhrsN@udnF~q)0AA5DBATF%tO<;k83d4Hh0{jpLes3X z-izIzUp(}bD5H+lj;|6$-F7Ascvfn6;4X8Fs|s)CowL}p47mHjjHX#=Z=;p*Frti$ z@@Al^tJP<3Bs_pVHQz@WMERS@=uU}3$qn-X#5K7(TJ^@j0NI8Mg&9tQ;dcO~P+GBM znMD#^c`0Bc(8|VWh@O>AGafq8ySSKJQ7W1q9uNHxv!U`5;3&$TUa~n9ACLH|fVYR@ zarW+-Numa3Zgg}=pSE-}m{xqLJy&@k4W{yCCIQTH1U7hI)u$tpaFPlscUX1DPRa_T zlH7?P>&apeo?{$Pzz8Ta1F*)*(CGmvsb$~jAkNxq?^fX*SNIFljV2v)2E2HWlv(=I zOfC4*H-uQ6wB&|$sOV6rQ{-JiA`(){X)eYoYdE>xl7;ZLP{t@C6uDehN)jB8zhqo_ z=i;hkS6dt6EgjV&1ytb<1nB8=jTo>#9w?u>nu9=?J0M^nj89^G+hWC! z099)nn`z{L*PHlKi7IrOXrGg#gBwthT2S)|L|F*_zRJnyog*i#x?Iy0sZi&m;Kj*dsbSI`TJ$RuP|9y;+}d^>99_nYO6rUaYocON=qi40m)b!|3QP@@hhR zVDxRjpS5O9x-b1k2~Um1L(J_JQ1pNwTEOvAj6&*anqpu2Q{D}){EU-(LKsMlxNEf^ zua7)I#dwkzh;@iC%~;Df!oEw?r2Lqwq-t+EbI7MC?% z^>650*!wJ=B=#NVD}QC!_`D3}Q`WFMa{3)o4mU@?#yNS)z8w^E!_-?>i+i1hnVlflb&u$be>}j9Nv_OM=PhmqJbbd zkUJJ^)M{B}h&*z}fV35$z%Lw*G>Q$Jj#)mSMM-K_bCjbY!?R|>a|95!JY1K-@Bzl6>M;oMEH zr8nBKO4#6-X&3wx8!IbU%ML{fu(hy*q2n|quBm?|hhM!5)Y`eQ;kB?7(!|(^Z+V~< zIR?@d@CuAf7tIoXB0T+c8^UYLD&V9{uDafnXHmf7<@k?MLc7(T9=KH zpRj4)VYDh^5YE^io`#3O>uc{~aycGBWEmE4co%mvpIN=;IiCRr?xt@8pw^+(f#-R7 zdXSiwte^TNTkN#e49WJPmlnio6t^k%oLKu#&`I*dKHao zCn%JXFVNJmTu9%7KE5%)>a|S=N5BmZrqTFtD(0R}5toUjPcy_m-8ElTHHuAz7Y;me z3XYkwptC^{cGlk&Wo!BVdALA9x{@`8(tKTMrS=ES_sZ?_edb22Vuc*Wd^iExiQ490 z1T!jHgzhkHDj1_kOYp~2!XyjVS4WPPUzJmq79$rDwe7_?-u;$2&6ne_xE&3s z!P^fSF9+{z2RH8qAwDZG!(>=gsvG^TeVTDFfwJk8Gl=CF5t?+0kddo+^T|MAQ$f1cj1`fewk!vsD$Sb*A z5XJ~^F62>#d!~g`i$IzC8)vBnH<*-9i1c(Nu{$I!O={0HPZM_5_&7zBN$f>am1;^L zChlcXn^LM}$KblVJhM(#{;wQbNVS7j^%ti2Vf9xgIHae%n2sWtsb3H@+n}Ag`$&s= zv40zH37@rUX^t-*P%!NG_dQwj9^<}) zI_X!4=8V+Y4g*i>>h|Vy@WT_|H^vat+aat@1Seup*wzi*!!_J-tgNAF(wvve2rQaS zu;SfYbSFbAOTUcaq#W}u5+GTYbFQ2+bf~ zBLz$8wb5w6>%o3cSJj`VM;(ejr+0RdGk&-(OYj46U&zB2S6r-k0Ktw><5 zzE+MotV)8NWW=I9YPd4uhT=6ED4VM%T4iUa3aCpS)z7PEnpzkdgo8Ho73kMrf1DaH zN++2CS%F5t^r~UY@$byEh>=$cIn%4br;yx~yq>#SPwR7~z~GuY;8D7b$8SFkzX zyq~_XZ_JZCj%=`~Zf$niZL8gFTNb!Ngh-k4-TrRy*}LzR<6xCOu&MsVP)*`HN03GLBA17YY+^dgUs_O~C?Z zO`EJ2He~zn6-Z@Wb`Y62JxTiU%w~7RcVVw--Lt~)nkcY>@^>iKtnBeKAjjU5!7oSO z_JF@x2>^wdH3@^w^Jnogu=?3OZ~Q8f8JmHJOH?vH9xGS@XUkW?Io~ciE*WHGo~`X1 zX6Uh`p6iGY)l0hD$0GFaP%h$9GsM>gEnMB*i5=YG2LNIEZ2*kI)F`(fz8Av5&Mfxd z;;YP8IEwUN#d1vVjc!O%rbBH~^x$uf8k@{@%}QW{TgOkLnX#JeFY^B?K6xn$v?mqc zE)@vn@LhOi0d>DGuZVNC`B{a$TV|pQDPe`-%>b*)Mw9H2%LLd_z2uPBzGfh(I5Fh}aG7D2q)>KtGoSrZ`rx+jyU{9D4@bkwhM#1y1PEmJ&)<+A>_E;9 ziAc}X5l-zffUIf>WlH~o1nNQ7#`M2us6%A%YfB?MPQ`VkU%@d*StpQ`D!ysdK|~Z< z@3Ua>Z8&_5J89ftAzA!-3}XYQr<|%VmhFw8>RSZznp%4)gYbA+Q%P<-Y(j`-w~e_< z^#vgObVS#icffgxu|G|LNv`yf@iFx+HoxWC&t4CGn;_>msCx>uOC)m7mT$8=3e9O~ zp7MBVTe+sOD?fkb^Eea29h(n#CmLZ*^7=9E8>ML=#<%Rg0I6YuRm;N~yf92B%{~;VuXq#ApV>EO@rW@HQw|fk zExfJiG9m%Pa5zI(9Ur)TLngMh`k<~JE&kn?g+&L#`j#3day>(PtArh)IDXr#IPeX! z)0mxK<)s{~XPA1p|3AF)J$>=rl^x6)*dtwVcn7f=m_3#$Z{Batxk%T9>%SY|#`&q1H4@>5u2QSYyIN9As?;E z2GZ_ig13rQc4bbSZ8I1|HuLMNzOJvAUAh1G^N2TrGIuf5nvEMY^xF;Ul^}SmCh%pk zeF1e!e6cQFpUVvjT{B3-Lq$W3BE1Y_RH=9$K|kHTy)~zt37~XyJFN|k2-55B>Qd!B z8JMhOx5}FQJC?EQtdih@NKb)^Uu6M4@1lEEzbUzXpjnJbC;BDFI}hjW8L%A)Pq>T= zJyHN6U8^i9fM1-^teK6uSlcaKc1@o3U%%=zDNCY})%LU1y`4k}&=2oeTcA5lTZ>FD z7~B`d|8gzH32MR(ctRbX@9o;PEYRMfX~@74eM4W$-Dw>0LolkJ>S4fLeH&tZjhmG1 zJi#+6REh8=8T5>VKK4~jmt(~E7^zf4`5o&%s8R@P!o?514Vx>Lee@d6&Tfw%R7u*f z=SpDBEQPW2H%SicffL^0;R%6UA_{h;{nLIP{&-!tkYUZbw&JZFty*4g&hvAV%2|nBGqGa7>g$Z4 zl;IVM3|$2}4=40lRMQ6cF1?xj^a;nR9{B5HWcyGO+DADX31K4)cvf$J15&9pB%0aZk$Hy6xcIQ)<>NLQU_O=6$V13!av&Nrlno ze_4?ZPP-p?QwJO@LG5Dp%BkO197WRwUHIfR|CMVCY11XP1=?g^ypItso}gV+UcM0? zv~j5hc8gv3biBja>y0Fqxi{xI^9*?THj}3n?+H7AgkQSfZznib!v?%W*`1v>JoV(9 z!>#z^W}D4UCU$AsCT2V6O^=GX&13kr;!q9O8H;nY6s=2DSZUxNz6qp87$qMBD60qk zbF$2um@8J%CyA6dyG{2JTyWEQe)Oyq<8&>vxyv!i?^*6L)5|MO3e)wB`k4^Gl-f$h zdCuNG(+X{Mcwk%WHzpnaSjaD5RXpdA%T+isKRPtA{fm?C@VV?n454Yw$={EpLq0tY z`SaZy2 zTDVW8B+5ly>Wb)NxBve4@{u`$CC(Iwm-K}kk zyvmr=f*Qj%7ti-QPq!NHYx0d3H3p-KkXiMMHrAwjFuvHsmco;nxEfW$s`49f!ItRvzGxgDp?h)^=J<@FiYXu}qRt0)Hb9#O_;^ z>cqeUT%@OX=<#QpYE&akm2Wao;RG8DJ{b> z-K4VY{iW7m@|uej_ITXen%KPD9u^p=lCp{eQ~e0txVO0QF`QQmrIfK@*j7>HLL9p# zDJaK=5$5QBsd4$K=t55;*iV`Hh^FVmlsy+suI>w)8FFaY>4``zpcGxj;3E*Lz^LO^ z9oXBe(;mIy$xr6h0R6((<@tW+%q}|P%TK& zch+ICq7h5vOW7YAe*ut@_0bi&76flG8{isX($RZs0c9&ctndAlL;aRLvlWGhW%doIgCC4E>WPTwgrnav${< zf>hhk;lp#kc)54G{%lO4lL%Ad3%Ydft*Rb3!hGOOrnvsY0@RWUZwiU#k$H5*EEWoRCm1ah;UopA8Lg#YB|r9g7$^9Kj(x9#Fr9r-I6wIo$$YirvUSY6lF1_Q(V{)T!%-fw-$q1H;H?Y-F)xZgwCpXaf%4HFo>^dZB;`|;;G4jU8F4es&b zrH~_Bb#*5ljw@P80s!>(3VaK}nJv2cw_BMO5+~_L1SLEA50N!RHJ;6MsbfcPBNY4h z11h1A3TO|gFGzPMjh-%5frXnVyxIk>Qbw)Z2l-RN(&f3ZpE`41tv9pZL0+=Alma9& z2M$J6{A`-n5=P#-W^A{VGWSut*8+~(+4FB`m94Hw-@!59+yAqw)Zwu@9jt=v`rl_N zuDJ>b-HjUjN_m6{<}!IEPKiMN0W4|BX2#{mk>|_8a+wOTa5{vHVcz`B?DfVLsz;a^ z8Kr&JPvAE#U!V(PqA$5-%?PmL+m2`Jx!Urd_NJ?3-D4?q zw?Mk%tc*65A8S7$R9zJfq2{)nJQ`Iy>N7T%jf1;SB>%H2lTqbgrl`fHxsrqdex96(m>Qd102i#CECB>wgwU%|DxxH=K~ z6+gY`|L3gkys9RIe1dyf)Ox;g%R^(Xb&IrA)A zP2p@t+UA1r-Bq}Uo`X6Qy{x#JgsL|(;RaQnMEonPWx%~;hO%Nz|G(P;e+Qd0&vv{2 z&Y}d=+I)6@5cjNDOY|QUXohW6&Kqm^ylkEq)Pqx2oHl!3X%!BSxY;oG_BpW>b22ldEoxW`h4z{lTdKGa z4`ibJ_pAid(pX!40$0w!^`TqqH`UL^>;Be+3>INBsVkui&>ZW`6V{ z7F~Khl1>P3JP%WR`Z6n43r-2+^ZWL~_Ek9^Z$#(IJ6LD_r;kj zmP%WgWpY;Roy_U(?j4pZyts;&E+Cfa(Xjs%@N7o-?is6=w*)={C~x`hd(Kt0-VztL z20oKg&3(ZsL?h_VOTmLiH;$T`aCp(QW4R_i7`Seb8tD|2q6R+sTM@o)Z*8P|`^rwo zc@4t^zo(g*)t3u?f4GOsWLE|yBqCxU29_K7_mrXrO+Aug?xb_P0RVYN@#r&zMu8oZKSTx4CvSaoj(E zDrOKZ1?qmqP4;)flnk-j=91qsu48;yr6eq59>s;YHa{pdimTp5Bo0YPVFTZ5-kRXD z{O%~CJw%T&9l5QU*w^=IRxw!UBLu=VzUL$}4t77HRX-SB-?Ne?onjpa%FvDj{UzwR z8p6@Z$=>`aX{mEbV8+ipPB#ERdU>icPC)jYXNmzB5XGAsdC>YfUTydMh}_v@%EU*~lVb3~-`<$kgi3mW3ypSV9SkF#a5O)@#oAZk{tNi(FJa?M^ir|? zh9i*Dp9m^=l}E>qnFt9IwWIF=IYE4G!E7nwF+TFs@r*}^fSNeea^P-D_p_WTtbt)5 zPB8gY+yailFujchQ+IZr0rRvp(sx^bzXz#y2z)!YfuLocI_;J5=wrYPM8gWBj`?fNGt9e_Me!9yypZ4@~t~KZz9tA?y50UD2+~nM>1l{sP%pi z%5N{#70;jRfH2yb><(;4?l7%ro)^!+*#ok8Dm=|ysj$~5Y_(DGM~A~5h2v-^-l{tXMuEL z=)|%D>matZhek5daqnxbv#94}hB#ly(7D<2IG8h4OK37U0x5}SvnY&qE{!JZ(+YaE z3c3JT{M#<1O`QN~zuR?S^?upYn?qwfeD3V!?s<697tV=oBN0nOL3WtTO#~%I9^k_E zmRePWcO!+UNiWI2WUq=y&(~F?;EFAoaxi)hX#r|BvH=+%RkR65f6%+9t>8_}QWkss z@QKur>Pt8Mnh&*XFvt<~ivf{AJe-L&_g=G2IqG*#Tc8YerI z``za!*|z5)mMk~tlgCc@2W zzsm;XkXhjDfoeasV~ls~%usy=T{=wg5zLW5zj%Fm_!c+&@+_> zJ~#>XuoI}ejg;3<04^m!>RHYU;vW0#qbL?bbp4m5Z8Cn}sor$>4*5l=*^?Ll?tv6U zfmK-TTh;OK&Q7NM`-chM{0ESxK*p7w>8s3kdYEXTwZEoi!QZJC@*Cjzyl@BhIA~<2 zO4cj~{*JcqmNiDPdfk1&oPpZ$V!erNWsyE;!}*N_@oBHco+nr>=wCqC>&5Hh-_fjT z!(=bgY7lC!PsXI+rLLXNFCKs{7o#C%$z;?7uctA-k)MmzURf8RB>JdrJA!p@pXg#` zqDtlk${1^{O04+V?1}aOO0M-w!U_inm{Zsb96qxw5kvjlNn}0^*;K*Q_cTFK(kY_8 zHV@fx@-#e0?^={MGu1VKf|6MYh!Gcai*7HA1L%fJh>nKj_{!)lp*Q10n&P#E-wM~e zD7DdZ!-1?WKrM%_UpgpE=pe3mG;4al+UAu01HnyolC7~Jbup^_us+M+(8B7QWApVN z0Z7bz+8qiy^YOqXYuklTw$xWP#L2@o^{IMp+MMI5mnM%eK6uA;xka3r9vUh5gB2T~ ztiWAE0YX#@QU4fnR=cWihe~UkuSw4DndRl+i3ZxeM2?O4tp~JiC~+3$TRD+eg>4}l z8U}m$x_g-_OnEOtg%bu}pVEybe}^Uj7N4pq^)~bhgV@<9RAbSx_6LLS$Eb0-NABgj z6fo4YeC%dXSSbI|aev(Le;T|yp#qDK7I?cj$F=IyDOMB=yPEo^KYYM@!gQ2GB4vD% z1g9zD3bHa3ZEg0JTQ8ULJUR}y4#^X9GO7KdDBRzGh3xe;qtmZjJtqBB^zRr4a&uVd z##u*}<|0@VX=vR^uSn{7!$Y&y21DG7?UL^{R4Ut)a@wzd$18HAZ5xE?NLJktWcsiy zT~NSAL5TY4CmT-qWWgOZ$j>%iLnL2_?W=KZSf=l!ZSFY+2VRlB{ILU%jf-g=--=i3 z(q%Zp#3yq7nm)lTUGM{`b?T?H(jDXzD{TF}p~HZ=W(%-^E|fWtOAp_Moc6Qnk*cDB;y&px&@u2NK{0fg0%!1EM=-8PLDy#U@+KU~f|(Q9$z_m9AC z&1IH8K5~+c&=G1hTiN|suBWjMmP?`M$yaH#TIjz&UsiX?D?ut!jxja{?zjX~lOYCG zdu`JF8#-`jeM>8LL@yxUDE(lpA)6smFk`TMeUG%Hf77@-A6_Y}1G=5blU@(1)Ng>x zJ#{QR5)+~i*N5b^%JBk;BfHUHVL?sH8AK8_7=*f8)w4iVf|0&=Pu{nCx#(+KjiQTd zV$!@yvZ;?Wp<-4y58q_rx1Z1_!D$vf{ki|*&&d3K$I0By<=6XH1*@EM$Nco~0oK9% zhOw1T@I)|Fsb>Kv-nQz;g?NXyh}u#G!@@}=FO0c#uwTWEQTI`W54)fsde1m1ya?Y7 z^N(;F)(N$1nCNF!+7#N2cgG^*w`_DrR9twoRhpC6t#Rp%?p-G));YZd;!t05*8 z)vvh6z2@aPfs-q8c?O?b zV1z}tEV{v^cIN;ywg9nc%!832X2DL)QrkIDA13d1J}hQXTLkaLw)m5zChzW%8ILv- zcX1*P)5o>8D{4$W1}$!nF+J}5nUvU1w8#{SEN(=01l?U<$jj zxzjgQMj!AgF&T8aqaJ(^<0HNSRN+9mFW?epCB@Zv#XPcnd6IKmjAgf>DQI>r>(`Vwwc9FRjFXT=sa$33U=h? zW^x+Wo}?Cm0}r-V-s>5|#X+7PpoP8r*vSv*xvQ;8{3=5hoAEOg@3ma)S<^yMEdW8Y zl$%<874Ye)aeqziX@@FR9PbQkd8=Nwf!Mn_+Tr3BtL1dcwt~~`d_HfB>RVuI%JG`{ zH727|7ek*ezul}%e^p-Lj?Ck;FJ1gekypIgJy&rDn;Fh74SwvTb5l7nWe9Uk;+|)W zD*`%E<_!f(4*a@GIy?S;zBQI_nuun>-T@#L(yxdrazvShlKkCWiAjYROYtOxci}LD zHKoKWppg@tQc(YtwOZSTZ|iVINZA5r7)SGAVq$&W!I*S?YYA?3yAOZo{(H+kk*d@B z(_C6zP=0#BT$qdN_;9(i9F8Vpwu=);(TV;+xKiR0(TZOl3S+1Leeu%Zzo)hy2;Is> z{y|5x%3GyigCxuTWDLyII7y`#^SeoVFzN98@h^Zo`Q(?tt5 z5ey)RoREZ**c^(Kue9b%Yp1DN<0Y5iXiqY>#NkRr4HL%P*G5z}^9#CavHSx2g_1`! z&^q5a%jah*4Iw(aO%}JcGy3|ce<`H6$pQ6%Nr`Rkeh=v5?CDPL3`8}3wg=-uxEJp1 zD;w_2&YY6tAAQxbs`Va=U-6=&>c_u#hk_RDeA@ZE)&1OzD|@`cT3WunUD&T%2ScC0 zS2YGP4>UoKi8C18Wu!!Ah<&k-}Hb1Yw2P;wJRlU=~uJ&8aaeiJt|LK0;89!Dq zZkG1AvTwgs3)jMiXM?y_+6n`?--15A^wyv;)sOCuixuB^4Mi%jWlmD>gW<5-?{2&` zlbFn9H1cieQYb}FybpwZJ6%>}`R(-T`a|iT?_MWGihdm{-N=8P1E9BL-F$7k`0{-p zc*G_xtu&CQAlzI@Bj3o)&9BlA=cl%=&}3o0{^k8T5ohI~!p|JHd*^YU)lJibM*asJ zPXGDY49I$H5RNZ+Jb`|wx9F*Am2q7uhzvOL^Ooq%Lc>9R6ICGVbGiS}_bHuu>Mg$o zT1F$HUvtw_!6M_49NgNzN>wwO;hLp|vHLH?!qGQ|ADnGbguS6M_r<)=B-ZR#jph3e zZpL2o0>vZr#a&&G1FUftbrBoD54F2FwAC?dp<#-nSK1NW+{IZy;O4XLuph4`RP4r) zI|?ijhN)-qaGW1kxjom|Z?qWyljQJCjHz{qc9>rUCC-@GPg6)*Mdo;wGJ~?En;XQdqfvE))SxRHJ9RZSC{%o84gdUpPq1O zcF}`Wt_LVf;xU=^wG4izn$*Jt)32^p(#^LLZ+Uv1{}`XnnDqXBW8P-i_#`!Eb~HVu znRq`hxxL7Uw#3&Dt@PNpVPx#AE$iY#n-w*mOkbo46P-4(>`IAL=B|f=MjNXnL6bf^ zRcX_wLaP@4d;H*fH4JcOZP-26Nw8j|20s!$;H04-mUvc}cR_~@+xM}t3@AJP5bQXr4fvq3e2k4J?O;O#E} zvBw<;V7Cm*Q@65o3(a-C`lJTgg)qW>TB?kURP+eE#vb0h!I98$yeFb|e=O{dY(xyx z>eDhCfw~D9yi*?GMN?Z|a~n6d@YWuP2d2c5;PrL4&7U?iAZn8=4Z%!_!4bin5Lh#}_jnTqS0RybYEZ$GQ2wEGW1 zh-E#BR1*o8=)<8@%mIx^jAbfg`a}(VsR~5cw~_eWxiF4=@kJ7{*-WFgt=#`vRxhXZ z7^j1dcdAllM8cJ(x6f^v69<#;m2Vne&40JQ_BwcS3%YETf5VKZyQ^;TzdkgtxPBgU z3egp$WPqW<x`4kcMZh^s#x=#S?@t?qlGtBVv?s$c_>-)*SNmB4V@XqG|b5HmEF) zwtp0u$Y1G;LeAve)z*9+;zw>B?Y6}zp4R-DI2r|CMqu@;)76}JZt1wX;c|P=4`2wh zB|9?+!)y;!D5W9U1`_#`9#acAe)J$sn?@#T$Ii&L_|~CKABAzH>CBi93o1Z(9FnWR zq_Z?~lrx#;*FNul|4MFBi#&LU+q4*m0J6i9JhOOIpiSh zqO&M4#Lqxn$8CV5<&+V%l+q>o$U!-6EGGiTf zd^B3;f4@d%*=%8CMBgL`uD)n8L6%z{1yKE91Z)Y9U^P4m4id`G&r!l}i~7{Khq zRXXXiEYJDtMTIi^3JtJt(jSh?uIC?(^><a0-y5pb4RGef+m9T_bLD9Dl3o?&4NW_fl`e5%rvewlqvQqY zi?4QPLt%!oNq9LK-Xy-1GBaf^G@?~ORdmN7H+=j#-D7M^uTVN$=s*&`T3wHPQ^JAr zO~JMB-{;!)@Eu6x?SNWg;KS)dGCK;&N)mc0%_wXgPFEUw;masJoQSltlavw{u89%d z_JKljX1e-F0vGS?c+=fC4|ls)-b;rbaI>r`FNLj+->nNF6*Mp7@c4t^(|h|%?LM0$ zpChF(y~C1}-w!HBLyX2^AK8YiY`-k*yk%d8zLPq0%6}!^=&Hpti7$4&KK$7*Iy^57 z6k;uD{WN=*BmP!k6uZm=5>?*{;!gHp0fW>XZZ}b{3|tV zV>9gJWf&=-Mj&W=o$$%#0pH~|*3PTW?g%e{f2!Q4BSz>9Y+=kJtOt8^AGbZ+0~9k$h<-Rysb3eVPFst+vxS(pji(^Egol(vvx@T}(hgStss z`HwI8{EfF@GFgR9b9h0EE~7;mxOLx6+DOlw7CiWH@9f@kw_dU*P>EJd+#!B^EGY9~ zv34m|qCIHQCt14t->=kvgQ+2#s1U5EO$t`vPsHVh2N@@D`EPUi>?2m=cyal-bD6BR zOn%D}<{YH4I9aNzO}t?eH{KugF)=JMIw%k{8}58Z#ejh=_Ddrvl`GunP_HXkjqvuk;l;Cr$n#jhWT!`f;~={WP>%@qD}JBG=<=!{hIX z$K{C-%P9E#r>U`qxeIq3?C78*+wS7a<*vZL&mNt>qBQ=@bnUiZ{N8(j3fpbA{kv{= zkr_A_vehqeQGWFZ)bi`|%`nns=mpj2TEt5758syuZ%l(nc!YiiJK<$-7UaFEGRV|< za8oZlZR54i;})vV2c)EuYVF3j4CGPqlO9S(;E4LU3N@yqE&*QRH<8<@lXA!yK%CMXCe!AOq{r)v{WraFnKU2vMCL240 zLdZ7D$2QAHYRgAAFNQ7`7MikeUM>~=V=4TZnkrzU3&<#?`3oaa!Fg$=3V*oZi9LbD_D>vIrfF`YERU(WC2n zj|+M2j>cb8jbl@@kc;a@!H0iu#@chmu9Rilo{i}XP!_)n+m^m8^WyaY$l8W%Uy(PL z+IRX1b9MiI)%{yDzE}f~{?CazgHOGAu+B&0b>z08p?UX0)3aM)s~-8cJBZ%I)KJ3A zoBoj3)`bbJ9%sou7F<{Q)@OZ2O8w@%vu~3px&hyZ_6TpO=N@Hh3h`_mzLJBkHG%u!H0fKt>yI&cT+tJV$_U2GSPsGP<~29CAy!y5|mx6%Wsanj+Lc}%~V z`;hWqfX_WA724O1q9?OY=_SCG6}_;M1INIpnonOBKelI~jLlC@Rhs;G9%WS&?#?`= zf?TZI{RhkW%jB*e1!M?sUJgA!J3IUFgR+N(JjU|+q@jr8tpIskU@z=wy*5x@r}I*T zo-eTbWX{!5l+E#kO5=cPVD)gRGx*B6HNYuV?^`LOw=RFqT#}Z_?aO})!q#SA7LgN*{v;TO{J0@-{%xS^Z(g^`JMwA~ zIaj88!Ohh*Ht4f>`XYtKOMlae4Nv%cGpFl*zvJ(JTmhAur*~ZZVw7Sp*Sr5LXRZIH zz5FilkLdAtBkb@r^m?>0zuHAv>SbTpWmMQHd8KxS57+naRTmniv)!REpkpeWdav z5=bXur%_?#BfAi?YuAY#VC{lTTl9Ad3k_Y}zgR@=FC15NU*ujDw0durJ0DdVhn?N+ z{!!h1c&q#HN>7SEnH?pcT+RO5UC}?U6v}>fr+xtbD}7Ib-Fa#G?+>Z3fByO<*Qb7% zU_6{B8#&PbYdkgdw`=!_>s9>-Zh0~55xOB?^tW;T@bq78UDtx}NBBb}u|nxP9~Z?| zpw%o%KaIRw2RABw3|DzpH% z7gJYQPI%zaefl|jDa7-#E0F3RaWCnnUC2c%%L34@|9VHn((8xhTerfywjex{viFmI za?VQCTTV90nTuX$N_?d1_`{f7&>ea|6n^vJM~ae*k$1Q3Up~(rIJYt#MeXI+MYih6 zbnLS__otnyM!Mjzi*0q^7W>}kwmx>Xa1mNPTpjqIBE752-$Q$&=JkG6mwto;Ksguh1fTj}(c1+538nQVSfpE?=*;djB^z zf=2y8GYW+lK7MhWxw9YUocSBM3M?==ZaM7kwo3wcv{SW}r9C6TmrQCk8&meKc`8xV zD7LlcTHQw4=u4d+=sK8F_m4s4{qIPzasq-}%RHQtNysu z(C!N334&N#vzx^~T;>INqD+GCc%^Fo>&{kLUrsUE8opYIE#j;D#P@~0uY>AyZ-=V} zASWXyFC`-{C8uO2qpYf^sH$-Pu8fSTj7(-))&Ev||9>6aJYG0E2L9g;a#Av~W^%Hs zvhu3(O8-xXe#X+P_1^%o|91pmXEz5QUwb#t|NkJ0|96luZ~4osJ^+}m5u{f8Y2^O_ Dnw$bX literal 0 HcmV?d00001 diff --git a/priv/static/emoji/nothehe.png b/priv/static/emoji/nothehe.png new file mode 100644 index 0000000000000000000000000000000000000000..427bb6d61f1f4a24e4b89ed48f440a3038c2b594 GIT binary patch literal 13628 zcmZv@2T)Vb8#WpcY0?5nlNyQyX@)9AT0*a(Nk9;!NRc8)2~re2SGc()ZxMsV4_+Qk;7vk1I1EY=jA2n4j|Yx{Al+i(0suh#fcAHS zfg#dZ)DYm$(woB33IJyrD1dC38hBET7N2N`FR=r6bb$ag0ZQ#mF3|-DXvJDH{S>V* zEg#}Zi>Iuz0YE@{v3}Va#o>{@&>sguJ6s7r38D5X!qX|}>kBb4T~jUiWF#6Kp$as> z;`hH=R%%b0Z>DCgRlA@;`Gv*)H62mYds`g3ZxZM~@xbl_W;)8Kl5L!L zE>F8fk5&OR%!tFl2oo39zNy)PKYEOmC-;7v;#R>q^5&H$J-rC$!&wCWZW!Hx=~Tca zs?!v7rC&!deqS^x5BpywWk?x=7%o~{&z{fO696J41%t*}2;$O}fFX@vIX*P_We?1z zqm$v

7*%bJUx+&oc2bkoZ=yoc8i-vMq1!eEhiXjk>XMk$JxVqrRtN_&E=strk2& zrS(P|$MpP3QU&%{;L=#D#AzUJI};~OB|CNB?+QR%h6n5JONU#& zy?<)tMOL+CW}#~0-z#AHDAdi&vUJR{uN=ErhE$iLz;|sDMWtp3KF(LoqH($8#xQkE zSu%*{Vy83>olT)>`z#h4iKgt1L+@lan&;kVtJR}ONrpU$X`UWmzG3Ep@g(5nxc~@N z=+WolXw+{QAqcdIBVWrl&}iy-ShH2+RV`vPVI!$&J@t$b?TVhkfkATbRxC7`!}6vE zy2m)j7bX3Ww!-Zp9zLd+6tn6Wh2Vs4aH z*;XtQ8PzAQOY=wyz1K{1shx{@_u?{8PZ1s$( zv3a`Wkly#CjQ=}}&Cffn*LbL0XC}RU zNX{!Bf-xJLSv|TxfG}%OELEu9gI`K%btc~u5akR}ewy*_kClgLXIqC<&#Fw9UkrIMg>^=jrC`y?{WBq|+>S~4GEpKW5|I1R{r5Z6!=)$0HNvJ5 z=J$W>ndzF z!Ugi3fO$^+qj~C2ABC+{T7{OKWGX!bc~KiH9k#dQ4TPO}7qvcF$ougvi)Bemn>o*3M0(3R+%j)y6>TJpSVEu&{rqLaMETqgSsiI@aup7{(T!> zdT^B-^PJMf=%c?avY2`^nbc8Kf=lOp%S+0FFLr=@hesHYHn0$bN)p&S{=GpT55IsQ zq>bqG0pN$sPLB;KcSTbO4Z%Hf%|V>~Lutii!4)QUtgs(#lQJO;o)jwU*5&v9*yYio zBl?eCbmiRre(mZ#Qc?}`6s!umHAIw0V}IrH+M2bm`zDSVO%%VbVrIAUG_mH2PKj9y z41@Am7cG9XZ_fTYI>SuRzk!jAS=Q~*d{!N(iqSOxnn`G^TYWI4yB|fbDvZ_@0O^|> z>qAY;kL|@Ib5=G%CWB2vF5 z2N(QH=27_F^p;}{&nq!4vAsM;jGaVW;V5)^^Gg{5 zj4_F<{NGY}NReZlTu9dJLlhUhk@cA`Rot#^;TM7t$yxN2+ewr{dWtUV4;!m@q6O`K zdw~G)DKWjoL%)CjC6iFIqu`zS#l4eGL($euZM-#pJRtEu!9<+;qG{yh>sa>M;&4s? zwD4`iqs*E;c6|b0&(F=>Mj-gWxqEAKvkea+2r|jk=V3w3mf~gP3H&yunnjH z44@$U)=Y0JxP!Z`pR>pEm{$%k)}V*tXdoJVv*6foQ!I`cUT){NFr+3b zoSHq_uK%c0^P6i&zWoBoDXM=;Zna5Ga2(E*8A+OJW)LtubY%CM$NI86PtYu_N@|me zW+jbG)tCAs=s%oK%k|`B@-z!O8^f{CBz#D7k$?bZlqMh`z&ARfX zai8C__U)lw)C)6e{u7?^6;Fr<8=bDXrNwIs%;;>~g*+;&0Ml~gkv|$BrTlu;Q<(-y z9AJE@G#i|-Go~j2pguLx^Ck5D&0(LRqoe!A?#>S*jcwN$XPq9Dq&GJ-u}f{ft$gp1 zl5a2bLhlbOO*!&YUcQ#eWJoruj1=NW_+h*j)GJD{^QBPsr%U*C`Kp|9p%kZ= z>iH!SQ*5Iz-3MH-pVeNtNS*RFsq*<8A5y`lx#H zVf9C2De8@b=dN6Tg7pt%+d%XbMC`Rs1s3P|Wsj8Fs#J>B@X`ykW};4z>aC9 z3B!(G9dcQqD;#6iD-@_7TgCji_$5JWsZ-$(z{nP7x=iIg7?f|IwXPapXM{b+ryDiK~->Ld-t(v3t>I`xfEoH`!d z`Lb@;j$IcGhZ6kU`IfIeGy%O6%t^N=Z4kV^fZ#TUfr-YUymG&i{)$qZx+=n8M(Qe> zd>@(m-enfRl57s;P76C_{z`2N)}jjwawG~$HA_OpMtbjk2a7@~y-1QGNbQT0Ar-wJ z?b3@KBU7ke^BI#0E=B*kZ;46+eD|tgU%IBz3C9OYO}>VbT;SjPRtk;Lg7Wk8bIG{G z!QdgU`(lPh-4oppVT!U(NAoZaw@L9?a3+89H^krZTHx3AGFxw*;N3pu-4ftz zn6=teKeWZZQb#}~nl=P|Ktd>LoSF_jB+o59aAmxw|H!2j%LM{P=o`kfnr2MZgr|3E zu4-tRML9jVi{5bM%vyRthWza7bHaNnx$**!jElq~m5FG1?&Z?}y1v?=XSxi#pws2a zM$dc!pOQ@4teRgCjDGZpr3P_o(N-eWSy#HZw_VfuPW`eS+;HYlKDeftcCUXnE1+~L zKoj%km;uPFG;YL629fwE4iB^Bj7GT=%br-dk;82x=!?|&6V@vyiUl5|&aQv;WIsJv z-Z@<`9Nps)^J5%_*3lEba8n(rLqKZkkpTgCIx3)q7@z=+qUF*yD0NgUc9da{3GZ&N z-&k;Z%l^%%d=f~JOQhqWHEG1{M{&DFHmll32p?WbX3e)X8})9C$p zsJ&LYAlTqUR3WB>iOW8#Jsw5#&6>%ie3JR=(S|55?&p#_^dg}p$T$vR0<}D=uB}Cp zibbhsX6NSXt(YvFzHxjAuUrr{#HhMh3)W2uM$hWdQod0Q({ZrG5y73Hg9c)&+;arg!bzg|N=Q zNtyuQOfVOB=>s|FProk^x;GJl_tm9SD=eTjeIy2KVR@cxm6OA2kx9|_8>una`kQ#L z%cQyL7s&=>X36rB^mG%lItUU{7^db!l~45J=V-u(2D~;>nlnpNmYeo;O?qNO?(_#{ z%E=^ORv>XlR?g-<#?x+vmg8e&vp@)%poIJs{rMsR=&|I)XyGptoq$%419GABY`soj zk>^TCVO{YwUdxtOFlf24*^s!htQIp6J2{2$j8&|+_-P2B0nH+6l>t@HDCmKC7+S?c zGu?zw!=Fw8>CBRS(ch6+0?|oyvw)7G-0n>2bo;N!5s zgR8_?Y3{YHhsZbfVFBb?z4kj8O6yljWs(0N^` zyI^wb8&`{UBos-G;Q78W;o(Y;;ioyJBESi9uC40D5zIxG57DdZIT4{|SvUnTA*jX{ z%!y)(lHt8B;{6{@ja1*|cOROB_Jmq`0$z-C?o~?%CW)NYDJ|8)3YV;by*+oI z5nH4%$%$8zOhwOsZ@0H<u^2_ z*4+m&@Fy|X{4%&4XcS{zk2hu*8=}?ZkGgqd0I+r5c9%X1&2`8CtTdg3zSF?yQ9u`s z;gAfe-8E5GJJCW?7~?<66vJ@o>oj`uU3Fam`@)Q{VldHs>G*i;VbTxj3VhpV2lqCX zUxgXprDK?hKGh8YyuR8bHT7mufDy$GX=>^<;e$!q)CqBy{{YXXU&<75>Z^G_*;FkC zWo+AHYDvSb_Yy_(V4Jh#N9p2@d`?CM;s)IOJHpCtRE;?ih5pV+Vpis?>ekwVXhS*q ztSi{8xXy&!NYlTQ|GJDOhex@c?~BSQfPi5rhBxGJYl*JG=#eb&cZYzqP9o{p zlhad|V^&BJ4JL-37OD^h1pk?Fdz>%v`_;_4xHWUQwM5DgV)Gb>vv|T<6paDV*EsWW z!B@^#eB}t=EI^ia07k#`)Gmwcntjx*ZmcqCcWa4sa24E~fTD^%57wW6@7y&qd4;KP zO|a975MB<(Gr{O#)!d*h-@Q+#J0P1anBtaSPQGkcUHYYoQ9tb*6kA_q(7z}4g=iz>@;4G`4)Q%y3fMl z#U?)C-3JMUm-E;vbk-wy-moY4mtR8+AL+_lwhAyQd3BZ^Tf12ztlrPUInCyEk-`ez z@$(-to!(adBHiT?0Jx3m$}Xn6HDpX%1qCpLbqPbFhe&Phoy>-d-^EvZw^&vwYWEwS zeaEj9+VWvvJ86Kr*N=3~^0?QL{+`Q1F@4LquZtPQfCK7}qT+yKESGHcQ?q3|NQH4& zn5h(YSl;L2PdT%0p7-ZN`D-)2%Ko^)b(%2N%}i#gmbBOjaUHg<@{MZK4!`Z=zTNiA z?Qm-0&a}-!kde};*k{xqk1C-&kV%q;nODy%#S~hdj_3CY9HbM7Xt@C8YNwm=%yDJS zvfh`=+lS@{Us+U%VeiEcrx5lu1<}FUeMq_C01u-&mFM2H?TN-pcYu$uaNbOxG0cuH z!m~A%&TW^I&_vU59o5g!=h%$rFn6w%k`5jJu=DuPUHWRLp`)d#>3kySq^&QOgD}2_ zzXYQztScf1Nze?_65y_T5h;8>%wJZG_NA{%{ReIPEoYUe<^!7Cd{@e$hFCPfCQZ)@%!T3+H8 z=#$Z#AR=WYIDNxO+qB@?>oLzkHDMHVGZ^&S(q-{tN{Zd$Wpci19uW-ouR=V!RSmCt zAe^HPV2fF`(UE(I8YLTO>cMR*jxAC9I&6F(d1@dGNPhzPT2I7ZjEochN?AwvJF!6L7B>{ zS;gN}Rs(ZWRz(VJK)hmUM1TAQ$^nG4)9p9C;@E3k<@_CG>J3OAX$$@=yBfJ{%}(5U zebT^vwH&L^)aG|%ed!x`B>G?HXSEp@cF}yeLf&PfISB7(Xq5 z_HucD_jadmx9v1)!_RO3mA^+kIvihB&r*r?6Sj$jh9+AIFGw1s`(GH-9y58)>hbl4*kf@Kc%OiO}mw1mG+-_A>m8(yKl$4a5vC_zJ=3lvn z)1ceVM^-_#Bs0s_fhR{Y@@Jy-MtFOZ1bbK{{gYMFjY=U-ZoSpbB)=@1O8bLzTy4ko z-0h{B!i9lzE`y65lL<%A5fC_sJ9)8c{q>HO`x(e{-yI5;p(tY1+AZkxbcsAM7Mx7o zixDxog*n7Jw)P~F?)+`?vPXzxYL!*9NUO97pD5Lsht>U)^o!e-50PdjHYWw)XL zar@I&=CR^+_kg>rg*sNa6E-~shfK7EWt6EpFB?ByTJoOVKFydEtul3DRa0&JTI$WE zC+TB=qiTjS;P~TwGUG#6`#1s)%B`+3k14NB{NpDyn;L%$&$+5;)@-> z0BRE1HsjK!`$~JFPL|cA<=P1g@dUCBF){CQbjSUsj|0MLLoOw;jbtrzl<)F~g zKJ)O=>N+PG0Xh#Y*)CKzZxLtyRD0&&Ge-4ed>cO7@O}vpaw0e{*&2+Og^If&uon^Ld5)IKb&*nIJ7ha+fppmy{2YS2pF|H36ZgEaVemDF5R zRCUnxmr18&G!}<8_<;=I41O~4;iN*gWftKJB~BZAqSWB_c+- zW5SmmasuiXw}*dB1Tb=IUFj0Ea0>Vzz7;-u4*9E9bXa5`PW0+AWuE@U>H_dSsEo{* zS-9b4;RB*nMCde&sfuHZP6EZFfaxLgDctw_g1kB6txDwxsM^H7KQ#C)j<#y ze)&9VDKR|MMD?fmUxAE7tf0xSFe2Kw>BTtjEFf8tPgXSd7W6Eo@i?M(l_|yB)=6<~p%vXiiNvw|Ba}!8O{51F?pfXb8 zT%NCQR~(5+;2VGPng_^L1~$^{l9e_*i3@TyrJ49o-QM=^9hL1}J7eJ@=Gh>tTIdkQ zT{AU1zq!4QZ7J6Px7l46?R-sqq}!pUF7hM|&^h$yKbrfB21_;Rb)-X{kHWa*qS9J& z3O&OV3D-qaq6;osfHbEr~D&t-M+%phqkKUVBrH|1%7TH83>7@SPJ_R>G>{o$v;yN^OXC1 zlkBoiK&?3^&G^;F#ptIZ6%R{ap-M}oa<~z|BD-HEbc9IBX%6g+aIM{H7% z29&-g6cAB(N=``!*77mg{k!pA-FT3~ZT)S>;(j1azat8le(b-+$%zu2_A3P~|>_qSq+y-?Ceq=kctRnJ`hmhcYm$gm6tM#{_ zU`y?-IO7z)G$NkQRI?WcW77-By;-R?3se>08)+QbrvMw(MH5sXZI9F2!kqgriWKul zP#&i!)Jo-Lb*E;^(x|Im(q|jFEf>n)FQ^gNxc?XlhfBB_*1lC=g2R_+uDPbRd}Ci8SWsjD+1(4E;_HN;k7geo!&{5O8zfJk4t{wDV_rt-_KyAs$X?R;% zt|emO+nuBdf|9i)3tzjKlTZT+oOcH5~_JpBFk*K|^Je*WeU7Q{ct4qxBEei)H;%G>R}TWj9Y zu)`wWf2!I1)1{)*RY0#1${+vR)szpSe=2oHbZ_kc9jINlMjo9#E!Mz^_GbzgZ{lXT zPr~mZKl~Do2rc#^{goId)6l)&D9fHLA8>MYF|hA`G*vS>L~(lb9kR$1rUdI9_jhl_ zrxMP~`82l6 zMg$|G{ah7osqB)UJkkUgqQ3i|SCuoG^FE~1H%PAPx%@9mBwHcqc|(~4EQx+{c6K~p zKMjo)&YC70(RPb^Bw&JsduN0B^1q4KpfDz)oCsC(xAMGQwNFC)>j<~5EGcz%<0Vd8 z8W|6gW?C^xp0K<*Bj;Mu6&W%3*Eho#QE!>ppCiwX4n>NW+x?!v%3DZ!Jt`KIe~m?< zHBh$d-f~%$FzEckf~A$!;{1G^k=U>&)LA0fBr+ahuC)t+9Z^IK#(g}@tton7rju%Y zKORF&Jkz3T?D%CiW$Eo!Bk^M&7hGxz-)DQoB8eG!VH?Hwtt`g}#QUzdw%*3S@atjr zUagUSRhDdubxrkt9dp#(fILbWf7TTYvkZ}K87Y}I=~Khe0ye6{JCC;QbBS-qro@AO zSD6Ca6i@Avw@@ZTmXDJW=4EDrPBe{_*z+%+Zt>Bj5$gEjOkG zV-NM^Yu<}{>9SUS1o?{aBBfTtZmft=D$H67m?b! zqKltv5-+;AiyZ}=aceU1g z+dbA^F}o9atkY}ii}TxZR<+kp2z0Ms{L^?GAtL_?^=G|`Ih%HPsxVm89o#af-z$yH zZ}fK~YuUuzE&HN`b3L!2&mllSv7^&OYfIDqvwR8T7|Aza{BVf6dgQMomMSAIL}=v2 zJmQNa7O}aNn9jO#-Se*~r}zn_-5OhNVVPMu-9_%Gwr{DrZC3yj1GA_`rqiBC&zYgI z41{+^=_}yBO5CAK_r_7H;wPGW?o-VtA0KJOPC|w#^V6-2bL7G!0xybXI8N?p3Q`mU zcvgxiTO&t^c_xf#hU&YuBQ|EX|wY($W#l0VtKBomSQbrv@ydHT~wZEy*z5# z$6bT1sO-KJ$D{JtfI4)v1Gw2#)F-bF`%X} z)L$_nT^t1$N+p_K^%L%n8wW6<+w6+xY#tNnioIeuIk9AZh2G$M+=*EH$crgSgG_@X z7RveHp>-gA%9_}(TbcvfYOk_m59dF`(D_7YlYrt2hbHO}l`DQbA)|=O3Gqr3=O-*c z(sjx#tO9v@W-9T$NZvM(MI2w*y1QC)!^)1Q^TKfp zZV3#u$c$0*Dq7k1op-Hg^ZsQL^+kQ%Ge*XID)mmtuQF=AOUIP4zZ9LBXwQBhA-~!@ zsKo{Z8fLXkt+3;YOieuCAt&$7G!V~FUc~wL#pKiz4WEXLBXi6-K4r}0GYVt{ys~m@ z4Ynm08=J@dx~FZQi*=dgw&36XrPSQdl5zSdqu3E^>F3Nw5-uiZ!SeaND~49sNf}IK znpfJz#+JJ3m}~qe&~-8#oZ0%GV~&S_4CP?|)y_8RE*J8lxTDSE?RO&h_iukHL%WhU zu%ALjX~xp&+2;XBoXKFLJEm_aOk&)Oqhp_8@)T z+I~bp;O{bzm0#Im*}`_gFUzL!qxgd3xaxiibEX5sr?)qUQ1K;<3Y7OPli&oTR>Hxn zP>4eBdt_mQqW4&WcNxAcJIjV=&Vo9;jJh^+BMGfUlvf;d@OW{zn=)`e%4)bTz?l*x z-?A4CMH#;DuV@$VKbYGMyu?X$a+O8&~V&*%26Wo}T*;Cw9TV(idCk0u+f!rXp)y=(Qnah8LsBjEP*F60^+;vs%i zELo&+yhnQ9{DE;Ers2ct-SBq(Z!`aTWCz`bQ{!KLhtoqpQLcNwKTZ0)|LTas2AxDq z{^LIvY7vC$sXjYbrP=(T*7kxjQpEnmeioL+9_*|7_SpB$awFf-%85PeV7Hp7(41=r zN8hoy4s+9tT%({$RNCsfuUrbec*E+lw}D;m1B|}o?0lr-Y>N)~Q5023#FMaz3)#J1 zf0Tdlw^r}2UF_S~z3QOt%~*B?$i@fh*4r_Ts+`4fdO;ek?_s#PprfoiW?muS0=;3~aGP_}ce|9R z_x$>X`ev)+Z1DCS6R~P!{~b$mB6YhObcJ&ZOa;;K{*zq{IQ?JQ*l^0;yghCRx|9k! zlyYl3KC!x4%4YK0|Dz6i6naPtmdKMgul(MqGLmO~z|c;6nowI6S6x}{hjpWg1? zjqWPSTHmmy7dAt4y}lal9pP64%&i0+>!*{ zq1}!#!rQ)}t2yfD7iTv9$0D~q)EpfbNas_{ggDC#YS0BA*YX0Oy-0NP=98z40f(0L z%1ykS2cAnHsbUA;^Sq@g@Zc{vukE!%ddaka^`=@Byyw`SsyM^XaHI6my{AK#^W)tgc;oXuuxlqO*ZZdo@vZ&dSY7IEe4A}O zQLa5GpknsmlzAcG6mQDjKI;(TB9%IrL!1{(%bLYo=&PyB=`ir2nE$gjDFh;PVT;djp~6 z8>=}APlfzgW@nst@agI@f6xmD)wdVb3TJD}N)INgbL5%Bj7QKR2{a|PgaT|~GAKJt zt0$WNV}G5t0=3P?=h=y#fMoE$0JdALnRWtIPp{G44A=qwZJNB%ek8)EYTX!gv=pAPeG-0qUIH3dL%E<`Fk7^6jTgab`IgnTVAcyk*v_9KQ95B8Hp};F z3y<#oE%Z1nRTg){40#!h<(*j!Fc!|gKx)v(Y1eJE#DT-^HjH zkaoND`uT02NM<)H0|))Jn>>rZc;N7^3jbSN`>#e;>bgM=c{FZ7&X2N2;r<{nL3ts&L4-*rNfz?7R2NAF-zF za*as$c*{AtfRh=Ac#ULY&&b2jIL|!U1fUfb@a`f*_*5Ts&+6av-DgRP)jzmHXZ8*9 zRdvg;0cT?zu5Q)b|MLZmZtdsx&<}gzi;Fu|QW=wpk8^OxOk;t2AsnrT!*lV2XA-Z# zp^0VWw697J1`#HeskrjUZzsl}^{>5lVlw^hHu)olgj)!BQ%?(NB4M(K{;?Ur6f z1O6DN7j!XE!(!#XjorOnrtA39qLp$^=yJ@syp=QilQHz-*CH!Y4{NB#awnrMr? zy120HoqM+&%g;FiYO^)o+#M$3^@6?dvbFZIlX?Bl?ydqrL?L2AqGCc2DI-y783{=l zF~}29Q5jLuU?I5&{~v?5Znlp0e*cdFL`d|h5#*`NQwbSy(f?~e;Jz$ Date: Tue, 28 Mar 2023 12:44:52 +0100 Subject: [PATCH 065/178] add selection UI --- config/description.exs | 6 ++++++ .../controllers/frontend_switcher.ex | 20 +++++++++++++++++++ .../web/akkoma_api/views/frontend_switcher.ex | 3 +++ lib/pleroma/web/plugs/frontend_static.ex | 8 ++++++-- lib/pleroma/web/router.ex | 7 +++++++ .../frontend_switcher/switch.html.eex | 7 +++++++ 6 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 lib/pleroma/web/akkoma_api/controllers/frontend_switcher.ex create mode 100644 lib/pleroma/web/akkoma_api/views/frontend_switcher.ex create mode 100644 lib/pleroma/web/templates/akkoma_api/frontend_switcher/switch.html.eex diff --git a/config/description.exs b/config/description.exs index 2a2d70a7b..75fd23566 100644 --- a/config/description.exs +++ b/config/description.exs @@ -3148,6 +3148,12 @@ description: "A map containing available frontends and parameters for their installation.", children: frontend_options + }, + %{ + key: :pickable, + type: {:list, :string}, + description: + "A list containing all frontends users can pick as their preference, format is :name/:ref, e.g pleroma-fe/stable." } ] }, diff --git a/lib/pleroma/web/akkoma_api/controllers/frontend_switcher.ex b/lib/pleroma/web/akkoma_api/controllers/frontend_switcher.ex new file mode 100644 index 000000000..2095db4b5 --- /dev/null +++ b/lib/pleroma/web/akkoma_api/controllers/frontend_switcher.ex @@ -0,0 +1,20 @@ +defmodule Pleroma.Web.AkkomaAPI.FrontendSwitcherController do + use Pleroma.Web, :controller + alias Pleroma.Config + + @doc "GET /akkoma/frontend" + def switch(conn, _params) do + pickable = Config.get([:frontends, :pickable], []) + + conn + |> put_view(Pleroma.Web.AkkomaAPI.FrontendSwitcherView) + |> render("switch.html", choices: pickable) + end + + @doc "POST /akkoma/frontend" + def do_switch(conn, params) do + conn + |> put_resp_cookie("preferred_frontend", params["frontend"]) + |> html("") + end +end diff --git a/lib/pleroma/web/akkoma_api/views/frontend_switcher.ex b/lib/pleroma/web/akkoma_api/views/frontend_switcher.ex new file mode 100644 index 000000000..1564c9e44 --- /dev/null +++ b/lib/pleroma/web/akkoma_api/views/frontend_switcher.ex @@ -0,0 +1,3 @@ +defmodule Pleroma.Web.AkkomaAPI.FrontendSwitcherView do + use Pleroma.Web, :view +end diff --git a/lib/pleroma/web/plugs/frontend_static.ex b/lib/pleroma/web/plugs/frontend_static.ex index 62283353e..91dfc77c3 100644 --- a/lib/pleroma/web/plugs/frontend_static.ex +++ b/lib/pleroma/web/plugs/frontend_static.ex @@ -50,6 +50,7 @@ def init(opts) do end def call(conn, opts) do + IO.inspect("OPTS: #{inspect(opts)}") with false <- api_route?(conn.path_info), false <- invalid_path?(conn.path_info), true <- enabled?(opts[:if]), @@ -71,16 +72,19 @@ def preferred_frontend(conn) do Map.get(cookies, @frontend_cookie_name) end - def preferred_or_fallback(conn, fallback) do + # Only override primary frontend + def preferred_or_fallback(conn, :primary) do case preferred_frontend(conn) do nil -> - fallback + :primary frontend -> frontend end end + def preferred_or_fallback(conn, fallback), do: fallback + defp enabled?(if_opt) when is_function(if_opt), do: if_opt.() defp enabled?(true), do: true defp enabled?(_), do: false diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 3db8ddab7..d02ae3460 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -466,6 +466,13 @@ defmodule Pleroma.Web.Router do put("/statuses/:id/emoji_reactions/:emoji", EmojiReactionController, :create) end + scope "/akkoma/", Pleroma.Web.AkkomaAPI do + pipe_through(:browser) + + get("/frontend", FrontendSwitcherController, :switch) + post("/frontend", FrontendSwitcherController, :do_switch) + end + scope "/api/v1/akkoma", Pleroma.Web.AkkomaAPI do pipe_through(:api) diff --git a/lib/pleroma/web/templates/akkoma_api/frontend_switcher/switch.html.eex b/lib/pleroma/web/templates/akkoma_api/frontend_switcher/switch.html.eex new file mode 100644 index 000000000..0692ddfb8 --- /dev/null +++ b/lib/pleroma/web/templates/akkoma_api/frontend_switcher/switch.html.eex @@ -0,0 +1,7 @@ +

Switch Frontend

+ +<%= form_for @conn, Routes.frontend_switcher_path(@conn, :do_switch), fn f -> %> + <%= select(f, :frontend, @choices) %> + + <%= submit do: "submit" %> +<% end %> From 1d94f2a424e64082854c9ccf1e2086e314e07852 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 29 Mar 2023 01:59:19 +0100 Subject: [PATCH 066/178] Remove indexer plugin --- config/config.exs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index e216caf9d..ffb62a28f 100644 --- a/config/config.exs +++ b/config/config.exs @@ -572,8 +572,7 @@ database_prune: 1 ], plugins: [ - Oban.Plugins.Pruner, - {Oban.Plugins.Reindexer, schedule: "@weekly"} + Oban.Plugins.Pruner ], crontab: [ {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker}, From 3f340cbc43948f3ce0e8bca23142be9cd2454960 Mon Sep 17 00:00:00 2001 From: sadposter Date: Wed, 29 Mar 2023 03:31:56 +0100 Subject: [PATCH 067/178] Only even attempt to fetch local activities by object_id TODO: PLEASE FOR THE LOVE OF KANATAN CACHE THIS --- lib/pleroma/activity.ex | 8 ++++++++ lib/pleroma/web/o_status/o_status_controller.ex | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index c5b514742..0a376be04 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -277,6 +277,14 @@ def get_create_by_object_ap_id_with_object(ap_id) when is_binary(ap_id) do def get_create_by_object_ap_id_with_object(_), do: nil + def get_local_create_by_object_ap_id_with_object(ap_id) when is_binary(ap_id) do + ap_id + |> create_by_object_ap_id_with_object() + |> where(local: true) + |> Repo.one() + end + + @spec create_by_id_with_object(String.t()) :: t() | nil def create_by_id_with_object(id) do get_by_id_with_opts(id, preload: [:object], filter: [type: "Create"]) diff --git a/lib/pleroma/web/o_status/o_status_controller.ex b/lib/pleroma/web/o_status/o_status_controller.ex index 7731d847f..79db112df 100644 --- a/lib/pleroma/web/o_status/o_status_controller.ex +++ b/lib/pleroma/web/o_status/o_status_controller.ex @@ -36,7 +36,7 @@ def object(%{assigns: %{format: format}} = conn, _params) def object(conn, _params) do with id <- Endpoint.url() <> conn.request_path, {_, %Activity{} = activity} <- - {:activity, Activity.get_create_by_object_ap_id_with_object(id)}, + {:activity, Activity.get_local_create_by_object_ap_id_with_object(id)}, {_, true} <- {:public?, Visibility.is_public?(activity)}, {_, false} <- {:local_public?, Visibility.is_local_public?(activity)} do redirect(conn, to: "/notice/#{activity.id}") From 0151ca1d52d383e4fa7a510a810975fbb09ee6f3 Mon Sep 17 00:00:00 2001 From: sadposter Date: Wed, 29 Mar 2023 03:32:30 +0100 Subject: [PATCH 068/178] Revert "Remove indexer plugin" This reverts commit 1d94f2a424e64082854c9ccf1e2086e314e07852. --- config/config.exs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.exs b/config/config.exs index ffb62a28f..e216caf9d 100644 --- a/config/config.exs +++ b/config/config.exs @@ -572,7 +572,8 @@ database_prune: 1 ], plugins: [ - Oban.Plugins.Pruner + Oban.Plugins.Pruner, + {Oban.Plugins.Reindexer, schedule: "@weekly"} ], crontab: [ {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker}, From d85d1e128a0ca836e8976202781902383aea3d89 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 29 Mar 2023 11:44:03 +0100 Subject: [PATCH 069/178] we don't actually need the object on redirect --- lib/pleroma/activity.ex | 4 ++-- lib/pleroma/web/o_status/o_status_controller.ex | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 0a376be04..925612d3c 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -277,9 +277,9 @@ def get_create_by_object_ap_id_with_object(ap_id) when is_binary(ap_id) do def get_create_by_object_ap_id_with_object(_), do: nil - def get_local_create_by_object_ap_id_with_object(ap_id) when is_binary(ap_id) do + def get_local_create_by_object_ap_id(ap_id) when is_binary(ap_id) do ap_id - |> create_by_object_ap_id_with_object() + |> create_by_object_ap_id() |> where(local: true) |> Repo.one() end diff --git a/lib/pleroma/web/o_status/o_status_controller.ex b/lib/pleroma/web/o_status/o_status_controller.ex index 79db112df..95a22895e 100644 --- a/lib/pleroma/web/o_status/o_status_controller.ex +++ b/lib/pleroma/web/o_status/o_status_controller.ex @@ -36,7 +36,7 @@ def object(%{assigns: %{format: format}} = conn, _params) def object(conn, _params) do with id <- Endpoint.url() <> conn.request_path, {_, %Activity{} = activity} <- - {:activity, Activity.get_local_create_by_object_ap_id_with_object(id)}, + {:activity, Activity.get_local_create_by_object_ap_id(id)}, {_, true} <- {:public?, Visibility.is_public?(activity)}, {_, false} <- {:local_public?, Visibility.is_local_public?(activity)} do redirect(conn, to: "/notice/#{activity.id}") From 66d162bb9edf79455558bdf7e267c08f8c3cf964 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 29 Mar 2023 12:01:16 +0100 Subject: [PATCH 070/178] Add debug logs to timeline rendering to assist debugging --- lib/pleroma/activity.ex | 1 - lib/pleroma/user.ex | 2 +- .../controllers/timeline_controller.ex | 27 +++++++++++++++++++ .../web/mastodon_api/views/status_view.ex | 13 +++++++-- 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 925612d3c..c94667fb9 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -284,7 +284,6 @@ def get_local_create_by_object_ap_id(ap_id) when is_binary(ap_id) do |> Repo.one() end - @spec create_by_id_with_object(String.t()) :: t() | nil def create_by_id_with_object(id) do get_by_id_with_opts(id, preload: [:object], filter: [type: "Create"]) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 480521984..ead37ccca 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -374,7 +374,7 @@ def banner_url(user, options \\ []) do do_optional_url(user.banner, "#{Endpoint.url()}/images/banner.png", options) end - defp do_optional_url(field, default, options \\ []) do + defp do_optional_url(field, default, options) do case field do %{"url" => [%{"href" => href} | _]} when is_binary(href) -> href diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index c9960187d..1d4e734a4 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -37,10 +37,16 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do when action in [:public, :hashtag, :bubble] ) + require Logger + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.TimelineOperation # GET /api/v1/timelines/home def home(%{assigns: %{user: user}} = conn, params) do + %{nickname: nickname} = user + + Logger.debug("TimelineController.home: #{nickname}") + followed_hashtags = user |> User.followed_hashtags() @@ -58,11 +64,15 @@ def home(%{assigns: %{user: user}} = conn, params) do |> Map.put(:followed_hashtags, followed_hashtags) |> Map.delete(:local) + Logger.debug("TimelineController.home: #{nickname} - fetching activities") + activities = [user.ap_id | User.following(user)] |> ActivityPub.fetch_activities(params) |> Enum.reverse() + Logger.debug("TimelineController.home: #{nickname} - rendering") + conn |> add_link_headers(activities) |> render("index.json", @@ -75,6 +85,8 @@ def home(%{assigns: %{user: user}} = conn, params) do # GET /api/v1/timelines/direct def direct(%{assigns: %{user: user}} = conn, params) do + Logger.debug("TimelineController.direct: #{user.nickname}") + params = params |> Map.put(:type, "Create") @@ -82,11 +94,15 @@ def direct(%{assigns: %{user: user}} = conn, params) do |> Map.put(:user, user) |> Map.put(:visibility, "direct") + Logger.debug("TimelineController.direct: #{user.nickname} - fetching activities") + activities = [user.ap_id] |> ActivityPub.fetch_activities_query(params) |> Pagination.fetch_paginated(params) + Logger.debug("TimelineController.direct: #{user.nickname} - rendering") + conn |> add_link_headers(activities) |> render("index.json", @@ -102,6 +118,7 @@ defp restrict_unauthenticated?(type) do # GET /api/v1/timelines/public def public(%{assigns: %{user: user}} = conn, params) do + Logger.debug("TimelineController.public") local_only = params[:local] timeline_type = if local_only, do: :local, else: :federated @@ -109,6 +126,8 @@ def public(%{assigns: %{user: user}} = conn, params) do {:enabled, local_only || Config.get([:instance, :federated_timeline_available], true)}, {:authenticated, true} <- {:authenticated, !(is_nil(user) and restrict_unauthenticated?(timeline_type))} do + Logger.debug("TimelineController.public: fetching activities") + activities = params |> Map.put(:type, ["Create"]) @@ -121,6 +140,8 @@ def public(%{assigns: %{user: user}} = conn, params) do |> Map.put(:includes_local_public, not is_nil(user)) |> ActivityPub.fetch_public_activities() + Logger.debug("TimelineController.public: rendering") + conn |> add_link_headers(activities, %{"local" => local_only}) |> render("index.json", @@ -142,6 +163,8 @@ def public(%{assigns: %{user: user}} = conn, params) do # GET /api/v1/timelines/bubble def bubble(%{assigns: %{user: user}} = conn, params) do + Logger.debug("TimelineController.bubble") + if is_nil(user) and restrict_unauthenticated?(:bubble) do fail_on_bad_auth(conn) else @@ -151,6 +174,8 @@ def bubble(%{assigns: %{user: user}} = conn, params) do [Pleroma.Web.Endpoint.host()] ) + Logger.debug("TimelineController.bubble: fetching activities") + activities = params |> Map.put(:type, ["Create"]) @@ -160,6 +185,8 @@ def bubble(%{assigns: %{user: user}} = conn, params) do |> Map.put(:instance, bubble_instances) |> ActivityPub.fetch_public_activities() + Logger.debug("TimelineController.bubble: rendering") + conn |> add_link_headers(activities) |> render("index.json", diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 3868da8d9..47d1616c4 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -21,6 +21,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do alias Pleroma.Web.MastodonAPI.StatusView alias Pleroma.Web.MediaProxy alias Pleroma.Web.PleromaAPI.EmojiReactionController + require Logger import Pleroma.Web.ActivityPub.Visibility, only: [get_visibility: 1, visible_for_user?: 2] @@ -87,6 +88,7 @@ defp reblogged?(activity, %User{ap_id: ap_id}) do defp reblogged?(_activity, _user), do: false def render("index.json", opts) do + Logger.debug("Rendering index") reading_user = opts[:for] # To do: check AdminAPIControllerTest on the reasons behind nil activities in the list activities = Enum.filter(opts.activities, & &1) @@ -136,8 +138,10 @@ def render("index.json", opts) do def render( "show.json", - %{activity: %{data: %{"type" => "Announce", "object" => _object}} = activity} = opts + %{activity: %{id: id, data: %{"type" => "Announce", "object" => _object}} = activity} = + opts ) do + Logger.debug("Rendering reblog #{id}") user = CommonAPI.get_user(activity.data["actor"]) created_at = Utils.to_masto_date(activity.data["published"]) object = Object.normalize(activity, fetch: false) @@ -209,7 +213,9 @@ def render( } end - def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} = opts) do + def render("show.json", %{activity: %{id: id, data: %{"object" => _object}} = activity} = opts) do + Logger.debug("Rendering status #{id}") + with %Object{} = object <- Object.normalize(activity, fetch: false) do user = CommonAPI.get_user(activity.data["actor"]) user_follower_address = user.follower_address @@ -428,6 +434,7 @@ def render("show.json", _) do end def render("history.json", %{activity: %{data: %{"object" => _object}} = activity} = opts) do + Logger.debug("Rendering history for #{activity.id}") object = Object.normalize(activity, fetch: false) hashtags = Object.hashtags(object) @@ -614,6 +621,8 @@ def render("attachment_meta.json", %{ def render("attachment_meta.json", _), do: nil def render("context.json", %{activity: activity, activities: activities, user: user}) do + Logger.debug("Rendering context for #{activity.id}") + %{ancestors: ancestors, descendants: descendants} = activities |> Enum.reverse() From 2a8c1f41924e3f7092ffea0fb407c2906f705242 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 29 Mar 2023 14:11:00 +0100 Subject: [PATCH 071/178] Add extra diagnostic tasks in --- lib/mix/tasks/pleroma/diagnostics.ex | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/lib/mix/tasks/pleroma/diagnostics.ex b/lib/mix/tasks/pleroma/diagnostics.ex index 3914540ca..3b6063723 100644 --- a/lib/mix/tasks/pleroma/diagnostics.ex +++ b/lib/mix/tasks/pleroma/diagnostics.ex @@ -82,4 +82,46 @@ def run(["user_timeline", nickname, reading_nickname]) do Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity) |> IO.puts() end + + def run(["notifications", nickname]) do + start_pleroma() + user = Repo.get_by!(User, nickname: nickname) + account_ap_id = user.ap_id + options = %{account_ap_id: user.ap_id} + + query = + user + |> Pleroma.Notification.for_user_query(options) + |> where([n, a], a.actor == ^account_ap_id) + |> limit(20) + + Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity) + |> IO.puts() + end + + def run(["known_network", nickname]) do + start_pleroma() + user = Repo.get_by!(User, nickname: nickname) + + params = + %{} + |> Map.put(:type, ["Create"]) + |> Map.put(:local_only, false) + |> Map.put(:blocking_user, user) + |> Map.put(:muting_user, user) + |> Map.put(:reply_filtering_user, user) + # Restricts unfederated content to authenticated users + |> Map.put(:includes_local_public, not is_nil(user)) + |> Map.put(:restrict_unlisted, true) + + query = + Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query( + [Pleroma.Constants.as_public()], + params + ) + |> limit(20) + + Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity) + |> IO.puts() + end end From d8d9edee98ef4cf89fedf8028236b496b699e080 Mon Sep 17 00:00:00 2001 From: ilja Date: Mon, 3 Apr 2023 11:18:28 +0200 Subject: [PATCH 072/178] Add YunoHost to installation guides --- README.md | 3 +++ docs/docs/installation/yunohost_en.md | 9 +++++++++ 2 files changed, 12 insertions(+) create mode 100644 docs/docs/installation/yunohost_en.md diff --git a/README.md b/README.md index 8d35212aa..e4aa25715 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,9 @@ If your platform is not supported, or you just want to be able to edit the sourc ### Docker Docker installation is supported via [this setup](https://docs.akkoma.dev/stable/installation/docker_en/) +### Packages +Akkoma is packaged for [YunoHost](https://yunohost.org) and can be found and installed from the [YunoHost app catalogue](https://yunohost.org/#/apps). + ### Compilation Troubleshooting If you ever encounter compilation issues during the updating of Akkoma, you can try these commands and see if they fix things: diff --git a/docs/docs/installation/yunohost_en.md b/docs/docs/installation/yunohost_en.md new file mode 100644 index 000000000..0d3adb4fe --- /dev/null +++ b/docs/docs/installation/yunohost_en.md @@ -0,0 +1,9 @@ +# Installing on Yunohost + +[YunoHost](https://yunohost.org) is a server operating system aimed at self-hosting. The YunoHost community maintains a package of Akkoma which allows you to install Akkoma on YunoHost. You can install it via the normal way through the admin web interface, or through the CLI. More information can be found at [the repo of the package](https://github.com/YunoHost-Apps/akkoma_ynh). + +## Questions + +Questions and problems related to the YunoHost parts can be done through the [YunoHost channels](https://yunohost.org/en/help). + +For questions about Akkoma, check out the [Akkoma community channels](../../#community-channels). From 1b2c24a19e86434f748a4f3cba6fb688253efb15 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 14 Apr 2023 15:20:55 +0100 Subject: [PATCH 073/178] fix tests --- lib/pleroma/web/plugs/frontend_static.ex | 4 +--- test/pleroma/web/plugs/frontend_static_plug_test.exs | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/plugs/frontend_static.ex b/lib/pleroma/web/plugs/frontend_static.ex index 91dfc77c3..1d6861456 100644 --- a/lib/pleroma/web/plugs/frontend_static.ex +++ b/lib/pleroma/web/plugs/frontend_static.ex @@ -50,7 +50,6 @@ def init(opts) do end def call(conn, opts) do - IO.inspect("OPTS: #{inspect(opts)}") with false <- api_route?(conn.path_info), false <- invalid_path?(conn.path_info), true <- enabled?(opts[:if]), @@ -83,7 +82,7 @@ def preferred_or_fallback(conn, :primary) do end end - def preferred_or_fallback(conn, fallback), do: fallback + def preferred_or_fallback(_conn, fallback), do: fallback defp enabled?(if_opt) when is_function(if_opt), do: if_opt.() defp enabled?(true), do: true @@ -106,7 +105,6 @@ defp api_route?([h | t]) do defp call_static(conn, opts, from) do opts = Map.put(opts, :from, from) - IO.inspect(opts, label: "opts") Plug.Static.call(conn, opts) end end diff --git a/test/pleroma/web/plugs/frontend_static_plug_test.exs b/test/pleroma/web/plugs/frontend_static_plug_test.exs index 66e6ba4ca..815e888ee 100644 --- a/test/pleroma/web/plugs/frontend_static_plug_test.exs +++ b/test/pleroma/web/plugs/frontend_static_plug_test.exs @@ -83,6 +83,7 @@ test "api routes are detected correctly" do "main", "ostatus_subscribe", "oauth", + "akkoma", "objects", "activities", "notice", From a079ec3a3cdfd42d2cbd51c7698c2c87828e5778 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 14 Apr 2023 16:36:40 +0100 Subject: [PATCH 074/178] in dev, allow dev FE --- lib/pleroma/web/plugs/http_security_plug.ex | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/plugs/http_security_plug.ex b/lib/pleroma/web/plugs/http_security_plug.ex index b1f1ada94..570aeefff 100644 --- a/lib/pleroma/web/plugs/http_security_plug.ex +++ b/lib/pleroma/web/plugs/http_security_plug.ex @@ -8,6 +8,8 @@ defmodule Pleroma.Web.Plugs.HTTPSecurityPlug do require Logger + @mix_env Mix.env() + def init(opts), do: opts def call(conn, _options) do @@ -114,7 +116,12 @@ defp csp_string(conn) do style_src = "style-src 'self' '#{nonce_tag}'" font_src = "font-src 'self'" - script_src = "script-src 'self' '#{nonce_tag}'" + script_src = "script-src 'self' '#{nonce_tag}' " + script_src = if @mix_env == :dev do + "script-src 'self' 'unsafe-eval' 'unsafe-inline'" + else + script_src + end report = if report_uri, do: ["report-uri ", report_uri, ";report-to csp-endpoint"] insecure = if scheme == "https", do: "upgrade-insecure-requests" From 9e8e7cc13ebd2ec2ecbf90ae10c3532f77af7a81 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 14 Apr 2023 16:55:48 +0100 Subject: [PATCH 075/178] Add note telling people to refresh --- .../web/templates/akkoma_api/frontend_switcher/switch.html.eex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/pleroma/web/templates/akkoma_api/frontend_switcher/switch.html.eex b/lib/pleroma/web/templates/akkoma_api/frontend_switcher/switch.html.eex index 0692ddfb8..a0b0a2361 100644 --- a/lib/pleroma/web/templates/akkoma_api/frontend_switcher/switch.html.eex +++ b/lib/pleroma/web/templates/akkoma_api/frontend_switcher/switch.html.eex @@ -1,7 +1,10 @@

Switch Frontend

+

After you submit, you will need to refresh manually to get your new frontend!

+ <%= form_for @conn, Routes.frontend_switcher_path(@conn, :do_switch), fn f -> %> <%= select(f, :frontend, @choices) %> <%= submit do: "submit" %> <% end %> + From ba59fdcd54986b0ebc31a577cb1c767e55a43e7f Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 14 Apr 2023 16:56:51 +0100 Subject: [PATCH 076/178] add changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bf6253af..a277ac08c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Nodeinfo keys for unauthenticated timeline visibility - Option to disable federated timeline - Option to make the bubble timeline publicly accessible +- Ability to swap between installed standard frontends + - *mastodon frontends are still not counted as standard frontends due to the complexity in serving them correctly*. ## 2023.03 From f12d3cce39e6bdfbe4aa8364ba1051a6b72155fc Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 14 Apr 2023 17:42:40 +0100 Subject: [PATCH 077/178] ensure only pickable frontends can be returned --- lib/pleroma/web/plugs/frontend_static.ex | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/plugs/frontend_static.ex b/lib/pleroma/web/plugs/frontend_static.ex index 1d6861456..41b8ba46b 100644 --- a/lib/pleroma/web/plugs/frontend_static.ex +++ b/lib/pleroma/web/plugs/frontend_static.ex @@ -78,7 +78,11 @@ def preferred_or_fallback(conn, :primary) do :primary frontend -> - frontend + if Enum.member?(Pleroma.Config.get([:frontends, :pickable], []), frontend) do + frontend + else + :primary + end end end From d2b0d864718c676af9909ee45fac60d5f232bf6a Mon Sep 17 00:00:00 2001 From: Atsuko Karagi Date: Tue, 4 Apr 2023 17:41:13 +0200 Subject: [PATCH 078/178] HTTP signatures respect allowlist federation --- lib/pleroma/web/activity_pub/publisher.ex | 19 +++++++-- ...mapped_signature_to_identity_plug_test.exs | 41 +++++++++++++++++++ 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index b187d3a48..3071c1b77 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -108,15 +108,28 @@ defp blocked_instances do Config.get([:mrf_simple, :reject], []) end + defp allowed_instances do + Config.get([:mrf_simple, :accept]) + end + def should_federate?(url) do %{host: host} = URI.parse(url) - quarantined_instances = - blocked_instances() + with allowed <- allowed_instances(), + false <- Enum.empty?(allowed) do + allowed |> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples() |> Pleroma.Web.ActivityPub.MRF.subdomains_regex() + |> Pleroma.Web.ActivityPub.MRF.subdomain_match?(host) + else + _ -> + quarantined_instances = + blocked_instances() + |> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples() + |> Pleroma.Web.ActivityPub.MRF.subdomains_regex() - !Pleroma.Web.ActivityPub.MRF.subdomain_match?(quarantined_instances, host) + not Pleroma.Web.ActivityPub.MRF.subdomain_match?(quarantined_instances, host) + end end @spec recipients(User.t(), Activity.t()) :: list(User.t()) | [] diff --git a/test/pleroma/web/plugs/mapped_signature_to_identity_plug_test.exs b/test/pleroma/web/plugs/mapped_signature_to_identity_plug_test.exs index 21c574ba3..c42b82810 100644 --- a/test/pleroma/web/plugs/mapped_signature_to_identity_plug_test.exs +++ b/test/pleroma/web/plugs/mapped_signature_to_identity_plug_test.exs @@ -69,6 +69,47 @@ test "it considers a mapped identity to be invalid when the associated instance assert %{valid_signature: false} == conn.assigns end + test "allowlist federation: it considers a mapped identity to be valid when the associated instance is allowed" do + clear_config([:activitypub, :authorized_fetch_mode], true) + + clear_config([:mrf_simple, :accept], [ + {"mastodon.example.org", "anime is allowed"} + ]) + + on_exit(fn -> + Pleroma.Config.put([:activitypub, :authorized_fetch_mode], false) + Pleroma.Config.put([:mrf_simple, :accept], []) + end) + + conn = + build_conn(:post, "/doesntmattter", %{"actor" => "http://mastodon.example.org/users/admin"}) + |> set_signature("http://mastodon.example.org/users/admin") + |> MappedSignatureToIdentityPlug.call(%{}) + + assert conn.assigns[:valid_signature] + refute is_nil(conn.assigns.user) + end + + test "allowlist federation: it considers a mapped identity to be invalid when the associated instance is not allowed" do + clear_config([:activitypub, :authorized_fetch_mode], true) + + clear_config([:mrf_simple, :accept], [ + {"misskey.example.org", "anime is allowed"} + ]) + + on_exit(fn -> + Pleroma.Config.put([:activitypub, :authorized_fetch_mode], false) + Pleroma.Config.put([:mrf_simple, :accept], []) + end) + + conn = + build_conn(:post, "/doesntmattter", %{"actor" => "http://mastodon.example.org/users/admin"}) + |> set_signature("http://mastodon.example.org/users/admin") + |> MappedSignatureToIdentityPlug.call(%{}) + + assert %{valid_signature: false} == conn.assigns + end + @tag skip: "known breakage; the testsuite presently depends on it" test "it considers a mapped identity to be invalid when the identity cannot be found" do conn = From 1fa3c0b485fd60df8ed78531435dbf58db375b03 Mon Sep 17 00:00:00 2001 From: Atsuko Karagi Date: Sat, 8 Apr 2023 18:06:58 +0200 Subject: [PATCH 079/178] Remove support for outdated Create format --- .../activity_pub/activity_pub_controller.ex | 21 -------------- .../activity_pub_controller_test.exs | 29 ------------------- 2 files changed, 50 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index c07f91b2e..5d7297c23 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -293,33 +293,12 @@ def inbox(%{assigns: %{valid_signature: false}} = conn, _params) do |> json("Invalid HTTP Signature") end - # POST /relay/inbox -or- POST /internal/fetch/inbox - def inbox(conn, %{"type" => "Create"} = params) do - if FederatingPlug.federating?() do - post_inbox_relayed_create(conn, params) - else - conn - |> put_status(:bad_request) - |> json("Not federating") - end - end - def inbox(conn, _params) do conn |> put_status(:bad_request) |> json("error, missing HTTP Signature") end - defp post_inbox_relayed_create(conn, params) do - Logger.debug( - "Signature missing or not from author, relayed Create message, fetching object from source" - ) - - Fetcher.fetch_object_from_id(params["object"]["id"]) - - json(conn, "ok") - end - defp represent_service_actor(%User{} = user, conn) do conn |> put_resp_content_type("application/activity+json") diff --git a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs index 2008ebf04..0d4a7ec2e 100644 --- a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs @@ -662,35 +662,6 @@ test "accept follow activity", %{conn: conn} do assert_receive {:mix_shell, :info, ["https://relay.mastodon.host/actor"]} end - @tag capture_log: true - test "without valid signature, " <> - "it only accepts Create activities and requires enabled federation", - %{conn: conn} do - data = File.read!("test/fixtures/mastodon-post-activity.json") |> Jason.decode!() - non_create_data = File.read!("test/fixtures/mastodon-announce.json") |> Jason.decode!() - - conn = put_req_header(conn, "content-type", "application/activity+json") - - clear_config([:instance, :federating], false) - - conn - |> post("/inbox", data) - |> json_response(403) - - conn - |> post("/inbox", non_create_data) - |> json_response(403) - - clear_config([:instance, :federating], true) - - ret_conn = post(conn, "/inbox", data) - assert "ok" == json_response(ret_conn, 200) - - conn - |> post("/inbox", non_create_data) - |> json_response(400) - end - test "accepts Add/Remove activities", %{conn: conn} do object_id = "c61d6733-e256-4fe1-ab13-1e369789423f" From 522221f7fb76859b23840bb0c9de0018dae41cbf Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 14 Apr 2023 17:56:34 +0100 Subject: [PATCH 080/178] Mix format --- config/description.exs | 8 ++++---- lib/mix/tasks/pleroma/diagnostics.ex | 4 ++-- .../web/activity_pub/activity_pub_controller.ex | 1 - lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 5 ----- lib/pleroma/web/plugs/http_security_plug.ex | 12 +++++++----- .../controllers/timeline_controller_test.exs | 7 +++---- 6 files changed, 16 insertions(+), 21 deletions(-) diff --git a/config/description.exs b/config/description.exs index d329f8afa..bd20cb239 100644 --- a/config/description.exs +++ b/config/description.exs @@ -3161,10 +3161,10 @@ children: frontend_options }, %{ - key: :pickable, - type: {:list, :string}, - description: - "A list containing all frontends users can pick as their preference, format is :name/:ref, e.g pleroma-fe/stable." + key: :pickable, + type: {:list, :string}, + description: + "A list containing all frontends users can pick as their preference, format is :name/:ref, e.g pleroma-fe/stable." } ] }, diff --git a/lib/mix/tasks/pleroma/diagnostics.ex b/lib/mix/tasks/pleroma/diagnostics.ex index 3b6063723..87be38b78 100644 --- a/lib/mix/tasks/pleroma/diagnostics.ex +++ b/lib/mix/tasks/pleroma/diagnostics.ex @@ -120,8 +120,8 @@ def run(["known_network", nickname]) do params ) |> limit(20) - + Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity) - |> IO.puts() + |> IO.puts() end end diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index 5d7297c23..4e6842d85 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -8,7 +8,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do alias Pleroma.Activity alias Pleroma.Delivery alias Pleroma.Object - alias Pleroma.Object.Fetcher alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.InternalFetchActor diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 4c5a36895..ea2d86f92 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -5,11 +5,6 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do use Pleroma.Web, :controller - alias Pleroma.Config - alias Pleroma.Stats - alias Pleroma.User - alias Pleroma.Web.Federator.Publisher - alias Pleroma.Web.MastodonAPI.InstanceView alias Pleroma.Web.Endpoint alias Pleroma.Web.Nodeinfo.Nodeinfo diff --git a/lib/pleroma/web/plugs/http_security_plug.ex b/lib/pleroma/web/plugs/http_security_plug.ex index 570aeefff..d7cff7343 100644 --- a/lib/pleroma/web/plugs/http_security_plug.ex +++ b/lib/pleroma/web/plugs/http_security_plug.ex @@ -117,11 +117,13 @@ defp csp_string(conn) do font_src = "font-src 'self'" script_src = "script-src 'self' '#{nonce_tag}' " - script_src = if @mix_env == :dev do - "script-src 'self' 'unsafe-eval' 'unsafe-inline'" - else - script_src - end + + script_src = + if @mix_env == :dev do + "script-src 'self' 'unsafe-eval' 'unsafe-inline'" + else + script_src + end report = if report_uri, do: ["report-uri ", report_uri, ";report-to csp-endpoint"] insecure = if scheme == "https", do: "upgrade-insecure-requests" diff --git a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs index fcc7a204e..eed12234f 100644 --- a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs @@ -423,10 +423,9 @@ test "should return 404 if disabled" do test "should not return 404 if local is specified" do clear_config([:instance, :federated_timeline_available], false) - result = - build_conn() - |> get("/api/v1/timelines/public?local=true") - |> json_response_and_validate_schema(200) + build_conn() + |> get("/api/v1/timelines/public?local=true") + |> json_response_and_validate_schema(200) end end From 963d29ad8cd2c32fe408d608bd644e1db3ebbda1 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 14 Apr 2023 18:00:59 +0100 Subject: [PATCH 081/178] 2023.04 Release --- CHANGELOG.md | 7 ++++++- mix.exs | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f481aad5..9ef9d4e97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## Unreleased +## 2023.04 ## Added - Nodeinfo keys for unauthenticated timeline visibility @@ -13,6 +13,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Ability to swap between installed standard frontends - *mastodon frontends are still not counted as standard frontends due to the complexity in serving them correctly*. +### Upgrade Notes +- Elixir 1.14 is now required. If your distribution does not package this, you can + use [asdf](https://asdf-vm.com/). At time of writing, elixir 1.14.3 / erlang 25.3 + is confirmed to work. + ## 2023.03 ## Fixed diff --git a/mix.exs b/mix.exs index aa1dde667..6544529bd 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.7.1"), + version: version("3.7.2"), elixir: "~> 1.14", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), From d6bed599c8ca3f77a3936ff68cbaf036a5ae59b6 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 14 Apr 2023 18:09:59 +0100 Subject: [PATCH 082/178] correct version bump --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 6544529bd..ebcca9660 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.7.2"), + version: version("3.8.0"), elixir: "~> 1.14", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), From b86b3a9e298b400ee2e2805b987cc14a24a44ea7 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 25 Apr 2023 13:30:20 +0100 Subject: [PATCH 083/178] Support public key URIs that incomprehensibly have GET args Fixes #528 --- CHANGELOG.md | 5 +++++ lib/pleroma/signature.ex | 1 + test/pleroma/signature_test.exs | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ef9d4e97..bb5b8fa04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## Unreleased + +## Fixed +- Support for `streams` public key URIs + ## 2023.04 ## Added diff --git a/lib/pleroma/signature.ex b/lib/pleroma/signature.ex index 1c59be9c7..b229e6296 100644 --- a/lib/pleroma/signature.ex +++ b/lib/pleroma/signature.ex @@ -17,6 +17,7 @@ def key_id_to_actor_id(key_id) do key_id |> URI.parse() |> Map.put(:fragment, nil) + |> Map.put(:query, nil) |> remove_suffix(@known_suffixes) maybe_ap_id = URI.to_string(uri) diff --git a/test/pleroma/signature_test.exs b/test/pleroma/signature_test.exs index 59674bbc0..21e6ed161 100644 --- a/test/pleroma/signature_test.exs +++ b/test/pleroma/signature_test.exs @@ -114,6 +114,11 @@ test "it deduces the actor id for gotoSocial" do {:ok, "https://example.com/users/1234"} end + test "it deduces the actor ID for streams" do + assert Signature.key_id_to_actor_id("https://example.com/users/1234?operation=getkey") == + {:ok, "https://example.com/users/1234"} + end + test "it calls webfinger for 'acct:' accounts" do with_mock(Pleroma.Web.WebFinger, finger: fn _ -> {:ok, %{"ap_id" => "https://gensokyo.2hu/users/raymoo"}} end From d8bed0ff635d99bcd75207e5ee78fac6d3f186a4 Mon Sep 17 00:00:00 2001 From: provable_ascent Date: Thu, 27 Apr 2023 05:22:12 +0000 Subject: [PATCH 084/178] Make UserNote comment default to the empty string. This make the behavior consistent between when UserNote doesn't exist and when comment is null. The current behavior may return null in APIs, which misleads some clients doing feature detection into thinking the server does not support comments. For example, see https://codeberg.org/husky/husky/issues/92 --- lib/pleroma/user_note.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/user_note.ex b/lib/pleroma/user_note.ex index 5e82d359f..ff4981cb7 100644 --- a/lib/pleroma/user_note.ex +++ b/lib/pleroma/user_note.ex @@ -31,7 +31,7 @@ def show(%User{} = source, %User{} = target) do UserNote |> where(source_id: ^source.id, target_id: ^target.id) |> Repo.one() do - note.comment + note.comment || "" else _ -> "" end From 145c73076d203b080fe69fc9f5fc05b42d711397 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 8 May 2023 16:29:25 +0100 Subject: [PATCH 085/178] Update dependencies --- mix.exs | 1 - mix.lock | 26 +++++++++++++------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/mix.exs b/mix.exs index ebcca9660..2f318fea0 100644 --- a/mix.exs +++ b/mix.exs @@ -190,7 +190,6 @@ defp deps do {:mfm_parser, git: "https://akkoma.dev/AkkomaGang/mfm-parser.git", ref: "912fba81152d4d572e457fd5427f9875b2bc3dbe"}, - {:poison, ">= 0.0.0"}, ## dev & test {:ex_doc, "~> 0.22", only: :dev, runtime: false}, diff --git a/mix.lock b/mix.lock index bee2c1585..2cb91bfd7 100644 --- a/mix.lock +++ b/mix.lock @@ -15,21 +15,21 @@ "concurrent_limiter": {:hex, :concurrent_limiter, "0.1.1", "43ae1dc23edda1ab03dd66febc739c4ff710d047bb4d735754909f9a474ae01c", [:mix], [{:telemetry, "~> 0.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "53968ff238c0fbb4d7ed76ddb1af0be6f3b2f77909f6796e249e737c505a16eb"}, "connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"}, "cors_plug": {:hex, :cors_plug, "2.0.3", "316f806d10316e6d10f09473f19052d20ba0a0ce2a1d910ddf57d663dac402ae", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ee4ae1418e6ce117fc42c2ba3e6cbdca4e95ecd2fe59a05ec6884ca16d469aea"}, - "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, + "cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"}, - "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, + "cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"}, "credo": {:git, "https://github.com/rrrene/credo.git", "1c1b99ea41a457761383d81aaf6a606913996fe7", [ref: "1c1b99ea41a457761383d81aaf6a606913996fe7"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, - "db_connection": {:hex, :db_connection, "2.4.3", "3b9aac9f27347ec65b271847e6baeb4443d8474289bd18c1d6f4de655b70c94d", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c127c15b0fa6cfb32eed07465e05da6c815b032508d4ed7c116122871df73c12"}, - "decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, + "db_connection": {:hex, :db_connection, "2.5.0", "bb6d4f30d35ded97b29fe80d8bd6f928a1912ca1ff110831edcd238a1973652c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c92d5ba26cd69ead1ff7582dbb860adeedfff39774105a4f1c92cbb654b55aa2"}, + "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, - "dialyxir": {:hex, :dialyxir, "1.2.0", "58344b3e87c2e7095304c81a9ae65cb68b613e28340690dfe1a5597fd08dec37", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "61072136427a851674cab81762be4dbeae7679f85b1272b6d25c3a839aff8463"}, - "earmark": {:hex, :earmark, "1.4.37", "56ce845c543393aa3f9b294c818c3d783452a4a67e4ab18c4303a954a8b59363", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "d86d5e12868db86d5321b00e62a4bbcb4150346e4acc9a90a041fb188a5cb106"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.31", "a93921cdc6b9b869f519213d5bc79d9e218ba768d7270d46fdcf1c01bacff9e2", [:mix], [], "hexpm", "317d367ee0335ef037a87e46c91a2269fef6306413f731e8ec11fc45a7efd059"}, + "dialyxir": {:hex, :dialyxir, "1.3.0", "fd1672f0922b7648ff9ce7b1b26fcf0ef56dda964a459892ad15f6b4410b5284", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "00b2a4bcd6aa8db9dcb0b38c1225b7277dca9bc370b6438715667071a304696f"}, + "earmark": {:hex, :earmark, "1.4.38", "ba8fda946c259c6e8f6759d3647d448e9216e2c0afed8c6ae7f8ce1f7072a497", [:mix], [{:earmark_parser, "~> 1.4.32", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "f938e30de4167e7d8f3bf588b01dc041138278dda1e5a13fb9ec89b43dd5ec7f"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.32", "fa739a0ecfa34493de19426681b23f6814573faee95dfd4b4aafe15a7b5b32c6", [:mix], [], "hexpm", "b8b0dd77d60373e77a3d7e8afa598f325e49e8663a51bcc2b88ef41838cca755"}, "eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"}, "ecto": {:hex, :ecto, "3.9.5", "9f0aa7ae44a1577b651c98791c6988cd1b69b21bc724e3fd67090b97f7604263", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d4f3115d8cbacdc0bfa4b742865459fb1371d0715515842a1fb17fe31920b74c"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, - "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.10", "e14d400930f401ca9f541b3349212634e44027d7f919bbb71224d7ac0d0e8acd", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.15.7 or ~> 0.16.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "505e8cd81e4f17c090be0f99e92b1b3f0fd915f98e76965130b8ccfb891e7088"}, + "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.11", "6e20144c1446dcccfcdb4c142c9d8b7992a90a569b1d5958cbea5458550b25f0", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.15.7 or ~> 0.16.0 or ~> 0.17.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "def61f1f92d4f40d51c80bbae2157212d6c0a459eb604be446e47369cbd40b23"}, "ecto_sql": {:hex, :ecto_sql, "3.9.2", "34227501abe92dba10d9c3495ab6770e75e79b836d114c41108a4bf2ce200ad5", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.9.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "1eb5eeb4358fdbcd42eac11c1fbd87e3affd7904e639d77903c1358b2abd3f70"}, "elasticsearch": {:git, "https://akkoma.dev/AkkomaGang/elasticsearch-elixir.git", "6cd946f75f6ab9042521a009d1d32d29a90113ca", [ref: "main"]}, "elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"}, @@ -38,7 +38,7 @@ "ex_aws": {:hex, :ex_aws, "2.1.9", "dc4865ecc20a05190a34a0ac5213e3e5e2b0a75a0c2835e923ae7bfeac5e3c31", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "3e6c776703c9076001fbe1f7c049535f042cb2afa0d2cbd3b47cbc4e92ac0d10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.4.0", "ce8decb6b523381812798396bc0e3aaa62282e1b40520125d1f4eff4abdff0f4", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "85dda6e27754d94582869d39cba3241d9ea60b6aa4167f9c88e309dc687e56bb"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.29.3", "f07444bcafb302db86e4f02d8bbcd82f2e881a0dcf4f3e4740e4b8128b9353f7", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "3dc6787d7b08801ec3b51e9bd26be5e8826fbf1a17e92d1ebc252e1a1c75bfe1"}, + "ex_doc": {:hex, :ex_doc, "0.29.4", "6257ecbb20c7396b1fe5accd55b7b0d23f44b6aa18017b415cb4c2b91d997729", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2c6699a737ae46cb61e4ed012af931b57b699643b24dabe2400a8168414bc4f5"}, "ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.15.1", "83c8cf7973dd9d1d853dce37a2fb98aaf29b564bf7d01866e409abf59dac2c0e", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "f8416bd90c0082d56a2178cf46c837595a06575f70a5624f164a1ffe37de07e7"}, @@ -65,7 +65,7 @@ "mail": {:hex, :mail, "0.2.3", "2c6bb5f8a5f74845fa50ecd0fb45ea16b164026f285f45104f1c4c078cd616d4", [:mix], [], "hexpm", "932b398fa9c69fdf290d7ff63175826e0f1e24414d5b0763bb00a2acfc6c6bf5"}, "majic": {:hex, :majic, "1.0.0", "37e50648db5f5c2ff0c9fb46454d034d11596c03683807b9fb3850676ffdaab3", [:make, :mix], [{:elixir_make, "~> 0.6.1", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "7905858f76650d49695f14ea55cd9aaaee0c6654fa391671d4cf305c275a0a9e"}, "makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"}, "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, "meck": {:hex, :meck, "0.9.2", "85ccbab053f1db86c7ca240e9fc718170ee5bda03810a6292b5306bf31bae5f5", [:rebar3], [], "hexpm", "81344f561357dc40a8344afa53767c32669153355b626ea9fcbc8da6b3045826"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, @@ -77,10 +77,10 @@ "mogrify": {:hex, :mogrify, "0.9.2", "b360984adea7dd6a55f18028e6327973c58de7f548fdb86c9859848aa904d5b0", [:mix], [], "hexpm", "c18d10fd70ca20e2585301616c89f6e4f7159d92efc9cc8ee579e00c886f699d"}, "mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"}, "nimble_options": {:hex, :nimble_options, "0.5.2", "42703307b924880f8c08d97719da7472673391905f528259915782bb346e0a1b", [:mix], [], "hexpm", "4da7f904b915fd71db549bcdc25f8d56f378ef7ae07dc1d372cbe72ba950dce0"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"}, "nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"}, "oban": {:hex, :oban, "2.12.1", "f604d7e6a8be9fda4a9b0f6cebbd633deba569f85dbff70c4d25d99a6f023177", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b1844c2b74e0d788b73e5144b0c9d5674cb775eae29d88a36f3c3b48d42d058"}, - "open_api_spex": {:hex, :open_api_spex, "3.16.1", "8137c338129d63060b4b04947c6c57429f86267045c479c703a38a6d3f98dee1", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "ef6fd778ac121af866b48b75ad4ad256b6ff33949113ea4aa1629af8bfdfdbfb"}, + "open_api_spex": {:hex, :open_api_spex, "3.16.3", "11bc9798890073e516a97392d5846a235925e48ecbb468cb5b1cc207d5785a3e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "1bcbe6efab88f5d001c2fc377e0bd6058180aa31b68d32962d4926e934b8ecad"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, "phoenix": {:hex, :phoenix, "1.6.16", "e5bdd18c7a06da5852a25c7befb72246de4ddc289182285f8685a40b7b5f5451", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e15989ff34f670a96b95ef6d1d25bad0d9c50df5df40b671d8f4a669e050ac39"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"}, @@ -107,7 +107,7 @@ "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, "statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"}, "sweet_xml": {:hex, :sweet_xml, "0.7.3", "debb256781c75ff6a8c5cbf7981146312b66f044a2898f453709a53e5031b45b", [:mix], [], "hexpm", "e110c867a1b3fe74bfc7dd9893aa851f0eed5518d0d7cad76d7baafd30e4f5ba"}, - "swoosh": {:hex, :swoosh, "1.9.1", "0a5d7bf9954eb41d7e55525bc0940379982b090abbaef67cd8e1fd2ed7f8ca1a", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "76dffff3ffcab80f249d5937a592eaef7cc49ac6f4cdd27e622868326ed6371e"}, + "swoosh": {:hex, :swoosh, "1.10.2", "77acdc1261de404b893e24224d47459d1b42deb02577c7b31514e0a720f949d6", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "1736faf374ed49c6091845cdfd5b3a68c88c5f2bfd989447d12bffafc0dda03a"}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"}, "telemetry": {:hex, :telemetry, "0.4.3", "a06428a514bdbc63293cd9a6263aad00ddeb66f608163bdec7c8995784080818", [:rebar3], [], "hexpm", "eb72b8365ffda5bed68a620d1da88525e326cb82a75ee61354fc24b844768041"}, From f1e66b39c75071f990a49d803ab4b8fd9ac13fb3 Mon Sep 17 00:00:00 2001 From: midnight Date: Mon, 8 May 2023 18:52:19 -0400 Subject: [PATCH 086/178] Return empty string in the event of no detected language --- .../akkoma/translators/libre_translate.ex | 6 +++--- .../pleroma/translators/libre_translate_test.exs | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/akkoma/translators/libre_translate.ex b/lib/pleroma/akkoma/translators/libre_translate.ex index 3a8d9d827..5b08a6384 100644 --- a/lib/pleroma/akkoma/translators/libre_translate.ex +++ b/lib/pleroma/akkoma/translators/libre_translate.ex @@ -39,9 +39,9 @@ def translate(string, from_language, to_language) do detected = if Map.has_key?(body, "detectedLanguage") do get_in(body, ["detectedLanguage", "language"]) - else - from_language - end + else + from_language || "" + end {:ok, detected, translated} else diff --git a/test/pleroma/translators/libre_translate_test.exs b/test/pleroma/translators/libre_translate_test.exs index 3c81c3d76..a93f408f5 100644 --- a/test/pleroma/translators/libre_translate_test.exs +++ b/test/pleroma/translators/libre_translate_test.exs @@ -133,5 +133,21 @@ test "should gracefully handle an unsupported language" do assert {:error, "libre_translate: request failed (code 400)"} = LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "zoop") end + + test "should work when no detected language is received" do + Tesla.Mock.mock(fn + %{method: :post, url: "http://libre.translate/translate"} -> + %Tesla.Env{ + status: 200, + body: + Jason.encode!(%{ + translatedText: "I will crush you" + }) + } + end) + + assert {:ok, "", "I will crush you"} = + LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "en") + end end end From 9c4203632da7b6e0bd7edbe6e93dc97e748819cc Mon Sep 17 00:00:00 2001 From: provable_ascent Date: Fri, 12 May 2023 02:18:24 +0000 Subject: [PATCH 087/178] Add user_note_test.exs. --- test/pleroma/user_note_test.exs | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 test/pleroma/user_note_test.exs diff --git a/test/pleroma/user_note_test.exs b/test/pleroma/user_note_test.exs new file mode 100644 index 000000000..7d818196e --- /dev/null +++ b/test/pleroma/user_note_test.exs @@ -0,0 +1,39 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.UserNoteTest do + alias Pleroma.UserNote + + use Pleroma.DataCase, async: false + import Pleroma.Factory + + describe "show/2" do + setup do + {:ok, users: insert_list(2, :user)} + end + + test "if record does not exist, returns empty string", %{users: [user1, user2]} do + comment = UserNote.show(user1, user2) + + assert comment == "" + end + + test "if record exists with comment == nil, returns empty string", %{users: [user1, user2]} do + UserNote.create(user1, user2, nil) + + comment = UserNote.show(user1, user2) + + assert comment == "" + end + + test "if record exists with non-nil comment, returns comment", %{users: [user1, user2]} do + expected_comment = "hello" + UserNote.create(user1, user2, expected_comment) + + comment = UserNote.show(user1, user2) + + assert comment == expected_comment + end + end +end From ddf4d8026dd3b99df042de82a91c124e36b428ce Mon Sep 17 00:00:00 2001 From: Denys Nykula Date: Thu, 18 May 2023 22:53:40 +0300 Subject: [PATCH 088/178] fix remote interaction form style --- priv/static/static-fe/forms.css | 41 ++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/priv/static/static-fe/forms.css b/priv/static/static-fe/forms.css index 196713ea0..9d6085d1d 100644 --- a/priv/static/static-fe/forms.css +++ b/priv/static/static-fe/forms.css @@ -14,13 +14,13 @@ input { padding: 10px; margin-top: 5px; margin-bottom: 10px; - background-color: var(--background-color); - color: var(--primary-text-color); + background-color: transparent; + color: inherit; border: 0; transition-property: border-bottom; transition-duration: 0.35s; - border-bottom: 2px solid #2a384a; - font-size: 14px; + border-bottom: 2px solid var(--faint); + font: inherit; width: inherit; box-sizing: border-box; } @@ -91,26 +91,22 @@ [type="checkbox"]:checked+label:before { a.button, button { width: 100%; - background-color: #1c2a3a; - color: var(--primary-text-color); + background-color: var(--btn); + color: var(--btnText); border-radius: 4px; border: none; padding: 10px 16px; margin-top: 20px; margin-bottom: 20px; text-transform: uppercase; - font-size: 16px; - box-shadow: 0px 0px 2px 0px black, - 0px 1px 0px 0px rgba(255, 255, 255, 0.2) inset, - 0px -1px 0px 0px rgba(0, 0, 0, 0.2) inset; + box-shadow: var(--btnShadow); + font: inherit; } a.button:hover, button:hover { cursor: pointer; - box-shadow: 0px 0px 0px 1px var(--brand-color), - 0px 1px 0px 0px rgba(255, 255, 255, 0.2) inset, - 0px -1px 0px 0px rgba(0, 0, 0, 0.2) inset; + box-shadow: var(--btnHoverShadow); } .actions { @@ -155,4 +151,21 @@ .account-header__display-name { .account-header__nickname { font-size: 14px; color: var(--muted-text-color); -} \ No newline at end of file +} + +.oauth { + /* Remote interaction /main/ostatus has such hierarchy, and its header and + * content do not pad themselves: + * (.panel.oauth (h2) + * (form (input) + * (button))) */ + padding: 1px 1em; +} + +.oauth .container__content { + /* Frontend selection /oauth/authorize needs an inverse because its heading + * and content have their own background and padding: + * (.panel.oauth (form (.container__content (.panel-heading) + * (.panel-content)))) */ + margin: -1px -1em; +} From c7fb78cc32a91255f4bdc6af0db6b9c88b9e95b3 Mon Sep 17 00:00:00 2001 From: ilja Date: Sun, 21 May 2023 11:47:38 +0200 Subject: [PATCH 089/178] Move deadline and old_insert_date to setup Several tests for prune_objetcs need a date older than the deadline for pruning, so I moved that to the setup --- test/mix/tasks/pleroma/database_test.exs | 73 ++++++++---------------- 1 file changed, 23 insertions(+), 50 deletions(-) diff --git a/test/mix/tasks/pleroma/database_test.exs b/test/mix/tasks/pleroma/database_test.exs index 9edb2c115..21c365412 100644 --- a/test/mix/tasks/pleroma/database_test.exs +++ b/test/mix/tasks/pleroma/database_test.exs @@ -45,21 +45,25 @@ test "it replaces objects with references" do end describe "prune_objects" do - test "it prunes old objects from the database" do + setup do deadline = Pleroma.Config.get([:instance, :remote_post_retention_days]) + 1 - date = + old_insert_date = Timex.now() |> Timex.shift(days: -deadline) |> Timex.to_naive_datetime() |> NaiveDateTime.truncate(:second) + %{old_insert_date: old_insert_date} + end + + test "it prunes old objects from the database", %{old_insert_date: old_insert_date} do insert(:note) %{id: note_remote_public_id} = :note |> insert() - |> Ecto.Changeset.change(%{updated_at: date}) + |> Ecto.Changeset.change(%{updated_at: old_insert_date}) |> Repo.update!() note_remote_non_public = @@ -69,7 +73,7 @@ test "it prunes old objects from the database" do note_remote_non_public |> Ecto.Changeset.change(%{ - updated_at: date, + updated_at: old_insert_date, data: note_remote_non_public_data |> update_in(["to"], fn _ -> [] end) }) |> Repo.update!() @@ -83,21 +87,14 @@ test "it prunes old objects from the database" do refute Object.get_by_id(note_remote_non_public_id) end - test "with the --keep-non-public option it still keeps non-public posts even if they are not local" do - deadline = Pleroma.Config.get([:instance, :remote_post_retention_days]) + 1 - - date = - Timex.now() - |> Timex.shift(days: -deadline) - |> Timex.to_naive_datetime() - |> NaiveDateTime.truncate(:second) - + test "with the --keep-non-public option it still keeps non-public posts even if they are not local", + %{old_insert_date: old_insert_date} do insert(:note) %{id: note_remote_id} = :note |> insert() - |> Ecto.Changeset.change(%{updated_at: date}) + |> Ecto.Changeset.change(%{updated_at: old_insert_date}) |> Repo.update!() note_remote_non_public = @@ -107,7 +104,7 @@ test "with the --keep-non-public option it still keeps non-public posts even if note_remote_non_public |> Ecto.Changeset.change(%{ - updated_at: date, + updated_at: old_insert_date, data: note_remote_non_public_data |> update_in(["to"], fn _ -> [] end) }) |> Repo.update!() @@ -120,16 +117,10 @@ test "with the --keep-non-public option it still keeps non-public posts even if refute Object.get_by_id(note_remote_id) end - test "with the --keep-threads and --keep-non-public option it keeps old threads with non-public replies even if the interaction is not local" do + test "with the --keep-threads and --keep-non-public option it keeps old threads with non-public replies even if the interaction is not local", + %{old_insert_date: old_insert_date} do # For non-public we only check Create Activities because only these are relevant for threads # Flags are always non-public, Announces from relays can be non-public... - deadline = Pleroma.Config.get([:instance, :remote_post_retention_days]) + 1 - - old_insert_date = - Timex.now() - |> Timex.shift(days: -deadline) - |> Timex.to_naive_datetime() - |> NaiveDateTime.truncate(:second) remote_user1 = insert(:user, local: false) remote_user2 = insert(:user, local: false) @@ -212,15 +203,9 @@ test "with the --keep-threads option it still keeps non-old threads even with no assert length(Repo.all(Object)) == 2 end - test "with the --keep-threads option it deletes old threads with no local interaction" do - deadline = Pleroma.Config.get([:instance, :remote_post_retention_days]) + 1 - - old_insert_date = - Timex.now() - |> Timex.shift(days: -deadline) - |> Timex.to_naive_datetime() - |> NaiveDateTime.truncate(:second) - + test "with the --keep-threads option it deletes old threads with no local interaction", %{ + old_insert_date: old_insert_date + } do remote_user = insert(:user, local: false) remote_user2 = insert(:user, local: false) @@ -261,15 +246,9 @@ test "with the --keep-threads option it deletes old threads with no local intera assert length(Repo.all(Object)) == 0 end - test "with the --keep-threads option it keeps old threads with local interaction" do - deadline = Pleroma.Config.get([:instance, :remote_post_retention_days]) + 1 - - old_insert_date = - Timex.now() - |> Timex.shift(days: -deadline) - |> Timex.to_naive_datetime() - |> NaiveDateTime.truncate(:second) - + test "with the --keep-threads option it keeps old threads with local interaction", %{ + old_insert_date: old_insert_date + } do remote_user = insert(:user, local: false) local_user = insert(:user, local: true) @@ -326,15 +305,9 @@ test "with the --keep-threads option it keeps old threads with local interaction assert length(Repo.all(Object)) == 4 end - test "with the --keep-threads option it keeps old threads with bookmarked posts" do - deadline = Pleroma.Config.get([:instance, :remote_post_retention_days]) + 1 - - old_insert_date = - Timex.now() - |> Timex.shift(days: -deadline) - |> Timex.to_naive_datetime() - |> NaiveDateTime.truncate(:second) - + test "with the --keep-threads option it keeps old threads with bookmarked posts", %{ + old_insert_date: old_insert_date + } do remote_user = insert(:user, local: false) local_user = insert(:user, local: true) From f49e9e6d4cb7cfdd0c2fbb2ea74c82a7ec7d13e4 Mon Sep 17 00:00:00 2001 From: ilja Date: Sun, 21 May 2023 13:02:28 +0200 Subject: [PATCH 090/178] Clean up bookmarks after prune_objects When doing prune_objects, it's possible that bookmarked objects are deleted. This gave problems when fetching the bookmark TL. Here we clean up the bookmarks during pruning in the case were it's possible that bookmarked objects are deleted. --- lib/mix/tasks/pleroma/database.ex | 15 +++++++++++++++ test/mix/tasks/pleroma/database_test.exs | 24 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index 726a22d41..55d1c8ddc 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -171,6 +171,21 @@ def run(["prune_objects" | args]) do end |> Repo.delete_all(timeout: :infinity) + if !Keyword.get(options, :keep_threads) do + # Without the --keep-threads option, it's possible that bookmarked + # objects have been deleted. We remove the corresponding bookmarks. + """ + delete from public.bookmarks + where id in ( + select b.id from public.bookmarks b + left join public.activities a on b.activity_id = a.id + left join public.objects o on a."data" ->> 'object' = o.data ->> 'id' + where o.id is null + ) + """ + |> Repo.query([], timeout: :infinity) + end + if Keyword.get(options, :prune_orphaned_activities) do # Prune activities who link to a single object """ diff --git a/test/mix/tasks/pleroma/database_test.exs b/test/mix/tasks/pleroma/database_test.exs index 21c365412..40c5fd402 100644 --- a/test/mix/tasks/pleroma/database_test.exs +++ b/test/mix/tasks/pleroma/database_test.exs @@ -7,6 +7,7 @@ defmodule Mix.Tasks.Pleroma.DatabaseTest do use Oban.Testing, repo: Pleroma.Repo alias Pleroma.Activity + alias Pleroma.Bookmark alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User @@ -87,6 +88,29 @@ test "it prunes old objects from the database", %{old_insert_date: old_insert_da refute Object.get_by_id(note_remote_non_public_id) end + test "it cleans up bookmarks", %{old_insert_date: old_insert_date} do + user = insert(:user) + {:ok, old_object_activity} = CommonAPI.post(user, %{status: "yadayada"}) + + Repo.one(Object) + |> Ecto.Changeset.change(%{updated_at: old_insert_date}) + |> Repo.update!() + + {:ok, new_object_activity} = CommonAPI.post(user, %{status: "yadayada"}) + + {:ok, _} = Bookmark.create(user.id, old_object_activity.id) + {:ok, _} = Bookmark.create(user.id, new_object_activity.id) + + assert length(Repo.all(Object)) == 2 + assert length(Repo.all(Bookmark)) == 2 + + Mix.Tasks.Pleroma.Database.run(["prune_objects"]) + + assert length(Repo.all(Object)) == 1 + assert length(Repo.all(Bookmark)) == 1 + refute Bookmark.get(user.id, old_object_activity.id) + end + test "with the --keep-non-public option it still keeps non-public posts even if they are not local", %{old_insert_date: old_insert_date} do insert(:note) From d310f99d6aa777aa03215c29f469140221716f9f Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 22 May 2023 23:53:44 +0100 Subject: [PATCH 091/178] Add MRFs for direct message manipulation --- .../akkoma/translators/libre_translate.ex | 4 +- lib/pleroma/user.ex | 15 ++++++ lib/pleroma/web/activity_pub/mrf.ex | 3 +- .../mrf/direct_message_disabled_policy.ex | 46 +++++++++++++++++ ...eject_newly_created_account_note_policy.ex | 49 +++++++++++++++++++ .../api_spec/operations/account_operation.ex | 11 +++++ ...2213837_add_unfollowed_dm_restrictions.exs | 10 ++++ .../translators/libre_translate_test.exs | 3 +- test/pleroma/user_test.exs | 32 ++++++++++++ .../direct_message_disabled_policy_test.exs | 42 ++++++++++++++++ 10 files changed, 210 insertions(+), 5 deletions(-) create mode 100644 lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex create mode 100644 lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex create mode 100644 priv/repo/migrations/20230522213837_add_unfollowed_dm_restrictions.exs create mode 100644 test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs diff --git a/lib/pleroma/akkoma/translators/libre_translate.ex b/lib/pleroma/akkoma/translators/libre_translate.ex index 5b08a6384..80956ab66 100644 --- a/lib/pleroma/akkoma/translators/libre_translate.ex +++ b/lib/pleroma/akkoma/translators/libre_translate.ex @@ -39,9 +39,9 @@ def translate(string, from_language, to_language) do detected = if Map.has_key?(body, "detectedLanguage") do get_in(body, ["detectedLanguage", "language"]) - else + else from_language || "" - end + end {:ok, detected, translated} else diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index ead37ccca..7f4dccf27 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -158,6 +158,8 @@ defmodule Pleroma.User do field(:last_status_at, :naive_datetime) field(:language, :string) field(:status_ttl_days, :integer, default: nil) + field(:accepts_direct_messages_from_followed, :boolean) + field(:accepts_direct_messages_from_not_followed, :boolean) embeds_one( :notification_settings, @@ -2722,4 +2724,17 @@ def unfollow_hashtag(%User{} = user, %Hashtag{} = hashtag) do def following_hashtag?(%User{} = user, %Hashtag{} = hashtag) do not is_nil(HashtagFollow.get(user, hashtag)) end + + def accepts_direct_messages?(%User{} = receiver, %User{} = sender) do + cond do + User.following?(receiver, sender) && receiver.accepts_direct_messages_from_followed == true -> + true + + receiver.accepts_direct_messages_from_not_followed == true -> + true + + true -> + false + end + end end diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index 6ecd62c99..88a58421e 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -147,7 +147,8 @@ def get_policies do |> Enum.concat([ Pleroma.Web.ActivityPub.MRF.HashtagPolicy, Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy, - Pleroma.Web.ActivityPub.MRF.NormalizeMarkup + Pleroma.Web.ActivityPub.MRF.NormalizeMarkup, + Pleroma.Web.ActivityPub.MRF.DirectMessageDisabledPolicy ]) |> Enum.uniq() end diff --git a/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex b/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex new file mode 100644 index 000000000..27a59c4f1 --- /dev/null +++ b/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex @@ -0,0 +1,46 @@ +defmodule Pleroma.Web.ActivityPub.MRF.DirectMessageDisabledPolicy do + @behaviour Pleroma.Web.ActivityPub.MRF.Policy + + alias Pleroma.User + alias Pleroma.Web.ActivityPub.Visibility + + @moduledoc """ + Removes entries from the "To" field from direct messages if the user has requested to not + allow direct messages + """ + + @impl true + def filter( + %{ + "type" => "Note", + "actor" => actor + } = activity + ) do + with true <- Visibility.is_direct?(%{data: activity}), + recipients <- Map.get(activity, "to"), + sender <- User.get_cached_by_ap_id(actor) do + new_to = + Enum.filter(recipients, fn recv -> + should_filter?(sender, recv) + end) + + {:ok, Map.put(activity, :to, new_to)} + else + _ -> {:ok, activity} + end + end + + @impl true + def filter(object), do: {:ok, object} + + @impl true + def describe, do: {:ok, %{}} + + defp should_filter?(sender, receiver_ap_id) do + with %User{local: true} = receiver <- User.get_cached_by_ap_id(receiver_ap_id) do + User.accepts_direct_messages?(receiver, sender) + else + _ -> false + end + end +end diff --git a/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex b/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex new file mode 100644 index 000000000..4a2ab759a --- /dev/null +++ b/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex @@ -0,0 +1,49 @@ +defmodule Pleroma.Web.ActivityPub.MRF.RejectNewlyCreatedAccountNotesPolicy do + @behaviour Pleroma.Web.ActivityPub.MRF.Policy + + alias Pleroma.User + + @moduledoc """ + Rejects notes from accounts that were created below a certain threshold of time ago + """ + @impl true + def filter( + %{ + "type" => type, + "actor" => actor + } = activity + ) when type in ["Note", "Create"] do + min_age = Pleroma.Config.get([:mrf_reject_newly_created_account_notes, :age]) + + with %User{} = user <- Pleroma.User.get_cached_by_ap_id(actor), + true <- Timex.diff(Timex.now(), user.inserted_at, :seconds) < min_age do + {:reject, "Account created too recently"} + else + _ -> {:ok, activity} + end + end + + @impl true + def filter(object), do: {:ok, object} + + @impl true + def describe, do: {:ok, %{}} + + @impl true + def config_description do + %{ + key: :mrf_reject_newly_created_account_notes, + related_policy: "Pleroma.Web.ActivityPub.MRF.RejectNewlyCreatedAccountNotesPolicy", + label: "MRF Reject New Accounts", + description: "Reject notes from accounts created too recently", + children: [ + %{ + key: :age, + type: :integer, + description: "Time below which to reject (in seconds)", + suggestions: [86_400] + } + ] + } + end +end diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 894ad5db0..7971b5363 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -708,6 +708,17 @@ defp update_credentials_request do nullable: true, description: "Number of days after which statuses will be deleted. Set to -1 to disable." + }, + accepts_direct_messages_from_followed: %Schema{ + type: :boolean, + nullable: true, + description: + "Whether to accept DMs from people you follow (will be overridden by accepts_direct_messages_from_not_followed if true)" + }, + accepts_direct_messages_from_not_followed: %Schema{ + type: :boolean, + nullable: true, + description: "Whether to accept DMs from everyone" } }, example: %{ diff --git a/priv/repo/migrations/20230522213837_add_unfollowed_dm_restrictions.exs b/priv/repo/migrations/20230522213837_add_unfollowed_dm_restrictions.exs new file mode 100644 index 000000000..a373b11ee --- /dev/null +++ b/priv/repo/migrations/20230522213837_add_unfollowed_dm_restrictions.exs @@ -0,0 +1,10 @@ +defmodule Pleroma.Repo.Migrations.AddUnfollowedDmRestrictions do + use Ecto.Migration + + def change do + alter table(:users) do + add(:accepts_direct_messages_from_followed, :boolean, default: true) + add(:accepts_direct_messages_from_not_followed, :boolean, default: true) + end + end +end diff --git a/test/pleroma/translators/libre_translate_test.exs b/test/pleroma/translators/libre_translate_test.exs index a93f408f5..2ba75ec0e 100644 --- a/test/pleroma/translators/libre_translate_test.exs +++ b/test/pleroma/translators/libre_translate_test.exs @@ -146,8 +146,7 @@ test "should work when no detected language is received" do } end) - assert {:ok, "", "I will crush you"} = - LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "en") + assert {:ok, "", "I will crush you"} = LibreTranslate.translate("ギュギュ握りつぶしちゃうぞ", nil, "en") end end end diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 12ccc6bf4..094799968 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -2756,4 +2756,36 @@ test "should not error when trying to unfollow a hashtag twice" do assert user.followed_hashtags |> Enum.count() == 0 end end + + describe "accepts_direct_messages?/2" do + test "should return true if the recipient follows the sender and has turned on 'accept from follows'" do + recipient = + insert(:user, %{ + accepts_direct_messages_from_followed: true, + accepts_direct_messages_from_not_followed: false + }) + + sender = insert(:user) + + refute User.accepts_direct_messages?(recipient, sender) + + CommonAPI.follow(recipient, sender) + + assert User.accepts_direct_messages?(recipient, sender) + end + + test "should return true if the recipient has 'accept from everyone' on" do + recipient = insert(:user, %{accepts_direct_messages_from_not_followed: true}) + sender = insert(:user) + + assert User.accepts_direct_messages?(recipient, sender) + end + + test "should return false if the receipient has 'accept from everyone' off" do + recipient = insert(:user, %{accepts_direct_messages_from_not_followed: false}) + sender = insert(:user) + + refute User.accepts_direct_messages?(recipient, sender) + end + end end diff --git a/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs b/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs new file mode 100644 index 000000000..50ed36a0b --- /dev/null +++ b/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs @@ -0,0 +1,42 @@ +defmodule Pleroma.Web.ActivityPub.MRF.DirectMessageDisabledPolicyTest do + use Pleroma.DataCase + import Pleroma.Factory + + alias Pleroma.Web.ActivityPub.MRF.DirectMessageDisabledPolicy + alias Pleroma.User + + describe "strips recipients" do + test "when the user denies the direct message" do + sender = insert(:user) + recipient = insert(:user, %{accepts_direct_messages_from_not_followed: false}) + + refute User.accepts_direct_messages?(recipient, sender) + + message = %{ + "actor" => sender.ap_id, + "to" => [recipient.ap_id], + "cc" => [], + "type" => "Note" + } + + assert {:ok, %{to: []}} = DirectMessageDisabledPolicy.filter(message) + end + + test "when the user does not deny the direct message" do + sender = insert(:user) + recipient = insert(:user, %{accepts_direct_messages_from_not_followed: true}) + + assert User.accepts_direct_messages?(recipient, sender) + + message = %{ + "actor" => sender.ap_id, + "to" => [recipient.ap_id], + "cc" => [], + "type" => "Note" + } + + assert {:ok, message} = DirectMessageDisabledPolicy.filter(message) + assert message.to == [recipient.ap_id] + end + end +end From ab34680554adb8864e910eb59d6c9150263bc88c Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 23 May 2023 10:29:08 +0100 Subject: [PATCH 092/178] switch to using an enum system for DM acceptance --- lib/pleroma/user.ex | 30 +++++++------ ...eject_newly_created_account_note_policy.ex | 3 +- .../api_spec/operations/account_operation.ex | 19 ++++---- .../controllers/account_controller.ex | 3 +- .../web/mastodon_api/views/account_view.ex | 1 + ...2213837_add_unfollowed_dm_restrictions.exs | 3 +- test/pleroma/user_test.exs | 13 +++--- .../mastodon_api/update_credentials_test.exs | 44 +++++++++++++++++++ 8 files changed, 82 insertions(+), 34 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 7f4dccf27..371dea85b 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -158,8 +158,10 @@ defmodule Pleroma.User do field(:last_status_at, :naive_datetime) field(:language, :string) field(:status_ttl_days, :integer, default: nil) - field(:accepts_direct_messages_from_followed, :boolean) - field(:accepts_direct_messages_from_not_followed, :boolean) + + field(:accepts_direct_messages_from, Ecto.Enum, + values: [:everybody, :people_i_follow, :nobody] + ) embeds_one( :notification_settings, @@ -538,7 +540,8 @@ def update_changeset(struct, params \\ %{}) do :is_discoverable, :actor_type, :disclose_client, - :status_ttl_days + :status_ttl_days, + :accepts_direct_messages_from ] ) |> unique_constraint(:nickname) @@ -2725,16 +2728,15 @@ def following_hashtag?(%User{} = user, %Hashtag{} = hashtag) do not is_nil(HashtagFollow.get(user, hashtag)) end - def accepts_direct_messages?(%User{} = receiver, %User{} = sender) do - cond do - User.following?(receiver, sender) && receiver.accepts_direct_messages_from_followed == true -> - true - - receiver.accepts_direct_messages_from_not_followed == true -> - true - - true -> - false - end + def accepts_direct_messages?( + %User{accepts_direct_messages_from: :people_i_follow} = receiver, + %User{} = sender + ) do + User.following?(receiver, sender) end + + def accepts_direct_messages?(%User{accepts_direct_messages_from: :everybody}, _), do: true + + def accepts_direct_messages?(%User{accepts_direct_messages_from: :nobody}, _), + do: false end diff --git a/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex b/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex index 4a2ab759a..5481f38de 100644 --- a/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex @@ -12,7 +12,8 @@ def filter( "type" => type, "actor" => actor } = activity - ) when type in ["Note", "Create"] do + ) + when type in ["Note", "Create"] do min_age = Pleroma.Config.get([:mrf_reject_newly_created_account_notes, :age]) with %User{} = user <- Pleroma.User.get_cached_by_ap_id(actor), diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 7971b5363..8a46ec32a 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -709,16 +709,16 @@ defp update_credentials_request do description: "Number of days after which statuses will be deleted. Set to -1 to disable." }, - accepts_direct_messages_from_followed: %Schema{ - type: :boolean, + accepts_direct_messages_from: %Schema{ + type: :string, + enum: [ + "everybody", + "nobody", + "people_i_follow" + ], nullable: true, description: - "Whether to accept DMs from people you follow (will be overridden by accepts_direct_messages_from_not_followed if true)" - }, - accepts_direct_messages_from_not_followed: %Schema{ - type: :boolean, - nullable: true, - description: "Whether to accept DMs from everyone" + "Who to accept DMs from" } }, example: %{ @@ -740,7 +740,8 @@ defp update_credentials_request do also_known_as: ["https://foo.bar/users/foo"], discoverable: false, actor_type: "Person", - status_ttl_days: 30 + status_ttl_days: 30, + accepts_direct_messages_from: "everybody" } } end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 678ec3a80..16b3e36a8 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -191,7 +191,7 @@ def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _p :show_role, :skip_thread_containment, :allow_following_move, - :also_known_as + :also_known_as, ] |> Enum.reduce(%{}, fn key, acc -> Maps.put_if_present(acc, key, params[key], &{:ok, Params.truthy_param?(&1)}) @@ -221,6 +221,7 @@ def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _p |> Maps.put_if_present(:is_discoverable, params[:discoverable]) |> Maps.put_if_present(:language, Pleroma.Web.Gettext.normalize_locale(params[:language])) |> Maps.put_if_present(:status_ttl_days, params[:status_ttl_days], status_ttl_days_value) + |> Maps.put_if_present(:accepts_direct_messages_from, params[:accepts_direct_messages_from]) # What happens here: # diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 190d6ebf2..e0fa3b033 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -354,6 +354,7 @@ defp maybe_put_settings( |> Kernel.put_in([:source, :privacy], user.default_scope) |> Kernel.put_in([:source, :pleroma, :show_role], user.show_role) |> Kernel.put_in([:source, :pleroma, :no_rich_text], user.no_rich_text) + |> Kernel.put_in([:accepts_direct_messages_from], user.accepts_direct_messages_from) end defp maybe_put_settings(data, _, _, _), do: data diff --git a/priv/repo/migrations/20230522213837_add_unfollowed_dm_restrictions.exs b/priv/repo/migrations/20230522213837_add_unfollowed_dm_restrictions.exs index a373b11ee..8947be738 100644 --- a/priv/repo/migrations/20230522213837_add_unfollowed_dm_restrictions.exs +++ b/priv/repo/migrations/20230522213837_add_unfollowed_dm_restrictions.exs @@ -3,8 +3,7 @@ defmodule Pleroma.Repo.Migrations.AddUnfollowedDmRestrictions do def change do alter table(:users) do - add(:accepts_direct_messages_from_followed, :boolean, default: true) - add(:accepts_direct_messages_from_not_followed, :boolean, default: true) + add(:accepts_direct_messages_from, :string, default: "everybody") end end end diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 094799968..f35a98f08 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -2758,11 +2758,10 @@ test "should not error when trying to unfollow a hashtag twice" do end describe "accepts_direct_messages?/2" do - test "should return true if the recipient follows the sender and has turned on 'accept from follows'" do + test "should return true if the recipient follows the sender and has set accept to :people_i_follow" do recipient = insert(:user, %{ - accepts_direct_messages_from_followed: true, - accepts_direct_messages_from_not_followed: false + accepts_direct_messages_from: :people_i_follow }) sender = insert(:user) @@ -2774,15 +2773,15 @@ test "should return true if the recipient follows the sender and has turned on ' assert User.accepts_direct_messages?(recipient, sender) end - test "should return true if the recipient has 'accept from everyone' on" do - recipient = insert(:user, %{accepts_direct_messages_from_not_followed: true}) + test "should return true if the recipient has set accept to :everyone" do + recipient = insert(:user, %{accepts_direct_messages_from: :everybody}) sender = insert(:user) assert User.accepts_direct_messages?(recipient, sender) end - test "should return false if the receipient has 'accept from everyone' off" do - recipient = insert(:user, %{accepts_direct_messages_from_not_followed: false}) + test "should return false if the receipient set accept to :nobody" do + recipient = insert(:user, %{accepts_direct_messages_from: :nobody}) sender = insert(:user) refute User.accepts_direct_messages?(recipient, sender) diff --git a/test/pleroma/web/mastodon_api/update_credentials_test.exs b/test/pleroma/web/mastodon_api/update_credentials_test.exs index 4aec31eac..925ea25aa 100644 --- a/test/pleroma/web/mastodon_api/update_credentials_test.exs +++ b/test/pleroma/web/mastodon_api/update_credentials_test.exs @@ -727,4 +727,48 @@ test "actor_type field has a higher priority than bot", %{conn: conn} do assert account["source"]["pleroma"]["actor_type"] == "Person" end end + + describe "Updating direct message settings" do + setup do: oauth_access(["write:accounts"]) + setup :request_content_type + + test "changing to :everybody", %{conn: conn} do + account = + conn + |> patch("/api/v1/accounts/update_credentials", %{accepts_direct_messages_from: "everybody"}) + |> json_response_and_validate_schema(200) + + assert account["accepts_direct_messages_from"] + assert account["accepts_direct_messages_from"] == "everybody" + assert Pleroma.User.get_by_ap_id(account["url"]).accepts_direct_messages_from == :everybody + end + + test "changing to :nobody", %{conn: conn} do + account = + conn + |> patch("/api/v1/accounts/update_credentials", %{accepts_direct_messages_from: "nobody"}) + |> json_response_and_validate_schema(200) + + assert account["accepts_direct_messages_from"] + assert account["accepts_direct_messages_from"] == "nobody" + assert Pleroma.User.get_by_ap_id(account["url"]).accepts_direct_messages_from == :nobody + end + + test "changing to :people_i_follow", %{conn: conn} do + account = + conn + |> patch("/api/v1/accounts/update_credentials", %{accepts_direct_messages_from: "people_i_follow"}) + |> json_response_and_validate_schema(200) + + assert account["accepts_direct_messages_from"] + assert account["accepts_direct_messages_from"] == "people_i_follow" + assert Pleroma.User.get_by_ap_id(account["url"]).accepts_direct_messages_from == :people_i_follow + end + + test "changing to an unsupported value", %{conn: conn} do + conn + |> patch("/api/v1/accounts/update_credentials", %{accepts_direct_messages_from: "unsupported"}) + |> json_response(400) + end + end end From 037f881187f1d7ec29efbf75f76dbc8b135b65cd Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 23 May 2023 13:16:20 +0100 Subject: [PATCH 093/178] Fix create processing in direct message disabled --- CHANGELOG.md | 9 ++++ config/config.exs | 2 + lib/pleroma/user.ex | 3 +- .../mrf/direct_message_disabled_policy.ex | 16 +++++-- ...eject_newly_created_account_note_policy.ex | 4 +- .../api_spec/operations/account_operation.ex | 3 +- .../controllers/account_controller.ex | 2 +- .../direct_message_disabled_policy_test.exs | 12 ++--- ...newly_created_account_note_policy_test.exs | 45 +++++++++++++++++++ test/pleroma/web/activity_pub/mrf_test.exs | 16 ++++++- .../transmogrifier/note_handling_test.exs | 8 ++-- .../mastodon_api/update_credentials_test.exs | 16 +++++-- 12 files changed, 111 insertions(+), 25 deletions(-) create mode 100644 test/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index bb5b8fa04..207c99d67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased +## Added +- Custom options for users to accept/reject private messages + - options: everybody, nobody, people\_i\_follow +- MRF to reject notes from accounts newer than a given age + - this will have the side-effect of rejecting legitimate messages if your + post gets boosted outside of your local bubble and people your instance + does not know about reply to it. + ## Fixed - Support for `streams` public key URIs +- Bookmarks are cleaned up on DB prune now ## 2023.04 diff --git a/config/config.exs b/config/config.exs index 95c576385..ca397a8fd 100644 --- a/config/config.exs +++ b/config/config.exs @@ -418,6 +418,8 @@ config :pleroma, :mrf_follow_bot, follower_nickname: nil +config :pleroma, :mrf_reject_newly_created_account_notes, age: 86_400 + config :pleroma, :rich_media, enabled: true, ignore_hosts: [], diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 371dea85b..273bdf337 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -160,7 +160,8 @@ defmodule Pleroma.User do field(:status_ttl_days, :integer, default: nil) field(:accepts_direct_messages_from, Ecto.Enum, - values: [:everybody, :people_i_follow, :nobody] + values: [:everybody, :people_i_follow, :nobody], + default: :everybody ) embeds_one( diff --git a/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex b/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex index 27a59c4f1..ec6fa70e2 100644 --- a/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex @@ -12,7 +12,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.DirectMessageDisabledPolicy do @impl true def filter( %{ - "type" => "Note", + "type" => "Create", "actor" => actor } = activity ) do @@ -24,9 +24,13 @@ def filter( should_filter?(sender, recv) end) - {:ok, Map.put(activity, :to, new_to)} + {:ok, + activity + |> Map.put("to", new_to) + |> maybe_replace_object_to(new_to)} else - _ -> {:ok, activity} + _ -> + {:ok, activity} end end @@ -43,4 +47,10 @@ defp should_filter?(sender, receiver_ap_id) do _ -> false end end + + defp maybe_replace_object_to(%{"object" => %{"to" => _}} = activity, to) do + Kernel.put_in(activity, ["object", "to"], to) + end + + defp maybe_replace_object_to(other, _), do: other end diff --git a/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex b/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex index 5481f38de..01a846831 100644 --- a/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy.ex @@ -16,9 +16,9 @@ def filter( when type in ["Note", "Create"] do min_age = Pleroma.Config.get([:mrf_reject_newly_created_account_notes, :age]) - with %User{} = user <- Pleroma.User.get_cached_by_ap_id(actor), + with %User{local: false} = user <- Pleroma.User.get_cached_by_ap_id(actor), true <- Timex.diff(Timex.now(), user.inserted_at, :seconds) < min_age do - {:reject, "Account created too recently"} + {:reject, "[RejectNewlyCreatedAccountNotesPolicy] Account created too recently"} else _ -> {:ok, activity} end diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 8a46ec32a..8a6851d52 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -717,8 +717,7 @@ defp update_credentials_request do "people_i_follow" ], nullable: true, - description: - "Who to accept DMs from" + description: "Who to accept DMs from" } }, example: %{ diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 16b3e36a8..057af762a 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -191,7 +191,7 @@ def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _p :show_role, :skip_thread_containment, :allow_following_move, - :also_known_as, + :also_known_as ] |> Enum.reduce(%{}, fn key, acc -> Maps.put_if_present(acc, key, params[key], &{:ok, Params.truthy_param?(&1)}) diff --git a/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs b/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs index 50ed36a0b..072fe0576 100644 --- a/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs +++ b/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs @@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.DirectMessageDisabledPolicyTest do describe "strips recipients" do test "when the user denies the direct message" do sender = insert(:user) - recipient = insert(:user, %{accepts_direct_messages_from_not_followed: false}) + recipient = insert(:user, %{accepts_direct_messages_from: :nobody}) refute User.accepts_direct_messages?(recipient, sender) @@ -16,15 +16,15 @@ test "when the user denies the direct message" do "actor" => sender.ap_id, "to" => [recipient.ap_id], "cc" => [], - "type" => "Note" + "type" => "Create" } - assert {:ok, %{to: []}} = DirectMessageDisabledPolicy.filter(message) + assert {:ok, %{"to" => []}} = DirectMessageDisabledPolicy.filter(message) end test "when the user does not deny the direct message" do sender = insert(:user) - recipient = insert(:user, %{accepts_direct_messages_from_not_followed: true}) + recipient = insert(:user, %{accepts_direct_messages_from: :everybody}) assert User.accepts_direct_messages?(recipient, sender) @@ -32,11 +32,11 @@ test "when the user does not deny the direct message" do "actor" => sender.ap_id, "to" => [recipient.ap_id], "cc" => [], - "type" => "Note" + "type" => "Create" } assert {:ok, message} = DirectMessageDisabledPolicy.filter(message) - assert message.to == [recipient.ap_id] + assert message["to"] == [recipient.ap_id] end end end diff --git a/test/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy_test.exs b/test/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy_test.exs new file mode 100644 index 000000000..2fc65e6d6 --- /dev/null +++ b/test/pleroma/web/activity_pub/mrf/reject_newly_created_account_note_policy_test.exs @@ -0,0 +1,45 @@ +defmodule Pleroma.Web.ActivityPub.MRF.RejectNewlyCreatedAccountNotesPolicyTest do + use Pleroma.DataCase + import Pleroma.Factory + + alias Pleroma.Web.ActivityPub.MRF.RejectNewlyCreatedAccountNotesPolicy + + describe "reject notes from new accounts" do + test "rejects notes from accounts created more recently than `age`" do + clear_config([:mrf_reject_newly_created_account_notes, :age], 86_400) + sender = insert(:user, %{inserted_at: Timex.now(), local: false}) + + message = %{ + "actor" => sender.ap_id, + "type" => "Create" + } + + assert {:reject, _} = RejectNewlyCreatedAccountNotesPolicy.filter(message) + end + + test "does not reject notes from accounts created longer ago" do + clear_config([:mrf_reject_newly_created_account_notes, :age], 86_400) + a_day_ago = Timex.shift(Timex.now(), days: -1) + sender = insert(:user, %{inserted_at: a_day_ago, local: false}) + + message = %{ + "actor" => sender.ap_id, + "type" => "Create" + } + + assert {:ok, _} = RejectNewlyCreatedAccountNotesPolicy.filter(message) + end + + test "does not affect local users" do + clear_config([:mrf_reject_newly_created_account_notes, :age], 86_400) + sender = insert(:user, %{inserted_at: Timex.now(), local: true}) + + message = %{ + "actor" => sender.ap_id, + "type" => "Create" + } + + assert {:ok, _} = RejectNewlyCreatedAccountNotesPolicy.filter(message) + end + end +end diff --git a/test/pleroma/web/activity_pub/mrf_test.exs b/test/pleroma/web/activity_pub/mrf_test.exs index 7359398fe..51af672cd 100644 --- a/test/pleroma/web/activity_pub/mrf_test.exs +++ b/test/pleroma/web/activity_pub/mrf_test.exs @@ -102,7 +102,13 @@ test "it works as expected with noop policy" do clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.NoOpPolicy]) expected = %{ - mrf_policies: ["NoOpPolicy", "HashtagPolicy", "InlineQuotePolicy", "NormalizeMarkup"], + mrf_policies: [ + "NoOpPolicy", + "HashtagPolicy", + "InlineQuotePolicy", + "NormalizeMarkup", + "DirectMessageDisabledPolicy" + ], mrf_hashtag: %{ federated_timeline_removal: [], reject: [], @@ -118,7 +124,13 @@ test "it works as expected with mock policy" do clear_config([:mrf, :policies], [MRFModuleMock]) expected = %{ - mrf_policies: ["MRFModuleMock", "HashtagPolicy", "InlineQuotePolicy", "NormalizeMarkup"], + mrf_policies: [ + "MRFModuleMock", + "HashtagPolicy", + "InlineQuotePolicy", + "NormalizeMarkup", + "DirectMessageDisabledPolicy" + ], mrf_module_mock: "some config data", mrf_hashtag: %{ federated_timeline_removal: [], diff --git a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs index 002042802..9faee7aa3 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs @@ -316,7 +316,7 @@ test "it strips internal reactions" do test "it correctly processes messages with non-array to field" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() |> Map.put("to", "https://www.w3.org/ns/activitystreams#Public") |> put_in(["object", "to"], "https://www.w3.org/ns/activitystreams#Public") @@ -333,7 +333,7 @@ test "it correctly processes messages with non-array to field" do test "it correctly processes messages with non-array cc field" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() |> Map.put("cc", "http://mastodon.example.org/users/admin/followers") |> put_in(["object", "cc"], "http://mastodon.example.org/users/admin/followers") @@ -346,7 +346,7 @@ test "it correctly processes messages with non-array cc field" do test "it correctly processes messages with weirdness in address fields" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() |> Map.put("cc", ["http://mastodon.example.org/users/admin/followers", ["¿"]]) |> put_in(["object", "cc"], ["http://mastodon.example.org/users/admin/followers", ["¿"]]) @@ -412,7 +412,7 @@ test "does NOT schedule background fetching of `replies` beyond max thread depth activity = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() |> Kernel.put_in(["object", "replies"], replies) %{activity: activity} diff --git a/test/pleroma/web/mastodon_api/update_credentials_test.exs b/test/pleroma/web/mastodon_api/update_credentials_test.exs index 925ea25aa..70566f5d0 100644 --- a/test/pleroma/web/mastodon_api/update_credentials_test.exs +++ b/test/pleroma/web/mastodon_api/update_credentials_test.exs @@ -735,7 +735,9 @@ test "actor_type field has a higher priority than bot", %{conn: conn} do test "changing to :everybody", %{conn: conn} do account = conn - |> patch("/api/v1/accounts/update_credentials", %{accepts_direct_messages_from: "everybody"}) + |> patch("/api/v1/accounts/update_credentials", %{ + accepts_direct_messages_from: "everybody" + }) |> json_response_and_validate_schema(200) assert account["accepts_direct_messages_from"] @@ -757,17 +759,23 @@ test "changing to :nobody", %{conn: conn} do test "changing to :people_i_follow", %{conn: conn} do account = conn - |> patch("/api/v1/accounts/update_credentials", %{accepts_direct_messages_from: "people_i_follow"}) + |> patch("/api/v1/accounts/update_credentials", %{ + accepts_direct_messages_from: "people_i_follow" + }) |> json_response_and_validate_schema(200) assert account["accepts_direct_messages_from"] assert account["accepts_direct_messages_from"] == "people_i_follow" - assert Pleroma.User.get_by_ap_id(account["url"]).accepts_direct_messages_from == :people_i_follow + + assert Pleroma.User.get_by_ap_id(account["url"]).accepts_direct_messages_from == + :people_i_follow end test "changing to an unsupported value", %{conn: conn} do conn - |> patch("/api/v1/accounts/update_credentials", %{accepts_direct_messages_from: "unsupported"}) + |> patch("/api/v1/accounts/update_credentials", %{ + accepts_direct_messages_from: "unsupported" + }) |> json_response(400) end end From 8c208f751d619f6015378dff34933e036f05ee9f Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 23 May 2023 13:46:25 +0100 Subject: [PATCH 094/178] Fix filtering out incorrect addresses --- .../mrf/direct_message_disabled_policy.ex | 23 +++++++++++++------ .../direct_message_disabled_policy_test.exs | 16 ++++++++++--- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex b/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex index ec6fa70e2..7a834f6ae 100644 --- a/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/direct_message_disabled_policy.ex @@ -2,7 +2,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.DirectMessageDisabledPolicy do @behaviour Pleroma.Web.ActivityPub.MRF.Policy alias Pleroma.User - alias Pleroma.Web.ActivityPub.Visibility + require Pleroma.Constants @moduledoc """ Removes entries from the "To" field from direct messages if the user has requested to not @@ -13,15 +13,19 @@ defmodule Pleroma.Web.ActivityPub.MRF.DirectMessageDisabledPolicy do def filter( %{ "type" => "Create", - "actor" => actor + "actor" => actor, + "object" => %{ + "type" => "Note" + } } = activity ) do - with true <- Visibility.is_direct?(%{data: activity}), - recipients <- Map.get(activity, "to"), + with recipients <- Map.get(activity, "to", []), + cc <- Map.get(activity, "cc", []), + true <- is_direct?(recipients, cc), sender <- User.get_cached_by_ap_id(actor) do new_to = Enum.filter(recipients, fn recv -> - should_filter?(sender, recv) + should_include?(sender, recv) end) {:ok, @@ -40,11 +44,11 @@ def filter(object), do: {:ok, object} @impl true def describe, do: {:ok, %{}} - defp should_filter?(sender, receiver_ap_id) do + defp should_include?(sender, receiver_ap_id) do with %User{local: true} = receiver <- User.get_cached_by_ap_id(receiver_ap_id) do User.accepts_direct_messages?(receiver, sender) else - _ -> false + _ -> true end end @@ -53,4 +57,9 @@ defp maybe_replace_object_to(%{"object" => %{"to" => _}} = activity, to) do end defp maybe_replace_object_to(other, _), do: other + + defp is_direct?(to, cc) do + !(Enum.member?(to, Pleroma.Constants.as_public()) || + Enum.member?(cc, Pleroma.Constants.as_public())) + end end diff --git a/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs b/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs index 072fe0576..02ae24a4d 100644 --- a/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs +++ b/test/pleroma/web/activity_pub/mrf/direct_message_disabled_policy_test.exs @@ -16,10 +16,15 @@ test "when the user denies the direct message" do "actor" => sender.ap_id, "to" => [recipient.ap_id], "cc" => [], - "type" => "Create" + "type" => "Create", + "object" => %{ + "type" => "Note", + "to" => [recipient.ap_id] + } } - assert {:ok, %{"to" => []}} = DirectMessageDisabledPolicy.filter(message) + assert {:ok, %{"to" => [], "object" => %{"to" => []}}} = + DirectMessageDisabledPolicy.filter(message) end test "when the user does not deny the direct message" do @@ -32,11 +37,16 @@ test "when the user does not deny the direct message" do "actor" => sender.ap_id, "to" => [recipient.ap_id], "cc" => [], - "type" => "Create" + "type" => "Create", + "object" => %{ + "type" => "Note", + "to" => [recipient.ap_id] + } } assert {:ok, message} = DirectMessageDisabledPolicy.filter(message) assert message["to"] == [recipient.ap_id] + assert message["object"]["to"] == [recipient.ap_id] end end end From 2fc26609f6a413adec812c16f31c7bbc2ec21dbd Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 23 May 2023 13:53:54 +0100 Subject: [PATCH 095/178] ensure we depend on poison --- mix.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/mix.exs b/mix.exs index 2f318fea0..f81a1a8a9 100644 --- a/mix.exs +++ b/mix.exs @@ -190,6 +190,7 @@ defp deps do {:mfm_parser, git: "https://akkoma.dev/AkkomaGang/mfm-parser.git", ref: "912fba81152d4d572e457fd5427f9875b2bc3dbe"}, + {:poison, "~> 5.0"}, ## dev & test {:ex_doc, "~> 0.22", only: :dev, runtime: false}, From 9e9cf58fdfb99e0d2e6112d824cc56daef9f8cd8 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 23 May 2023 13:54:22 +0100 Subject: [PATCH 096/178] or not --- mix.exs | 1 - 1 file changed, 1 deletion(-) diff --git a/mix.exs b/mix.exs index f81a1a8a9..2f318fea0 100644 --- a/mix.exs +++ b/mix.exs @@ -190,7 +190,6 @@ defp deps do {:mfm_parser, git: "https://akkoma.dev/AkkomaGang/mfm-parser.git", ref: "912fba81152d4d572e457fd5427f9875b2bc3dbe"}, - {:poison, "~> 5.0"}, ## dev & test {:ex_doc, "~> 0.22", only: :dev, runtime: false}, From 82ca7a64705daf780e03d329b73fed4fed16af06 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 23 May 2023 14:10:01 +0100 Subject: [PATCH 097/178] bump version --- CHANGELOG.md | 2 +- mix.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 207c99d67..f6dd45e17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## Unreleased +## 2023.05 ## Added - Custom options for users to accept/reject private messages diff --git a/mix.exs b/mix.exs index 2f318fea0..11fc15639 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.8.0"), + version: version("3.9.0"), elixir: "~> 1.14", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), From 9d83a1e23f3fde933ec990736fd77a8adb2e4803 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 26 May 2023 11:41:22 +0100 Subject: [PATCH 098/178] Add csp --- lib/pleroma/reverse_proxy.ex | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/pleroma/reverse_proxy.ex b/lib/pleroma/reverse_proxy.ex index 91cf1bba3..b44f0b90a 100644 --- a/lib/pleroma/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy.ex @@ -251,6 +251,7 @@ defp build_resp_headers(headers, opts) do |> Enum.filter(fn {k, _} -> k in @keep_resp_headers end) |> build_resp_cache_headers(opts) |> build_resp_content_disposition_header(opts) + |> build_csp_headers() |> Keyword.merge(Keyword.get(opts, :resp_headers, [])) end @@ -316,6 +317,10 @@ defp build_resp_content_disposition_header(headers, opts) do end end + defp build_csp_headers(headers) do + List.keystore(headers, "content-security-policy", 0, {"content-security-policy", "sandbox"}) + end + defp header_length_constraint(headers, limit) when is_integer(limit) and limit > 0 do with {_, size} <- List.keyfind(headers, "content-length", 0), {size, _} <- Integer.parse(size), From 7fb9960ccddfc078be28c1b2716eff07a90fa7b3 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 26 May 2023 11:46:18 +0100 Subject: [PATCH 099/178] Add CSP to mediaproxy links --- CHANGELOG.md | 3 +++ lib/pleroma/web/plugs/uploaded_media.ex | 2 +- mix.exs | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6dd45e17..97c73a267 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Support for `streams` public key URIs - Bookmarks are cleaned up on DB prune now +## Security +- Fixed mediaproxy being a bit of a silly billy + ## 2023.04 ## Added diff --git a/lib/pleroma/web/plugs/uploaded_media.ex b/lib/pleroma/web/plugs/uploaded_media.ex index 72f20e8de..cccbfe350 100644 --- a/lib/pleroma/web/plugs/uploaded_media.ex +++ b/lib/pleroma/web/plugs/uploaded_media.ex @@ -42,7 +42,7 @@ def call(%{request_path: <<"/", @path, "/", file::binary>>} = conn, opts) do conn -> conn end - |> merge_resp_headers([{"content-security-policy", "sandbox"}]) + |> merge_resp_headers([{"content-security-policy", "script-src none"}]) config = Pleroma.Config.get(Pleroma.Upload) diff --git a/mix.exs b/mix.exs index 11fc15639..b74f568c8 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.9.0"), + version: version("3.9.1"), elixir: "~> 1.14", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), From a388d2503e1563bc2441f859a254f0d7e868d095 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 26 May 2023 12:06:41 +0100 Subject: [PATCH 100/178] revert uploaded-media --- lib/pleroma/web/plugs/uploaded_media.ex | 2 +- mix.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/plugs/uploaded_media.ex b/lib/pleroma/web/plugs/uploaded_media.ex index cccbfe350..72f20e8de 100644 --- a/lib/pleroma/web/plugs/uploaded_media.ex +++ b/lib/pleroma/web/plugs/uploaded_media.ex @@ -42,7 +42,7 @@ def call(%{request_path: <<"/", @path, "/", file::binary>>} = conn, opts) do conn -> conn end - |> merge_resp_headers([{"content-security-policy", "script-src none"}]) + |> merge_resp_headers([{"content-security-policy", "sandbox"}]) config = Pleroma.Config.get(Pleroma.Upload) diff --git a/mix.exs b/mix.exs index b74f568c8..5c97c4e8e 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.9.1"), + version: version("3.9.2"), elixir: "~> 1.14", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), From 70b0f93865cbfb91fda0dd3db097b4574c4db767 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 26 May 2023 20:45:57 +0100 Subject: [PATCH 101/178] Apply oembed patch --- lib/pleroma/web/rich_media/parsers/o_embed.ex | 4 ++-- test/pleroma/web/rich_media/parser_test.exs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/rich_media/parsers/o_embed.ex b/lib/pleroma/web/rich_media/parsers/o_embed.ex index 09eabec56..695740d2e 100644 --- a/lib/pleroma/web/rich_media/parsers/o_embed.ex +++ b/lib/pleroma/web/rich_media/parsers/o_embed.ex @@ -6,8 +6,8 @@ defmodule Pleroma.Web.RichMedia.Parsers.OEmbed do def parse(html, _data) do with elements = [_ | _] <- get_discovery_data(html), oembed_url when is_binary(oembed_url) <- get_oembed_url(elements), - {:ok, oembed_data} <- get_oembed_data(oembed_url) do - oembed_data + {:ok, oembed_data = %{"html" => html}} <- get_oembed_data(oembed_url) do + %{oembed_data | "html" => Pleroma.HTML.filter_tags(html)} else _e -> %{} end diff --git a/test/pleroma/web/rich_media/parser_test.exs b/test/pleroma/web/rich_media/parser_test.exs index b6444ac82..5479bc15d 100644 --- a/test/pleroma/web/rich_media/parser_test.exs +++ b/test/pleroma/web/rich_media/parser_test.exs @@ -129,7 +129,7 @@ test "parses twitter card" do }} end - test "parses OEmbed" do + test "parses OEmbed and filters HTML tags" do assert Parser.parse("http://example.com/oembed") == {:ok, %{ @@ -139,7 +139,7 @@ test "parses OEmbed" do "flickr_type" => "photo", "height" => "768", "html" => - "
\"Bacon", + "\"Bacon", "license" => "All Rights Reserved", "license_id" => 0, "provider_name" => "Flickr", From 39b3d92cd8d37424254bbd40e25e3e1d98282f28 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 26 May 2023 20:46:38 +0100 Subject: [PATCH 102/178] Bump version --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 5c97c4e8e..6ba361e48 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.9.2"), + version: version("3.9.3"), elixir: "~> 1.14", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix] ++ Mix.compilers(), From b3fc098b83bb4826c8814fa89f7b18d24d62b4cf Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Fri, 26 May 2023 22:26:14 -0400 Subject: [PATCH 103/178] docs: Update Pleroma references to Akkoma in optional packages guide This apparently slipped past though all of the doc updates from a while back. --- .../installation/optional/media_graphics_packages.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/installation/optional/media_graphics_packages.md b/docs/docs/installation/optional/media_graphics_packages.md index cb3d71188..94552ec4e 100644 --- a/docs/docs/installation/optional/media_graphics_packages.md +++ b/docs/docs/installation/optional/media_graphics_packages.md @@ -1,19 +1,19 @@ # Optional software packages needed for specific functionality -For specific Pleroma functionality (which is disabled by default) some or all of the below packages are required: +For specific Akkoma functionality (which is disabled by default) some or all of the below packages are required: * `ImageMagic` * `ffmpeg` * `exiftool` Please refer to documentation in `docs/installation` on how to install them on specific OS. -Note: the packages are not required with the current default settings of Pleroma. +Note: the packages are not required with the current default settings of Akkoma. ## `ImageMagick` `ImageMagick` is a set of tools to create, edit, compose, or convert bitmap images. -It is required for the following Pleroma features: +It is required for the following Akkoma features: * `Pleroma.Upload.Filters.Mogrify`, `Pleroma.Upload.Filters.Mogrifun` upload filters (related config: `Plaroma.Upload/filters` in `config/config.exs`) * Media preview proxy for still images (related config: `media_preview_proxy/enabled` in `config/config.exs`) @@ -21,12 +21,12 @@ It is required for the following Pleroma features: `ffmpeg` is software to record, convert and stream audio and video. -It is required for the following Pleroma features: +It is required for the following Akkoma features: * Media preview proxy for videos (related config: `media_preview_proxy/enabled` in `config/config.exs`) ## `exiftool` `exiftool` is media files metadata reader/writer. -It is required for the following Pleroma features: +It is required for the following Akkoma features: * `Pleroma.Upload.Filters.Exiftool` upload filter (related config: `Plaroma.Upload/filters` in `config/config.exs`) From f0f0c76805555da84994c79593b8c5ead228dfce Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Fri, 26 May 2023 22:34:23 -0400 Subject: [PATCH 104/178] docs: Update Pleroma-FE references to Akkoma-FE The frontend got renamed a while back, so the docs should be updated to reflect that. --- docs/docs/administration/CLI_tasks/frontend.md | 2 +- docs/docs/administration/updating.md | 2 +- docs/docs/configuration/cheatsheet.md | 4 ++-- docs/docs/index.md | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/docs/administration/CLI_tasks/frontend.md b/docs/docs/administration/CLI_tasks/frontend.md index 382ac268e..5d0c7147a 100644 --- a/docs/docs/administration/CLI_tasks/frontend.md +++ b/docs/docs/administration/CLI_tasks/frontend.md @@ -42,7 +42,7 @@ For a frontend configured under the `available` key, it's enough to install it b This will download the latest build for the pre-configured `ref` and install it. It can then be configured as the one of the served frontends in the config file (see `primary` or `admin`). -You can override any of the details. To install a Pleroma-FE build from a different URL, you could do this: +You can override any of the details. To install an Akkoma-FE build from a different URL, you could do this: === "OTP" diff --git a/docs/docs/administration/updating.md b/docs/docs/administration/updating.md index 6cea56e5c..94bddfb6c 100644 --- a/docs/docs/administration/updating.md +++ b/docs/docs/administration/updating.md @@ -62,6 +62,6 @@ mix ecto.migrate # Start akkoma (replace with your system service manager's equivalent if different) sudo systemctl start akkoma -# Update Pleroma-FE frontend to latest stable. For other Frontends see Frontend Configuration doc for more information. +# Update Akkoma-FE frontend to latest stable. For other Frontends see Frontend Configuration doc for more information. mix pleroma.frontend install pleroma-fe --ref stable ``` diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index 1c4d9ec5d..3a8bda006 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -246,11 +246,11 @@ Notes: ### :frontend_configurations -This can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for `pleroma_fe` and `masto_fe` are configured. You can find the documentation for `pleroma_fe` configuration into [Pleroma-FE configuration and customization for instance administrators](https://docs-fe.akkoma.dev/stable/CONFIGURATION/#options). +This can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for `pleroma_fe` and `masto_fe` are configured. You can find the documentation for `pleroma_fe` configuration into [Akkoma-FE configuration and customization for instance administrators](https://docs-fe.akkoma.dev/stable/CONFIGURATION/#options). Frontends can access these settings at `/api/v1/pleroma/frontend_configurations` -To add your own configuration for Pleroma-FE, use it like this: +To add your own configuration for Akkoma-FE, use it like this: ```elixir config :pleroma, :frontend_configurations, diff --git a/docs/docs/index.md b/docs/docs/index.md index 241f790dc..8608f8196 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -3,7 +3,7 @@ # Introduction to Akkoma ## What is Akkoma? Akkoma is a federated social networking platform, compatible with Mastodon and other ActivityPub implementations. It is free software licensed under the AGPLv3. -It actually consists of two components: a backend, named simply Akkoma, and a user-facing frontend, named Pleroma-FE. It also includes the Mastodon frontend, if that's your thing. +It actually consists of two components: a backend, named simply Akkoma, and a user-facing frontend, named Akkoma-FE. It also includes the Mastodon frontend, if that's your thing. It's part of what we call the fediverse, a federated network of instances which speak common protocols and can communicate with each other. One account on an instance is enough to talk to the entire fediverse! @@ -31,11 +31,11 @@ Installation instructions can be found in the installation section of these docs ## I got an account, now what? Great! Now you can explore the fediverse! Open the login page for your Akkoma instance (e.g. ) and login with your username and password. (If you don't have an account yet, click on Register) -### Pleroma-FE -The default front-end used by Akkoma is Pleroma-FE. You can find more information on what it is and how to use it in the [Introduction to Pleroma-FE](https://docs-fe.akkoma.dev/stable/). +### Akkoma-FE +The default front-end used by Akkoma is Akkoma-FE. You can find more information on what it is and how to use it in the [Introduction to Akkoma-FE](https://docs-fe.akkoma.dev/stable/). ### Mastodon interface -If the Pleroma-FE interface isn't your thing, or you're just trying something new but you want to keep using the familiar Mastodon interface, we got that too! +If the Akkoma-FE interface isn't your thing, or you're just trying something new but you want to keep using the familiar Mastodon interface, we got that too! Just add a "/web" after your instance url (e.g. ) and you'll end on the Mastodon web interface, but with a Akkoma backend! MAGIC! The Mastodon interface is from the Glitch-soc fork. For more information on the Mastodon interface you can check the [Mastodon](https://docs.joinmastodon.org/) and [Glitch-soc](https://glitch-soc.github.io/docs/) documentation. From 0e5f55deea33348a26c7ca04c3eb2b6257a417ba Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Fri, 26 May 2023 22:54:12 -0400 Subject: [PATCH 105/178] more references being updated --- docs/docs/configuration/howto_theming_your_instance.md | 4 ++-- docs/theme/partials/source.html | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/docs/configuration/howto_theming_your_instance.md b/docs/docs/configuration/howto_theming_your_instance.md index c226d054b..093c12763 100644 --- a/docs/docs/configuration/howto_theming_your_instance.md +++ b/docs/docs/configuration/howto_theming_your_instance.md @@ -6,7 +6,7 @@ To add a custom theme to your instance, you'll first need to get a custom theme, ### Create your own theme -* You can create your own theme using the Pleroma FE by going to settings (gear on the top right) and choose the Theme tab. Here you have the options to create a personal theme. +* You can create your own theme using the Akkoma FE by going to settings (gear on the top right) and choose the Theme tab. Here you have the options to create a personal theme. * To download your theme, you can do Save preset * If you want to upload a theme to customise it further, you can upload it using Load preset @@ -70,4 +70,4 @@ config :pleroma, :frontend_configurations, } ``` -If you added it in the back-end configuration file, you'll need to restart your instance for the changes to take effect. If you don't see the changes, it's probably because the browser has cached the previous theme. In that case you'll want to clear browser caches. Alternatively you can use a private/incognito window just to see the changes. \ No newline at end of file +If you added it in the back-end configuration file, you'll need to restart your instance for the changes to take effect. If you don't see the changes, it's probably because the browser has cached the previous theme. In that case you'll want to clear browser caches. Alternatively you can use a private/incognito window just to see the changes. diff --git a/docs/theme/partials/source.html b/docs/theme/partials/source.html index 3ed0fff24..3b10223b1 100644 --- a/docs/theme/partials/source.html +++ b/docs/theme/partials/source.html @@ -38,11 +38,11 @@ {% endif %} {% if page and page.url.startswith('backend') %} - {% set repo_url = "https://git.pleroma.social/pleroma/pleroma" %} - {% set repo_name = "pleroma/pleroma" %} + {% set repo_url = "https://akkoma.dev/AkkomaGang/akkoma" %} + {% set repo_name = "AkkomaGang/akkoma" %} {% elif page and page.url.startswith('frontend') %} - {% set repo_url = "https://git.pleroma.social/pleroma/pleroma-fe" %} - {% set repo_name = "pleroma/pleroma-fe" %} + {% set repo_url = "https://akkoma.dev/AkkomaGang/akkoma-fe" %} + {% set repo_name = "AkkomaGang/akkoma-fe" %} {% else %} {% set repo_url = config.repo_url %} {% set repo_name = config.repo_name %} From 1b560d547a88474559e099c28321a83348f322f6 Mon Sep 17 00:00:00 2001 From: XxXCertifiedForkliftDriverXxX Date: Sun, 28 May 2023 21:42:27 +0000 Subject: [PATCH 106/178] Stop exposing if a user blocks you over the API. --- .../api_spec/operations/account_operation.ex | 4 ++-- .../api_spec/schemas/account_relationship.ex | 5 ++++- .../web/mastodon_api/views/account_view.ex | 9 +-------- .../mastodon_api/views/account_view_test.exs | 17 ++++++++++++++++- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 8a6851d52..00a591298 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -767,7 +767,7 @@ defp array_of_relationships do "showing_reblogs" => true, "followed_by" => true, "blocking" => false, - "blocked_by" => true, + "blocked_by" => false, "muting" => false, "muting_notifications" => false, "note" => "", @@ -783,7 +783,7 @@ defp array_of_relationships do "showing_reblogs" => true, "followed_by" => true, "blocking" => false, - "blocked_by" => true, + "blocked_by" => false, "muting" => true, "muting_notifications" => false, "note" => "", diff --git a/lib/pleroma/web/api_spec/schemas/account_relationship.ex b/lib/pleroma/web/api_spec/schemas/account_relationship.ex index 5d9e3b56e..58751b261 100644 --- a/lib/pleroma/web/api_spec/schemas/account_relationship.ex +++ b/lib/pleroma/web/api_spec/schemas/account_relationship.ex @@ -13,7 +13,10 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do description: "Relationship between current account and requested account", type: :object, properties: %{ - blocked_by: %Schema{type: :boolean}, + blocked_by: %Schema{ + type: :boolean, + description: "Represents being blocked by this user. Always false." + }, blocking: %Schema{type: :boolean}, domain_blocking: %Schema{type: :boolean}, endorsed: %Schema{type: :boolean}, diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index e0fa3b033..e3f91a4e3 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -124,14 +124,7 @@ def render( target, &User.blocks_user?(&1, &2) ), - blocked_by: - UserRelationship.exists?( - user_relationships, - :block, - target, - reading_user, - &User.blocks_user?(&1, &2) - ), + blocked_by: false, muting: UserRelationship.exists?( user_relationships, diff --git a/test/pleroma/web/mastodon_api/views/account_view_test.exs b/test/pleroma/web/mastodon_api/views/account_view_test.exs index 6ef89f799..a4f5f1f63 100644 --- a/test/pleroma/web/mastodon_api/views/account_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/account_view_test.exs @@ -397,7 +397,22 @@ test "represent a relationship for the blocking and blocked user" do expected = Map.merge( @blank_response, - %{following: false, blocking: true, blocked_by: true, id: to_string(other_user.id)} + %{following: false, blocking: true, blocked_by: false, id: to_string(other_user.id)} + ) + + test_relationship_rendering(user, other_user, expected) + end + + test "blocks are not visible to the blocked user" do + user = insert(:user) + other_user = insert(:user) + + {:ok, _user_relationship} = User.block(other_user, user) + + expected = + Map.merge( + @blank_response, + %{following: false, blocking: false, blocked_by: false, id: to_string(other_user.id)} ) test_relationship_rendering(user, other_user, expected) From 40627a94d4ff1f4a35b2edd228ff5de9a6248ff4 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Mon, 29 May 2023 11:18:42 -0400 Subject: [PATCH 107/178] Add config for media subdomain for Caddy A recent group of vulnerabilities have been found in Pleroma (and inherited by Akkoma) that involve media files either uploaded by local users or proxied from remote instances (if media proxy is enabled). It is recommended that media files are served on a separate subdomain in order to mitigate this class of vulnerabilities. Based on https://meta.akkoma.dev/t/another-vector-for-the-injection-vulnerability-found/483/2 --- installation/caddy/Caddyfile | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/installation/caddy/Caddyfile b/installation/caddy/Caddyfile index 5cc75a1fc..d50848207 100644 --- a/installation/caddy/Caddyfile +++ b/installation/caddy/Caddyfile @@ -4,6 +4,9 @@ # 1. Replace 'example.tld' with your instance's domain wherever it appears. # 2. Copy this section into your Caddyfile and restart Caddy. +# If you are able to, it's highly recommended to have your media served via a separate subdomain for improved security. +# Uncomment the relevant sectons here and modify the base_url setting for Pleroma.Upload and :media_proxy accordingly. + example.tld { log { output file /var/log/caddy/akkoma.log @@ -14,4 +17,21 @@ example.tld { # this is explicitly IPv4 since Pleroma.Web.Endpoint binds on IPv4 only # and `localhost.` resolves to [::0] on some systems: see issue #930 reverse_proxy 127.0.0.1:4000 + + # Uncomment if using a separate media subdomain + #@mediaproxy path /media/* /proxy/* + #handle @mediaproxy { + # redir https://media.example.tld{uri} permanent + #} } + +# Uncomment if using a separate media subdomain +#media.example.tld { +# @mediaproxy path /media/* /proxy/* +# reverse_proxy @mediaproxy 127.0.0.1:4000 { +# transport http { +# response_header_timeout 10s +# read_timeout 15s +# } +# } +#} From d956dc2f0961042a3834ee7e52f4cebecacb59dd Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Tue, 30 May 2023 21:17:26 -0400 Subject: [PATCH 108/178] Add asdf install guide for debian/ubuntu Closes #557 --- docs/docs/installation/debian_based_en.md | 74 +++++++++++++++++------ installation/akkoma.service | 4 ++ 2 files changed, 60 insertions(+), 18 deletions(-) diff --git a/docs/docs/installation/debian_based_en.md b/docs/docs/installation/debian_based_en.md index 265658fef..cb10bb66e 100644 --- a/docs/docs/installation/debian_based_en.md +++ b/docs/docs/installation/debian_based_en.md @@ -23,23 +23,7 @@ sudo apt full-upgrade sudo apt install git build-essential postgresql postgresql-contrib cmake libmagic-dev ``` -### Install Elixir and Erlang - -* Install Elixir and Erlang (you might need to use backports or [asdf](https://github.com/asdf-vm/asdf) on old systems): - -```shell -sudo apt update -sudo apt install elixir erlang-dev erlang-nox -``` - - -### Optional packages: [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md) - -```shell -sudo apt install imagemagick ffmpeg libimage-exiftool-perl -``` - -### Install AkkomaBE +### Create the akkoma user * Add a new system user for the Akkoma service: @@ -49,7 +33,61 @@ sudo useradd -r -s /bin/false -m -d /var/lib/akkoma -U akkoma **Note**: To execute a single command as the Akkoma system user, use `sudo -Hu akkoma command`. You can also switch to a shell by using `sudo -Hu akkoma $SHELL`. If you don’t have and want `sudo` on your system, you can use `su` as root user (UID 0) for a single command by using `su -l akkoma -s $SHELL -c 'command'` and `su -l akkoma -s $SHELL` for starting a shell. -* Git clone the AkkomaBE repository from stable-branch and make the Akkoma user the owner of the directory: +### Install Elixir and Erlang + +If your distribution packages Elixir 1.14+, you can install it directly from the distro repositories and skip to the next section of the guide: + +```shell +sudo apt install elixir erlang-dev erlang-nox +``` + +Otherwise use [asdf](https://github.com/asdf-vm/asdf) to install the latest versions of Elixir and Erlang. + +First, install some dependencies needed to build Elixir and Erlang: +```shell +sudo apt install curl unzip build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk +``` + +Then login to the `akkoma` user and install asdf: +```shell +git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.3 +``` + +Add the following lines to `~/.bashrc`: +```shell +. "$HOME/.asdf/asdf.sh" +# asdf completions +. "$HOME/.asdf/completions/asdf.bash" +``` + +Next install Erlang: +```shell +asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git +asdf install erlang 25.3.2.1 +asdf global erlang 25.3.2.1 +``` + +Now install Elixir: +```shell +asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git +asdf install elixir 1.14.5-otp-25 +asdf global elxir 1.14.5-otp-25 +``` + +Confirm that Elixir is installed correctly by checking the version: +```shell +elixir --version +``` + +### Optional packages: [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md) + +```shell +sudo apt install imagemagick ffmpeg libimage-exiftool-perl +``` + +### Install AkkomaBE + +* Log into the `akkoma` user and clone the AkkomaBE repository from the stable branch and make the Akkoma user the owner of the directory: ```shell sudo mkdir -p /opt/akkoma diff --git a/installation/akkoma.service b/installation/akkoma.service index 012e9185e..2c381ad0d 100644 --- a/installation/akkoma.service +++ b/installation/akkoma.service @@ -8,6 +8,8 @@ Restart=on-failure ; Uncomment this if you're on Arch Linux ; Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl" +; Uncomment if using asdf to manage Elixir and Erlang +; Environment="PATH=/var/lib/akkoma/.asdf/shims:/var/lib/akkoma/.asdf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ; Name of the user that runs the Akkoma service. User=akkoma @@ -24,6 +26,8 @@ Environment="HOME=/var/lib/akkoma" WorkingDirectory=/opt/akkoma ; Path to the Mix binary. ExecStart=/usr/bin/mix phx.server +; If using asdf comment the above line and uncomment the one below instead +; ExecStart=/var/lib/akkoma/.asdf/shims/mix phx.server ; Some security directives. ; Use private /tmp and /var/tmp folders inside a new file system namespace, which are discarded after the process stops. From 48a0145736d6e42589098e2d1840b587cabdf702 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Tue, 30 May 2023 21:21:44 -0400 Subject: [PATCH 109/178] add command to restart shell --- docs/docs/installation/debian_based_en.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/docs/installation/debian_based_en.md b/docs/docs/installation/debian_based_en.md index cb10bb66e..0a48a605d 100644 --- a/docs/docs/installation/debian_based_en.md +++ b/docs/docs/installation/debian_based_en.md @@ -60,6 +60,11 @@ Add the following lines to `~/.bashrc`: . "$HOME/.asdf/completions/asdf.bash" ``` +Restart the shell: +```shell +exec $SHELL +``` + Next install Erlang: ```shell asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git From f68b047bf7bc872f29b3a189554edcee7bcf6325 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Wed, 31 May 2023 08:46:05 -0400 Subject: [PATCH 110/178] remove java and gui dependencies --- docs/docs/installation/debian_based_en.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/docs/installation/debian_based_en.md b/docs/docs/installation/debian_based_en.md index 0a48a605d..b87e89a46 100644 --- a/docs/docs/installation/debian_based_en.md +++ b/docs/docs/installation/debian_based_en.md @@ -45,7 +45,7 @@ Otherwise use [asdf](https://github.com/asdf-vm/asdf) to install the latest vers First, install some dependencies needed to build Elixir and Erlang: ```shell -sudo apt install curl unzip build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk +sudo apt install curl unzip build-essential autoconf m4 libncurses5-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev ``` Then login to the `akkoma` user and install asdf: @@ -68,6 +68,7 @@ exec $SHELL Next install Erlang: ```shell asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git +export KERL_CONFIGURE_OPTIONS="--disable-debug --without-javac" asdf install erlang 25.3.2.1 asdf global erlang 25.3.2.1 ``` From 2482d967823ded541a4a8f1f3a949fd41299c13d Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Wed, 31 May 2023 08:59:03 -0400 Subject: [PATCH 111/178] remove one more java dep --- docs/docs/installation/debian_based_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/installation/debian_based_en.md b/docs/docs/installation/debian_based_en.md index b87e89a46..f6f13b40c 100644 --- a/docs/docs/installation/debian_based_en.md +++ b/docs/docs/installation/debian_based_en.md @@ -45,7 +45,7 @@ Otherwise use [asdf](https://github.com/asdf-vm/asdf) to install the latest vers First, install some dependencies needed to build Elixir and Erlang: ```shell -sudo apt install curl unzip build-essential autoconf m4 libncurses5-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev +sudo apt install curl unzip build-essential autoconf m4 libncurses5-dev libssh-dev unixodbc-dev xsltproc libxml2-utils libncurses-dev ``` Then login to the `akkoma` user and install asdf: From 5ce38591e59e19ea013e07470f8eeb1d81792995 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Wed, 31 May 2023 09:03:25 -0400 Subject: [PATCH 112/178] fix typo --- docs/docs/installation/debian_based_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/installation/debian_based_en.md b/docs/docs/installation/debian_based_en.md index f6f13b40c..a198d4b5a 100644 --- a/docs/docs/installation/debian_based_en.md +++ b/docs/docs/installation/debian_based_en.md @@ -77,7 +77,7 @@ Now install Elixir: ```shell asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git asdf install elixir 1.14.5-otp-25 -asdf global elxir 1.14.5-otp-25 +asdf global elixir 1.14.5-otp-25 ``` Confirm that Elixir is installed correctly by checking the version: From 5fe41df8aaca3eeb90e98a155edf2d1a2a39f7b0 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Fri, 26 May 2023 17:06:51 -0400 Subject: [PATCH 113/178] docs: Add Kaiteki to list of clients --- docs/docs/clients.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/docs/clients.md b/docs/docs/clients.md index 139796471..1452b9505 100644 --- a/docs/docs/clients.md +++ b/docs/docs/clients.md @@ -2,6 +2,14 @@ Note: Additional clients may work, but these are known to work with Akkoma. Apps listed here might not support all of Akkoma's features. +## Multiplatform +### Kaiteki +- Homepage: +- Source Code: +- Contact: [@kaiteki@fedi.software](https://fedi.software/@Kaiteki) +- Platforms: Web, Windows, Linux, Android +- Features: MastoAPI, Supports multiple backends + ## Desktop ### Whalebird - Homepage: From 1ae89bddcdd899b6491ba9d491bb350e86021235 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 2 Jun 2020 14:04:34 +0000 Subject: [PATCH 114/178] Merge branch 'feature/embeddable-posts' into 'develop' Add embeddable posts Closes #1288 See merge request pleroma/pleroma!2319 --- priv/static/embed.css | 115 ++++++++++++++++++++++++++++++++++++++++++ priv/static/embed.js | 43 ++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 priv/static/embed.css create mode 100644 priv/static/embed.js diff --git a/priv/static/embed.css b/priv/static/embed.css new file mode 100644 index 000000000..cc79ee7ab --- /dev/null +++ b/priv/static/embed.css @@ -0,0 +1,115 @@ +body { + background-color: #282c37; + font-family: sans-serif; + color: white; + margin: 0; + padding: 1em; + padding-bottom: 0; +} + +.avatar { + cursor: pointer; +} + +.avatar img { + float: left; + border-radius: 4px; + margin-right: 4px; +} + +.activity-content { + padding-top: 1em; +} + +.attachment { + margin-top: 1em; +} + +.attachment img { + max-width: 100%; +} + +.date a { + text-decoration: none; +} + +.date a:hover { + text-decoration: underline; +} + +.date a, +.counts { + color: #666; + font-size: 0.9em; +} + +.counts dt, +.counts dd { + float: left; + margin-left: 1em; +} + +a { + color: white; +} + +.h-card { + min-height: 48px; + margin-bottom: 8px; +} + +.h-card a { + text-decoration: none; +} + +.h-card a:hover { + text-decoration: underline; +} + +.display-name { + padding-top: 4px; + display: block; + text-overflow: ellipsis; + overflow: hidden; + color: white; +} + +/* keep emoji from being hilariously huge */ +.display-name img { + max-height: 1em; +} + +.display-name .nickname { + padding-top: 4px; + display: block; +} + +.nickname:hover { + text-decoration: none; +} + +.pull-right { + float: right; +} + +.collapse { + margin: 0; + width: auto; +} + +a.button { + box-sizing: border-box; + display: inline-block; + color: white; + background-color: #419bdd; + border-radius: 4px; + border: none; + padding: 10px; + font-weight: 500; + font-size: 0.9em; +} + +a.button:hover { + text-decoration: none; + background-color: #61a6d9; +} diff --git a/priv/static/embed.js b/priv/static/embed.js new file mode 100644 index 000000000..f675f6417 --- /dev/null +++ b/priv/static/embed.js @@ -0,0 +1,43 @@ +(function () { + 'use strict' + + var ready = function (loaded) { + if (['interactive', 'complete'].indexOf(document.readyState) !== -1) { + loaded() + } else { + document.addEventListener('DOMContentLoaded', loaded) + } + } + + ready(function () { + var iframes = [] + + window.addEventListener('message', function (e) { + var data = e.data || {} + + if (data.type !== 'setHeightPleromaEmbed' || !iframes[data.id]) { + return + } + + iframes[data.id].height = data.height + }); + + [].forEach.call(document.querySelectorAll('iframe.pleroma-embed'), function (iframe) { + iframe.scrolling = 'no' + iframe.style.overflow = 'hidden' + + iframes.push(iframe) + + var id = iframes.length - 1 + + iframe.onload = function () { + iframe.contentWindow.postMessage({ + type: 'setHeightPleromaEmbed', + id: id + }, '*') + } + + iframe.onload() + }) + }) +})() From 593ddbd796fcecd1244e62188334ff5ecf3ab8ff Mon Sep 17 00:00:00 2001 From: Miki Hau Date: Wed, 31 May 2023 23:42:08 +0000 Subject: [PATCH 115/178] fix the /embed endpoint --- lib/pleroma/constants.ex | 2 +- lib/pleroma/web/templates/layout/embed.html.eex | 4 ++-- priv/static/{ => embed}/embed.css | 0 priv/static/{ => embed}/embed.js | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename priv/static/{ => embed}/embed.css (100%) rename priv/static/{ => embed}/embed.js (100%) diff --git a/lib/pleroma/constants.ex b/lib/pleroma/constants.ex index 234dde1c9..94608a99b 100644 --- a/lib/pleroma/constants.ex +++ b/lib/pleroma/constants.ex @@ -25,7 +25,7 @@ defmodule Pleroma.Constants do const(static_only_files, do: - ~w(index.html robots.txt static static-fe finmoji emoji packs sounds images instance sw.js sw-pleroma.js favicon.png schemas doc embed.js embed.css) + ~w(index.html robots.txt static static-fe finmoji emoji packs sounds images instance embed sw.js sw-pleroma.js favicon.png schemas doc) ) const(status_updatable_fields, diff --git a/lib/pleroma/web/templates/layout/embed.html.eex b/lib/pleroma/web/templates/layout/embed.html.eex index 8b905f070..49f2cdb5b 100644 --- a/lib/pleroma/web/templates/layout/embed.html.eex +++ b/lib/pleroma/web/templates/layout/embed.html.eex @@ -6,10 +6,10 @@ <%= Pleroma.Config.get([:instance, :name]) %> <%= Phoenix.HTML.raw(assigns[:meta] || "") %> - + - <%= render @view_module, @view_template, assigns %> + <%= render view_module(@conn), view_template(@conn), assigns %> diff --git a/priv/static/embed.css b/priv/static/embed/embed.css similarity index 100% rename from priv/static/embed.css rename to priv/static/embed/embed.css diff --git a/priv/static/embed.js b/priv/static/embed/embed.js similarity index 100% rename from priv/static/embed.js rename to priv/static/embed/embed.js From 3a13f91fff3815a19ab61266111bb0ff5669af6e Mon Sep 17 00:00:00 2001 From: ilja Date: Fri, 9 Jun 2023 22:02:26 +0200 Subject: [PATCH 116/178] Adapt some migrations so they can be rolled back This is useful for people who want to migrate back to Pleroma. It's also added in the docs, but also noted that this is barely tested and to be used at their own risk. --- docs/docs/installation/migrating_to_akkoma.md | 14 +++++++++++++- ...0211125110126_force_pinned_objects_to_exist.exs | 10 +++++++++- .../20220108213213_add_mastofe_settings.exs | 8 +++++++- .../20220302013920_add_language_to_users.exs | 8 +++++++- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/docs/docs/installation/migrating_to_akkoma.md b/docs/docs/installation/migrating_to_akkoma.md index 2df7bfad0..4a58e836e 100644 --- a/docs/docs/installation/migrating_to_akkoma.md +++ b/docs/docs/installation/migrating_to_akkoma.md @@ -117,4 +117,16 @@ To fix this, run: mix pleroma.config delete pleroma frontends ``` -which will remove the config from the database. Things should work now. \ No newline at end of file +which will remove the config from the database. Things should work now. + +## Migrating back to Pleroma + +Akkoma is a hard fork of Pleroma. As such, migrating back is not guaranteed to always work. But if you want to migrate back to Pleroma, you can always try. Just note that you may run into unexpected issues and you're basically on your own. The following are some tips that may help, but note that these are barely tested, so proceed at your own risk. + +First you will need to roll back the database migrations. The latest migration both Akkoma and Pleroma still have in common should be 20210416051708, so roll back to that. If you run from source, that should be + +```sh +MIX_ENV=prod mix ecto.rollback --to 20210416051708 +``` + +Then switch back to Pleroma for updates (similar to how was done to migrate to Akkoma), and remove the front-ends. The front-ends are installed in the `frontends` folder in the [static directory](../configuration/static_dir.md). Once you are back to Pleroma, you will need to run the database migrations again. See the Pleroma documentation for this. diff --git a/priv/repo/migrations/20211125110126_force_pinned_objects_to_exist.exs b/priv/repo/migrations/20211125110126_force_pinned_objects_to_exist.exs index 1fe9271f0..c2b136d43 100644 --- a/priv/repo/migrations/20211125110126_force_pinned_objects_to_exist.exs +++ b/priv/repo/migrations/20211125110126_force_pinned_objects_to_exist.exs @@ -1,11 +1,19 @@ defmodule Pleroma.Repo.Migrations.ForcePinnedObjectsToExist do use Ecto.Migration - def change do + def up do execute("UPDATE users SET pinned_objects = '{}' WHERE pinned_objects IS NULL") alter table("users") do modify(:pinned_objects, :map, null: false, default: %{}) end end + + def down do + alter table("users") do + modify(:pinned_objects, :map, null: true, default: nil) + end + + execute("UPDATE users SET pinned_objects = NULL WHERE pinned_objects = '{}'") + end end diff --git a/priv/repo/migrations/20220108213213_add_mastofe_settings.exs b/priv/repo/migrations/20220108213213_add_mastofe_settings.exs index 1046c2894..dc7777d53 100644 --- a/priv/repo/migrations/20220108213213_add_mastofe_settings.exs +++ b/priv/repo/migrations/20220108213213_add_mastofe_settings.exs @@ -1,9 +1,15 @@ defmodule Pleroma.Repo.Migrations.AddMastofeSettings do use Ecto.Migration - def change do + def up do alter table(:users) do add_if_not_exists(:mastofe_settings, :map) end end + + def down do + alter table(:users) do + remove_if_exists(:mastofe_settings, :map) + end + end end diff --git a/priv/repo/migrations/20220302013920_add_language_to_users.exs b/priv/repo/migrations/20220302013920_add_language_to_users.exs index 7a63c36aa..fc5008993 100644 --- a/priv/repo/migrations/20220302013920_add_language_to_users.exs +++ b/priv/repo/migrations/20220302013920_add_language_to_users.exs @@ -1,9 +1,15 @@ defmodule Pleroma.Repo.Migrations.AddLanguageToUsers do use Ecto.Migration - def change do + def up do alter table(:users) do add_if_not_exists(:language, :string) end end + + def down do + alter table(:users) do + remove_if_exists(:language, :string) + end + end end From 5e3ca133f29ffb9c0fc393e9d1e7fe938cd59b58 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Sun, 11 Jun 2023 08:46:56 -0400 Subject: [PATCH 117/178] reword to not mention specific elixir version --- docs/docs/installation/debian_based_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/installation/debian_based_en.md b/docs/docs/installation/debian_based_en.md index a198d4b5a..6bedf0384 100644 --- a/docs/docs/installation/debian_based_en.md +++ b/docs/docs/installation/debian_based_en.md @@ -35,7 +35,7 @@ sudo useradd -r -s /bin/false -m -d /var/lib/akkoma -U akkoma ### Install Elixir and Erlang -If your distribution packages Elixir 1.14+, you can install it directly from the distro repositories and skip to the next section of the guide: +If your distribution packages a recent enough version of Elixir, you can install it directly from the distro repositories and skip to the next section of the guide: ```shell sudo apt install elixir erlang-dev erlang-nox From 3227ebf1e1e46c888921d11e13d75137a50436f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9l=C3=A8ne?= Date: Wed, 10 Aug 2022 04:21:28 +0200 Subject: [PATCH 118/178] CommonFixes: more predictable context generation `context` fields for objects and activities can now be generated based on the object/activity `inReplyTo` field or its ActivityPub ID, as a fallback method in cases where `context` fields are missing for incoming activities and objects. --- .../object_validators/common_fixes.ex | 5 ++- .../mk.absturztau.be-93e7nm8wqg-activity.json | 1 + .../transmogrifier/note_handling_test.exs | 38 +++++++++++++++++++ test/support/http_request_mock.ex | 17 +++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg-activity.json diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex index 6fa2bbb99..be7df3fb0 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex @@ -22,7 +22,10 @@ def cast_and_filter_recipients(message, field, follower_collection, field_fallba end def fix_object_defaults(data) do - context = Utils.maybe_create_context(data["context"] || data["conversation"]) + context = + Utils.maybe_create_context( + data["context"] || data["conversation"] || data["inReplyTo"] || data["id"] + ) %User{follower_address: follower_collection} = User.get_cached_by_ap_id(data["attributedTo"]) diff --git a/test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg-activity.json b/test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg-activity.json new file mode 100644 index 000000000..b45ab78e4 --- /dev/null +++ b/test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg-activity.json @@ -0,0 +1 @@ +{"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"manuallyApprovesFollowers":"as:manuallyApprovesFollowers","sensitive":"as:sensitive","Hashtag":"as:Hashtag","quoteUrl":"as:quoteUrl","toot":"http://joinmastodon.org/ns#","Emoji":"toot:Emoji","featured":"toot:featured","discoverable":"toot:discoverable","schema":"http://schema.org#","PropertyValue":"schema:PropertyValue","value":"schema:value","misskey":"https://misskey-hub.net/ns#","_misskey_content":"misskey:_misskey_content","_misskey_quote":"misskey:_misskey_quote","_misskey_reaction":"misskey:_misskey_reaction","_misskey_votes":"misskey:_misskey_votes","_misskey_talk":"misskey:_misskey_talk","isCat":"misskey:isCat","vcard":"http://www.w3.org/2006/vcard/ns#"}],"id":"https://mk.absturztau.be/notes/93e7nm8wqg/activity","actor":"https://mk.absturztau.be/users/8ozbzjs3o8","type":"Create","published":"2022-08-01T11:06:49.568Z","object":{"id":"https://mk.absturztau.be/notes/93e7nm8wqg","type":"Note","attributedTo":"https://mk.absturztau.be/users/8ozbzjs3o8","summary":null,"content":"

meow

","_misskey_content":"meow","published":"2022-08-01T11:06:49.568Z","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mk.absturztau.be/users/8ozbzjs3o8/followers"],"inReplyTo":null,"attachment":[],"sensitive":false,"tag":[]},"to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://mk.absturztau.be/users/8ozbzjs3o8/followers"]} \ No newline at end of file diff --git a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs index 9faee7aa3..9ca12c747 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs @@ -783,4 +783,42 @@ test "quote fetching should stop after n levels", _ do } = Transmogrifier.fix_quote_url(note) end end + + test "the standalone note uses its own ID when context is missing" do + insert(:user, ap_id: "https://mk.absturztau.be/users/8ozbzjs3o8") + + activity = + "test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg-activity.json" + |> File.read!() + |> Jason.decode!() + + {:ok, %Activity{} = modified} = Transmogrifier.handle_incoming(activity) + object = Object.normalize(modified, fetch: false) + + assert object.data["context"] == object.data["id"] + assert modified.data["context"] == object.data["id"] + end + + test "the reply note uses its parent's ID when context is missing and reply is unreachable" do + insert(:user, ap_id: "https://mk.absturztau.be/users/8ozbzjs3o8") + + activity = + "test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg-activity.json" + |> File.read!() + |> Jason.decode!() + + object = + activity["object"] + |> Map.put("inReplyTo", "https://404.site/object/went-to-buy-milk") + + activity = + activity + |> Map.put("object", object) + + {:ok, %Activity{} = modified} = Transmogrifier.handle_incoming(activity) + object = Object.normalize(modified, fetch: false) + + assert object.data["context"] == object.data["inReplyTo"] + assert modified.data["context"] == object.data["inReplyTo"] + end end diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index ab44c489b..18fec3e4b 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -1085,6 +1085,14 @@ def get("http://404.site" <> _, _, _, _) do }} end + def get("https://404.site" <> _, _, _, _) do + {:ok, + %Tesla.Env{ + status: 404, + body: "" + }} + end + def get( "https://zetsubou.xn--q9jyb4c/.well-known/webfinger?resource=acct:lain@zetsubou.xn--q9jyb4c", _, @@ -1399,6 +1407,15 @@ def get("https://mk.absturztau.be/notes/93e7nm8wqg", _, _, _) do }} end + def get("https://mk.absturztau.be/notes/93e7nm8wqg/activity", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg-activity.json"), + headers: activitypub_object_headers() + }} + end + def get("https://p.helene.moe/objects/fd5910ac-d9dc-412e-8d1d-914b203296c4", _, _, _) do {:ok, %Tesla.Env{ From 5ef7c15d92379c730b37696c385da1a91cb5f50b Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Sat, 27 Aug 2022 19:34:56 -0400 Subject: [PATCH 119/178] Make local-only posts stream in local timeline --- lib/pleroma/activity/ir/topics.ex | 17 +++++++- test/pleroma/activity/ir/topics_test.exs | 53 ++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/activity/ir/topics.ex b/lib/pleroma/activity/ir/topics.ex index 7a603a615..9936ef917 100644 --- a/lib/pleroma/activity/ir/topics.ex +++ b/lib/pleroma/activity/ir/topics.ex @@ -31,6 +31,10 @@ defp visibility_tags(object, activity) do end |> item_creation_tags(object, activity) + "local" -> + ["public:local"] + |> item_creation_tags(object, activity) + "direct" -> ["direct"] @@ -63,7 +67,18 @@ defp remote_topics(_), do: [] defp attachment_topics(%{data: %{"attachment" => []}}, _act), do: [] - defp attachment_topics(_object, %{local: true}), do: ["public:media", "public:local:media"] + defp attachment_topics(_object, %{local: true} = activity) do + case Visibility.get_visibility(activity) do + "public" -> + ["public:media", "public:local:media"] + + "local" -> + ["public:local:media"] + + _ -> + [] + end + end defp attachment_topics(_object, %{actor: actor}) when is_binary(actor), do: ["public:media", "public:remote:media:" <> URI.parse(actor).host] diff --git a/test/pleroma/activity/ir/topics_test.exs b/test/pleroma/activity/ir/topics_test.exs index 9c8e5d932..326c24893 100644 --- a/test/pleroma/activity/ir/topics_test.exs +++ b/test/pleroma/activity/ir/topics_test.exs @@ -114,6 +114,36 @@ test "local action doesn't produce public:remote topic", %{activity: activity} d end end + describe "local-public visibility create events" do + setup do + activity = %Activity{ + object: %Object{data: %{"attachment" => []}}, + data: %{"type" => "Create", "to" => [Pleroma.Web.ActivityPub.Utils.as_local_public()]} + } + + {:ok, activity: activity} + end + + test "doesn't produce public topics", %{activity: activity} do + topics = Topics.get_activity_topics(activity) + + refute Enum.member?(topics, "public") + end + + test "produces public:local topics", %{activity: activity} do + topics = Topics.get_activity_topics(activity) + + assert Enum.member?(topics, "public:local") + end + + test "with no attachments doesn't produce public:media topics", %{activity: activity} do + topics = Topics.get_activity_topics(activity) + + refute Enum.member?(topics, "public:media") + refute Enum.member?(topics, "public:local:media") + end + end + describe "public visibility create events with attachments" do setup do activity = %Activity{ @@ -152,6 +182,29 @@ test "non-local action produces public:remote:media topic", %{activity: activity end end + describe "local-public visibility create events with attachments" do + setup do + activity = %Activity{ + object: %Object{data: %{"attachment" => ["foo"]}}, + data: %{"type" => "Create", "to" => [Pleroma.Web.ActivityPub.Utils.as_local_public()]} + } + + {:ok, activity: activity} + end + + test "do not produce public:media topics", %{activity: activity} do + topics = Topics.get_activity_topics(activity) + + refute Enum.member?(topics, "public:media") + end + + test "produces public:local:media topics", %{activity: activity} do + topics = Topics.get_activity_topics(activity) + + assert Enum.member?(topics, "public:local:media") + end + end + describe "non-public visibility" do test "produces direct topic" do activity = %Activity{object: %Object{data: %{"type" => "Note"}}, data: %{"to" => []}} From fd38756e923e35006362eb7fffc7ed637a77644e Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Wed, 31 Aug 2022 15:57:06 -0400 Subject: [PATCH 120/178] Do not stream out Announces to public timelines --- lib/pleroma/activity/ir/topics.ex | 6 +++++- test/pleroma/activity/ir/topics_test.exs | 27 ++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/activity/ir/topics.ex b/lib/pleroma/activity/ir/topics.ex index 9936ef917..7ff4ce7c6 100644 --- a/lib/pleroma/activity/ir/topics.ex +++ b/lib/pleroma/activity/ir/topics.ex @@ -21,7 +21,7 @@ defp generate_topics(object, activity) do ["user", "list"] ++ visibility_tags(object, activity) end - defp visibility_tags(object, activity) do + defp visibility_tags(object, %{data: %{"type" => "Create"}} = activity) do case Visibility.get_visibility(activity) do "public" -> if activity.local do @@ -43,6 +43,10 @@ defp visibility_tags(object, activity) do end end + defp visibility_tags(_object, _activity) do + [] + end + defp item_creation_tags(tags, object, %{data: %{"type" => "Create"}} = activity) do tags ++ remote_topics(activity) ++ hashtags_to_topics(object) ++ attachment_topics(object, activity) diff --git a/test/pleroma/activity/ir/topics_test.exs b/test/pleroma/activity/ir/topics_test.exs index 326c24893..03e323469 100644 --- a/test/pleroma/activity/ir/topics_test.exs +++ b/test/pleroma/activity/ir/topics_test.exs @@ -35,7 +35,7 @@ test "always add user and list topics" do setup do activity = %Activity{ object: %Object{data: %{"type" => "Note"}}, - data: %{"to" => [Pleroma.Constants.as_public()]} + data: %{"to" => [Pleroma.Constants.as_public()], "type" => "Create"} } {:ok, activity: activity} @@ -114,6 +114,25 @@ test "local action doesn't produce public:remote topic", %{activity: activity} d end end + describe "public visibility Announces" do + setup do + activity = %Activity{ + object: %Object{data: %{"attachment" => []}}, + data: %{"type" => "Announce", "to" => [Pleroma.Constants.as_public()]} + } + + {:ok, activity: activity} + end + + test "does not generate public topics", %{activity: activity} do + topics = Topics.get_activity_topics(activity) + + refute "public" in topics + refute "public:remote" in topics + refute "public:local" in topics + end + end + describe "local-public visibility create events" do setup do activity = %Activity{ @@ -207,7 +226,11 @@ test "produces public:local:media topics", %{activity: activity} do describe "non-public visibility" do test "produces direct topic" do - activity = %Activity{object: %Object{data: %{"type" => "Note"}}, data: %{"to" => []}} + activity = %Activity{ + object: %Object{data: %{"type" => "Note"}}, + data: %{"to" => [], "type" => "Create"} + } + topics = Topics.get_activity_topics(activity) assert Enum.member?(topics, "direct") From 7b9cc9a9b0755a76130578ccd6ffdb57ffcb221e Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Wed, 31 Aug 2022 22:14:54 -0400 Subject: [PATCH 121/178] Exclude Announce instead of restricting to Create in visibility_tags --- lib/pleroma/activity/ir/topics.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/activity/ir/topics.ex b/lib/pleroma/activity/ir/topics.ex index 7ff4ce7c6..bdbf4a285 100644 --- a/lib/pleroma/activity/ir/topics.ex +++ b/lib/pleroma/activity/ir/topics.ex @@ -21,7 +21,7 @@ defp generate_topics(object, activity) do ["user", "list"] ++ visibility_tags(object, activity) end - defp visibility_tags(object, %{data: %{"type" => "Create"}} = activity) do + defp visibility_tags(object, %{data: %{"type" => type}} = activity) when type != "Announce" do case Visibility.get_visibility(activity) do "public" -> if activity.local do From dfd6c9680887a511d285744f91d761f04c94c92c Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Thu, 1 Sep 2022 07:33:58 -0400 Subject: [PATCH 122/178] Fix SideEffectsTest --- test/pleroma/web/activity_pub/side_effects_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pleroma/web/activity_pub/side_effects_test.exs b/test/pleroma/web/activity_pub/side_effects_test.exs index ee664bb8f..1c721405e 100644 --- a/test/pleroma/web/activity_pub/side_effects_test.exs +++ b/test/pleroma/web/activity_pub/side_effects_test.exs @@ -733,7 +733,7 @@ test "it streams out the announce", %{announce: announce} do {:ok, announce, _} = SideEffects.handle(announce) assert called( - Pleroma.Web.Streamer.stream(["user", "list", "public", "public:local"], announce) + Pleroma.Web.Streamer.stream(["user", "list"], announce) ) assert called(Pleroma.Web.Push.send(:_)) From 2a290cb331bb5d914a418cfa4242d22782806a42 Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Fri, 2 Sep 2022 22:58:35 -0400 Subject: [PATCH 123/178] Lint --- test/pleroma/web/activity_pub/side_effects_test.exs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/pleroma/web/activity_pub/side_effects_test.exs b/test/pleroma/web/activity_pub/side_effects_test.exs index 1c721405e..94b6a11b3 100644 --- a/test/pleroma/web/activity_pub/side_effects_test.exs +++ b/test/pleroma/web/activity_pub/side_effects_test.exs @@ -732,9 +732,7 @@ test "it streams out the announce", %{announce: announce} do ]) do {:ok, announce, _} = SideEffects.handle(announce) - assert called( - Pleroma.Web.Streamer.stream(["user", "list"], announce) - ) + assert called(Pleroma.Web.Streamer.stream(["user", "list"], announce)) assert called(Pleroma.Web.Push.send(:_)) end From 997551bac9fc8189f40675c2ff0b312c78b2ba59 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 19 Dec 2022 14:40:08 -0500 Subject: [PATCH 124/178] Fix TwitterCard meta tags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TwitterCard meta tags are supposed to use the attributes "name" and "content". OpenGraph tags use the attributes "property" and "content". Twitter itself is smart enough to detect broken meta tags and discover the TwitterCard using "property" and "content", but other platforms that only implement parsing of TwitterCards and not OpenGraph may fail to correctly detect the tags as they're under the wrong attributes. > "Open Graph protocol also specifies the use of property and content attributes for markup while > Twitter cards use name and content. Twitter’s parser will fall back to using property and content, > so there is no need to modify existing Open Graph protocol markup if it already exists." [0] [0] https://developer.twitter.com/en/docs/twitter-for-websites/cards/guides/getting-started --- .../web/metadata/providers/twitter_card.ex | 43 +++++++------- .../metadata/providers/twitter_card_test.exs | 56 +++++++++---------- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/lib/pleroma/web/metadata/providers/twitter_card.ex b/lib/pleroma/web/metadata/providers/twitter_card.ex index 79183df86..b2497d14e 100644 --- a/lib/pleroma/web/metadata/providers/twitter_card.ex +++ b/lib/pleroma/web/metadata/providers/twitter_card.ex @@ -20,12 +20,12 @@ def build_tags(%{activity_id: id, object: object, user: user}) do [ title_tag(user), - {:meta, [property: "twitter:description", content: scrubbed_content], []} + {:meta, [name: "twitter:description", content: scrubbed_content], []} ] ++ if attachments == [] or Metadata.activity_nsfw?(object) do [ image_tag(user), - {:meta, [property: "twitter:card", content: "summary"], []} + {:meta, [name: "twitter:card", content: "summary"], []} ] else attachments @@ -37,20 +37,19 @@ def build_tags(%{user: user}) do with truncated_bio = Utils.scrub_html_and_truncate(user.bio) do [ title_tag(user), - {:meta, [property: "twitter:description", content: truncated_bio], []}, + {:meta, [name: "twitter:description", content: truncated_bio], []}, image_tag(user), - {:meta, [property: "twitter:card", content: "summary"], []} + {:meta, [name: "twitter:card", content: "summary"], []} ] end end defp title_tag(user) do - {:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []} + {:meta, [name: "twitter:title", content: Utils.user_name_string(user)], []} end def image_tag(user) do - {:meta, [property: "twitter:image", content: MediaProxy.preview_url(User.avatar_url(user))], - []} + {:meta, [name: "twitter:image", content: MediaProxy.preview_url(User.avatar_url(user))], []} end defp build_attachments(id, %{data: %{"attachment" => attachments}}) do @@ -60,10 +59,10 @@ defp build_attachments(id, %{data: %{"attachment" => attachments}}) do case Utils.fetch_media_type(@media_types, url["mediaType"]) do "audio" -> [ - {:meta, [property: "twitter:card", content: "player"], []}, - {:meta, [property: "twitter:player:width", content: "480"], []}, - {:meta, [property: "twitter:player:height", content: "80"], []}, - {:meta, [property: "twitter:player", content: player_url(id)], []} + {:meta, [name: "twitter:card", content: "player"], []}, + {:meta, [name: "twitter:player:width", content: "480"], []}, + {:meta, [name: "twitter:player:height", content: "80"], []}, + {:meta, [name: "twitter:player", content: player_url(id)], []} | acc ] @@ -74,10 +73,10 @@ defp build_attachments(id, %{data: %{"attachment" => attachments}}) do # workaround. "image" -> [ - {:meta, [property: "twitter:card", content: "summary_large_image"], []}, + {:meta, [name: "twitter:card", content: "summary_large_image"], []}, {:meta, [ - property: "twitter:player", + name: "twitter:player", content: MediaProxy.url(url["href"]) ], []} | acc @@ -90,14 +89,14 @@ defp build_attachments(id, %{data: %{"attachment" => attachments}}) do width = url["width"] || 480 [ - {:meta, [property: "twitter:card", content: "player"], []}, - {:meta, [property: "twitter:player", content: player_url(id)], []}, - {:meta, [property: "twitter:player:width", content: "#{width}"], []}, - {:meta, [property: "twitter:player:height", content: "#{height}"], []}, - {:meta, [property: "twitter:player:stream", content: MediaProxy.url(url["href"])], + {:meta, [name: "twitter:card", content: "player"], []}, + {:meta, [name: "twitter:player", content: player_url(id)], []}, + {:meta, [name: "twitter:player:width", content: "#{width}"], []}, + {:meta, [name: "twitter:player:height", content: "#{height}"], []}, + {:meta, [name: "twitter:player:stream", content: MediaProxy.url(url["href"])], []}, - {:meta, - [property: "twitter:player:stream:content_type", content: url["mediaType"]], []} + {:meta, [name: "twitter:player:stream:content_type", content: url["mediaType"]], + []} | acc ] @@ -123,8 +122,8 @@ defp maybe_add_dimensions(metadata, url) do !is_nil(url["height"]) && !is_nil(url["width"]) -> metadata ++ [ - {:meta, [property: "twitter:player:width", content: "#{url["width"]}"], []}, - {:meta, [property: "twitter:player:height", content: "#{url["height"]}"], []} + {:meta, [name: "twitter:player:width", content: "#{url["width"]}"], []}, + {:meta, [name: "twitter:player:height", content: "#{url["height"]}"], []} ] true -> diff --git a/test/pleroma/web/metadata/providers/twitter_card_test.exs b/test/pleroma/web/metadata/providers/twitter_card_test.exs index 5d7ad08ef..731447094 100644 --- a/test/pleroma/web/metadata/providers/twitter_card_test.exs +++ b/test/pleroma/web/metadata/providers/twitter_card_test.exs @@ -22,10 +22,10 @@ test "it renders twitter card for user info" do res = TwitterCard.build_tags(%{user: user}) assert res == [ - {:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []}, - {:meta, [property: "twitter:description", content: "born 19 March 1994"], []}, - {:meta, [property: "twitter:image", content: avatar_url], []}, - {:meta, [property: "twitter:card", content: "summary"], []} + {:meta, [name: "twitter:title", content: Utils.user_name_string(user)], []}, + {:meta, [name: "twitter:description", content: "born 19 March 1994"], []}, + {:meta, [name: "twitter:image", content: avatar_url], []}, + {:meta, [name: "twitter:card", content: "summary"], []} ] end @@ -47,11 +47,11 @@ test "it uses summary twittercard if post has no attachment" do result = TwitterCard.build_tags(%{object: note, user: user, activity_id: activity.id}) assert [ - {:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []}, - {:meta, [property: "twitter:description", content: "pleroma in a nutshell"], []}, - {:meta, [property: "twitter:image", content: "http://localhost:4001/images/avi.png"], + {:meta, [name: "twitter:title", content: Utils.user_name_string(user)], []}, + {:meta, [name: "twitter:description", content: "pleroma in a nutshell"], []}, + {:meta, [name: "twitter:image", content: "http://localhost:4001/images/avi.png"], []}, - {:meta, [property: "twitter:card", content: "summary"], []} + {:meta, [name: "twitter:card", content: "summary"], []} ] == result end @@ -73,15 +73,15 @@ test "it uses summary as description if post has one" do result = TwitterCard.build_tags(%{object: note, user: user, activity_id: activity.id}) assert [ - {:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []}, + {:meta, [name: "twitter:title", content: Utils.user_name_string(user)], []}, {:meta, [ - property: "twitter:description", + name: "twitter:description", content: "Public service announcement on caffeine consumption" ], []}, - {:meta, [property: "twitter:image", content: "http://localhost:4001/images/avi.png"], + {:meta, [name: "twitter:image", content: "http://localhost:4001/images/avi.png"], []}, - {:meta, [property: "twitter:card", content: "summary"], []} + {:meta, [name: "twitter:card", content: "summary"], []} ] == result end @@ -123,11 +123,11 @@ test "it renders avatar not attachment if post is nsfw and unfurl_nsfw is disabl result = TwitterCard.build_tags(%{object: note, user: user, activity_id: activity.id}) assert [ - {:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []}, - {:meta, [property: "twitter:description", content: "pleroma in a nutshell"], []}, - {:meta, [property: "twitter:image", content: "http://localhost:4001/images/avi.png"], + {:meta, [name: "twitter:title", content: Utils.user_name_string(user)], []}, + {:meta, [name: "twitter:description", content: "pleroma in a nutshell"], []}, + {:meta, [name: "twitter:image", content: "http://localhost:4001/images/avi.png"], []}, - {:meta, [property: "twitter:card", content: "summary"], []} + {:meta, [name: "twitter:card", content: "summary"], []} ] == result end @@ -179,26 +179,26 @@ test "it renders supported types of attachments and skips unknown types" do result = TwitterCard.build_tags(%{object: note, user: user, activity_id: activity.id}) assert [ - {:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []}, - {:meta, [property: "twitter:description", content: "pleroma in a nutshell"], []}, - {:meta, [property: "twitter:card", content: "summary_large_image"], []}, - {:meta, [property: "twitter:player", content: "https://pleroma.gov/tenshi.png"], []}, - {:meta, [property: "twitter:player:width", content: "1280"], []}, - {:meta, [property: "twitter:player:height", content: "1024"], []}, - {:meta, [property: "twitter:card", content: "player"], []}, + {:meta, [name: "twitter:title", content: Utils.user_name_string(user)], []}, + {:meta, [name: "twitter:description", content: "pleroma in a nutshell"], []}, + {:meta, [name: "twitter:card", content: "summary_large_image"], []}, + {:meta, [name: "twitter:player", content: "https://pleroma.gov/tenshi.png"], []}, + {:meta, [name: "twitter:player:width", content: "1280"], []}, + {:meta, [name: "twitter:player:height", content: "1024"], []}, + {:meta, [name: "twitter:card", content: "player"], []}, {:meta, [ - property: "twitter:player", + name: "twitter:player", content: Router.Helpers.o_status_url(Endpoint, :notice_player, activity.id) ], []}, - {:meta, [property: "twitter:player:width", content: "800"], []}, - {:meta, [property: "twitter:player:height", content: "600"], []}, + {:meta, [name: "twitter:player:width", content: "800"], []}, + {:meta, [name: "twitter:player:height", content: "600"], []}, {:meta, [ - property: "twitter:player:stream", + name: "twitter:player:stream", content: "https://pleroma.gov/about/juche.webm" ], []}, - {:meta, [property: "twitter:player:stream:content_type", content: "video/webm"], []} + {:meta, [name: "twitter:player:stream:content_type", content: "video/webm"], []} ] == result end end From 651979217a4b582793294363a9cb3a7bdd451bbb Mon Sep 17 00:00:00 2001 From: tusooa Date: Wed, 14 Dec 2022 01:04:42 -0500 Subject: [PATCH 125/178] Fix failure when registering a user with no email when approval required --- lib/pleroma/user.ex | 6 +++++- test/pleroma/user_test.exs | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 273bdf337..119e80a4f 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -876,7 +876,7 @@ def post_register_action(%User{is_approved: true, is_confirmed: true} = user) do end end - defp send_user_approval_email(user) do + defp send_user_approval_email(%User{email: email} = user) when is_binary(email) do user |> Pleroma.Emails.UserEmail.approval_pending_email() |> Pleroma.Emails.Mailer.deliver_async() @@ -884,6 +884,10 @@ defp send_user_approval_email(user) do {:ok, :enqueued} end + defp send_user_approval_email(_user) do + {:ok, :skipped} + end + defp send_admin_approval_emails(user) do all_superusers() |> Enum.filter(fn user -> not is_nil(user.email) end) diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index f35a98f08..c33528a67 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -557,6 +557,21 @@ test "it fails gracefully with invalid email config" do refute_email_sent() end + test "it works when the registering user does not provide an email" do + clear_config([Pleroma.Emails.Mailer, :enabled], false) + clear_config([:instance, :account_activation_required], false) + clear_config([:instance, :account_approval_required], true) + + cng = User.register_changeset(%User{}, @full_user_data |> Map.put(:email, "")) + + # The user is still created + assert {:ok, %User{nickname: "nick"}} = User.register(cng) + + # No emails are sent + ObanHelpers.perform_all() + refute_email_sent() + end + test "it requires an email, name, nickname and password, bio is optional when account_activation_required is enabled" do clear_config([:instance, :account_activation_required], true) From 1268dbc5627bd035d7a933316adba2040ec5081b Mon Sep 17 00:00:00 2001 From: tusooa Date: Sun, 15 Jan 2023 18:41:36 -0500 Subject: [PATCH 126/178] Fix type of admin_account.is_confirmed --- lib/pleroma/web/api_spec/operations/admin/status_operation.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/operations/admin/status_operation.ex b/lib/pleroma/web/api_spec/operations/admin/status_operation.ex index d25ab5247..9290ab09d 100644 --- a/lib/pleroma/web/api_spec/operations/admin/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/status_operation.ex @@ -143,7 +143,7 @@ def admin_account do } }, tags: %Schema{type: :string}, - is_confirmed: %Schema{type: :string} + is_confirmed: %Schema{type: :boolean} } } end From 05e80d1879d4472d23edeb9dec09732f45beb4ba Mon Sep 17 00:00:00 2001 From: tusooa Date: Wed, 18 Jan 2023 18:36:52 -0500 Subject: [PATCH 127/178] Fix block_from_stranger setting --- lib/pleroma/notification.ex | 2 +- test/pleroma/notification_test.exs | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 3995be01f..1989bb50c 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -695,7 +695,7 @@ def skip?( cond do opts[:type] == "poll" -> false user.ap_id == actor -> false - !User.following?(follower, user) -> true + !User.following?(user, follower) -> true true -> false end end diff --git a/test/pleroma/notification_test.exs b/test/pleroma/notification_test.exs index 721836a2c..6bc6dff1a 100644 --- a/test/pleroma/notification_test.exs +++ b/test/pleroma/notification_test.exs @@ -328,6 +328,32 @@ test "it disables notifications from strangers" do refute Notification.create_notification(activity, followed) end + test "it disables notifications from non-followees" do + follower = insert(:user) + + followed = + insert(:user, + notification_settings: %Pleroma.User.NotificationSetting{block_from_strangers: true} + ) + + CommonAPI.follow(follower, followed) + {:ok, activity} = CommonAPI.post(follower, %{status: "hey @#{followed.nickname}"}) + refute Notification.create_notification(activity, followed) + end + + test "it allows notifications from followees" do + poster = insert(:user) + + receiver = + insert(:user, + notification_settings: %Pleroma.User.NotificationSetting{block_from_strangers: true} + ) + + CommonAPI.follow(receiver, poster) + {:ok, activity} = CommonAPI.post(poster, %{status: "hey @#{receiver.nickname}"}) + assert Notification.create_notification(activity, receiver) + end + test "it doesn't create a notification for user if he is the activity author" do activity = insert(:note_activity) author = User.get_cached_by_ap_id(activity.data["actor"]) From 5adce547d0f68c9762246fc2c7da9a1979601e31 Mon Sep 17 00:00:00 2001 From: Alexander Tumin Date: Tue, 7 Feb 2023 15:30:07 +0300 Subject: [PATCH 128/178] Require related object for notifications to filter on content --- lib/pleroma/notification.ex | 1 + test/pleroma/notification_test.exs | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 1989bb50c..885d61233 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -195,6 +195,7 @@ defp exclude_filtered(query, user) do from([_n, a, o] in query, where: fragment("not(?->>'content' ~* ?)", o.data, ^regex) or + fragment("?->>'content' is null", o.data) or fragment("?->>'actor' = ?", o.data, ^user.ap_id) ) end diff --git a/test/pleroma/notification_test.exs b/test/pleroma/notification_test.exs index 6bc6dff1a..4905cb7eb 100644 --- a/test/pleroma/notification_test.exs +++ b/test/pleroma/notification_test.exs @@ -1251,5 +1251,32 @@ test "it returns notifications about favorites with filtered word", %{user: user assert length(Notification.for_user(user)) == 1 end + + test "it returns notifications when related object is without content and filters are defined", + %{user: user} do + followed_user = insert(:user, is_locked: true) + + insert(:filter, user: followed_user, phrase: "test", hide: true) + + {:ok, _, _, _activity} = CommonAPI.follow(user, followed_user) + refute FollowingRelationship.following?(user, followed_user) + assert [notification] = Notification.for_user(followed_user) + + assert %{type: "follow_request"} = + NotificationView.render("show.json", %{ + notification: notification, + for: followed_user + }) + + assert {:ok, _} = CommonAPI.accept_follow_request(user, followed_user) + + assert [notification] = Notification.for_user(followed_user) + + assert %{type: "follow"} = + NotificationView.render("show.json", %{ + notification: notification, + for: followed_user + }) + end end end From d6271e7613028e9a32e7a04eaf76c5b23de22e6d Mon Sep 17 00:00:00 2001 From: kPherox Date: Wed, 1 Feb 2023 20:24:58 +0000 Subject: [PATCH 129/178] feat: build rel me tags with profile fields --- lib/pleroma/web/metadata/providers/rel_me.ex | 18 +++++++++++++++--- .../web/metadata/providers/rel_me_test.exs | 15 ++++++++++++++- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/metadata/providers/rel_me.ex b/lib/pleroma/web/metadata/providers/rel_me.ex index f013def51..92528513a 100644 --- a/lib/pleroma/web/metadata/providers/rel_me.ex +++ b/lib/pleroma/web/metadata/providers/rel_me.ex @@ -8,12 +8,24 @@ defmodule Pleroma.Web.Metadata.Providers.RelMe do @impl Provider def build_tags(%{user: user}) do - bio_tree = Floki.parse_fragment!(user.bio) + profile_tree = + Floki.parse_fragment!(user.bio) + |> prepend_fields_tag(user.fields) - (Floki.attribute(bio_tree, "link[rel~=me]", "href") ++ - Floki.attribute(bio_tree, "a[rel~=me]", "href")) + (Floki.attribute(profile_tree, "link[rel~=me]", "href") ++ + Floki.attribute(profile_tree, "a[rel~=me]", "href")) |> Enum.map(fn link -> {:link, [rel: "me", href: link], []} end) end + + defp prepend_fields_tag(bio_tree, fields) do + fields + |> Enum.reduce(bio_tree, fn %{"value" => v}, tree -> + case Floki.parse_fragment(v) do + {:ok, [a | _]} -> [a | tree] + _ -> tree + end + end) + end end diff --git a/test/pleroma/web/metadata/providers/rel_me_test.exs b/test/pleroma/web/metadata/providers/rel_me_test.exs index 0db6e7d22..78e509a40 100644 --- a/test/pleroma/web/metadata/providers/rel_me_test.exs +++ b/test/pleroma/web/metadata/providers/rel_me_test.exs @@ -11,10 +11,23 @@ test "it renders all links with rel='me' from user bio" do bio = ~s(https://some-link.com https://another-link.com ) - user = insert(:user, %{bio: bio}) + fields = [ + %{ + "name" => "profile", + "value" => ~S(http://profile.com) + }, + %{ + "name" => "like", + "value" => ~S(http://cofe.io) + }, + %{"name" => "foo", "value" => "bar"} + ] + + user = insert(:user, %{bio: bio, fields: fields}) assert RelMe.build_tags(%{user: user}) == [ {:link, [rel: "me", href: "http://some3.com"], []}, + {:link, [rel: "me", href: "http://profile.com"], []}, {:link, [rel: "me", href: "https://another-link.com"], []} ] end From 8fb235e71b7a7fa1248d6ae5f3ce7012b2c3e72b Mon Sep 17 00:00:00 2001 From: kPherox Date: Wed, 15 Mar 2023 23:55:24 +0900 Subject: [PATCH 130/178] fix: append field values to bio before parsing --- lib/pleroma/web/metadata/providers/rel_me.ex | 14 +++++--------- .../pleroma/web/metadata/providers/rel_me_test.exs | 4 ++-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/web/metadata/providers/rel_me.ex b/lib/pleroma/web/metadata/providers/rel_me.ex index 92528513a..cf6a3a3ab 100644 --- a/lib/pleroma/web/metadata/providers/rel_me.ex +++ b/lib/pleroma/web/metadata/providers/rel_me.ex @@ -9,8 +9,9 @@ defmodule Pleroma.Web.Metadata.Providers.RelMe do @impl Provider def build_tags(%{user: user}) do profile_tree = - Floki.parse_fragment!(user.bio) - |> prepend_fields_tag(user.fields) + user.bio + |> append_fields_tag(user.fields) + |> Floki.parse_fragment!() (Floki.attribute(profile_tree, "link[rel~=me]", "href") ++ Floki.attribute(profile_tree, "a[rel~=me]", "href")) @@ -19,13 +20,8 @@ def build_tags(%{user: user}) do end) end - defp prepend_fields_tag(bio_tree, fields) do + defp append_fields_tag(bio, fields) do fields - |> Enum.reduce(bio_tree, fn %{"value" => v}, tree -> - case Floki.parse_fragment(v) do - {:ok, [a | _]} -> [a | tree] - _ -> tree - end - end) + |> Enum.reduce(bio, fn %{"value" => v}, res -> res <> v end) end end diff --git a/test/pleroma/web/metadata/providers/rel_me_test.exs b/test/pleroma/web/metadata/providers/rel_me_test.exs index 78e509a40..fedc49789 100644 --- a/test/pleroma/web/metadata/providers/rel_me_test.exs +++ b/test/pleroma/web/metadata/providers/rel_me_test.exs @@ -27,8 +27,8 @@ test "it renders all links with rel='me' from user bio" do assert RelMe.build_tags(%{user: user}) == [ {:link, [rel: "me", href: "http://some3.com"], []}, - {:link, [rel: "me", href: "http://profile.com"], []}, - {:link, [rel: "me", href: "https://another-link.com"], []} + {:link, [rel: "me", href: "https://another-link.com"], []}, + {:link, [rel: "me", href: "http://profile.com"], []} ] end end From 79a18f761bc44b4eda083732b67e54b31b9321c7 Mon Sep 17 00:00:00 2001 From: tusooa Date: Tue, 28 Feb 2023 22:16:01 -0500 Subject: [PATCH 131/178] Allow with_relationships param for blocks --- .../api_spec/operations/account_operation.ex | 2 +- .../controllers/account_controller.ex | 7 +++- .../controllers/account_controller_test.exs | 33 +++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 00a591298..2d14316d1 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -410,7 +410,7 @@ def blocks_operation do operationId: "AccountController.blocks", description: "View your blocks. See also accounts/:id/{block,unblock}", security: [%{"oAuth" => ["read:blocks"]}], - parameters: pagination_params(), + parameters: [with_relationships_param() | pagination_params()], responses: %{ 200 => Operation.response("Accounts", "application/json", array_of_accounts()) } diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 057af762a..b55e843db 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -518,7 +518,12 @@ def blocks(%{assigns: %{user: user}} = conn, params) do conn |> add_link_headers(users) - |> render("index.json", users: users, for: user, as: :user) + |> render("index.json", + users: users, + for: user, + as: :user, + embed_relationships: embed_relationships?(params) + ) end @doc "GET /api/v1/accounts/lookup" diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs index bbede76e9..84214e4bc 100644 --- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs @@ -1895,6 +1895,39 @@ test "getting a list of blocks" do assert [%{"id" => ^id2}] = result end + test "list of blocks with with_relationships parameter" do + %{user: user, conn: conn} = oauth_access(["read:blocks"]) + %{id: id1} = other_user1 = insert(:user) + %{id: id2} = other_user2 = insert(:user) + %{id: id3} = other_user3 = insert(:user) + + {:ok, _, _} = User.follow(other_user1, user) + {:ok, _, _} = User.follow(other_user2, user) + {:ok, _, _} = User.follow(other_user3, user) + + {:ok, _} = User.block(user, other_user1) + {:ok, _} = User.block(user, other_user2) + {:ok, _} = User.block(user, other_user3) + + assert [ + %{ + "id" => ^id1, + "pleroma" => %{"relationship" => %{"blocking" => true, "followed_by" => false}} + }, + %{ + "id" => ^id2, + "pleroma" => %{"relationship" => %{"blocking" => true, "followed_by" => false}} + }, + %{ + "id" => ^id3, + "pleroma" => %{"relationship" => %{"blocking" => true, "followed_by" => false}} + } + ] = + conn + |> get("/api/v1/blocks?with_relationships=true") + |> json_response_and_validate_schema(200) + end + test "account lookup", %{conn: conn} do %{nickname: acct} = insert(:user, %{nickname: "nickname"}) %{nickname: acct_two} = insert(:user, %{nickname: "nickname@notlocaldoma.in"}) From 3095251e6c32f93a85d129e1bf8917d7c63ba8ba Mon Sep 17 00:00:00 2001 From: tusooa Date: Sat, 25 Mar 2023 23:20:07 -0400 Subject: [PATCH 132/178] Dedupe poll options --- lib/pleroma/web/common_api/utils.ex | 15 ++++++++--- .../controllers/status_controller_test.exs | 26 +++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 54918d13c..b44d3167c 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -144,6 +144,8 @@ def make_poll_data(%{poll: %{options: options, expires_in: expires_in}} = data) when is_list(options) do limits = Config.get([:instance, :poll_limits]) + options = options |> Enum.uniq() + with :ok <- validate_poll_expiration(expires_in, limits), :ok <- validate_poll_options_amount(options, limits), :ok <- validate_poll_options_length(options, limits) do @@ -179,10 +181,15 @@ def make_poll_data(_data) do end defp validate_poll_options_amount(options, %{max_options: max_options}) do - if Enum.count(options) > max_options do - {:error, "Poll can't contain more than #{max_options} options"} - else - :ok + cond do + Enum.count(options) < 2 -> + {:error, "Poll must contain at least 2 options"} + + Enum.count(options) > max_options -> + {:error, "Poll can't contain more than #{max_options} options"} + + true -> + :ok end end diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 6f04975b8..90eda5bcb 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -772,6 +772,32 @@ test "scheduled poll", %{conn: conn} do assert object.data["type"] == "Question" assert length(object.data["oneOf"]) == 3 end + + test "cannot have only one option", %{conn: conn} do + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses", %{ + "status" => "desu~", + "poll" => %{"options" => ["mew"], "expires_in" => 1} + }) + + %{"error" => error} = json_response_and_validate_schema(conn, 422) + assert error == "Poll must contain at least 2 options" + end + + test "cannot have only duplicated options", %{conn: conn} do + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses", %{ + "status" => "desu~", + "poll" => %{"options" => ["mew", "mew"], "expires_in" => 1} + }) + + %{"error" => error} = json_response_and_validate_schema(conn, 422) + assert error == "Poll must contain at least 2 options" + end end test "get a status" do From 1def80c2e701fccb216887e4777980221307f557 Mon Sep 17 00:00:00 2001 From: tusooa Date: Sun, 26 Mar 2023 11:11:26 -0400 Subject: [PATCH 133/178] Fix existing tests --- .../mastodon_api/controllers/status_controller_test.exs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 90eda5bcb..fe83c96ff 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -674,7 +674,10 @@ test "option limit is enforced", %{conn: conn} do |> put_req_header("content-type", "application/json") |> post("/api/v1/statuses", %{ "status" => "desu~", - "poll" => %{"options" => Enum.map(0..limit, fn _ -> "desu" end), "expires_in" => 1} + "poll" => %{ + "options" => Enum.map(0..limit, fn num -> "desu #{num}" end), + "expires_in" => 1 + } }) %{"error" => error} = json_response_and_validate_schema(conn, 422) @@ -690,7 +693,7 @@ test "option character limit is enforced", %{conn: conn} do |> post("/api/v1/statuses", %{ "status" => "...", "poll" => %{ - "options" => [Enum.reduce(0..limit, "", fn _, acc -> acc <> "." end)], + "options" => [String.duplicate(".", limit + 1), "lol"], "expires_in" => 1 } }) From 37b0d774fa59962e22a24fcc9542b4db9d8ed10d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 17 Apr 2023 21:07:08 +0200 Subject: [PATCH 134/178] UploadedMedia: Add missing disposition_type to Content-Disposition Set it to `inline` because the vast majority of what's sent is multimedia content while `attachment` would have the side-effect of triggering a download dialog. Closes: https://git.pleroma.social/pleroma/pleroma/-/issues/3114 --- lib/pleroma/web/plugs/uploaded_media.ex | 2 +- test/pleroma/web/plugs/uploaded_media_plug_test.exs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/plugs/uploaded_media.ex b/lib/pleroma/web/plugs/uploaded_media.ex index 72f20e8de..0facdd445 100644 --- a/lib/pleroma/web/plugs/uploaded_media.ex +++ b/lib/pleroma/web/plugs/uploaded_media.ex @@ -37,7 +37,7 @@ def call(%{request_path: <<"/", @path, "/", file::binary>>} = conn, opts) do %{query_params: %{"name" => name}} = conn -> name = escape_header_value(name) - put_resp_header(conn, "content-disposition", "filename=\"#{name}\"") + put_resp_header(conn, "content-disposition", "inline; filename=\"#{name}\"") conn -> conn diff --git a/test/pleroma/web/plugs/uploaded_media_plug_test.exs b/test/pleroma/web/plugs/uploaded_media_plug_test.exs index c71a7e789..1bb02c4b1 100644 --- a/test/pleroma/web/plugs/uploaded_media_plug_test.exs +++ b/test/pleroma/web/plugs/uploaded_media_plug_test.exs @@ -37,7 +37,7 @@ test "sends Content-Disposition header when name param is set", %{ assert Enum.any?( conn.resp_headers, - &(&1 == {"content-disposition", "filename=\"\\\"cofe\\\".gif\""}) + &(&1 == {"content-disposition", "inline; filename=\"\\\"cofe\\\".gif\""}) ) end @@ -48,7 +48,7 @@ test "removes control characters from the Content-Disposition header", %{ assert Enum.any?( conn.resp_headers, - &(&1 == {"content-disposition", "filename=\"\\\"cofe\\\".gif\""}) + &(&1 == {"content-disposition", ~s[inline; filename="\\"cofe\\".gif"]}) ) end end From 8669a0abcb094b10cb9a0f042bc19baa1c92e60d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 18 Apr 2023 00:07:39 +0200 Subject: [PATCH 135/178] UploadedMedia: Increase readability via ~s sigil --- lib/pleroma/web/plugs/uploaded_media.ex | 2 +- test/pleroma/web/plugs/uploaded_media_plug_test.exs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/plugs/uploaded_media.ex b/lib/pleroma/web/plugs/uploaded_media.ex index 0facdd445..300c33068 100644 --- a/lib/pleroma/web/plugs/uploaded_media.ex +++ b/lib/pleroma/web/plugs/uploaded_media.ex @@ -37,7 +37,7 @@ def call(%{request_path: <<"/", @path, "/", file::binary>>} = conn, opts) do %{query_params: %{"name" => name}} = conn -> name = escape_header_value(name) - put_resp_header(conn, "content-disposition", "inline; filename=\"#{name}\"") + put_resp_header(conn, "content-disposition", ~s[inline; filename="#{name}"]) conn -> conn diff --git a/test/pleroma/web/plugs/uploaded_media_plug_test.exs b/test/pleroma/web/plugs/uploaded_media_plug_test.exs index 1bb02c4b1..50e0f1bf3 100644 --- a/test/pleroma/web/plugs/uploaded_media_plug_test.exs +++ b/test/pleroma/web/plugs/uploaded_media_plug_test.exs @@ -33,11 +33,11 @@ test "does not send Content-Disposition header when name param is not set", %{ test "sends Content-Disposition header when name param is set", %{ attachment_url: attachment_url } do - conn = get(build_conn(), attachment_url <> "?name=\"cofe\".gif") + conn = get(build_conn(), attachment_url <> ~s[?name="cofe".gif]) assert Enum.any?( conn.resp_headers, - &(&1 == {"content-disposition", "inline; filename=\"\\\"cofe\\\".gif\""}) + &(&1 == {"content-disposition", ~s[inline; filename="\\"cofe\\".gif"]}) ) end From fee6e2aac4d93f1718615f4b424ca35dea14486f Mon Sep 17 00:00:00 2001 From: tusooa Date: Thu, 25 May 2023 18:40:38 -0400 Subject: [PATCH 136/178] Fix deleting banned users' statuses --- lib/pleroma/web/common_api.ex | 2 +- test/pleroma/web/common_api_test.exs | 14 +++++++++++++ .../controllers/status_controller_test.exs | 21 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index f1f51acf5..86c1bdfa7 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -88,7 +88,7 @@ def reject_follow_request(follower, followed) do def delete(activity_id, user) do with {_, %Activity{data: %{"object" => _, "type" => "Create"}} = activity} <- - {:find_activity, Activity.get_by_id(activity_id)}, + {:find_activity, Activity.get_by_id(activity_id, filter: [])}, {_, %Object{} = object, _} <- {:find_object, Object.normalize(activity, fetch: false), activity}, true <- User.superuser?(user) || user.ap_id == object.data["actor"], diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index 33709c8f3..e877048cc 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -225,6 +225,20 @@ test "superusers deleting non-local posts won't federate the delete" do refute Activity.get_by_id(post.id) end + + test "it allows privileged users to delete banned user's posts" do + clear_config([:instance, :moderator_privileges], [:messages_delete]) + user = insert(:user) + moderator = insert(:user, is_moderator: true) + + {:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"}) + User.set_activation(user, false) + + assert {:ok, delete} = CommonAPI.delete(post.id, moderator) + assert delete.local + + refute Activity.get_by_id(post.id) + end end test "favoriting race condition" do diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index fe83c96ff..1e7da0e5f 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -1073,6 +1073,27 @@ test "when you're an admin or moderator", %{conn: conn} do refute Activity.get_by_id(activity1.id) refute Activity.get_by_id(activity2.id) end + + test "when you're privileged and the user is banned", %{conn: conn} do + clear_config([:instance, :moderator_privileges], [:messages_delete]) + posting_user = insert(:user, is_active: false) + refute posting_user.is_active + activity = insert(:note_activity, user: posting_user) + user = insert(:user, is_moderator: true) + + res_conn = + conn + |> assign(:user, user) + |> assign(:token, insert(:oauth_token, user: user, scopes: ["write:statuses"])) + |> delete("/api/v1/statuses/#{activity.id}") + + assert %{} = json_response_and_validate_schema(res_conn, 200) + + # assert ModerationLog |> Repo.one() |> ModerationLog.get_log_entry_message() == + # "@#{user.nickname} deleted status ##{activity.id}" + + refute Activity.get_by_id(activity.id) + end end describe "reblogging" do From c0a01e73cfc655b1cc2f8866da970a017b066af6 Mon Sep 17 00:00:00 2001 From: tusooa Date: Thu, 30 Mar 2023 21:01:37 -0400 Subject: [PATCH 137/178] Enforce unauth restrictions for public streaming endpoints --- lib/pleroma/web/streamer.ex | 46 +++++++++++++++--- test/pleroma/web/streamer_test.exs | 77 ++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex index f009fbd9e..1c3848bfb 100644 --- a/lib/pleroma/web/streamer.ex +++ b/lib/pleroma/web/streamer.ex @@ -25,6 +25,7 @@ defmodule Pleroma.Web.Streamer do def registry, do: @registry @public_streams ["public", "public:local", "public:media", "public:local:media"] + @local_streams ["public:local", "public:local:media"] @user_streams ["user", "user:notification", "direct"] @doc "Expands and authorizes a stream, and registers the process for streaming." @@ -41,14 +42,37 @@ def get_topic_and_add_socket(stream, user, oauth_token, params \\ %{}) do end end + defp can_access_stream(user, oauth_token, kind) do + with {_, true} <- {:restrict?, Config.restrict_unauthenticated_access?(:timelines, kind)}, + {_, %User{id: user_id}, %Token{user_id: user_id}} <- {:user, user, oauth_token}, + {_, true} <- + {:scopes, + OAuthScopesPlug.filter_descendants(["read:statuses"], oauth_token.scopes) != []} do + true + else + {:restrict?, _} -> + true + + _ -> + false + end + end + @doc "Expand and authorizes a stream" @spec get_topic(stream :: String.t(), User.t() | nil, Token.t() | nil, Map.t()) :: {:ok, topic :: String.t()} | {:error, :bad_topic} def get_topic(stream, user, oauth_token, params \\ %{}) - # Allow all public steams. - def get_topic(stream, _user, _oauth_token, _params) when stream in @public_streams do - {:ok, stream} + # Allow all public steams if the instance allows unauthenticated access. + # Otherwise, only allow users with valid oauth tokens. + def get_topic(stream, user, oauth_token, _params) when stream in @public_streams do + kind = if stream in @local_streams, do: :local, else: :federated + + if can_access_stream(user, oauth_token, kind) do + {:ok, stream} + else + {:error, :unauthorized} + end end # Allow all hashtags streams. @@ -57,12 +81,20 @@ def get_topic("hashtag", _user, _oauth_token, %{"tag" => tag} = _params) do end # Allow remote instance streams. - def get_topic("public:remote", _user, _oauth_token, %{"instance" => instance} = _params) do - {:ok, "public:remote:" <> instance} + def get_topic("public:remote", user, oauth_token, %{"instance" => instance} = _params) do + if can_access_stream(user, oauth_token, :federated) do + {:ok, "public:remote:" <> instance} + else + {:error, :unauthorized} + end end - def get_topic("public:remote:media", _user, _oauth_token, %{"instance" => instance} = _params) do - {:ok, "public:remote:media:" <> instance} + def get_topic("public:remote:media", user, oauth_token, %{"instance" => instance} = _params) do + if can_access_stream(user, oauth_token, :federated) do + {:ok, "public:remote:media:" <> instance} + else + {:error, :unauthorized} + end end # Expand user streams. diff --git a/test/pleroma/web/streamer_test.exs b/test/pleroma/web/streamer_test.exs index b07c16faa..5bd04fe9f 100644 --- a/test/pleroma/web/streamer_test.exs +++ b/test/pleroma/web/streamer_test.exs @@ -25,6 +25,26 @@ test "allows public" do assert {:ok, "public:local:media"} = Streamer.get_topic("public:local:media", nil, nil) end + test "rejects local public streams if restricted_unauthenticated is on" do + clear_config([:restrict_unauthenticated, :timelines, :local], true) + + assert {:error, :unauthorized} = Streamer.get_topic("public:local", nil, nil) + assert {:error, :unauthorized} = Streamer.get_topic("public:local:media", nil, nil) + end + + test "rejects remote public streams if restricted_unauthenticated is on" do + clear_config([:restrict_unauthenticated, :timelines, :federated], true) + + assert {:error, :unauthorized} = Streamer.get_topic("public", nil, nil) + assert {:error, :unauthorized} = Streamer.get_topic("public:media", nil, nil) + + assert {:error, :unauthorized} = + Streamer.get_topic("public:remote", nil, nil, %{"instance" => "lain.com"}) + + assert {:error, :unauthorized} = + Streamer.get_topic("public:remote:media", nil, nil, %{"instance" => "lain.com"}) + end + test "allows instance streams" do assert {:ok, "public:remote:lain.com"} = Streamer.get_topic("public:remote", nil, nil, %{"instance" => "lain.com"}) @@ -65,6 +85,63 @@ test "allows public streams (regardless of OAuth token scopes)", %{ end end + test "allows local public streams if restricted_unauthenticated is on", %{ + user: user, + token: oauth_token + } do + clear_config([:restrict_unauthenticated, :timelines, :local], true) + + %{token: read_notifications_token} = oauth_access(["read:notifications"], user: user) + %{token: badly_scoped_token} = oauth_access(["irrelevant:scope"], user: user) + + assert {:ok, "public:local"} = Streamer.get_topic("public:local", user, oauth_token) + + assert {:ok, "public:local:media"} = + Streamer.get_topic("public:local:media", user, oauth_token) + + for token <- [read_notifications_token, badly_scoped_token] do + assert {:error, :unauthorized} = Streamer.get_topic("public:local", user, token) + + assert {:error, :unauthorized} = Streamer.get_topic("public:local:media", user, token) + end + end + + test "allows remote public streams if restricted_unauthenticated is on", %{ + user: user, + token: oauth_token + } do + clear_config([:restrict_unauthenticated, :timelines, :federated], true) + + %{token: read_notifications_token} = oauth_access(["read:notifications"], user: user) + %{token: badly_scoped_token} = oauth_access(["irrelevant:scope"], user: user) + + assert {:ok, "public"} = Streamer.get_topic("public", user, oauth_token) + assert {:ok, "public:media"} = Streamer.get_topic("public:media", user, oauth_token) + + assert {:ok, "public:remote:lain.com"} = + Streamer.get_topic("public:remote", user, oauth_token, %{"instance" => "lain.com"}) + + assert {:ok, "public:remote:media:lain.com"} = + Streamer.get_topic("public:remote:media", user, oauth_token, %{ + "instance" => "lain.com" + }) + + for token <- [read_notifications_token, badly_scoped_token] do + assert {:error, :unauthorized} = Streamer.get_topic("public", user, token) + assert {:error, :unauthorized} = Streamer.get_topic("public:media", user, token) + + assert {:error, :unauthorized} = + Streamer.get_topic("public:remote", user, token, %{ + "instance" => "lain.com" + }) + + assert {:error, :unauthorized} = + Streamer.get_topic("public:remote:media", user, token, %{ + "instance" => "lain.com" + }) + end + end + test "allows user streams (with proper OAuth token scopes)", %{ user: user, token: read_oauth_token From 2dfce401177aaaaf9d2e689337dc45abed85c370 Mon Sep 17 00:00:00 2001 From: Norm Date: Sun, 18 Jun 2023 01:37:40 -0400 Subject: [PATCH 138/178] Update docker compose commands to Compose V2 This just replaces all instances of `docker-compose` with `docker compose` in the docker scripts. The old Compose V1 program is unsupported since 2021: https://docs.docker.com/compose/migrate/#will-i-still-be-able-to-use-compose-v1-if-i-really-want-to --- docker-resources/build.sh | 4 ++-- docker-resources/manage.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-resources/build.sh b/docker-resources/build.sh index daa653da6..ce4f30f8d 100755 --- a/docker-resources/build.sh +++ b/docker-resources/build.sh @@ -1,4 +1,4 @@ #!/bin/sh -docker-compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g) akkoma -docker-compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g) db +docker compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g) akkoma +docker compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g) db diff --git a/docker-resources/manage.sh b/docker-resources/manage.sh index 944f5e2e2..acb6618c3 100755 --- a/docker-resources/manage.sh +++ b/docker-resources/manage.sh @@ -1,3 +1,3 @@ #!/bin/sh -docker-compose run --rm akkoma $@ +docker compose run --rm akkoma $@ From 6674b33d7530b0eba2cb8e06910fba64245b0334 Mon Sep 17 00:00:00 2001 From: Norm Date: Sun, 18 Jun 2023 01:44:25 -0400 Subject: [PATCH 139/178] update docs with new docker compose commands --- docs/docs/installation/docker_en.md | 20 +++++++++---------- .../installation/migrating_to_docker_en.md | 14 ++++++------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/docs/installation/docker_en.md b/docs/docs/installation/docker_en.md index 2a3b3d161..52c056173 100644 --- a/docs/docs/installation/docker_en.md +++ b/docs/docs/installation/docker_en.md @@ -10,7 +10,7 @@ If you want to migrate from or OTP to docker, check out [the migration guide](./ ### Prepare the system -* Install docker and docker-compose +* Install docker and docker compose * [Docker](https://docs.docker.com/engine/install/) * [Docker-compose](https://docs.docker.com/compose/install/) * This will usually just be a repository installation and a package manager invocation. @@ -26,7 +26,7 @@ echo "DOCKER_USER=$(id -u):$(id -g)" >> .env ``` This probably won't need to be changed, it's only there to set basic environment -variables for the docker-compose file. +variables for the docker compose file. ### Building the container @@ -65,9 +65,9 @@ cp config/generated_config.exs config/prod.secret.exs We need to run a few commands on the database container, this isn't too bad ```bash -docker-compose run --rm --user akkoma -d db +docker compose run --rm --user akkoma -d db # Note down the name it gives here, it will be something like akkoma_db_run -docker-compose run --rm akkoma psql -h db -U akkoma -f config/setup_db.psql +docker compose run --rm akkoma psql -h db -U akkoma -f config/setup_db.psql docker stop akkoma_db_run # Replace with the name you noted down ``` @@ -84,17 +84,17 @@ We're going to run it in the foreground on the first run, just to make sure everything start up. ```bash -docker-compose up +docker compose up ``` If everything went well, you should be able to access your instance at http://localhost:4000 -You can `ctrl-c` out of the docker-compose now to shutdown the server. +You can `ctrl-c` out of the docker compose now to shutdown the server. ### Running in the background ```bash -docker-compose up -d +docker compose up -d ``` ### Create your first user @@ -125,8 +125,8 @@ cp docker-resources/Caddyfile.example docker-resources/Caddyfile Then edit the TLD in your caddyfile to the domain you're serving on. -Uncomment the `caddy` section in the docker-compose file, -then run `docker-compose up -d` again. +Uncomment the `caddy` section in the docker compose file, +then run `docker compose up -d` again. #### Running a reverse proxy on the host @@ -152,7 +152,7 @@ git pull ./docker-resources/manage.sh mix deps.get ./docker-resources/manage.sh mix compile ./docker-resources/manage.sh mix ecto.migrate -docker-compose restart akkoma db +docker compose restart akkoma db ``` #### Further reading diff --git a/docs/docs/installation/migrating_to_docker_en.md b/docs/docs/installation/migrating_to_docker_en.md index 945f43090..6a67f1eee 100644 --- a/docs/docs/installation/migrating_to_docker_en.md +++ b/docs/docs/installation/migrating_to_docker_en.md @@ -10,7 +10,7 @@ You probably should, in the first instance. ### Prepare the system -* Install docker and docker-compose +* Install docker and docker compose * [Docker](https://docs.docker.com/engine/install/) * [Docker-compose](https://docs.docker.com/compose/install/) * This will usually just be a repository installation and a package manager invocation. @@ -46,7 +46,7 @@ For *most* from-source installs it'll already be there. And the same with `uploads`, make sure your uploads (if you have them on disk) are located at `uploads/` in the akkoma source directory. -If you have them on a different disk, you will need to mount that disk into the docker-compose file, +If you have them on a different disk, you will need to mount that disk into the docker compose file, with an entry that looks like this: ```yaml @@ -66,7 +66,7 @@ echo "DOCKER_USER=$(id -u):$(id -g)" >> .env ``` This probably won't need to be changed, it's only there to set basic environment -variables for the docker-compose file. +variables for the docker compose file. === "From source" @@ -126,21 +126,21 @@ mkdir pgdata Now we can import our database to the container. ```bash -docker-compose run --rm --user akkoma -d db -docker-compose run --rm akkoma pg_restore -v -U akkoma -j $(grep -c ^processor /proc/cpuinfo) -d akkoma -h db akkoma_backup.sql +docker compose run --rm --user akkoma -d db +docker compose run --rm akkoma pg_restore -v -U akkoma -j $(grep -c ^processor /proc/cpuinfo) -d akkoma -h db akkoma_backup.sql ``` ### Reverse proxies If you're just reusing your old proxy, you may have to uncomment the line in -the docker-compose file under `ports`. You'll find it. +the docker compose file under `ports`. You'll find it. Otherwise, you can use the same setup as the [docker installation guide](./docker_en.md#reverse-proxies). ### Let's go ```bash -docker-compose up -d +docker compose up -d ``` You should now be at the same point as you were before, but with a docker install. From 07b478dc4923ec345484368c72119129ba4cfc83 Mon Sep 17 00:00:00 2001 From: XxXCertifiedForkliftDriverXxX Date: Mon, 26 Jun 2023 13:18:31 +0000 Subject: [PATCH 140/178] Implement blocklists for MediaProxy --- CHANGELOG.md | 6 ++++++ config/config.exs | 3 ++- config/description.exs | 16 +++++++++++++- lib/pleroma/web/media_proxy.ex | 7 ++++++- test/pleroma/web/media_proxy_test.exs | 21 +++++++++++++++++++ .../web/plugs/http_security_plug_test.exs | 6 ++++++ 6 files changed, 56 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97c73a267..2edf2c758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## Unreleased + +## Added +- Added a new configuration option to the MediaProxy feature that allows the blocking of specific domains from using the media proxy or being explicitly allowed by the Content-Security-Policy. + - Please make sure instances you wanted to block media from are not in the MediaProxy `whitelist`, and instead use `blocklist`. + ## 2023.05 ## Added diff --git a/config/config.exs b/config/config.exs index ca397a8fd..3430ee4d7 100644 --- a/config/config.exs +++ b/config/config.exs @@ -443,7 +443,8 @@ # Note: max_read_duration defaults to Pleroma.ReverseProxy.max_read_duration_default/1 max_read_duration: 30_000 ], - whitelist: [] + whitelist: [], + blocklist: [] config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Http, method: :purge, diff --git a/config/description.exs b/config/description.exs index bd20cb239..d425bf386 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1558,7 +1558,21 @@ %{ key: :whitelist, type: {:list, :string}, - description: "List of hosts with scheme to bypass the MediaProxy", + description: """ + List of hosts with scheme to bypass the MediaProxy.\n + The media will be fetched by the client, directly from the remote server.\n + To allow this, it will Content-Security-Policy exceptions for each instance listed.\n + This is to be used for instances you trust and do not want to cache media for. + """, + suggestions: ["http://example.com"] + }, + %{ + key: :blocklist, + type: {:list, :string}, + description: """ + List of hosts with scheme which will not go through the MediaProxy, and will not be explicitly allowed by the Content-Security-Policy. + This is to be used for instances where you do not want their media to go through your server or to be accessed by clients. + """, suggestions: ["http://example.com"] } ] diff --git a/lib/pleroma/web/media_proxy.ex b/lib/pleroma/web/media_proxy.ex index 0b232f14b..9a5f47716 100644 --- a/lib/pleroma/web/media_proxy.ex +++ b/lib/pleroma/web/media_proxy.ex @@ -52,7 +52,7 @@ def url(url) do @spec url_proxiable?(String.t()) :: boolean() def url_proxiable?(url) do - not local?(url) and not whitelisted?(url) + not local?(url) and not whitelisted?(url) and not blocked?(url) end def preview_url(url, preview_params \\ []) do @@ -83,6 +83,11 @@ def whitelisted?(url) do domain in mediaproxy_whitelist_domains end + def blocked?(url) do + %{host: domain} = URI.parse(url) + domain in Config.get([:media_proxy, :whitelist]) + end + defp maybe_get_domain_from_url("http" <> _ = url) do URI.parse(url).host end diff --git a/test/pleroma/web/media_proxy_test.exs b/test/pleroma/web/media_proxy_test.exs index d97874f3a..71d7d605d 100644 --- a/test/pleroma/web/media_proxy_test.exs +++ b/test/pleroma/web/media_proxy_test.exs @@ -199,6 +199,15 @@ test "mediaproxy whitelist" do assert unencoded == url end + test "mediaproxy blocklist" do + clear_config([:media_proxy, :whitelist], ["https://google.com"]) + clear_config([:media_proxy, :blocklist], ["https://feld.me"]) + url = "https://feld.me/foo.png" + + unencoded = MediaProxy.url(url) + assert unencoded == url + end + # TODO: delete after removing support bare domains for media proxy whitelist test "mediaproxy whitelist bare domains whitelist (deprecated)" do clear_config([:media_proxy, :whitelist], ["google.com", "feld.me"]) @@ -220,6 +229,18 @@ test "does not change whitelisted urls" do assert String.starts_with?(encoded, media_url) end + test "does not change blocked urls" do + clear_config([:media_proxy, :whitelist], ["mycdn.akamai.com"]) + clear_config([:media_proxy, :base_url], "https://cache.pleroma.social") + + media_url = "https://mycdn.akamai.com" + + url = "#{media_url}/static/logo.png" + encoded = MediaProxy.url(url) + + assert String.starts_with?(encoded, media_url) + end + test "ensure Pleroma.Upload base_url is always whitelisted" do media_url = "https://media.pleroma.social" clear_config([Pleroma.Upload, :base_url], media_url) diff --git a/test/pleroma/web/plugs/http_security_plug_test.exs b/test/pleroma/web/plugs/http_security_plug_test.exs index d88d4624f..96fff304e 100644 --- a/test/pleroma/web/plugs/http_security_plug_test.exs +++ b/test/pleroma/web/plugs/http_security_plug_test.exs @@ -128,6 +128,12 @@ test "with media_proxy bare domains whitelist (deprecated)", %{conn: conn} do clear_config([:media_proxy, :whitelist], ["example4.com", "example5.com"]) assert_media_img_src(conn, "example5.com example4.com") end + + test "with media_proxy blocklist", %{conn: conn} do + clear_config([:media_proxy, :whitelist], ["https://example6.com", "https://example7.com"]) + clear_config([:media_proxy, :blocklist], ["https://example8.com"]) + assert_media_img_src(conn, "https://example7.com https://example6.com") + end end defp assert_media_img_src(conn, url) do From 767e1272b30342b4d2c44f023fb386256f38c0c6 Mon Sep 17 00:00:00 2001 From: XxXCertifiedForkliftDriverXxX Date: Mon, 26 Jun 2023 13:50:49 +0000 Subject: [PATCH 141/178] Use OS CA store for Mint HTTP connections --- lib/pleroma/application.ex | 3 +++ lib/pleroma/http/adapter_helper.ex | 21 +++++++++++++++++++++ mix.exs | 3 ++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 0273972be..67444ccd8 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -262,11 +262,14 @@ defp http_children do proxy = Pleroma.HTTP.AdapterHelper.format_proxy(proxy_url) pool_size = Config.get([:http, :pool_size]) + :public_key.cacerts_load() + config = [:http, :adapter] |> Config.get([]) |> Pleroma.HTTP.AdapterHelper.add_pool_size(pool_size) |> Pleroma.HTTP.AdapterHelper.maybe_add_proxy_pool(proxy) + |> Pleroma.HTTP.AdapterHelper.maybe_add_cacerts(:public_key.cacerts_get()) |> Keyword.put(:name, MyFinch) [{Finch, config}] diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex index e5da3ffa8..5bfb09f0f 100644 --- a/lib/pleroma/http/adapter_helper.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -47,6 +47,17 @@ def maybe_add_proxy_pool(opts, proxy) do |> put_in([:pools, :default, :conn_opts, :proxy], proxy) end + def maybe_add_cacerts(opts, nil), do: opts + + def maybe_add_cacerts(opts, cacerts) do + opts + |> maybe_add_pools() + |> maybe_add_default_pool() + |> maybe_add_conn_opts() + |> maybe_add_transport_opts() + |> put_in([:pools, :default, :conn_opts, :transport_opts, :cacerts], cacerts) + end + def add_pool_size(opts, pool_size) do opts |> maybe_add_pools() @@ -82,6 +93,16 @@ defp maybe_add_conn_opts(opts) do end end + defp maybe_add_transport_opts(opts) do + transport_opts = get_in(opts, [:pools, :default, :conn_opts, :transport_opts]) + + unless is_nil(transport_opts) do + opts + else + put_in(opts, [:pools, :default, :conn_opts, :transport_opts], []) + end + end + @doc """ Merge default connection & adapter options with received ones. """ diff --git a/mix.exs b/mix.exs index 6ba361e48..24ee55fc8 100644 --- a/mix.exs +++ b/mix.exs @@ -203,7 +203,8 @@ defp deps do {:excoveralls, "0.15.1", only: :test}, {:mox, "~> 1.0", only: :test}, {:websockex, "~> 0.4.3", only: :test}, - {:dialyxir, "~> 1.0", only: [:dev], runtime: false} + {:dialyxir, "~> 1.0", only: [:dev], runtime: false}, + {:mint, "~> 1.5.1", override: true} ] ++ oauth_deps() end From 5144d6f4ba590c64804b5eb8a7ae67e11b4f3c84 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Mon, 29 May 2023 15:46:49 -0400 Subject: [PATCH 142/178] Add OnlyMedia Upload Filter to simplify restricting uploads to audio, image, and video types Original: https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3897 --- docs/docs/configuration/cheatsheet.md | 6 ++++ lib/pleroma/upload/filter.ex | 6 ++-- lib/pleroma/upload/filter/only_media.ex | 20 ++++++++++++ .../pleroma/upload/filter/only_media_test.exs | 32 +++++++++++++++++++ 4 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 lib/pleroma/upload/filter/only_media.ex create mode 100644 test/pleroma/upload/filter/only_media_test.exs diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index 1c4d9ec5d..ef340ffea 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -615,6 +615,12 @@ This filter only strips the GPS and location metadata with Exiftool leaving colo No specific configuration. +#### Pleroma.Upload.Filter.OnlyMedia + +This filter rejects uploads that are not identified with Content-Type matching audio/\*, image/\*, or video/\* + +No specific configuration. + #### Pleroma.Upload.Filter.Mogrify * `args`: List of actions for the `mogrify` command like `"strip"` or `["strip", "auto-orient", {"implode", "1"}]`. diff --git a/lib/pleroma/upload/filter.ex b/lib/pleroma/upload/filter.ex index e5db2fb20..50e0f2c27 100644 --- a/lib/pleroma/upload/filter.ex +++ b/lib/pleroma/upload/filter.ex @@ -38,9 +38,9 @@ def filter([filter | rest], upload) do {:ok, :noop} -> filter(rest, upload) - error -> - Logger.error("#{__MODULE__}: Filter #{filter} failed: #{inspect(error)}") - error + {:error, e} -> + Logger.error("#{__MODULE__}: Filter #{filter} failed: #{inspect(e)}") + {:error, e} end end end diff --git a/lib/pleroma/upload/filter/only_media.ex b/lib/pleroma/upload/filter/only_media.ex new file mode 100644 index 000000000..a9caeba67 --- /dev/null +++ b/lib/pleroma/upload/filter/only_media.ex @@ -0,0 +1,20 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2023 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Upload.Filter.OnlyMedia do + @behaviour Pleroma.Upload.Filter + alias Pleroma.Upload + + def filter(%Upload{content_type: content_type}) do + [type, _subtype] = String.split(content_type, "/") + + if type in ["image", "video", "audio"] do + {:ok, :noop} + else + {:error, "Disallowed content-type: #{content_type}"} + end + end + + def filter(_), do: {:ok, :noop} +end diff --git a/test/pleroma/upload/filter/only_media_test.exs b/test/pleroma/upload/filter/only_media_test.exs new file mode 100644 index 000000000..75be070a1 --- /dev/null +++ b/test/pleroma/upload/filter/only_media_test.exs @@ -0,0 +1,32 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2023 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Upload.Filter.OnlyMediaTest do + use Pleroma.DataCase, async: true + + alias Pleroma.Upload + alias Pleroma.Upload.Filter.OnlyMedia + + test "Allows media Content-Type" do + ["audio/mpeg", "image/jpeg", "video/mp4"] + |> Enum.each(fn type -> + upload = %Upload{ + content_type: type + } + + assert {:ok, :noop} = OnlyMedia.filter(upload) + end) + end + + test "Disallows non-media Content-Type" do + ["application/javascript", "application/pdf", "text/html"] + |> Enum.each(fn type -> + upload = %Upload{ + content_type: type + } + + assert {:error, _} = OnlyMedia.filter(upload) + end) + end +end From 8c956bc671ed84147eb6a4c0a39f46a27de6d799 Mon Sep 17 00:00:00 2001 From: Norm Date: Mon, 26 Jun 2023 10:07:07 -0400 Subject: [PATCH 143/178] Add OnlyMedia upload filter change to changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2edf2c758..ee1e1765a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased -## Added - Added a new configuration option to the MediaProxy feature that allows the blocking of specific domains from using the media proxy or being explicitly allowed by the Content-Security-Policy. - Please make sure instances you wanted to block media from are not in the MediaProxy `whitelist`, and instead use `blocklist`. +- `OnlyMedia` Upload Filter to simplify restricting uploads to audio, image, and video types ## 2023.05 From 8fe29bf5d2f6899f646c2b76744e1bfeeb84c5eb Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 17 Jul 2023 17:53:03 +0100 Subject: [PATCH 144/178] Exclude deactivated users from emoji reaction lists --- .../controllers/emoji_reaction_controller.ex | 13 ++++++++++++- .../controllers/status_controller_test.exs | 5 +++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex index 0933363a6..e762fcad8 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex @@ -41,6 +41,17 @@ def index(%{assigns: %{user: user}} = conn, %{id: activity_id} = params) do end end + defp filter_allowed_user_by_ap_id(ap_ids, excluded_ap_ids) do + Enum.reject(ap_ids, fn ap_id -> + with false <- ap_id in excluded_ap_ids, + %{is_active: true} <- User.get_cached_by_ap_id(ap_id) do + false + else + _ -> true + end + end) + end + def filter_allowed_users(reactions, user, with_muted) do exclude_ap_ids = if is_nil(user) do @@ -51,7 +62,7 @@ def filter_allowed_users(reactions, user, with_muted) do end filter_emoji = fn emoji, users, url -> - case Enum.reject(users, &(&1 in exclude_ap_ids)) do + case filter_allowed_user_by_ap_id(users, exclude_ap_ids) do [] -> nil users -> {emoji, users, url} end diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 6f04975b8..30be34007 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -1960,6 +1960,10 @@ test "index" do {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "🎅") User.mute(user, other_user) + deactivated_user = insert(:user) + {:ok, _} = CommonAPI.react_with_emoji(activity.id, deactivated_user, "🎅") + User.set_activation(deactivated_user, false) + result = conn |> get("/api/v1/statuses/?ids[]=#{activity.id}") @@ -1967,6 +1971,7 @@ test "index" do assert [ %{ + "emoji_reactions" => [], "pleroma" => %{ "emoji_reactions" => [] } From c8904f15a2604e5fa808b668c050ac16ae727523 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 17 Jul 2023 18:17:04 +0100 Subject: [PATCH 145/178] Correct behaviour of mediaproxy blocklist --- lib/pleroma/web/media_proxy.ex | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/media_proxy.ex b/lib/pleroma/web/media_proxy.ex index 9a5f47716..44f927dba 100644 --- a/lib/pleroma/web/media_proxy.ex +++ b/lib/pleroma/web/media_proxy.ex @@ -84,8 +84,13 @@ def whitelisted?(url) do end def blocked?(url) do - %{host: domain} = URI.parse(url) - domain in Config.get([:media_proxy, :whitelist]) + %{scheme: scheme, host: domain} = URI.parse(url) + # Block either the bare domain or the scheme-domain combo + scheme_domain = "#{scheme}://#{domain}" + blocklist = Config.get([:media_proxy, :blocklist]) + + Enum.member?(blocklist, domain) || + Enum.member?(blocklist, scheme_domain) end defp maybe_get_domain_from_url("http" <> _ = url) do From 16d2bfef80f6242953f50ae724915cffd155bd96 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 17 Jul 2023 18:24:53 +0100 Subject: [PATCH 146/178] Ensure embeds will not be served if unauthenticated users could not see it --- CHANGELOG.md | 6 ++++++ lib/pleroma/web/embed_controller.ex | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee1e1765a..1d1135acf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased +## Added + - Added a new configuration option to the MediaProxy feature that allows the blocking of specific domains from using the media proxy or being explicitly allowed by the Content-Security-Policy. - Please make sure instances you wanted to block media from are not in the MediaProxy `whitelist`, and instead use `blocklist`. - `OnlyMedia` Upload Filter to simplify restricting uploads to audio, image, and video types +## Fixed + +- Deactivated users can no longer show up in the emoji reaction list + ## 2023.05 ## Added diff --git a/lib/pleroma/web/embed_controller.ex b/lib/pleroma/web/embed_controller.ex index c7912bb1f..91bd79766 100644 --- a/lib/pleroma/web/embed_controller.ex +++ b/lib/pleroma/web/embed_controller.ex @@ -16,7 +16,7 @@ defmodule Pleroma.Web.EmbedController do def show(conn, %{"id" => id}) do with %Activity{local: true} = activity <- Activity.get_by_id_with_object(id), - true <- Visibility.is_public?(activity.object) do + true <- Visibility.visible_for_user?(activity.object, nil) do {:ok, author} = User.get_or_fetch(activity.object.data["actor"]) conn From c63ae73bc0aaafd80dc3825765a6578177030985 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 17 Jul 2023 19:18:21 +0100 Subject: [PATCH 147/178] Add embed controller tests --- lib/pleroma/web/embed_controller.ex | 19 +++++++--- lib/pleroma/web/views/embed_view.ex | 7 +++- test/pleroma/web/embed_controller_test.exs | 44 ++++++++++++++++++++++ 3 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 test/pleroma/web/embed_controller_test.exs diff --git a/lib/pleroma/web/embed_controller.ex b/lib/pleroma/web/embed_controller.ex index 91bd79766..cffd6e29f 100644 --- a/lib/pleroma/web/embed_controller.ex +++ b/lib/pleroma/web/embed_controller.ex @@ -11,22 +11,31 @@ defmodule Pleroma.Web.EmbedController do alias Pleroma.Web.ActivityPub.Visibility - plug(:put_layout, :embed) - def show(conn, %{"id" => id}) do - with %Activity{local: true} = activity <- - Activity.get_by_id_with_object(id), - true <- Visibility.visible_for_user?(activity.object, nil) do + with {:activity, %Activity{} = activity} <- + {:activity, Activity.get_by_id_with_object(id)}, + {:local, true} <- {:local, activity.local}, + {:visible, true} <- {:visible, Visibility.visible_for_user?(activity, nil)} do {:ok, author} = User.get_or_fetch(activity.object.data["actor"]) conn |> delete_resp_header("x-frame-options") |> delete_resp_header("content-security-policy") + |> put_view(Pleroma.Web.EmbedView) |> render("show.html", activity: activity, author: User.sanitize_html(author), counts: get_counts(activity) ) + else + {:activity, _} -> + render_error(conn, :not_found, "Post not found") + + {:local, false} -> + render_error(conn, :unauthorized, "Federated posts cannot be embedded") + + {:visible, false} -> + render_error(conn, :unauthorized, "Not authorized to view this post") end end diff --git a/lib/pleroma/web/views/embed_view.ex b/lib/pleroma/web/views/embed_view.ex index 81e196730..913d717be 100644 --- a/lib/pleroma/web/views/embed_view.ex +++ b/lib/pleroma/web/views/embed_view.ex @@ -15,7 +15,7 @@ defmodule Pleroma.Web.EmbedView do alias Pleroma.Web.Metadata.Utils alias Pleroma.Web.Router.Helpers - use Phoenix.HTML + import Phoenix.HTML defdelegate full_nickname(user), to: User @@ -55,10 +55,13 @@ defp activity_url(%User{local: false}, %Activity{object: %Object{data: data}}) d data["url"] || data["external_url"] || data["id"] end - defp attachments(%Activity{object: %Object{data: %{"attachment" => attachments}}}) do + defp attachments(%Activity{object: %Object{data: %{"attachment" => attachments}}}) + when is_list(attachments) do attachments end + defp attachments(_), do: [] + defp sensitive?(%Activity{object: %Object{data: %{"sensitive" => sensitive}}}) do sensitive end diff --git a/test/pleroma/web/embed_controller_test.exs b/test/pleroma/web/embed_controller_test.exs new file mode 100644 index 000000000..caf328cc5 --- /dev/null +++ b/test/pleroma/web/embed_controller_test.exs @@ -0,0 +1,44 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.EmbedControllerTest do + use Pleroma.Web.ConnCase, async: true + import Pleroma.Factory + + test "/embed", %{conn: conn} do + activity = insert(:note_activity) + + resp = + conn + |> get("/embed/#{activity.id}") + |> response(200) + + object = Pleroma.Object.get_by_ap_id(activity.data["object"]) + + assert String.contains?(resp, object.data["content"]) + end + + test "/embed with a restricted post", %{conn: conn} do + activity = insert(:note_activity) + clear_config([:restrict_unauthenticated, :activities, :local], true) + + conn + |> get("/embed/#{activity.id}") + |> response(401) + end + + test "/embed with a private post", %{conn: conn} do + user = insert(:user) + + {:ok, activity} = + Pleroma.Web.CommonAPI.post(user, %{ + status: "Mega ultra chicken status: #fried", + visibility: "private" + }) + + conn + |> get("/embed/#{activity.id}") + |> response(401) + end +end From f1611b62926f0f7dd7477fdb2edb6eae9c5177d5 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 17 Jul 2023 19:19:03 +0100 Subject: [PATCH 148/178] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d1135acf..7a81aad09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Fixed - Deactivated users can no longer show up in the emoji reaction list +- Embedded posts can no longer bypass `:restrict\_unauthenticated` ## 2023.05 From 43aef8b5b1d92d1acc2df25af542f5ac2f82c7c9 Mon Sep 17 00:00:00 2001 From: Norm Date: Mon, 17 Jul 2023 14:44:39 -0400 Subject: [PATCH 149/178] fix ImageMagick typo in media_graphics_packages.md --- docs/docs/installation/optional/media_graphics_packages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/installation/optional/media_graphics_packages.md b/docs/docs/installation/optional/media_graphics_packages.md index 94552ec4e..ab9f958f9 100644 --- a/docs/docs/installation/optional/media_graphics_packages.md +++ b/docs/docs/installation/optional/media_graphics_packages.md @@ -1,7 +1,7 @@ # Optional software packages needed for specific functionality For specific Akkoma functionality (which is disabled by default) some or all of the below packages are required: - * `ImageMagic` + * `ImageMagick` * `ffmpeg` * `exiftool` From 33e7ae7637236b859bfabc9016a86e4bbe1e0632 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 17 Jul 2023 20:03:31 +0100 Subject: [PATCH 150/178] Allow nil attachments --- lib/pleroma/web/activity_pub/transmogrifier.ex | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 5c96bf060..742dcb385 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -919,9 +919,13 @@ def add_attributed_to(object) do end def prepare_attachments(object) do + attachments = case Map.get(object, "attachment", []) do + [_ | _] = list -> list + _ -> [] + end + attachments = - object - |> Map.get("attachment", []) + attachments |> Enum.map(fn data -> [%{"mediaType" => media_type, "href" => href} = url | _] = data["url"] From de1e4876952c4962382af7d53c3152647bc239f5 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:01:29 +0100 Subject: [PATCH 151/178] add potential arm setup --- .woodpecker/arm.yml | 65 +++++++++++++++++++++ .woodpecker.yml => .woodpecker/pipeline.yml | 0 2 files changed, 65 insertions(+) create mode 100644 .woodpecker/arm.yml rename .woodpecker.yml => .woodpecker/pipeline.yml (100%) diff --git a/.woodpecker/arm.yml b/.woodpecker/arm.yml new file mode 100644 index 000000000..b3240abe5 --- /dev/null +++ b/.woodpecker/arm.yml @@ -0,0 +1,65 @@ +platform: linux/arm64 + +variables: + - &scw-secrets + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + - &setup-hex "mix local.hex --force && mix local.rebar --force" + - &on-release + when: + event: + - push + - tag + branch: + - develop + - stable + - refs/tags/v* + - refs/tags/stable-* + - &on-stable + when: + event: + - push + - tag + branch: + - stable + - refs/tags/stable-* + - &on-point-release + when: + event: + - push + branch: + - develop + - stable + - &on-pr-open + when: + event: + - pull_request + + - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" + + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" + - &mix-clean "mix deps.clean --all && mix clean" + +pipeline: + # Canonical amd64 + ubuntu22: + image: hexpm/elixir:1.14.3-erlang-25.2.2-ubuntu-jammy-20221130 + when: + event: + - push + branch: + - arm + <<: *on-release + environment: + MIX_ENV: prod + DEBIAN_FRONTEND: noninteractive + commands: + - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git build-essential g++ wget + - *clean + - echo "import Config" > config/prod.secret.exs + - *setup-hex + - *tag-build + - mix deps.get --only prod + - mix release --path release + - zip akkoma-ubuntu-jammy.zip -r release diff --git a/.woodpecker.yml b/.woodpecker/pipeline.yml similarity index 100% rename from .woodpecker.yml rename to .woodpecker/pipeline.yml From f7a4147788872676d515e407c751dd088f0a792d Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:02:41 +0100 Subject: [PATCH 152/178] split by architecture --- .woodpecker/{pipeline.yml => amd64.yml} | 2 ++ 1 file changed, 2 insertions(+) rename .woodpecker/{pipeline.yml => amd64.yml} (99%) diff --git a/.woodpecker/pipeline.yml b/.woodpecker/amd64.yml similarity index 99% rename from .woodpecker/pipeline.yml rename to .woodpecker/amd64.yml index 49718d630..0c7645a63 100644 --- a/.woodpecker/pipeline.yml +++ b/.woodpecker/amd64.yml @@ -1,3 +1,5 @@ +platform: linux/amd64 + variables: - &scw-secrets - SCW_ACCESS_KEY From a91a3f6e60bb17b55d40eafb8373ed31fd6b9725 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:02:54 +0100 Subject: [PATCH 153/178] test on push --- .woodpecker/arm.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.woodpecker/arm.yml b/.woodpecker/arm.yml index b3240abe5..579ffba0c 100644 --- a/.woodpecker/arm.yml +++ b/.woodpecker/arm.yml @@ -50,7 +50,6 @@ pipeline: - push branch: - arm - <<: *on-release environment: MIX_ENV: prod DEBIAN_FRONTEND: noninteractive From 827c6b334453f23df9d179457eb14bfe6607abd9 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:13:14 +0100 Subject: [PATCH 154/178] release --- .woodpecker/arm.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.woodpecker/arm.yml b/.woodpecker/arm.yml index 579ffba0c..82934038a 100644 --- a/.woodpecker/arm.yml +++ b/.woodpecker/arm.yml @@ -62,3 +62,16 @@ pipeline: - mix deps.get --only prod - mix release --path release - zip akkoma-ubuntu-jammy.zip -r release + + release-ubuntu22: + image: akkoma/releaser:arm64 + when: + event: + - push + branch: + - arm + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-ubuntu-jammy.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64-ubuntu-jammy.zip + - /bin/sh /entrypoint.sh From f44babd130fa3be18b1787cac61a5050d06dfddf Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:27:58 +0100 Subject: [PATCH 155/178] restructure CI --- .woodpecker/arm.yml | 77 ----------- .woodpecker/{amd64.yml => build-amd64.yml} | 42 ------ .woodpecker/build-arm64.yml | 146 +++++++++++++++++++++ .woodpecker/docs.yml | 69 ++++++++++ .woodpecker/test.yml | 96 ++++++++++++++ 5 files changed, 311 insertions(+), 119 deletions(-) delete mode 100644 .woodpecker/arm.yml rename .woodpecker/{amd64.yml => build-amd64.yml} (82%) create mode 100644 .woodpecker/build-arm64.yml create mode 100644 .woodpecker/docs.yml create mode 100644 .woodpecker/test.yml diff --git a/.woodpecker/arm.yml b/.woodpecker/arm.yml deleted file mode 100644 index 82934038a..000000000 --- a/.woodpecker/arm.yml +++ /dev/null @@ -1,77 +0,0 @@ -platform: linux/arm64 - -variables: - - &scw-secrets - - SCW_ACCESS_KEY - - SCW_SECRET_KEY - - SCW_DEFAULT_ORGANIZATION_ID - - &setup-hex "mix local.hex --force && mix local.rebar --force" - - &on-release - when: - event: - - push - - tag - branch: - - develop - - stable - - refs/tags/v* - - refs/tags/stable-* - - &on-stable - when: - event: - - push - - tag - branch: - - stable - - refs/tags/stable-* - - &on-point-release - when: - event: - - push - branch: - - develop - - stable - - &on-pr-open - when: - event: - - pull_request - - - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" - - - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" - - &mix-clean "mix deps.clean --all && mix clean" - -pipeline: - # Canonical amd64 - ubuntu22: - image: hexpm/elixir:1.14.3-erlang-25.2.2-ubuntu-jammy-20221130 - when: - event: - - push - branch: - - arm - environment: - MIX_ENV: prod - DEBIAN_FRONTEND: noninteractive - commands: - - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git build-essential g++ wget - - *clean - - echo "import Config" > config/prod.secret.exs - - *setup-hex - - *tag-build - - mix deps.get --only prod - - mix release --path release - - zip akkoma-ubuntu-jammy.zip -r release - - release-ubuntu22: - image: akkoma/releaser:arm64 - when: - event: - - push - branch: - - arm - secrets: *scw-secrets - commands: - - export SOURCE=akkoma-ubuntu-jammy.zip - - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64-ubuntu-jammy.zip - - /bin/sh /entrypoint.sh diff --git a/.woodpecker/amd64.yml b/.woodpecker/build-amd64.yml similarity index 82% rename from .woodpecker/amd64.yml rename to .woodpecker/build-amd64.yml index 0c7645a63..53f7e5939 100644 --- a/.woodpecker/amd64.yml +++ b/.woodpecker/build-amd64.yml @@ -53,48 +53,6 @@ services: POSTGRES_PASSWORD: postgres pipeline: - lint: - <<: *on-pr-open - image: akkoma/ci-base:1.14 - commands: - - mix local.hex --force - - mix local.rebar --force - - mix format --check-formatted - - build: - image: akkoma/ci-base:1.14 - <<: *on-pr-open - environment: - MIX_ENV: test - POSTGRES_DB: pleroma_test - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - DB_HOST: postgres - commands: - - mix local.hex --force - - mix local.rebar --force - - mix deps.get - - mix compile - - test: - image: akkoma/ci-base:1.14 - <<: *on-pr-open - environment: - MIX_ENV: test - POSTGRES_DB: pleroma_test - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - DB_HOST: postgres - commands: - - mix local.hex --force - - mix local.rebar --force - - mix deps.get - - mix compile - - mix ecto.drop -f -q - - mix ecto.create - - mix ecto.migrate - - mix test --preload-modules --exclude erratic --exclude federated --max-cases 4 - # Canonical amd64 ubuntu22: image: hexpm/elixir:1.14.3-erlang-25.2.2-ubuntu-jammy-20221130 diff --git a/.woodpecker/build-arm64.yml b/.woodpecker/build-arm64.yml new file mode 100644 index 000000000..045e2df7d --- /dev/null +++ b/.woodpecker/build-arm64.yml @@ -0,0 +1,146 @@ +platform: linux/arm64 + +variables: + - &scw-secrets + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + - &setup-hex "mix local.hex --force && mix local.rebar --force" + - &on-release + when: + event: + - push + - tag + branch: + - develop + - stable + - refs/tags/v* + - refs/tags/stable-* + - &on-stable + when: + event: + - push + - tag + branch: + - stable + - refs/tags/stable-* + - &on-point-release + when: + event: + - push + branch: + - develop + - stable + - &on-pr-open + when: + event: + - pull_request + + - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" + + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" + - &mix-clean "mix deps.clean --all && mix clean" + +pipeline: + # Canonical arm64 + ubuntu22: + image: hexpm/elixir:1.14.3-erlang-25.2.2-ubuntu-jammy-20221130 + <<: *on-release + environment: + MIX_ENV: prod + DEBIAN_FRONTEND: noninteractive + commands: + - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git build-essential g++ wget + - *clean + - echo "import Config" > config/prod.secret.exs + - *setup-hex + - *tag-build + - mix deps.get --only prod + - mix release --path release + - zip akkoma-ubuntu-jammy.zip -r release + + release-ubuntu22: + image: akkoma/releaser:arm64 + <<: *on-release + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-ubuntu-jammy.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-ubuntu-jammy.zip + - /bin/sh /entrypoint.sh + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64-ubuntu-jammy.zip + - /bin/sh /entrypoint.sh + + debian-bullseye: + image: hexpm/elixir:1.14.3-erlang-25.2.2-debian-bullseye-20230109 + <<: *on-release + environment: + MIX_ENV: prod + DEBIAN_FRONTEND: noninteractive + commands: + - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git build-essential gcc make g++ wget + - *clean + - echo "import Config" > config/prod.secret.exs + - *setup-hex + - *tag-build + - *mix-clean + - mix deps.get --only prod + - mix release --path release + - zip akkoma-arm64.zip -r release + + release-debian: + image: akkoma/releaser:arm64 + <<: *on-release + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-arm64.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64.zip + - /bin/sh /entrypoint.sh + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-debian-stable.zip + - /bin/sh /entrypoint.sh + + # Canonical arm64-musl + musl: + image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.15.6 + <<: *on-release + environment: + MIX_ENV: prod + commands: + - apk add git gcc g++ musl-dev make cmake file-dev rclone wget zip imagemagick + - *clean + - *setup-hex + - *mix-clean + - *tag-build + - mix deps.get --only prod + - mix release --path release + - zip akkoma-arm64-musl.zip -r release + + release-musl: + image: akkoma/releaser:arm64 + <<: *on-release + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-arm64-musl.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64-musl.zip + - /bin/sh /entrypoint.sh + + docs: + <<: *on-point-release + secrets: + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + environment: + CI: "true" + image: python:3.10-slim + commands: + - apt-get update && apt-get install -y rclone wget git zip + - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_arm64 + - mv scaleway-cli_2.5.1_linux_arm64 scaleway-cli + - chmod +x scaleway-cli + - ./scaleway-cli object config install type=rclone + - cd docs + - pip install -r requirements.txt + - mkdocs build + - zip -r docs.zip site/* + - cd site + - rclone copy . scaleway:akkoma-docs/$CI_COMMIT_BRANCH/ diff --git a/.woodpecker/docs.yml b/.woodpecker/docs.yml new file mode 100644 index 000000000..cc4017659 --- /dev/null +++ b/.woodpecker/docs.yml @@ -0,0 +1,69 @@ +platform: linux/amd64 + +depends_on: + - test + - build-amd64 + +variables: + - &scw-secrets + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + - &setup-hex "mix local.hex --force && mix local.rebar --force" + - &on-release + when: + event: + - push + - tag + branch: + - develop + - stable + - refs/tags/v* + - refs/tags/stable-* + - &on-stable + when: + event: + - push + - tag + branch: + - stable + - refs/tags/stable-* + - &on-point-release + when: + event: + - push + branch: + - develop + - stable + - &on-pr-open + when: + event: + - pull_request + + - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" + + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" + - &mix-clean "mix deps.clean --all && mix clean" + +pipeline: + docs: + <<: *on-point-release + secrets: + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + environment: + CI: "true" + image: python:3.10-slim + commands: + - apt-get update && apt-get install -y rclone wget git zip + - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 + - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli + - chmod +x scaleway-cli + - ./scaleway-cli object config install type=rclone + - cd docs + - pip install -r requirements.txt + - mkdocs build + - zip -r docs.zip site/* + - cd site + - rclone copy . scaleway:akkoma-docs/$CI_COMMIT_BRANCH/ diff --git a/.woodpecker/test.yml b/.woodpecker/test.yml new file mode 100644 index 000000000..958c642d5 --- /dev/null +++ b/.woodpecker/test.yml @@ -0,0 +1,96 @@ +platform: linux/amd64 + +variables: + - &scw-secrets + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + - &setup-hex "mix local.hex --force && mix local.rebar --force" + - &on-release + when: + event: + - push + - tag + branch: + - develop + - stable + - refs/tags/v* + - refs/tags/stable-* + - &on-stable + when: + event: + - push + - tag + branch: + - stable + - refs/tags/stable-* + - &on-point-release + when: + event: + - push + branch: + - develop + - stable + - &on-pr-open + when: + event: + - pull_request + + - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" + + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" + - &mix-clean "mix deps.clean --all && mix clean" + +services: + postgres: + image: postgres:15 + when: + event: + - pull_request + environment: + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + +pipeline: + lint: + <<: *on-pr-open + image: akkoma/ci-base:1.14 + commands: + - mix local.hex --force + - mix local.rebar --force + - mix format --check-formatted + + build: + image: akkoma/ci-base:1.14 + <<: *on-pr-open + environment: + MIX_ENV: test + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + DB_HOST: postgres + commands: + - mix local.hex --force + - mix local.rebar --force + - mix deps.get + - mix compile + + test: + image: akkoma/ci-base:1.14 + <<: *on-pr-open + environment: + MIX_ENV: test + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + DB_HOST: postgres + commands: + - mix local.hex --force + - mix local.rebar --force + - mix deps.get + - mix compile + - mix ecto.drop -f -q + - mix ecto.create + - mix ecto.migrate + - mix test --preload-modules --exclude erratic --exclude federated --max-cases 4 From 0fa0f60520caa122cf2d37b6d731415b737bff29 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:29:23 +0100 Subject: [PATCH 156/178] fix deps --- .woodpecker/build-amd64.yml | 3 +++ .woodpecker/build-arm64.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/.woodpecker/build-amd64.yml b/.woodpecker/build-amd64.yml index 53f7e5939..13fd73005 100644 --- a/.woodpecker/build-amd64.yml +++ b/.woodpecker/build-amd64.yml @@ -1,5 +1,8 @@ platform: linux/amd64 +depends_on: + - test + variables: - &scw-secrets - SCW_ACCESS_KEY diff --git a/.woodpecker/build-arm64.yml b/.woodpecker/build-arm64.yml index 045e2df7d..b2584c0ed 100644 --- a/.woodpecker/build-arm64.yml +++ b/.woodpecker/build-arm64.yml @@ -1,5 +1,8 @@ platform: linux/arm64 +depends_on: + - test + variables: - &scw-secrets - SCW_ACCESS_KEY From 6fe7bdba465c307ba3bbd0f934586f4cdd272325 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:31:55 +0100 Subject: [PATCH 157/178] bump alpine version --- .woodpecker/build-amd64.yml | 2 +- .woodpecker/build-arm64.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker/build-amd64.yml b/.woodpecker/build-amd64.yml index 13fd73005..b47b3d6c6 100644 --- a/.woodpecker/build-amd64.yml +++ b/.woodpecker/build-amd64.yml @@ -114,7 +114,7 @@ pipeline: # Canonical amd64-musl musl: - image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.15.6 + image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 <<: *on-release environment: MIX_ENV: prod diff --git a/.woodpecker/build-arm64.yml b/.woodpecker/build-arm64.yml index b2584c0ed..f45a91db0 100644 --- a/.woodpecker/build-arm64.yml +++ b/.woodpecker/build-arm64.yml @@ -103,7 +103,7 @@ pipeline: # Canonical arm64-musl musl: - image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.15.6 + image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 <<: *on-release environment: MIX_ENV: prod From d2d2bbe213212ad914c9df6645479e19cececf64 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:32:02 +0100 Subject: [PATCH 158/178] bump docker alpine --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c6506c48c..b175d7835 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM hexpm/elixir:1.14.3-erlang-25.3-alpine-3.17.2 +FROM hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 ENV MIX_ENV=prod ENV ERL_EPMD_ADDRESS=127.0.0.1 From 394174c0a9953d3cc37a51027c4a98658c5c9b88 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:33:41 +0100 Subject: [PATCH 159/178] remove postgres from amd64 build --- .woodpecker/build-amd64.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.woodpecker/build-amd64.yml b/.woodpecker/build-amd64.yml index b47b3d6c6..3c445988b 100644 --- a/.woodpecker/build-amd64.yml +++ b/.woodpecker/build-amd64.yml @@ -44,17 +44,6 @@ variables: - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" - &mix-clean "mix deps.clean --all && mix clean" -services: - postgres: - image: postgres:15 - when: - event: - - pull_request - environment: - POSTGRES_DB: pleroma_test - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - pipeline: # Canonical amd64 ubuntu22: From 34601065c3259cb7a27d04107b02e9f5522e046d Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:34:05 +0100 Subject: [PATCH 160/178] Mix format --- lib/pleroma/web/activity_pub/transmogrifier.ex | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 742dcb385..5fb9b5d8d 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -919,11 +919,12 @@ def add_attributed_to(object) do end def prepare_attachments(object) do - attachments = case Map.get(object, "attachment", []) do - [_ | _] = list -> list - _ -> [] - end - + attachments = + case Map.get(object, "attachment", []) do + [_ | _] = list -> list + _ -> [] + end + attachments = attachments |> Enum.map(fn data -> From c79c0fe6cc49e2b6ee3f573317d6c9e9c056592b Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 20 Jul 2023 17:45:53 +0100 Subject: [PATCH 161/178] add extra flavours to table --- docs/docs/installation/otp_en.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/docs/installation/otp_en.md b/docs/docs/installation/otp_en.md index 058040e19..2a9735f3c 100644 --- a/docs/docs/installation/otp_en.md +++ b/docs/docs/installation/otp_en.md @@ -19,12 +19,16 @@ This is a little more complex than it used to be (thanks ubuntu) Use the following mapping to figure out your flavour: -| distribution | flavour | available branches | -| ------------- | ------------------ | ------------------- | -| debian stable | amd64 | develop, stable | -| ubuntu focal | amd64 | develop, stable | -| ubuntu jammy | amd64-ubuntu-jammy | develop, stable | -| alpine | amd64-musl | stable | +| distribution | architecture | flavour | available branches | +| --------------- | ------------------ | ------------------- | ------------------- | +| debian bullseye | amd64 | amd64 | develop, stable | +| debian bullseye | arm64 | arm64 | develop, stable | +| ubuntu focal | amd64 | amd64 | develop, stable | +| ubuntu focal | arm64 | arm64 | develop, stable | +| ubuntu jammy | amd64 | amd64-ubuntu-jammy | develop, stable | +| ubuntu jammy | arm64 | arm64-ubuntu-jammy | develop, stable | +| alpine | amd64 | amd64-musl | stable | +| alpine | arm64 | arm64-musl | stable | Other similar distributions will _probably_ work, but if it is not listed above, there is no official support. From 166ddebdbce7df504abaf17bd6ccc1b99c777906 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 13 Jun 2023 12:45:18 +0200 Subject: [PATCH 162/178] Add no_new_privs to OpenRC service files --- installation/init.d/akkoma | 1 + rel/files/installation/init.d/akkoma | 1 + 2 files changed, 2 insertions(+) diff --git a/installation/init.d/akkoma b/installation/init.d/akkoma index 6c1973db4..bd17516f2 100755 --- a/installation/init.d/akkoma +++ b/installation/init.d/akkoma @@ -8,6 +8,7 @@ pidfile="/var/run/akkoma.pid" directory=/opt/akkoma healthcheck_delay=60 healthcheck_timer=30 +no_new_privs="yes" : ${akkoma_port:-4000} diff --git a/rel/files/installation/init.d/akkoma b/rel/files/installation/init.d/akkoma index ea6ea3580..492a0debe 100755 --- a/rel/files/installation/init.d/akkoma +++ b/rel/files/installation/init.d/akkoma @@ -9,6 +9,7 @@ command=/opt/akkoma/bin/pleroma command_args="start" command_user=akkoma command_background=1 +no_new_privs="yes" # Ask process to terminate within 30 seconds, otherwise kill it retry="SIGTERM/30/SIGKILL/5" From a86b010e103771ada1b50ef8ac22e3d791f1a919 Mon Sep 17 00:00:00 2001 From: Norm Date: Thu, 29 Jun 2023 02:14:04 -0400 Subject: [PATCH 163/178] Add NoNewPrivileges to systemd service file for source installs This setting already exists in the OTP installation directory, but doesn't for the one used by source installs. --- installation/akkoma.service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/installation/akkoma.service b/installation/akkoma.service index 2c381ad0d..717693495 100644 --- a/installation/akkoma.service +++ b/installation/akkoma.service @@ -38,6 +38,8 @@ ProtectHome=true ProtectSystem=full ; Sets up a new /dev mount for the process and only adds API pseudo devices like /dev/null, /dev/zero or /dev/random but not physical devices. Disabled by default because it may not work on devices like the Raspberry Pi. PrivateDevices=false +; Ensures that the service process and all its children can never gain new privileges through execve(). +NoNewPrivileges=true ; Drops the sysadmin capability from the daemon. CapabilityBoundingSet=~CAP_SYS_ADMIN From db645563062e6169777cc0eadf172ee282f067b2 Mon Sep 17 00:00:00 2001 From: Norm Date: Thu, 29 Jun 2023 02:15:32 -0400 Subject: [PATCH 164/178] Record no_new_privs hardening to changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a81aad09..c2f3757fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Deactivated users can no longer show up in the emoji reaction list - Embedded posts can no longer bypass `:restrict\_unauthenticated` +## Security + +- Add `no_new_privs` hardening to OpenRC and systemd service files + ## 2023.05 ## Added From d74542148a18dce3d06558ba5e54675d247c65b6 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 22 Jul 2023 21:37:26 +0200 Subject: [PATCH 165/178] Document API changes made for fedibird compatibility Commit 11ec9daa5b742f8a1b408497321392e144f45019 (released with 3.2.0) added the fedibird frontend and tweaked and extended Mastodon API for compatibility with it. Document these changes. --- .../API/differences_in_mastoapi_responses.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/docs/development/API/differences_in_mastoapi_responses.md b/docs/docs/development/API/differences_in_mastoapi_responses.md index b41561c45..053dc9663 100644 --- a/docs/docs/development/API/differences_in_mastoapi_responses.md +++ b/docs/docs/development/API/differences_in_mastoapi_responses.md @@ -25,6 +25,7 @@ Home, public, hashtag & list timelines accept these parameters: ## Statuses - `visibility`: has additional possible values `list` and `local` (for local-only statuses) +- `emoji_reactions`: additional field since Akkoma 3.2.0; identical to `pleroma/emoji_reactions` Has these additional fields under the `pleroma` object: @@ -36,7 +37,9 @@ Has these additional fields under the `pleroma` object: - `spoiler_text`: a map consisting of alternate representations of the `spoiler_text` property with the key being its mimetype. Currently, the only alternate representation supported is `text/plain` - `expires_at`: a datetime (iso8601) that states when the post will expire (be deleted automatically), or empty if the post won't expire - `thread_muted`: true if the thread the post belongs to is muted -- `emoji_reactions`: A list with emoji / reaction maps. The format is `{name: "☕", count: 1, me: true}`. Contains no information about the reacting users, for that use the `/statuses/:id/reactions` endpoint. +- `emoji_reactions`: A list with emoji / reaction maps. The format is `{name: "☕", count: 2, me: true, account_ids: ["UserID1", "UserID2"]}`. + The `account_ids` property was added in Akkoma 3.2.0. + Further info about all reacting users at once, can be found using the `/statuses/:id/reactions` endpoint. - `parent_visible`: If the parent of this post is visible to the user or not. - `pinned_at`: a datetime (iso8601) when status was pinned, `null` otherwise. @@ -214,6 +217,11 @@ Returns: array of Status. The maximum number of statuses is limited to 100 per request. +## PUT `/api/v1/statuses/:id/emoji_reactions/:emoji` + +This endpoint is an extension of the Fedibird Mastodon fork. +It behaves identical to PUT `/api/v1/pleroma/statuses/:id/reactions/:emoji`. + ## PATCH `/api/v1/accounts/update_credentials` Additional parameters can be added to the JSON body/Form data: From 412f9656f63b4ce7d0fb0282322487aa7524b122 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 7 Jul 2023 18:48:42 +0000 Subject: [PATCH 166/178] Translated using Weblate (Spanish) Currently translated at 0.2% (2 of 994 strings) Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Kimberly Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-config-descriptions/es/ Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-errors/ Translation: Pleroma fe/Akkoma Backend (Config Descriptions) Translation: Pleroma fe/Akkoma Backend (Errors) --- .../es/LC_MESSAGES/config_descriptions.po | 2927 +++++++++++------ 1 file changed, 1855 insertions(+), 1072 deletions(-) diff --git a/priv/gettext/es/LC_MESSAGES/config_descriptions.po b/priv/gettext/es/LC_MESSAGES/config_descriptions.po index d4720fc46..074ef0fda 100644 --- a/priv/gettext/es/LC_MESSAGES/config_descriptions.po +++ b/priv/gettext/es/LC_MESSAGES/config_descriptions.po @@ -3,49 +3,26 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-06 22:23+0000\n" -"PO-Revision-Date: 2022-08-06 22:24+0000\n" -"Last-Translator: Anonymous \n" -"Language-Team: Spanish \n" +"PO-Revision-Date: 2023-03-08 17:40+0000\n" +"Last-Translator: Kimberly \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13.1\n" - -# # This file is a PO Template file. -# # -# # "msgid"s here are often extracted from source code. -# # Add new translations manually only if they're dynamic -# # translations that can't be statically extracted. -# # -# # Run "mix gettext.extract" to bring this file up to -# # date. Leave "msgstr"s empty as changing them here has no -# # effect: edit them in PO (.po) files instead. -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd" -msgid "" -"Before enabling this you must add :esshd to mix.exs as one of the " -"extra_applications and generate host keys in your priv dir with ssh-keygen -" -"m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" -msgstr "" -"Before enabling this you must add :esshd to mix.exs as one of the " -"extra_applications and generate host keys in your priv dir with ssh-keygen -" -"m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +"X-Generator: Weblate 4.14\n" #: lib/pleroma/docs/translator.ex:5 -#, fuzzy msgctxt "config description at :logger" msgid "Logger-related settings" -msgstr "Logger-related settings" +msgstr "Configuraciones relacionadas con el registrador" #: lib/pleroma/docs/translator.ex:5 -#, fuzzy msgctxt "config description at :mime" msgid "Mime Types settings" -msgstr "Mime Types settings" +msgstr "Ajustes de los Tipos de Mímica" #: lib/pleroma/docs/translator.ex:5 #, fuzzy @@ -67,24 +44,12 @@ msgctxt "config description at :pleroma" msgid "Authenticator" msgstr "Authenticator" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack" -msgid "Quack-related settings" -msgstr "Quack-related settings" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :cors_plug" msgid "CORS plug config" msgstr "CORS plug config" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd" -msgid "ESSHD" -msgstr "ESSHD" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :logger" @@ -109,12 +74,6 @@ msgctxt "config label at :pleroma" msgid "Pleroma Authenticator" msgstr "Pleroma Authenticator" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack" -msgid "Quack Logger" -msgstr "Quack Logger" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :logger-:console" @@ -149,12 +108,6 @@ msgctxt "config description at :pleroma-:auth" msgid "Authentication / authorization settings" msgstr "Authentication / authorization settings" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:connections_pool" -msgid "Advanced settings for `Gun` connections pool" -msgstr "Advanced settings for `Gun` connections pool" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:email_notifications" @@ -173,38 +126,12 @@ msgctxt "config description at :pleroma-:feed" msgid "Configure feed rendering" msgstr "Configure feed rendering" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations" -msgid "" -"This form can be used to configure a keyword list that keeps the " -"configuration data for any kind of frontend. By default, settings for " -"pleroma_fe are configured. If you want to add your own configuration your " -"settings all fields must be complete." -msgstr "" -"This form can be used to configure a keyword list that keeps the " -"configuration data for any kind of frontend. By default, settings for " -"pleroma_fe are configured. If you want to add your own configuration your " -"settings all fields must be complete." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:frontends" msgid "Installed frontends management" msgstr "Installed frontends management" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher" -msgid "Gopher settings" -msgstr "Gopher settings" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools" -msgid "Advanced settings for `Hackney` connections pools" -msgstr "Advanced settings for `Hackney` connections pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:http" @@ -393,12 +320,6 @@ msgctxt "config description at :pleroma-:oauth2" msgid "Configure OAuth 2 provider capabilities" msgstr "Configure OAuth 2 provider capabilities" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools" -msgid "Advanced settings for `Gun` workers pools" -msgstr "Advanced settings for `Gun` workers pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:populate_hashtags_table" @@ -415,16 +336,6 @@ msgstr "" "Rate limit settings. This is an advanced feature enabled only for :" "authentication by default." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated" -msgid "" -"Disallow viewing timelines, user profiles and statuses for unauthenticated " -"users." -msgstr "" -"Disallow viewing timelines, user profiles and statuses for unauthenticated " -"users." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:rich_media" @@ -435,12 +346,6 @@ msgstr "" "If enabled the instance will parse metadata from attached links to generate " "link previews" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:shout" -msgid "Pleroma shout settings" -msgstr "Pleroma shout settings" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:static_fe" @@ -636,13 +541,6 @@ msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Expired activities settings" msgstr "Expired activities settings" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" -msgid "Prometheus app metrics endpoint configuration" -msgstr "Prometheus app metrics endpoint configuration" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :web_push_encryption-:vapid_details" @@ -689,12 +587,6 @@ msgctxt "config label at :pleroma-:auth" msgid "Auth" msgstr "Auth" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool" -msgid "Connections pool" -msgstr "Connections pool" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:email_notifications" @@ -731,18 +623,6 @@ msgctxt "config label at :pleroma-:frontends" msgid "Frontends" msgstr "Frontends" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher" -msgid "Gopher" -msgstr "Gopher" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools" -msgid "Hackney pools" -msgstr "Hackney pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:http" @@ -899,12 +779,6 @@ msgctxt "config label at :pleroma-:oauth2" msgid "OAuth2" msgstr "OAuth2" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools" -msgid "Pools" -msgstr "Pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:populate_hashtags_table" @@ -929,12 +803,6 @@ msgctxt "config label at :pleroma-:rich_media" msgid "Rich media" msgstr "Rich media" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:shout" -msgid "Shout" -msgstr "Shout" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:static_fe" @@ -1115,48 +983,12 @@ msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Pleroma.Workers.PurgeExpiredActivity" msgstr "Pleroma.Workers.PurgeExpiredActivity" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" -msgid "Pleroma.Web.Endpoint.MetricsExporter" -msgstr "Pleroma.Web.Endpoint.MetricsExporter" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details" msgid "Vapid Details" msgstr "Vapid Details" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :enabled" -msgid "Enables SSH" -msgstr "Enables SSH" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :handler" -msgid "Handler module" -msgstr "Handler module" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :password_authenticator" -msgid "Authenticator module" -msgstr "Authenticator module" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :port" -msgid "Port to connect" -msgstr "Port to connect" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :priv_dir" -msgid "Dir with SSH keys" -msgstr "Dir with SSH keys" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :ex_aws-:s3 > :access_key_id" @@ -1350,57 +1182,6 @@ msgstr "" "html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." "html.eex`." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" -msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." -msgstr "Timeout while `gun` will wait until connection is up. Default: 5000ms." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:connections_pool > :" -"connection_acquisition_retries" -msgid "" -"Number of attempts to acquire the connection from the pool if it is " -"overloaded. Default: 5" -msgstr "" -"Number of attempts to acquire the connection from the pool if it is " -"overloaded. Default: 5" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:connections_pool > :" -"connection_acquisition_wait" -msgid "" -"Timeout to acquire a connection from pool. The total max time is this value " -"multiplied by the number of retries. Default: 250ms." -msgstr "" -"Timeout to acquire a connection from pool. The total max time is this value " -"multiplied by the number of retries. Default: 250ms." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:connections_pool > :max_connections" -msgid "Maximum number of connections in the pool. Default: 250 connections." -msgstr "Maximum number of connections in the pool. Default: 250 connections." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:connections_pool > :reclaim_multiplier" -msgid "" -"Multiplier for the number of idle connection to be reclaimed if the pool is " -"full. For example if the pool maxes out at 250 connections and this setting " -"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " -"overloaded. Default: 0.1" -msgstr "" -"Multiplier for the number of idle connection to be reclaimed if the pool is " -"full. For example if the pool maxes out at 250 connections and this setting " -"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " -"overloaded. Default: 0.1" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:email_notifications > :digest" @@ -1582,14 +1363,6 @@ msgctxt "" msgid "Hide notices statistics (repeats, favorites, ...)" msgstr "Hide notices statistics (repeats, favorites, ...)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" -"hideSitename" -msgid "Hides instance name from PleromaFE banner" -msgstr "Hides instance name from PleromaFE banner" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -1635,18 +1408,6 @@ msgstr "" "compatible with both light and dark themes. If you want a colorful logo you " "must disable logoMask." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" -"minimalScopesMode" -msgid "" -"Limit scope selection to Direct, User default, and Scope of post replying " -"to. Also prevents replying to a DM with a public post from PleromaFE." -msgstr "" -"Limit scope selection to Direct, User default, and Scope of post replying " -"to. Also prevents replying to a DM with a public post from PleromaFE." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -1846,89 +1607,6 @@ msgstr "" "Reference of the installed frontend to be used. Valid config must include " "both `Name` and `Reference` values." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :dstport" -msgid "Port advertised in URLs (optional, defaults to port)" -msgstr "Port advertised in URLs (optional, defaults to port)" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :enabled" -msgid "Enables the gopher interface" -msgstr "Enables the gopher interface" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :ip" -msgid "IP address to bind to" -msgstr "IP address to bind to" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :port" -msgid "Port to bind to" -msgstr "Port to bind to" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :federation" -msgid "Settings for federation pool." -msgstr "Settings for federation pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :federation > :" -"max_connections" -msgid "Number workers in the pool." -msgstr "Number workers in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :federation > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "Timeout while `hackney` will wait for response." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :media" -msgid "Settings for media pool." -msgstr "Settings for media pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :media > :max_connections" -msgid "Number workers in the pool." -msgstr "Number workers in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "Timeout while `hackney` will wait for response." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :upload" -msgid "Settings for upload pool." -msgstr "Settings for upload pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :upload > :max_connections" -msgid "Number workers in the pool." -msgstr "Number workers in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "Timeout while `hackney` will wait for response." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:http > :adapter" @@ -1948,12 +1626,6 @@ msgctxt "" msgid "List of TLS version to use" msgstr "List of TLS version to use" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:http > :proxy_url" -msgid "Proxy URL" -msgstr "Proxy URL" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:http > :user_agent" @@ -2080,22 +1752,6 @@ msgctxt "config description at :pleroma-:instance > :banner_upload_limit" msgid "File size limit of user's profile banners" msgstr "File size limit of user's profile banners" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :birthday_min_age" -msgid "" -"Minimum required age for users to create account. Only used if birthday is " -"required." -msgstr "" -"Minimum required age for users to create account. Only used if birthday is " -"required." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :birthday_required" -msgid "Require users to enter their birthday." -msgstr "Require users to enter their birthday." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :cleanup_attachments" @@ -2177,12 +1833,6 @@ msgstr "" "Timeout (in days) of each external federation target being unreachable prior " "to pausing federating to it" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :healthcheck" -msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" -msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :instance_thumbnail" @@ -2227,19 +1877,6 @@ msgctxt "config description at :pleroma-:instance > :max_account_fields" msgid "The maximum number of custom fields in the user profile. Default: 10." msgstr "The maximum number of custom fields in the user profile. Default: 10." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :max_endorsed_users" -msgid "The maximum number of recommended accounts. 0 will disable the feature." -msgstr "" -"The maximum number of recommended accounts. 0 will disable the feature." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :max_media_attachments" -msgid "Maximum number of post media attachments" -msgstr "Maximum number of post media attachments" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" @@ -2373,48 +2010,12 @@ msgctxt "" msgid "Minimum expiration time (in seconds)" msgstr "Minimum expiration time (in seconds)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :privileged_staff" -msgid "" -"Let moderators access sensitive data (e.g. updating user credentials, get " -"password reset token, delete users, index and read private statuses and " -"chats)" -msgstr "" -"Let moderators access sensitive data (e.g. updating user credentials, get " -"password reset token, delete users, index and read private statuses and " -"chats)" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :profile_directory" msgid "Enable profile directory." msgstr "Enable profile directory." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :public" -msgid "" -"Makes the client API in authenticated mode-only except for user-profiles. " -"Useful for disabling the Local Timeline and The Whole Known Network. Note: " -"when setting to `false`, please also check `:restrict_unauthenticated` " -"setting." -msgstr "" -"Makes the client API in authenticated mode-only except for user-profiles. " -"Useful for disabling the Local Timeline and The Whole Known Network. Note: " -"when setting to `false`, please also check `:restrict_unauthenticated` " -"setting." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :quarantined_instances" -msgid "" -"List of ActivityPub instances where private (DMs, followers-only) activities " -"will not be sent and the reason for doing so" -msgstr "" -"List of ActivityPub instances where private (DMs, followers-only) activities " -"will not be sent and the reason for doing so" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -2591,24 +2192,12 @@ msgctxt "config description at :pleroma-:majic_pool > :size" msgid "Number of majic workers to start." msgstr "Number of majic workers to start." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:manifest > :background_color" -msgid "Describe the background color of the app" -msgstr "Describe the background color of the app" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:manifest > :icons" msgid "Describe the icons of the app" msgstr "Describe the icons of the app" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:manifest > :theme_color" -msgid "Describe the theme color of the app" -msgstr "Describe the theme color of the app" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:markup > :scrub_policy" @@ -3106,126 +2695,6 @@ msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" msgid "The lifetime in seconds of the access token" msgstr "The lifetime in seconds of the access token" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default" -msgid "Settings for default pool." -msgstr "Settings for default pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation" -msgid "Settings for federation pool." -msgstr "Settings for federation pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media" -msgid "Settings for media pool." -msgstr "Settings for media pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload" -msgid "Settings for upload pool." -msgstr "Settings for upload pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -3309,72 +2778,18 @@ msgctxt "config description at :pleroma-:rate_limit > :timeline" msgid "For requests to timelines (each timeline has it's own limiter)" msgstr "For requests to timelines (each timeline has it's own limiter)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :activities" -msgid "Settings for statuses." -msgstr "Settings for statuses." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :activities > :" -"local" -msgid "Disallow view local statuses." -msgstr "Disallow view local statuses." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :activities > :" -"remote" -msgid "Disallow view remote statuses." -msgstr "Disallow view remote statuses." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" msgid "Settings for user profiles." msgstr "Settings for user profiles." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :profiles > :local" -msgid "Disallow view local user profiles." -msgstr "Disallow view local user profiles." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :profiles > :" -"remote" -msgid "Disallow view remote user profiles." -msgstr "Disallow view remote user profiles." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" msgid "Settings for public and federated timelines." msgstr "Settings for public and federated timelines." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :timelines > :" -"federated" -msgid "Disallow view federated timeline." -msgstr "Disallow view federated timeline." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :timelines > :" -"local" -msgid "Disallow view public timeline." -msgstr "Disallow view public timeline." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:rich_media > :enabled" @@ -3427,18 +2842,6 @@ msgstr "" "`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " "to use full name." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:shout > :enabled" -msgid "Enables the backend Shoutbox chat feature." -msgstr "Enables the backend Shoutbox chat feature." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:shout > :limit" -msgid "Shout message character limit." -msgstr "Shout message character limit." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:static_fe > :enabled" @@ -3482,26 +2885,6 @@ msgid "" msgstr "" "Activity pub routes (question activities). Default: `30_000` (30 seconds)." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" -msgid "Enables sending a chat message to newly registered users" -msgstr "Enables sending a chat message to newly registered users" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:welcome > :chat_message > :message" -msgid "A message that will be sent to newly registered users as a chat message" -msgstr "" -"A message that will be sent to newly registered users as a chat message" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:welcome > :chat_message > :sender_nickname" -msgid "The nickname of the local user that sends a welcome chat message" -msgstr "The nickname of the local user that sends a welcome chat message" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" @@ -4178,64 +3561,6 @@ msgctxt "" msgid "Minimum lifetime for ephemeral activity (in seconds)" msgstr "Minimum lifetime for ephemeral activity (in seconds)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"auth" -msgid "Enables HTTP Basic Auth for app metrics endpoint." -msgstr "Enables HTTP Basic Auth for app metrics endpoint." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"enabled" -msgid "[Pleroma extension] Enables app metrics endpoint." -msgstr "[Pleroma extension] Enables app metrics endpoint." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"format" -msgid "App metrics endpoint output format." -msgstr "App metrics endpoint output format." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"ip_whitelist" -msgid "Restrict access of app metrics endpoint to the specified IP addresses." -msgstr "Restrict access of app metrics endpoint to the specified IP addresses." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"path" -msgid "App metrics endpoint URI path." -msgstr "App metrics endpoint URI path." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack > :level" -msgid "Log level" -msgstr "Log level" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack > :meta" -msgid "Configure which metadata you want to report on" -msgstr "Configure which metadata you want to report on" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack > :webhook_url" -msgid "Configure the Slack incoming webhook" -msgstr "Configure the Slack incoming webhook" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -4292,36 +3617,6 @@ msgctxt "config label at :cors_plug > :methods" msgid "Methods" msgstr "Methods" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :handler" -msgid "Handler" -msgstr "Handler" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :password_authenticator" -msgid "Password authenticator" -msgstr "Password authenticator" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :port" -msgid "Port" -msgstr "Port" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :priv_dir" -msgid "Priv dir" -msgstr "Priv dir" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :ex_aws-:s3 > :access_key_id" @@ -4520,38 +3815,6 @@ msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" msgid "OAuth consumer template" msgstr "OAuth consumer template" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" -msgid "Connect timeout" -msgstr "Connect timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:connections_pool > :connection_acquisition_retries" -msgid "Connection acquisition retries" -msgstr "Connection acquisition retries" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:connections_pool > :connection_acquisition_wait" -msgid "Connection acquisition wait" -msgstr "Connection acquisition wait" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" -msgid "Reclaim multiplier" -msgstr "Reclaim multiplier" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:email_notifications > :digest" @@ -4698,14 +3961,6 @@ msgctxt "" msgid "Hide post stats" msgstr "Hide post stats" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" -"hideSitename" -msgid "Hide Sitename" -msgstr "Hide Sitename" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -4735,14 +3990,6 @@ msgctxt "" msgid "Logo mask" msgstr "Logo mask" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" -"minimalScopesMode" -msgid "Minimal scopes mode" -msgstr "Minimal scopes mode" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -4900,85 +4147,6 @@ msgctxt "config label at :pleroma-:frontends > :primary > ref" msgid "Reference" msgstr "Reference" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :dstport" -msgid "Dstport" -msgstr "Dstport" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :ip" -msgid "IP" -msgstr "IP" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :port" -msgid "Port" -msgstr "Port" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :federation" -msgid "Federation" -msgstr "Federation" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:hackney_pools > :federation > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" -msgid "Timeout" -msgstr "Timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :media" -msgid "Media" -msgstr "Media" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" -msgid "Timeout" -msgstr "Timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :upload" -msgid "Upload" -msgstr "Upload" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" -msgid "Timeout" -msgstr "Timeout" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:http > :adapter" @@ -5003,12 +4171,6 @@ msgctxt "config label at :pleroma-:http > :proxy_url" msgid "Proxy URL" msgstr "Proxy URL" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:http > :send_user_agent" -msgid "Send user agent" -msgstr "Send user agent" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:http > :user_agent" @@ -5117,18 +4279,6 @@ msgctxt "config label at :pleroma-:instance > :banner_upload_limit" msgid "Banner upload limit" msgstr "Banner upload limit" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :birthday_min_age" -msgid "Birthday min age" -msgstr "Birthday min age" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :birthday_required" -msgid "Birthday required" -msgstr "Birthday required" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:instance > :cleanup_attachments" @@ -5215,18 +4365,6 @@ msgctxt "config label at :pleroma-:instance > :max_account_fields" msgid "Max account fields" msgstr "Max account fields" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :max_endorsed_users" -msgid "Max endorsed users" -msgstr "Max endorsed users" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :max_media_attachments" -msgid "Max media attachments" -msgstr "Max media attachments" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" @@ -5895,102 +5033,6 @@ msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" msgid "Token expires in" msgstr "Token expires in" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default" -msgid "Default" -msgstr "Default" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default > :size" -msgid "Size" -msgstr "Size" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation" -msgid "Federation" -msgstr "Federation" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation > :size" -msgid "Size" -msgstr "Size" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media" -msgid "Media" -msgstr "Media" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media > :size" -msgid "Size" -msgstr "Size" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload" -msgid "Upload" -msgstr "Upload" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload > :size" -msgid "Size" -msgstr "Size" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -6149,18 +5191,6 @@ msgctxt "config label at :pleroma-:rich_media > :ttl_setters" msgid "TTL setters" msgstr "TTL setters" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:shout > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:shout > :limit" -msgid "Limit" -msgstr "Limit" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:static_fe > :enabled" @@ -6203,30 +5233,6 @@ msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" msgid "Activity pub question" msgstr "Activity pub question" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message" -msgid "Chat message" -msgstr "Chat message" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message > :message" -msgid "Message" -msgstr "Message" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" -msgid "Sender nickname" -msgstr "Sender nickname" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:welcome > :direct_message" @@ -7003,60 +6009,6 @@ msgctxt "" msgid "Min lifetime" msgstr "Min lifetime" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" -msgid "Auth" -msgstr "Auth" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" -msgid "Format" -msgstr "Format" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"ip_whitelist" -msgid "IP Whitelist" -msgstr "IP Whitelist" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" -msgid "Path" -msgstr "Path" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack > :level" -msgid "Level" -msgstr "Level" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack > :meta" -msgid "Meta" -msgstr "Meta" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack > :webhook_url" -msgid "Webhook URL" -msgstr "Webhook URL" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" @@ -7075,20 +6027,6 @@ msgctxt "config label at :web_push_encryption-:vapid_details > :subject" msgid "Subject" msgstr "Subject" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" -msgid "Require HTTP signatures for AP fetches" -msgstr "Require HTTP signatures for AP fetches" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :short_description" -msgid "" -"Shorter version of instance description. It can be seen on `/api/v1/instance`" -msgstr "" -"Shorter version of instance description. It can be seen on `/api/v1/instance`" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" @@ -7097,6 +6035,1851 @@ msgstr "Authorized fetch mode" #: lib/pleroma/docs/translator.ex:5 #, fuzzy -msgctxt "config label at :pleroma-:instance > :short_description" -msgid "Short description" -msgstr "Short description" +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures on AP fetches" +msgstr "Require HTTP signatures for AP fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:activitypub > :max_collection_objects" +msgid "" +"The maximum number of items to fetch from a remote collections. Setting this " +"too low can lead to only getting partial collections, but too high and you " +"can end up fetching far too many objects." +msgstr "" +"The maximum number of items to fetch from a remote collections. Setting this " +"too low can lead to only getting partial collections, but too high and you " +"can end up fetching far too many objects." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:argos_translate" +msgid "ArgosTranslate Settings." +msgstr "Preload-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:argos_translate > :command_argos_translate" +msgid "" +"command for `argos-translate`. Can be the command if it's in your PATH, or " +"the full path to the file." +msgstr "" +"command for `argos-translate`. Can be the command if it's in your PATH, or " +"the full path to the file." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:argos_translate > :command_argospm" +msgid "" +"command for `argospm`. Can be the command if it's in your PATH, or the full " +"path to the file." +msgstr "" +"command for `argospm`. Can be the command if it's in your PATH, or the full " +"path to the file." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:argos_translate > :strip_html" +msgid "Strip html from the post before translating it." +msgstr "Strip html from the post before translating it." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:deepl" +msgid "DeepL Settings." +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:deepl > :api_key" +msgid "API key for DeepL" +msgstr "API key for DeepL" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:deepl > :tier" +msgid "API Tier" +msgstr "API Tier" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe and masto_fe are configured. If you want to add your own " +"configuration your settings all fields must be complete." +msgstr "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe are configured. If you want to add your own configuration your " +"settings all fields must be complete." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :masto_fe" +msgid "Settings for Masto FE" +msgstr "Settings for Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :masto_fe > :" +"showInstanceSpecificPanel" +msgid "Whenether to show the instance's specific panel" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"conversationDisplay" +msgid "How to display conversations (linear or tree)" +msgstr "How to display conversations (linear or tree)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteFavicon" +msgid "Whether to hide the instance favicon from the navbar" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteName" +msgid "Whether to hide the site name from the navbar" +msgstr "Whether to hide the site name from the navbar" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"renderMisskeyMarkdown" +msgid "Whether to render Misskey-flavoured markdown" +msgstr "Whether to render Misskey-flavoured markdown" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showNavShortcuts" +msgid "Whether to put extra navigation options on the navbar" +msgstr "Whether to put extra navigation options on the navbar" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showPanelNavShortcuts" +msgid "Whether to put timeline nav tabs on the top of the panel" +msgstr "Whether to put timeline nav tabs on the top of the panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showWiderShortcuts" +msgid "Whether to add extra space between navbar icons" +msgstr "Whether to add extra space between navbar icons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"stopGifs" +msgid "Whether to pause animated images until they're hovered on" +msgstr "Whether to pause animated images until they're hovered on" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon" +msgid "Mastodon frontend" +msgstr "Admin frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon > name" +msgid "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon > ref" +msgid "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger" +msgid "Swagger API reference frontend" +msgstr "Swagger API reference frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > enabled" +msgid "Whether to have this enabled at all" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > name" +msgid "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > ref" +msgid "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :pool_size" +msgid "Number of concurrent outbound HTTP requests to allow. Default 50." +msgstr "Number of concurrent outbound HTTP requests to allow. Default 50." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :pool_timeout" +msgid "Timeout for initiating HTTP requests (in ms, default 5000)" +msgstr "Timeout for initiating HTTP requests (in ms, default 5000)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "" +"Proxy URL - of the format http://host:port. Advise setting in .exs instead " +"of admin-fe due to this being set at boot-time." +msgstr "" +"Proxy URL - of the format http://host:port. Advise setting in .exs instead " +"of admin-fe due to this being set at boot-time." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :receive_timeout" +msgid "" +"Timeout for waiting on remote servers to respond to HTTP requests (in ms, " +"default 15000)" +msgstr "" +"Timeout for waiting on remote servers to respond to HTTP requests (in ms, " +"default 15000)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :export_prometheus_metrics" +msgid "Enable prometheus metrics (at /api/v1/akkoma/metrics)" +msgstr "Enable prometheus metrics (at /api/v1/akkoma/metrics)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :languages" +msgid "Languages the instance uses" +msgstr "Name of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :local_bubble" +msgid "" +"List of instances that make up your local bubble (closely-related " +"instances). Used to populate the 'bubble' timeline (domain only)." +msgstr "" +"List of instances that make up your local bubble (closely-related instances)" +". Used to populate the 'bubble' timeline (domain only)." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses)" +msgstr "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses and " +"chats)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :public" +msgid "" +"Switching this on will allow unauthenticated users access to all public " +"resources on your instance Switching it off is useful for disabling the " +"Local Timeline and The Whole Known Network. Note: when setting to `false`, " +"please also check `:restrict_unauthenticated` setting." +msgstr "" +"Makes the client API in authenticated mode-only except for user-profiles. " +"Useful for disabling the Local Timeline and The Whole Known Network. Note: " +"when setting to `false`, please also check `:restrict_unauthenticated` " +"setting." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "" +"(Deprecated, will be removed in next release) List of ActivityPub instances " +"where activities will not be sent, and the reason for doing so" +msgstr "" +"List of ActivityPub instances where private (DMs, followers-only) activities " +"will not be sent and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instances_nodeinfo" +msgid "Control favicons for instances" +msgstr "Control favicons for instances" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instances_nodeinfo > :enabled" +msgid "Allow/disallow getting instance nodeinfo" +msgstr "Allow/disallow displaying and getting instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:libre_translate" +msgid "LibreTranslate Settings." +msgstr "Logger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:libre_translate > :api_key" +msgid "API key for libretranslate" +msgstr "API key for libretranslate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:libre_translate > :url" +msgid "URL for libretranslate" +msgstr "URL for libretranslate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "" +"Describe the background color of the app - this is only used for mastodon-fe" +msgstr "Describe the background color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app - this is only used for mastodon-fe" +msgstr "Describe the theme color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "" +"Obfuscate domains in MRF transparency. This is useful if the domain you're " +"blocking contains words you don't want displayed, but still want to disclose " +"the MRF settings." +msgstr "" +"Obfuscate domains in MRF transparency. This is useful if the domain you're " +"blocking contains words you don't want displayed, but still want to disclose " +"the MRF settings." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf_inline_quote" +msgid "Force quote post URLs inline" +msgstr "Force quote post URLs inline" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix before the link" +msgstr "Prefix before the link" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :handle_threads" +msgid "" +"Enable to filter replies to threads based from their originating instance, " +"using the reject and accept rules" +msgstr "" +"Enable to filter replies to threads based from their originating instance, " +"using the reject and accept rules" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "" +"Disallow unauthenticated viewing of timelines, user profiles and statuses." +msgstr "" +"Disallow viewing timelines, user profiles and statuses for unauthenticated " +"users." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for posts." +msgstr "Settings for statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities > :" +"local" +msgid "Disallow viewing local posts." +msgstr "Disallow view local statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities > :" +"remote" +msgid "Disallow viewing remote posts." +msgstr "Disallow view remote statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow viewing local user profiles." +msgstr "Disallow view local user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :profiles > :" +"remote" +msgid "Disallow viewing remote user profiles." +msgstr "Disallow view remote user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :timelines > :" +"federated" +msgid "Disallow viewing the whole known network timeline." +msgstr "Disallow view federated timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :timelines > :" +"local" +msgid "Disallow viewing the public timeline." +msgstr "Disallow view public timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:translator" +msgid "Translation Settings" +msgstr "Invalidation script settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:translator > :enabled" +msgid "Is translation enabled?" +msgstr "Streaming enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:translator > :module" +msgid "Translation module." +msgstr "Handler module" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:workers > :timeout" +msgid "Timeout for jobs, per `Oban` queue, in ms" +msgstr "Max retry attempts for failed jobs, per `Oban` queue" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search" +msgid "General search settings." +msgstr "General MRF settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search > :module" +msgid "Selected search module." +msgstr "Rejected shortcodes" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch settings." +msgstr "Email template settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "" +"The API module used by Elasticsearch. Should always be Elasticsearch.API.HTTP" +msgstr "" +"The API module used by Elasticsearch. Should always be Elasticsearch.API.HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes" +msgid "The indices to set up in Elasticsearch" +msgstr "The indices to set up in Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities" +msgid "Config for the index to use for activities" +msgstr "Config for the index to use for activities" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :bulk_page_size" +msgid "Size for bulk put requests, mostly used on building the index" +msgstr "Size for bulk put requests, mostly used on building the index" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :bulk_wait_interval" +msgid "Time to wait between bulk put requests (in ms)" +msgstr "Time to wait between bulk put requests (in ms)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :settings" +msgid "" +"Path to the file containing index settings for the activities index. Should " +"contain a mapping." +msgstr "" +"Path to the file containing index settings for the activities index. Should " +"contain a mapping." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :sources" +msgid "The internal types to use for this index" +msgstr "The internal types to use for this index" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :store" +msgid "The internal store module" +msgstr "Authenticator module" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"json_library" +msgid "" +"The JSON module used to encode/decode when communicating with Elasticsearch" +msgstr "" +"The JSON module used to encode/decode when communicating with Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"password" +msgid "" +"Password to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" +"Password to connect to ES. Set to nil if your cluster is unauthenticated." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Elasticsearch URL." +msgstr "Elasticsearch URL." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"username" +msgid "" +"Username to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" +"Username to connect to ES. Set to nil if your cluster is unauthenticated." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch" +msgid "Meilisearch settings." +msgstr "Mailer-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Meilisearch > :" +"initial_indexing_chunk_size" +msgid "" +"Amount of posts in a batch when running the initial indexing operation. " +"Should probably not be more than 100000 since there's a limit on maximum " +"insert size" +msgstr "" +"Amount of posts in a batch when running the initial indexing operation. " +"Should probably not be more than 100000 since there's a limit on maximum " +"insert size" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "" +"Private key for meilisearch authentication, or `nil` to disable private key " +"authentication." +msgstr "" +"Private key for meilisearch authentication, or `nil` to disable private key " +"authentication." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Meilisearch URL." +msgstr "Meilisearch URL." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "" +"Specific provider to hand out themes to instances that scrape index.html" +msgstr "" +"Specific provider to hand out themes to instances that scrape index.html" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :" +"theme_color" +msgid "" +"The 'accent color' of the instance, used in places like misskey's instance " +"ticker" +msgstr "" +"The 'accent color' of the instance, used in places like misskey's instance " +"ticker" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:activitypub > :max_collection_objects" +msgid "Max collection objects" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate" +msgid "Argos translate" +msgstr "Argos translate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :command_argos_translate" +msgid "Command argos translate" +msgstr "Command argos translate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :command_argospm" +msgid "Command argospm" +msgstr "Cmd args" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :strip_html" +msgid "Strip html" +msgstr "Strict" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:deepl" +msgid "DeepL" +msgstr "DeepL" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:deepl > :api_key" +msgid "Api key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:deepl > :tier" +msgid "Tier" +msgstr "Tier" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :masto_fe" +msgid "Masto FE" +msgstr "Masto FE" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :masto_fe > :" +"showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "Show instance specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"conversationDisplay" +msgid "Conversation display style" +msgstr "Conversation display style" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteFavicon" +msgid "Hide site favicon" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteName" +msgid "Hide site name" +msgstr "Hide Sitename" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"renderMisskeyMarkdown" +msgid "Render misskey markdown" +msgstr "Render misskey markdown" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showNavShortcuts" +msgid "Show navbar shortcuts" +msgstr "Show navbar shortcuts" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showPanelNavShortcuts" +msgid "Show timeline panel nav shortcuts" +msgstr "Show timeline panel nav shortcuts" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showWiderShortcuts" +msgid "Increase navbar shortcut spacing" +msgstr "Increase navbar shortcut spacing" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :stopGifs" +msgid "Stop Gifs" +msgstr "Stop Gifs" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon" +msgid "Mastodon" +msgstr "Mastodon" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger" +msgid "Swagger" +msgstr "Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:http > :pool_size" +msgid "Pool size" +msgstr "Pools" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:http > :pool_timeout" +msgid "HTTP Pool Request Timeout" +msgstr "HTTP Pool Request Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:http > :receive_timeout" +msgid "HTTP Receive Timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instance > :export_prometheus_metrics" +msgid "Export prometheus metrics" +msgstr "Export prometheus metrics" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instance > :languages" +msgid "Languages" +msgstr "Languages" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instance > :local_bubble" +msgid "Local bubble" +msgstr "Local bubble" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instances_nodeinfo" +msgid "Instances nodeinfo" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instances_nodeinfo > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:libre_translate" +msgid "Libre translate" +msgstr "Libre translate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:libre_translate > :api_key" +msgid "Api key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:libre_translate > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "MRF domain obfuscation" +msgstr "MRF domain obfuscation" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf_inline_quote" +msgid "MRF Inline Quote" +msgstr "MRF Inline Quote" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix" +msgstr "Prefix" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :handle_threads" +msgid "Apply to entire threads" +msgstr "Apply to entire threads" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:translator" +msgid "Translator" +msgstr "Translator" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:translator > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:translator > :module" +msgid "Module" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:workers > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search" +msgid "Search" +msgstr "Search" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search > :module" +msgid "Module" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch" +msgstr "Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "Api" +msgstr "Api" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes" +msgid "Indexes" +msgstr "Indexes" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities" +msgid "Activities" +msgstr "Activities" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :bulk_page_size" +msgid "Bulk page size" +msgstr "Bulk page size" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :bulk_wait_interval" +msgid "Bulk wait interval" +msgstr "Bulk wait interval" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :settings" +msgid "Settings" +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :sources" +msgid "Sources" +msgstr "Sources" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :store" +msgid "Store" +msgstr "Store" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :json_library" +msgid "Json library" +msgstr "Json library" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :password" +msgid "Password" +msgstr "Password" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :username" +msgid "Username" +msgstr "Username" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch" +msgid "Pleroma.Search.Meilisearch" +msgstr "Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Meilisearch > :" +"initial_indexing_chunk_size" +msgid "Initial indexing chunk size" +msgstr "Initial indexing chunk size" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "Private key" +msgstr "Private key" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "Pleroma.Web.Metadata.Providers.Theme" +msgstr "Pleroma.Web.Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :theme_color" +msgid "Theme color" +msgstr "Theme color" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/v1/pleroma/healthcheck`" +msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" + +# # This file is a PO Template file. +# # +# # "msgid"s here are often extracted from source code. +# # Add new translations manually only if they're dynamic +# # translations that can't be statically extracted. +# # +# # Run "mix gettext.extract" to bring this file up to +# # date. Leave "msgstr"s empty as changing them here has no +# # effect: edit them in PO (.po) files instead. +#, fuzzy +#~ msgctxt "config description at :esshd" +#~ msgid "" +#~ "Before enabling this you must add :esshd to mix.exs as one of the " +#~ "extra_applications and generate host keys in your priv dir with ssh-" +#~ "keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +#~ msgstr "" +#~ "Before enabling this you must add :esshd to mix.exs as one of the " +#~ "extra_applications and generate host keys in your priv dir with ssh-" +#~ "keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" + +#, fuzzy +#~ msgctxt "config description at :quack" +#~ msgid "Quack-related settings" +#~ msgstr "Quack-related settings" + +#, fuzzy +#~ msgctxt "config label at :esshd" +#~ msgid "ESSHD" +#~ msgstr "ESSHD" + +#, fuzzy +#~ msgctxt "config label at :quack" +#~ msgid "Quack Logger" +#~ msgstr "Quack Logger" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:connections_pool" +#~ msgid "Advanced settings for `Gun` connections pool" +#~ msgstr "Advanced settings for `Gun` connections pool" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher" +#~ msgid "Gopher settings" +#~ msgstr "Gopher settings" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools" +#~ msgid "Advanced settings for `Hackney` connections pools" +#~ msgstr "Advanced settings for `Hackney` connections pools" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools" +#~ msgid "Advanced settings for `Gun` workers pools" +#~ msgstr "Advanced settings for `Gun` workers pools" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:shout" +#~ msgid "Pleroma shout settings" +#~ msgstr "Pleroma shout settings" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +#~ msgid "Prometheus app metrics endpoint configuration" +#~ msgstr "Prometheus app metrics endpoint configuration" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:connections_pool" +#~ msgid "Connections pool" +#~ msgstr "Connections pool" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher" +#~ msgid "Gopher" +#~ msgstr "Gopher" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools" +#~ msgid "Hackney pools" +#~ msgstr "Hackney pools" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:shout" +#~ msgid "Shout" +#~ msgstr "Shout" + +#, fuzzy +#~ msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +#~ msgid "Pleroma.Web.Endpoint.MetricsExporter" +#~ msgstr "Pleroma.Web.Endpoint.MetricsExporter" + +#, fuzzy +#~ msgctxt "config description at :esshd > :enabled" +#~ msgid "Enables SSH" +#~ msgstr "Enables SSH" + +#, fuzzy +#~ msgctxt "config description at :esshd > :port" +#~ msgid "Port to connect" +#~ msgstr "Port to connect" + +#, fuzzy +#~ msgctxt "config description at :esshd > :priv_dir" +#~ msgid "Dir with SSH keys" +#~ msgstr "Dir with SSH keys" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :connect_timeout" +#~ msgid "" +#~ "Timeout while `gun` will wait until connection is up. Default: 5000ms." +#~ msgstr "" +#~ "Timeout while `gun` will wait until connection is up. Default: 5000ms." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :" +#~ "connection_acquisition_retries" +#~ msgid "" +#~ "Number of attempts to acquire the connection from the pool if it is " +#~ "overloaded. Default: 5" +#~ msgstr "" +#~ "Number of attempts to acquire the connection from the pool if it is " +#~ "overloaded. Default: 5" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :" +#~ "connection_acquisition_wait" +#~ msgid "" +#~ "Timeout to acquire a connection from pool. The total max time is this " +#~ "value multiplied by the number of retries. Default: 250ms." +#~ msgstr "" +#~ "Timeout to acquire a connection from pool. The total max time is this " +#~ "value multiplied by the number of retries. Default: 250ms." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :max_connections" +#~ msgid "Maximum number of connections in the pool. Default: 250 connections." +#~ msgstr "" +#~ "Maximum number of connections in the pool. Default: 250 connections." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :reclaim_multiplier" +#~ msgid "" +#~ "Multiplier for the number of idle connection to be reclaimed if the pool " +#~ "is full. For example if the pool maxes out at 250 connections and this " +#~ "setting is set to 0.3, the pool will reclaim at most 75 idle connections " +#~ "if it's overloaded. Default: 0.1" +#~ msgstr "" +#~ "Multiplier for the number of idle connection to be reclaimed if the pool " +#~ "is full. For example if the pool maxes out at 250 connections and this " +#~ "setting is set to 0.3, the pool will reclaim at most 75 idle connections " +#~ "if it's overloaded. Default: 0.1" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +#~ "hideSitename" +#~ msgid "Hides instance name from PleromaFE banner" +#~ msgstr "Hides instance name from PleromaFE banner" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +#~ "minimalScopesMode" +#~ msgid "" +#~ "Limit scope selection to Direct, User default, and Scope of post replying " +#~ "to. Also prevents replying to a DM with a public post from PleromaFE." +#~ msgstr "" +#~ "Limit scope selection to Direct, User default, and Scope of post replying " +#~ "to. Also prevents replying to a DM with a public post from PleromaFE." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :dstport" +#~ msgid "Port advertised in URLs (optional, defaults to port)" +#~ msgstr "Port advertised in URLs (optional, defaults to port)" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :enabled" +#~ msgid "Enables the gopher interface" +#~ msgstr "Enables the gopher interface" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :ip" +#~ msgid "IP address to bind to" +#~ msgstr "IP address to bind to" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :port" +#~ msgid "Port to bind to" +#~ msgstr "Port to bind to" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :federation" +#~ msgid "Settings for federation pool." +#~ msgstr "Settings for federation pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :federation > :" +#~ "max_connections" +#~ msgid "Number workers in the pool." +#~ msgstr "Number workers in the pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :federation > :timeout" +#~ msgid "Timeout while `hackney` will wait for response." +#~ msgstr "Timeout while `hackney` will wait for response." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :media" +#~ msgid "Settings for media pool." +#~ msgstr "Settings for media pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :media > :max_connections" +#~ msgid "Number workers in the pool." +#~ msgstr "Number workers in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +#~ msgid "Timeout while `hackney` will wait for response." +#~ msgstr "Timeout while `hackney` will wait for response." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :upload" +#~ msgid "Settings for upload pool." +#~ msgstr "Settings for upload pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :upload > :max_connections" +#~ msgid "Number workers in the pool." +#~ msgstr "Number workers in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +#~ msgid "Timeout while `hackney` will wait for response." +#~ msgstr "Timeout while `hackney` will wait for response." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:http > :proxy_url" +#~ msgid "Proxy URL" +#~ msgstr "Proxy URL" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :birthday_min_age" +#~ msgid "" +#~ "Minimum required age for users to create account. Only used if birthday " +#~ "is required." +#~ msgstr "" +#~ "Minimum required age for users to create account. Only used if birthday " +#~ "is required." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :birthday_required" +#~ msgid "Require users to enter their birthday." +#~ msgstr "Require users to enter their birthday." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +#~ msgid "" +#~ "The maximum number of recommended accounts. 0 will disable the feature." +#~ msgstr "" +#~ "The maximum number of recommended accounts. 0 will disable the feature." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :max_media_attachments" +#~ msgid "Maximum number of post media attachments" +#~ msgstr "Maximum number of post media attachments" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default" +#~ msgid "Settings for default pool." +#~ msgstr "Settings for default pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :federation" +#~ msgid "Settings for federation pool." +#~ msgstr "Settings for federation pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:pools > :federation > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :federation > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media" +#~ msgid "Settings for media pool." +#~ msgstr "Settings for media pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload" +#~ msgid "Settings for upload pool." +#~ msgstr "Settings for upload pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:shout > :enabled" +#~ msgid "Enables the backend Shoutbox chat feature." +#~ msgstr "Enables the backend Shoutbox chat feature." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:shout > :limit" +#~ msgid "Shout message character limit." +#~ msgstr "Shout message character limit." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +#~ msgid "Enables sending a chat message to newly registered users" +#~ msgstr "Enables sending a chat message to newly registered users" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +#~ msgid "" +#~ "A message that will be sent to newly registered users as a chat message" +#~ msgstr "" +#~ "A message that will be sent to newly registered users as a chat message" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +#~ msgid "The nickname of the local user that sends a welcome chat message" +#~ msgstr "The nickname of the local user that sends a welcome chat message" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "auth" +#~ msgid "Enables HTTP Basic Auth for app metrics endpoint." +#~ msgstr "Enables HTTP Basic Auth for app metrics endpoint." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "enabled" +#~ msgid "[Pleroma extension] Enables app metrics endpoint." +#~ msgstr "[Pleroma extension] Enables app metrics endpoint." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "format" +#~ msgid "App metrics endpoint output format." +#~ msgstr "App metrics endpoint output format." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "ip_whitelist" +#~ msgid "" +#~ "Restrict access of app metrics endpoint to the specified IP addresses." +#~ msgstr "" +#~ "Restrict access of app metrics endpoint to the specified IP addresses." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "path" +#~ msgid "App metrics endpoint URI path." +#~ msgstr "App metrics endpoint URI path." + +#, fuzzy +#~ msgctxt "config description at :quack > :level" +#~ msgid "Log level" +#~ msgstr "Log level" + +#, fuzzy +#~ msgctxt "config description at :quack > :meta" +#~ msgid "Configure which metadata you want to report on" +#~ msgstr "Configure which metadata you want to report on" + +#, fuzzy +#~ msgctxt "config description at :quack > :webhook_url" +#~ msgid "Configure the Slack incoming webhook" +#~ msgstr "Configure the Slack incoming webhook" + +#, fuzzy +#~ msgctxt "config label at :esshd > :handler" +#~ msgid "Handler" +#~ msgstr "Handler" + +#, fuzzy +#~ msgctxt "config label at :esshd > :password_authenticator" +#~ msgid "Password authenticator" +#~ msgstr "Password authenticator" + +#, fuzzy +#~ msgctxt "config label at :esshd > :port" +#~ msgid "Port" +#~ msgstr "Port" + +#, fuzzy +#~ msgctxt "config label at :esshd > :priv_dir" +#~ msgid "Priv dir" +#~ msgstr "Priv dir" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +#~ msgid "Connect timeout" +#~ msgstr "Connect timeout" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:connections_pool > :" +#~ "connection_acquisition_retries" +#~ msgid "Connection acquisition retries" +#~ msgstr "Connection acquisition retries" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +#~ msgid "Connection acquisition wait" +#~ msgstr "Connection acquisition wait" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +#~ msgid "Reclaim multiplier" +#~ msgstr "Reclaim multiplier" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +#~ "minimalScopesMode" +#~ msgid "Minimal scopes mode" +#~ msgstr "Minimal scopes mode" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :dstport" +#~ msgid "Dstport" +#~ msgstr "Dstport" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :ip" +#~ msgid "IP" +#~ msgstr "IP" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :port" +#~ msgid "Port" +#~ msgstr "Port" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :federation" +#~ msgid "Federation" +#~ msgstr "Federation" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:hackney_pools > :federation > :max_connections" +#~ msgid "Max connections" +#~ msgstr "Max connections" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :media" +#~ msgid "Media" +#~ msgstr "Media" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:hackney_pools > :media > :max_connections" +#~ msgid "Max connections" +#~ msgstr "Max connections" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +#~ msgid "Timeout" +#~ msgstr "Timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :upload" +#~ msgid "Upload" +#~ msgstr "Upload" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:hackney_pools > :upload > :max_connections" +#~ msgid "Max connections" +#~ msgstr "Max connections" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +#~ msgid "Timeout" +#~ msgstr "Timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:http > :send_user_agent" +#~ msgid "Send user agent" +#~ msgstr "Send user agent" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :birthday_min_age" +#~ msgid "Birthday min age" +#~ msgstr "Birthday min age" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :birthday_required" +#~ msgid "Birthday required" +#~ msgstr "Birthday required" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +#~ msgid "Max endorsed users" +#~ msgstr "Max endorsed users" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :max_media_attachments" +#~ msgid "Max media attachments" +#~ msgstr "Max media attachments" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :default" +#~ msgid "Default" +#~ msgstr "Default" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :default > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation" +#~ msgid "Federation" +#~ msgstr "Federation" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +#~ msgid "Recv timeout" +#~ msgstr "Recv timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media" +#~ msgid "Media" +#~ msgstr "Media" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +#~ msgid "Recv timeout" +#~ msgstr "Recv timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload" +#~ msgid "Upload" +#~ msgstr "Upload" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +#~ msgid "Recv timeout" +#~ msgstr "Recv timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:shout > :enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:shout > :limit" +#~ msgid "Limit" +#~ msgstr "Limit" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:welcome > :chat_message" +#~ msgid "Chat message" +#~ msgstr "Chat message" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +#~ msgid "Message" +#~ msgstr "Message" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +#~ msgid "Sender nickname" +#~ msgstr "Sender nickname" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +#~ msgid "Auth" +#~ msgstr "Auth" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +#~ msgid "Format" +#~ msgstr "Format" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "ip_whitelist" +#~ msgid "IP Whitelist" +#~ msgstr "IP Whitelist" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +#~ msgid "Path" +#~ msgstr "Path" + +#, fuzzy +#~ msgctxt "config label at :quack > :level" +#~ msgid "Level" +#~ msgstr "Level" + +#, fuzzy +#~ msgctxt "config label at :quack > :meta" +#~ msgid "Meta" +#~ msgstr "Meta" + +#, fuzzy +#~ msgctxt "config label at :quack > :webhook_url" +#~ msgid "Webhook URL" +#~ msgstr "Webhook URL" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :short_description" +#~ msgid "" +#~ "Shorter version of instance description. It can be seen on `/api/v1/" +#~ "instance`" +#~ msgstr "" +#~ "Shorter version of instance description. It can be seen on `/api/v1/" +#~ "instance`" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :short_description" +#~ msgid "Short description" +#~ msgstr "Short description" From 8fa14bcfe489f455e9f0b2fc524ffef78a0d7585 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 7 Jul 2023 18:48:42 +0000 Subject: [PATCH 167/178] Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-errors/ Translation: Pleroma fe/Akkoma Backend (Errors) --- .../ca/LC_MESSAGES/config_descriptions.po | 2918 +++++++++++------ 1 file changed, 1858 insertions(+), 1060 deletions(-) diff --git a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po index 958c1ee44..136bdacbe 100644 --- a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po +++ b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po @@ -3,36 +3,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-07-28 09:35+0000\n" -"PO-Revision-Date: 2022-08-08 15:48+0000\n" -"Last-Translator: sola \n" -"Language-Team: Catalan \n" +"PO-Revision-Date: 2023-02-21 09:45+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13.1\n" - -# # This file is a PO Template file. -# # -# # "msgid"s here are often extracted from source code. -# # Add new translations manually only if they're dynamic -# # translations that can't be statically extracted. -# # -# # Run "mix gettext.extract" to bring this file up to -# # date. Leave "msgstr"s empty as changing them here has no -# # effect: edit them in PO (.po) files instead. -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :esshd" -msgid "" -"Before enabling this you must add :esshd to mix.exs as one of the " -"extra_applications and generate host keys in your priv dir with ssh-keygen -" -"m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" -msgstr "" -"Abans d'activar això has d'afegir :esshd a mix.exs com a una de les " -"extra_applications i generar les claus del hoste en el teu directori priv " -"amb ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +"X-Generator: Weblate 4.14\n" #: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :logger" @@ -63,21 +43,11 @@ msgctxt "config description at :pleroma" msgid "Authenticator" msgstr "Autenticador" -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :quack" -msgid "Quack-related settings" -msgstr "Configuració relacionada amb Quack" - #: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :cors_plug" msgid "CORS plug config" msgstr "configuració CORS plug" -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :esshd" -msgid "ESSHD" -msgstr "ESSHD" - #: lib/pleroma/docs/translator.ex:5 msgctxt "config label at :logger" msgid "Logger" @@ -98,11 +68,6 @@ msgctxt "config label at :pleroma" msgid "Pleroma Authenticator" msgstr "Autenticador Akkoma" -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config label at :quack" -msgid "Quack Logger" -msgstr "Logger Quack" - #: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :logger-:console" msgid "Console logger settings" @@ -133,11 +98,6 @@ msgctxt "config description at :pleroma-:auth" msgid "Authentication / authorization settings" msgstr "Ajustos d' autenticació / autorització" -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:connections_pool" -msgid "Advanced settings for `Gun` connections pool" -msgstr "Ajustos avançats per el grup de connexions `Gun`" - #: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:email_notifications" msgid "Email notifications settings" @@ -153,34 +113,11 @@ msgctxt "config description at :pleroma-:feed" msgid "Configure feed rendering" msgstr "Configurar el renderitzat del feed" -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:frontend_configurations" -msgid "" -"This form can be used to configure a keyword list that keeps the " -"configuration data for any kind of frontend. By default, settings for " -"pleroma_fe are configured. If you want to add your own configuration your " -"settings all fields must be complete." -msgstr "" -"Aquest formulari es pot fer servir per a configurar un llistat de paraules " -"clau per a qualsevol tipus de \"frontend\". Per defecte es configuren els de " -"pleroma_fe. Si vols afegir la teva pròpia configuració i els teus ajustos, " -"tots els camps han d'estar complets." - #: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:frontends" msgid "Installed frontends management" msgstr "Gestió dels \"frontend\" instal·lats" -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:gopher" -msgid "Gopher settings" -msgstr "Configuració Gopher" - -#: lib/pleroma/docs/translator.ex:5 -msgctxt "config description at :pleroma-:hackney_pools" -msgid "Advanced settings for `Hackney` connections pools" -msgstr "Configuració avançada per el grup de connexions `Hackney`" - #: lib/pleroma/docs/translator.ex:5 msgctxt "config description at :pleroma-:http" msgid "HTTP settings" @@ -365,12 +302,6 @@ msgctxt "config description at :pleroma-:oauth2" msgid "Configure OAuth 2 provider capabilities" msgstr "Configure OAuth 2 provider capabilities" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools" -msgid "Advanced settings for `Gun` workers pools" -msgstr "Advanced settings for `Gun` workers pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:populate_hashtags_table" @@ -387,16 +318,6 @@ msgstr "" "Rate limit settings. This is an advanced feature enabled only for :" "authentication by default." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated" -msgid "" -"Disallow viewing timelines, user profiles and statuses for unauthenticated " -"users." -msgstr "" -"Disallow viewing timelines, user profiles and statuses for unauthenticated " -"users." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:rich_media" @@ -407,12 +328,6 @@ msgstr "" "If enabled the instance will parse metadata from attached links to generate " "link previews" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:shout" -msgid "Pleroma shout settings" -msgstr "Pleroma shout settings" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:static_fe" @@ -608,13 +523,6 @@ msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Expired activities settings" msgstr "Expired activities settings" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" -msgid "Prometheus app metrics endpoint configuration" -msgstr "Prometheus app metrics endpoint configuration" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :web_push_encryption-:vapid_details" @@ -661,12 +569,6 @@ msgctxt "config label at :pleroma-:auth" msgid "Auth" msgstr "Auth" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool" -msgid "Connections pool" -msgstr "Connections pool" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:email_notifications" @@ -703,18 +605,6 @@ msgctxt "config label at :pleroma-:frontends" msgid "Frontends" msgstr "Frontends" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher" -msgid "Gopher" -msgstr "Gopher" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools" -msgid "Hackney pools" -msgstr "Hackney pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:http" @@ -871,12 +761,6 @@ msgctxt "config label at :pleroma-:oauth2" msgid "OAuth2" msgstr "OAuth2" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools" -msgid "Pools" -msgstr "Pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:populate_hashtags_table" @@ -901,12 +785,6 @@ msgctxt "config label at :pleroma-:rich_media" msgid "Rich media" msgstr "Rich media" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:shout" -msgid "Shout" -msgstr "Shout" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:static_fe" @@ -1087,48 +965,12 @@ msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Pleroma.Workers.PurgeExpiredActivity" msgstr "Pleroma.Workers.PurgeExpiredActivity" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" -msgid "Pleroma.Web.Endpoint.MetricsExporter" -msgstr "Pleroma.Web.Endpoint.MetricsExporter" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details" msgid "Vapid Details" msgstr "Vapid Details" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :enabled" -msgid "Enables SSH" -msgstr "Enables SSH" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :handler" -msgid "Handler module" -msgstr "Handler module" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :password_authenticator" -msgid "Authenticator module" -msgstr "Authenticator module" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :port" -msgid "Port to connect" -msgstr "Port to connect" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :priv_dir" -msgid "Dir with SSH keys" -msgstr "Dir with SSH keys" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :ex_aws-:s3 > :access_key_id" @@ -1322,57 +1164,6 @@ msgstr "" "html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." "html.eex`." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" -msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." -msgstr "Timeout while `gun` will wait until connection is up. Default: 5000ms." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:connections_pool > :" -"connection_acquisition_retries" -msgid "" -"Number of attempts to acquire the connection from the pool if it is " -"overloaded. Default: 5" -msgstr "" -"Number of attempts to acquire the connection from the pool if it is " -"overloaded. Default: 5" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:connections_pool > :" -"connection_acquisition_wait" -msgid "" -"Timeout to acquire a connection from pool. The total max time is this value " -"multiplied by the number of retries. Default: 250ms." -msgstr "" -"Timeout to acquire a connection from pool. The total max time is this value " -"multiplied by the number of retries. Default: 250ms." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:connections_pool > :max_connections" -msgid "Maximum number of connections in the pool. Default: 250 connections." -msgstr "Maximum number of connections in the pool. Default: 250 connections." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:connections_pool > :reclaim_multiplier" -msgid "" -"Multiplier for the number of idle connection to be reclaimed if the pool is " -"full. For example if the pool maxes out at 250 connections and this setting " -"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " -"overloaded. Default: 0.1" -msgstr "" -"Multiplier for the number of idle connection to be reclaimed if the pool is " -"full. For example if the pool maxes out at 250 connections and this setting " -"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " -"overloaded. Default: 0.1" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:email_notifications > :digest" @@ -1554,14 +1345,6 @@ msgctxt "" msgid "Hide notices statistics (repeats, favorites, ...)" msgstr "Hide notices statistics (repeats, favorites, ...)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" -"hideSitename" -msgid "Hides instance name from PleromaFE banner" -msgstr "Hides instance name from PleromaFE banner" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -1607,18 +1390,6 @@ msgstr "" "compatible with both light and dark themes. If you want a colorful logo you " "must disable logoMask." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" -"minimalScopesMode" -msgid "" -"Limit scope selection to Direct, User default, and Scope of post replying " -"to. Also prevents replying to a DM with a public post from PleromaFE." -msgstr "" -"Limit scope selection to Direct, User default, and Scope of post replying " -"to. Also prevents replying to a DM with a public post from PleromaFE." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -1818,89 +1589,6 @@ msgstr "" "Reference of the installed frontend to be used. Valid config must include " "both `Name` and `Reference` values." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :dstport" -msgid "Port advertised in URLs (optional, defaults to port)" -msgstr "Port advertised in URLs (optional, defaults to port)" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :enabled" -msgid "Enables the gopher interface" -msgstr "Enables the gopher interface" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :ip" -msgid "IP address to bind to" -msgstr "IP address to bind to" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :port" -msgid "Port to bind to" -msgstr "Port to bind to" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :federation" -msgid "Settings for federation pool." -msgstr "Settings for federation pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :federation > :" -"max_connections" -msgid "Number workers in the pool." -msgstr "Number workers in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :federation > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "Timeout while `hackney` will wait for response." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :media" -msgid "Settings for media pool." -msgstr "Settings for media pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :media > :max_connections" -msgid "Number workers in the pool." -msgstr "Number workers in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "Timeout while `hackney` will wait for response." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :upload" -msgid "Settings for upload pool." -msgstr "Settings for upload pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :upload > :max_connections" -msgid "Number workers in the pool." -msgstr "Number workers in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "Timeout while `hackney` will wait for response." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:http > :adapter" @@ -1920,12 +1608,6 @@ msgctxt "" msgid "List of TLS version to use" msgstr "List of TLS version to use" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:http > :proxy_url" -msgid "Proxy URL" -msgstr "Proxy URL" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:http > :user_agent" @@ -2052,22 +1734,6 @@ msgctxt "config description at :pleroma-:instance > :banner_upload_limit" msgid "File size limit of user's profile banners" msgstr "File size limit of user's profile banners" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :birthday_min_age" -msgid "" -"Minimum required age for users to create account. Only used if birthday is " -"required." -msgstr "" -"Minimum required age for users to create account. Only used if birthday is " -"required." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :birthday_required" -msgid "Require users to enter their birthday." -msgstr "Require users to enter their birthday." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :cleanup_attachments" @@ -2149,12 +1815,6 @@ msgstr "" "Timeout (in days) of each external federation target being unreachable prior " "to pausing federating to it" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :healthcheck" -msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" -msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :instance_thumbnail" @@ -2199,19 +1859,6 @@ msgctxt "config description at :pleroma-:instance > :max_account_fields" msgid "The maximum number of custom fields in the user profile. Default: 10." msgstr "The maximum number of custom fields in the user profile. Default: 10." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :max_endorsed_users" -msgid "The maximum number of recommended accounts. 0 will disable the feature." -msgstr "" -"The maximum number of recommended accounts. 0 will disable the feature." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :max_media_attachments" -msgid "Maximum number of post media attachments" -msgstr "Maximum number of post media attachments" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" @@ -2345,48 +1992,12 @@ msgctxt "" msgid "Minimum expiration time (in seconds)" msgstr "Minimum expiration time (in seconds)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :privileged_staff" -msgid "" -"Let moderators access sensitive data (e.g. updating user credentials, get " -"password reset token, delete users, index and read private statuses and " -"chats)" -msgstr "" -"Let moderators access sensitive data (e.g. updating user credentials, get " -"password reset token, delete users, index and read private statuses and " -"chats)" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :profile_directory" msgid "Enable profile directory." msgstr "Enable profile directory." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :public" -msgid "" -"Makes the client API in authenticated mode-only except for user-profiles. " -"Useful for disabling the Local Timeline and The Whole Known Network. Note: " -"when setting to `false`, please also check `:restrict_unauthenticated` " -"setting." -msgstr "" -"Makes the client API in authenticated mode-only except for user-profiles. " -"Useful for disabling the Local Timeline and The Whole Known Network. Note: " -"when setting to `false`, please also check `:restrict_unauthenticated` " -"setting." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :quarantined_instances" -msgid "" -"List of ActivityPub instances where private (DMs, followers-only) activities " -"will not be sent and the reason for doing so" -msgstr "" -"List of ActivityPub instances where private (DMs, followers-only) activities " -"will not be sent and the reason for doing so" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -2563,24 +2174,12 @@ msgctxt "config description at :pleroma-:majic_pool > :size" msgid "Number of majic workers to start." msgstr "Number of majic workers to start." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:manifest > :background_color" -msgid "Describe the background color of the app" -msgstr "Describe the background color of the app" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:manifest > :icons" msgid "Describe the icons of the app" msgstr "Describe the icons of the app" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:manifest > :theme_color" -msgid "Describe the theme color of the app" -msgstr "Describe the theme color of the app" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:markup > :scrub_policy" @@ -3078,126 +2677,6 @@ msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" msgid "The lifetime in seconds of the access token" msgstr "The lifetime in seconds of the access token" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default" -msgid "Settings for default pool." -msgstr "Settings for default pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation" -msgid "Settings for federation pool." -msgstr "Settings for federation pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media" -msgid "Settings for media pool." -msgstr "Settings for media pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload" -msgid "Settings for upload pool." -msgstr "Settings for upload pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -3281,72 +2760,18 @@ msgctxt "config description at :pleroma-:rate_limit > :timeline" msgid "For requests to timelines (each timeline has it's own limiter)" msgstr "For requests to timelines (each timeline has it's own limiter)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :activities" -msgid "Settings for statuses." -msgstr "Settings for statuses." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :activities > :" -"local" -msgid "Disallow view local statuses." -msgstr "Disallow view local statuses." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :activities > :" -"remote" -msgid "Disallow view remote statuses." -msgstr "Disallow view remote statuses." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" msgid "Settings for user profiles." msgstr "Settings for user profiles." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :profiles > :local" -msgid "Disallow view local user profiles." -msgstr "Disallow view local user profiles." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :profiles > :" -"remote" -msgid "Disallow view remote user profiles." -msgstr "Disallow view remote user profiles." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" msgid "Settings for public and federated timelines." msgstr "Settings for public and federated timelines." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :timelines > :" -"federated" -msgid "Disallow view federated timeline." -msgstr "Disallow view federated timeline." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :timelines > :" -"local" -msgid "Disallow view public timeline." -msgstr "Disallow view public timeline." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:rich_media > :enabled" @@ -3399,18 +2824,6 @@ msgstr "" "`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " "to use full name." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:shout > :enabled" -msgid "Enables the backend Shoutbox chat feature." -msgstr "Enables the backend Shoutbox chat feature." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:shout > :limit" -msgid "Shout message character limit." -msgstr "Shout message character limit." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:static_fe > :enabled" @@ -3454,26 +2867,6 @@ msgid "" msgstr "" "Activity pub routes (question activities). Default: `30_000` (30 seconds)." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" -msgid "Enables sending a chat message to newly registered users" -msgstr "Enables sending a chat message to newly registered users" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:welcome > :chat_message > :message" -msgid "A message that will be sent to newly registered users as a chat message" -msgstr "" -"A message that will be sent to newly registered users as a chat message" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:welcome > :chat_message > :sender_nickname" -msgid "The nickname of the local user that sends a welcome chat message" -msgstr "The nickname of the local user that sends a welcome chat message" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" @@ -4150,64 +3543,6 @@ msgctxt "" msgid "Minimum lifetime for ephemeral activity (in seconds)" msgstr "Minimum lifetime for ephemeral activity (in seconds)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"auth" -msgid "Enables HTTP Basic Auth for app metrics endpoint." -msgstr "Enables HTTP Basic Auth for app metrics endpoint." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"enabled" -msgid "[Pleroma extension] Enables app metrics endpoint." -msgstr "[Pleroma extension] Enables app metrics endpoint." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"format" -msgid "App metrics endpoint output format." -msgstr "App metrics endpoint output format." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"ip_whitelist" -msgid "Restrict access of app metrics endpoint to the specified IP addresses." -msgstr "Restrict access of app metrics endpoint to the specified IP addresses." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"path" -msgid "App metrics endpoint URI path." -msgstr "App metrics endpoint URI path." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack > :level" -msgid "Log level" -msgstr "Log level" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack > :meta" -msgid "Configure which metadata you want to report on" -msgstr "Configure which metadata you want to report on" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack > :webhook_url" -msgid "Configure the Slack incoming webhook" -msgstr "Configure the Slack incoming webhook" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -4264,36 +3599,6 @@ msgctxt "config label at :cors_plug > :methods" msgid "Methods" msgstr "Methods" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :handler" -msgid "Handler" -msgstr "Handler" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :password_authenticator" -msgid "Password authenticator" -msgstr "Password authenticator" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :port" -msgid "Port" -msgstr "Port" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :priv_dir" -msgid "Priv dir" -msgstr "Priv dir" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :ex_aws-:s3 > :access_key_id" @@ -4492,38 +3797,6 @@ msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" msgid "OAuth consumer template" msgstr "OAuth consumer template" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" -msgid "Connect timeout" -msgstr "Connect timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:connections_pool > :connection_acquisition_retries" -msgid "Connection acquisition retries" -msgstr "Connection acquisition retries" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:connections_pool > :connection_acquisition_wait" -msgid "Connection acquisition wait" -msgstr "Connection acquisition wait" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" -msgid "Reclaim multiplier" -msgstr "Reclaim multiplier" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:email_notifications > :digest" @@ -4670,14 +3943,6 @@ msgctxt "" msgid "Hide post stats" msgstr "Hide post stats" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" -"hideSitename" -msgid "Hide Sitename" -msgstr "Hide Sitename" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -4707,14 +3972,6 @@ msgctxt "" msgid "Logo mask" msgstr "Logo mask" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" -"minimalScopesMode" -msgid "Minimal scopes mode" -msgstr "Minimal scopes mode" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -4872,85 +4129,6 @@ msgctxt "config label at :pleroma-:frontends > :primary > ref" msgid "Reference" msgstr "Reference" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :dstport" -msgid "Dstport" -msgstr "Dstport" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :ip" -msgid "IP" -msgstr "IP" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :port" -msgid "Port" -msgstr "Port" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :federation" -msgid "Federation" -msgstr "Federation" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:hackney_pools > :federation > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" -msgid "Timeout" -msgstr "Timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :media" -msgid "Media" -msgstr "Media" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" -msgid "Timeout" -msgstr "Timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :upload" -msgid "Upload" -msgstr "Upload" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" -msgid "Timeout" -msgstr "Timeout" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:http > :adapter" @@ -4975,12 +4153,6 @@ msgctxt "config label at :pleroma-:http > :proxy_url" msgid "Proxy URL" msgstr "Proxy URL" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:http > :send_user_agent" -msgid "Send user agent" -msgstr "Send user agent" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:http > :user_agent" @@ -5089,18 +4261,6 @@ msgctxt "config label at :pleroma-:instance > :banner_upload_limit" msgid "Banner upload limit" msgstr "Banner upload limit" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :birthday_min_age" -msgid "Birthday min age" -msgstr "Birthday min age" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :birthday_required" -msgid "Birthday required" -msgstr "Birthday required" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:instance > :cleanup_attachments" @@ -5187,18 +4347,6 @@ msgctxt "config label at :pleroma-:instance > :max_account_fields" msgid "Max account fields" msgstr "Max account fields" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :max_endorsed_users" -msgid "Max endorsed users" -msgstr "Max endorsed users" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :max_media_attachments" -msgid "Max media attachments" -msgstr "Max media attachments" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" @@ -5867,102 +5015,6 @@ msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" msgid "Token expires in" msgstr "Token expires in" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default" -msgid "Default" -msgstr "Default" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default > :size" -msgid "Size" -msgstr "Size" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation" -msgid "Federation" -msgstr "Federation" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation > :size" -msgid "Size" -msgstr "Size" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media" -msgid "Media" -msgstr "Media" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media > :size" -msgid "Size" -msgstr "Size" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload" -msgid "Upload" -msgstr "Upload" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload > :size" -msgid "Size" -msgstr "Size" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -6121,18 +5173,6 @@ msgctxt "config label at :pleroma-:rich_media > :ttl_setters" msgid "TTL setters" msgstr "TTL setters" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:shout > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:shout > :limit" -msgid "Limit" -msgstr "Limit" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:static_fe > :enabled" @@ -6175,30 +5215,6 @@ msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" msgid "Activity pub question" msgstr "Activity pub question" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message" -msgid "Chat message" -msgstr "Chat message" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message > :message" -msgid "Message" -msgstr "Message" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" -msgid "Sender nickname" -msgstr "Sender nickname" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:welcome > :direct_message" @@ -6975,60 +5991,6 @@ msgctxt "" msgid "Min lifetime" msgstr "Min lifetime" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" -msgid "Auth" -msgstr "Auth" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" -msgid "Format" -msgstr "Format" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"ip_whitelist" -msgid "IP Whitelist" -msgstr "IP Whitelist" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" -msgid "Path" -msgstr "Path" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack > :level" -msgid "Level" -msgstr "Level" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack > :meta" -msgid "Meta" -msgstr "Meta" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack > :webhook_url" -msgid "Webhook URL" -msgstr "Webhook URL" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" @@ -7047,20 +6009,6 @@ msgctxt "config label at :web_push_encryption-:vapid_details > :subject" msgid "Subject" msgstr "Subject" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" -msgid "Require HTTP signatures for AP fetches" -msgstr "Require HTTP signatures for AP fetches" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :short_description" -msgid "" -"Shorter version of instance description. It can be seen on `/api/v1/instance`" -msgstr "" -"Shorter version of instance description. It can be seen on `/api/v1/instance`" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" @@ -7069,6 +6017,1856 @@ msgstr "Authorized fetch mode" #: lib/pleroma/docs/translator.ex:5 #, fuzzy -msgctxt "config label at :pleroma-:instance > :short_description" -msgid "Short description" -msgstr "Short description" +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures on AP fetches" +msgstr "Require HTTP signatures for AP fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:activitypub > :max_collection_objects" +msgid "" +"The maximum number of items to fetch from a remote collections. Setting this " +"too low can lead to only getting partial collections, but too high and you " +"can end up fetching far too many objects." +msgstr "" +"The maximum number of items to fetch from a remote collections. Setting this " +"too low can lead to only getting partial collections, but too high and you " +"can end up fetching far too many objects." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:argos_translate" +msgid "ArgosTranslate Settings." +msgstr "Preload-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:argos_translate > :command_argos_translate" +msgid "" +"command for `argos-translate`. Can be the command if it's in your PATH, or " +"the full path to the file." +msgstr "" +"command for `argos-translate`. Can be the command if it's in your PATH, or " +"the full path to the file." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:argos_translate > :command_argospm" +msgid "" +"command for `argospm`. Can be the command if it's in your PATH, or the full " +"path to the file." +msgstr "" +"command for `argospm`. Can be the command if it's in your PATH, or the full " +"path to the file." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:argos_translate > :strip_html" +msgid "Strip html from the post before translating it." +msgstr "Strip html from the post before translating it." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:deepl" +msgid "DeepL Settings." +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:deepl > :api_key" +msgid "API key for DeepL" +msgstr "API key for DeepL" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:deepl > :tier" +msgid "API Tier" +msgstr "API Tier" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +#| msgctxt "config description at :pleroma-:frontend_configurations" +#| msgid "" +#| "This form can be used to configure a keyword list that keeps the " +#| "configuration data for any kind of frontend. By default, settings for " +#| "pleroma_fe are configured. If you want to add your own configuration your " +#| "settings all fields must be complete." +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe and masto_fe are configured. If you want to add your own " +"configuration your settings all fields must be complete." +msgstr "" +"Aquest formulari es pot fer servir per a configurar un llistat de paraules " +"clau per a qualsevol tipus de \"frontend\". Per defecte es configuren els de " +"pleroma_fe. Si vols afegir la teva pròpia configuració i els teus ajustos, " +"tots els camps han d'estar complets." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :masto_fe" +msgid "Settings for Masto FE" +msgstr "Settings for Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :masto_fe > :" +"showInstanceSpecificPanel" +msgid "Whenether to show the instance's specific panel" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"conversationDisplay" +msgid "How to display conversations (linear or tree)" +msgstr "How to display conversations (linear or tree)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteFavicon" +msgid "Whether to hide the instance favicon from the navbar" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteName" +msgid "Whether to hide the site name from the navbar" +msgstr "Whether to hide the site name from the navbar" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"renderMisskeyMarkdown" +msgid "Whether to render Misskey-flavoured markdown" +msgstr "Whether to render Misskey-flavoured markdown" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showNavShortcuts" +msgid "Whether to put extra navigation options on the navbar" +msgstr "Whether to put extra navigation options on the navbar" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showPanelNavShortcuts" +msgid "Whether to put timeline nav tabs on the top of the panel" +msgstr "Whether to put timeline nav tabs on the top of the panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showWiderShortcuts" +msgid "Whether to add extra space between navbar icons" +msgstr "Whether to add extra space between navbar icons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"stopGifs" +msgid "Whether to pause animated images until they're hovered on" +msgstr "Whether to pause animated images until they're hovered on" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon" +msgid "Mastodon frontend" +msgstr "Admin frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon > name" +msgid "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon > ref" +msgid "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger" +msgid "Swagger API reference frontend" +msgstr "Swagger API reference frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > enabled" +msgid "Whether to have this enabled at all" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > name" +msgid "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > ref" +msgid "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :pool_size" +msgid "Number of concurrent outbound HTTP requests to allow. Default 50." +msgstr "Number of concurrent outbound HTTP requests to allow. Default 50." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :pool_timeout" +msgid "Timeout for initiating HTTP requests (in ms, default 5000)" +msgstr "Timeout for initiating HTTP requests (in ms, default 5000)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "" +"Proxy URL - of the format http://host:port. Advise setting in .exs instead " +"of admin-fe due to this being set at boot-time." +msgstr "" +"Proxy URL - of the format http://host:port. Advise setting in .exs instead " +"of admin-fe due to this being set at boot-time." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :receive_timeout" +msgid "" +"Timeout for waiting on remote servers to respond to HTTP requests (in ms, " +"default 15000)" +msgstr "" +"Timeout for waiting on remote servers to respond to HTTP requests (in ms, " +"default 15000)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :export_prometheus_metrics" +msgid "Enable prometheus metrics (at /api/v1/akkoma/metrics)" +msgstr "Enable prometheus metrics (at /api/v1/akkoma/metrics)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :languages" +msgid "Languages the instance uses" +msgstr "Name of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :local_bubble" +msgid "" +"List of instances that make up your local bubble (closely-related " +"instances). Used to populate the 'bubble' timeline (domain only)." +msgstr "" +"List of instances that make up your local bubble (closely-related instances)" +". Used to populate the 'bubble' timeline (domain only)." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses)" +msgstr "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses and " +"chats)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :public" +msgid "" +"Switching this on will allow unauthenticated users access to all public " +"resources on your instance Switching it off is useful for disabling the " +"Local Timeline and The Whole Known Network. Note: when setting to `false`, " +"please also check `:restrict_unauthenticated` setting." +msgstr "" +"Makes the client API in authenticated mode-only except for user-profiles. " +"Useful for disabling the Local Timeline and The Whole Known Network. Note: " +"when setting to `false`, please also check `:restrict_unauthenticated` " +"setting." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "" +"(Deprecated, will be removed in next release) List of ActivityPub instances " +"where activities will not be sent, and the reason for doing so" +msgstr "" +"List of ActivityPub instances where private (DMs, followers-only) activities " +"will not be sent and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +#| msgctxt "config description at :pleroma-:instances_favicons" +#| msgid "Control favicons for instances" +msgctxt "config description at :pleroma-:instances_nodeinfo" +msgid "Control favicons for instances" +msgstr "Control dels favicons per instàncies" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instances_nodeinfo > :enabled" +msgid "Allow/disallow getting instance nodeinfo" +msgstr "Allow/disallow displaying and getting instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +#| msgctxt "config description at :logger" +#| msgid "Logger-related settings" +msgctxt "config description at :pleroma-:libre_translate" +msgid "LibreTranslate Settings." +msgstr "Configuració relacionada amb el registrador(Log)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:libre_translate > :api_key" +msgid "API key for libretranslate" +msgstr "API key for libretranslate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:libre_translate > :url" +msgid "URL for libretranslate" +msgstr "URL for libretranslate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "" +"Describe the background color of the app - this is only used for mastodon-fe" +msgstr "Describe the background color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app - this is only used for mastodon-fe" +msgstr "Describe the theme color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "" +"Obfuscate domains in MRF transparency. This is useful if the domain you're " +"blocking contains words you don't want displayed, but still want to disclose " +"the MRF settings." +msgstr "" +"Obfuscate domains in MRF transparency. This is useful if the domain you're " +"blocking contains words you don't want displayed, but still want to disclose " +"the MRF settings." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf_inline_quote" +msgid "Force quote post URLs inline" +msgstr "Force quote post URLs inline" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix before the link" +msgstr "Prefix before the link" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :handle_threads" +msgid "" +"Enable to filter replies to threads based from their originating instance, " +"using the reject and accept rules" +msgstr "" +"Enable to filter replies to threads based from their originating instance, " +"using the reject and accept rules" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "" +"Disallow unauthenticated viewing of timelines, user profiles and statuses." +msgstr "" +"Disallow viewing timelines, user profiles and statuses for unauthenticated " +"users." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for posts." +msgstr "Settings for statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities > :" +"local" +msgid "Disallow viewing local posts." +msgstr "Disallow view local statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities > :" +"remote" +msgid "Disallow viewing remote posts." +msgstr "Disallow view remote statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow viewing local user profiles." +msgstr "Disallow view local user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :profiles > :" +"remote" +msgid "Disallow viewing remote user profiles." +msgstr "Disallow view remote user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :timelines > :" +"federated" +msgid "Disallow viewing the whole known network timeline." +msgstr "Disallow view federated timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :timelines > :" +"local" +msgid "Disallow viewing the public timeline." +msgstr "Disallow view public timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:translator" +msgid "Translation Settings" +msgstr "Invalidation script settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:translator > :enabled" +msgid "Is translation enabled?" +msgstr "Streaming enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:translator > :module" +msgid "Translation module." +msgstr "Handler module" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:workers > :timeout" +msgid "Timeout for jobs, per `Oban` queue, in ms" +msgstr "Max retry attempts for failed jobs, per `Oban` queue" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search" +msgid "General search settings." +msgstr "General MRF settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search > :module" +msgid "Selected search module." +msgstr "Rejected shortcodes" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch settings." +msgstr "Email template settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "" +"The API module used by Elasticsearch. Should always be Elasticsearch.API.HTTP" +msgstr "" +"The API module used by Elasticsearch. Should always be Elasticsearch.API.HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes" +msgid "The indices to set up in Elasticsearch" +msgstr "The indices to set up in Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities" +msgid "Config for the index to use for activities" +msgstr "Config for the index to use for activities" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :bulk_page_size" +msgid "Size for bulk put requests, mostly used on building the index" +msgstr "Size for bulk put requests, mostly used on building the index" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :bulk_wait_interval" +msgid "Time to wait between bulk put requests (in ms)" +msgstr "Time to wait between bulk put requests (in ms)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :settings" +msgid "" +"Path to the file containing index settings for the activities index. Should " +"contain a mapping." +msgstr "" +"Path to the file containing index settings for the activities index. Should " +"contain a mapping." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :sources" +msgid "The internal types to use for this index" +msgstr "The internal types to use for this index" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :store" +msgid "The internal store module" +msgstr "Authenticator module" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"json_library" +msgid "" +"The JSON module used to encode/decode when communicating with Elasticsearch" +msgstr "" +"The JSON module used to encode/decode when communicating with Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"password" +msgid "" +"Password to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" +"Password to connect to ES. Set to nil if your cluster is unauthenticated." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Elasticsearch URL." +msgstr "Elasticsearch URL." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"username" +msgid "" +"Username to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" +"Username to connect to ES. Set to nil if your cluster is unauthenticated." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch" +msgid "Meilisearch settings." +msgstr "Mailer-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Meilisearch > :" +"initial_indexing_chunk_size" +msgid "" +"Amount of posts in a batch when running the initial indexing operation. " +"Should probably not be more than 100000 since there's a limit on maximum " +"insert size" +msgstr "" +"Amount of posts in a batch when running the initial indexing operation. " +"Should probably not be more than 100000 since there's a limit on maximum " +"insert size" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "" +"Private key for meilisearch authentication, or `nil` to disable private key " +"authentication." +msgstr "" +"Private key for meilisearch authentication, or `nil` to disable private key " +"authentication." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Meilisearch URL." +msgstr "Meilisearch URL." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "" +"Specific provider to hand out themes to instances that scrape index.html" +msgstr "" +"Specific provider to hand out themes to instances that scrape index.html" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :" +"theme_color" +msgid "" +"The 'accent color' of the instance, used in places like misskey's instance " +"ticker" +msgstr "" +"The 'accent color' of the instance, used in places like misskey's instance " +"ticker" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:activitypub > :max_collection_objects" +msgid "Max collection objects" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate" +msgid "Argos translate" +msgstr "Argos translate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :command_argos_translate" +msgid "Command argos translate" +msgstr "Command argos translate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :command_argospm" +msgid "Command argospm" +msgstr "Cmd args" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :strip_html" +msgid "Strip html" +msgstr "Strict" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:deepl" +msgid "DeepL" +msgstr "DeepL" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:deepl > :api_key" +msgid "Api key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:deepl > :tier" +msgid "Tier" +msgstr "Tier" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :masto_fe" +msgid "Masto FE" +msgstr "Masto FE" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :masto_fe > :" +"showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "Show instance specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"conversationDisplay" +msgid "Conversation display style" +msgstr "Conversation display style" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteFavicon" +msgid "Hide site favicon" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteName" +msgid "Hide site name" +msgstr "Hide Sitename" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"renderMisskeyMarkdown" +msgid "Render misskey markdown" +msgstr "Render misskey markdown" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showNavShortcuts" +msgid "Show navbar shortcuts" +msgstr "Show navbar shortcuts" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showPanelNavShortcuts" +msgid "Show timeline panel nav shortcuts" +msgstr "Show timeline panel nav shortcuts" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showWiderShortcuts" +msgid "Increase navbar shortcut spacing" +msgstr "Increase navbar shortcut spacing" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :stopGifs" +msgid "Stop Gifs" +msgstr "Stop Gifs" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon" +msgid "Mastodon" +msgstr "Mastodon" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +#| msgctxt "config label at :logger" +#| msgid "Logger" +msgctxt "config label at :pleroma-:frontends > :swagger" +msgid "Swagger" +msgstr "Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:http > :pool_size" +msgid "Pool size" +msgstr "Pools" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:http > :pool_timeout" +msgid "HTTP Pool Request Timeout" +msgstr "HTTP Pool Request Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:http > :receive_timeout" +msgid "HTTP Receive Timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instance > :export_prometheus_metrics" +msgid "Export prometheus metrics" +msgstr "Export prometheus metrics" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instance > :languages" +msgid "Languages" +msgstr "Languages" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instance > :local_bubble" +msgid "Local bubble" +msgstr "Local bubble" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instances_nodeinfo" +msgid "Instances nodeinfo" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instances_nodeinfo > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:libre_translate" +msgid "Libre translate" +msgstr "Libre translate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:libre_translate > :api_key" +msgid "Api key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:libre_translate > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "MRF domain obfuscation" +msgstr "MRF domain obfuscation" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf_inline_quote" +msgid "MRF Inline Quote" +msgstr "MRF Inline Quote" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix" +msgstr "Prefix" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :handle_threads" +msgid "Apply to entire threads" +msgstr "Apply to entire threads" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:translator" +msgid "Translator" +msgstr "Translator" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:translator > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:translator > :module" +msgid "Module" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:workers > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search" +msgid "Search" +msgstr "Search" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search > :module" +msgid "Module" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch" +msgstr "Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "Api" +msgstr "Api" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes" +msgid "Indexes" +msgstr "Indexes" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities" +msgid "Activities" +msgstr "Activities" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :bulk_page_size" +msgid "Bulk page size" +msgstr "Bulk page size" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :bulk_wait_interval" +msgid "Bulk wait interval" +msgstr "Bulk wait interval" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :settings" +msgid "Settings" +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :sources" +msgid "Sources" +msgstr "Sources" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :store" +msgid "Store" +msgstr "Store" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :json_library" +msgid "Json library" +msgstr "Json library" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :password" +msgid "Password" +msgstr "Password" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :username" +msgid "Username" +msgstr "Username" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch" +msgid "Pleroma.Search.Meilisearch" +msgstr "Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Meilisearch > :" +"initial_indexing_chunk_size" +msgid "Initial indexing chunk size" +msgstr "Initial indexing chunk size" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "Private key" +msgstr "Private key" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "Pleroma.Web.Metadata.Providers.Theme" +msgstr "Pleroma.Web.Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :theme_color" +msgid "Theme color" +msgstr "Theme color" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/v1/pleroma/healthcheck`" +msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" + +# # This file is a PO Template file. +# # +# # "msgid"s here are often extracted from source code. +# # Add new translations manually only if they're dynamic +# # translations that can't be statically extracted. +# # +# # Run "mix gettext.extract" to bring this file up to +# # date. Leave "msgstr"s empty as changing them here has no +# # effect: edit them in PO (.po) files instead. +#~ msgctxt "config description at :esshd" +#~ msgid "" +#~ "Before enabling this you must add :esshd to mix.exs as one of the " +#~ "extra_applications and generate host keys in your priv dir with ssh-" +#~ "keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +#~ msgstr "" +#~ "Abans d'activar això has d'afegir :esshd a mix.exs com a una de les " +#~ "extra_applications i generar les claus del hoste en el teu directori priv " +#~ "amb ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" + +#~ msgctxt "config description at :quack" +#~ msgid "Quack-related settings" +#~ msgstr "Configuració relacionada amb Quack" + +#~ msgctxt "config label at :esshd" +#~ msgid "ESSHD" +#~ msgstr "ESSHD" + +#~ msgctxt "config label at :quack" +#~ msgid "Quack Logger" +#~ msgstr "Logger Quack" + +#~ msgctxt "config description at :pleroma-:connections_pool" +#~ msgid "Advanced settings for `Gun` connections pool" +#~ msgstr "Ajustos avançats per el grup de connexions `Gun`" + +#~ msgctxt "config description at :pleroma-:gopher" +#~ msgid "Gopher settings" +#~ msgstr "Configuració Gopher" + +#~ msgctxt "config description at :pleroma-:hackney_pools" +#~ msgid "Advanced settings for `Hackney` connections pools" +#~ msgstr "Configuració avançada per el grup de connexions `Hackney`" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools" +#~ msgid "Advanced settings for `Gun` workers pools" +#~ msgstr "Advanced settings for `Gun` workers pools" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:shout" +#~ msgid "Pleroma shout settings" +#~ msgstr "Pleroma shout settings" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +#~ msgid "Prometheus app metrics endpoint configuration" +#~ msgstr "Prometheus app metrics endpoint configuration" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:connections_pool" +#~ msgid "Connections pool" +#~ msgstr "Connections pool" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher" +#~ msgid "Gopher" +#~ msgstr "Gopher" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools" +#~ msgid "Hackney pools" +#~ msgstr "Hackney pools" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:shout" +#~ msgid "Shout" +#~ msgstr "Shout" + +#, fuzzy +#~ msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +#~ msgid "Pleroma.Web.Endpoint.MetricsExporter" +#~ msgstr "Pleroma.Web.Endpoint.MetricsExporter" + +#, fuzzy +#~ msgctxt "config description at :esshd > :enabled" +#~ msgid "Enables SSH" +#~ msgstr "Enables SSH" + +#, fuzzy +#~ msgctxt "config description at :esshd > :port" +#~ msgid "Port to connect" +#~ msgstr "Port to connect" + +#, fuzzy +#~ msgctxt "config description at :esshd > :priv_dir" +#~ msgid "Dir with SSH keys" +#~ msgstr "Dir with SSH keys" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :connect_timeout" +#~ msgid "" +#~ "Timeout while `gun` will wait until connection is up. Default: 5000ms." +#~ msgstr "" +#~ "Timeout while `gun` will wait until connection is up. Default: 5000ms." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :" +#~ "connection_acquisition_retries" +#~ msgid "" +#~ "Number of attempts to acquire the connection from the pool if it is " +#~ "overloaded. Default: 5" +#~ msgstr "" +#~ "Number of attempts to acquire the connection from the pool if it is " +#~ "overloaded. Default: 5" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :" +#~ "connection_acquisition_wait" +#~ msgid "" +#~ "Timeout to acquire a connection from pool. The total max time is this " +#~ "value multiplied by the number of retries. Default: 250ms." +#~ msgstr "" +#~ "Timeout to acquire a connection from pool. The total max time is this " +#~ "value multiplied by the number of retries. Default: 250ms." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :max_connections" +#~ msgid "Maximum number of connections in the pool. Default: 250 connections." +#~ msgstr "" +#~ "Maximum number of connections in the pool. Default: 250 connections." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :reclaim_multiplier" +#~ msgid "" +#~ "Multiplier for the number of idle connection to be reclaimed if the pool " +#~ "is full. For example if the pool maxes out at 250 connections and this " +#~ "setting is set to 0.3, the pool will reclaim at most 75 idle connections " +#~ "if it's overloaded. Default: 0.1" +#~ msgstr "" +#~ "Multiplier for the number of idle connection to be reclaimed if the pool " +#~ "is full. For example if the pool maxes out at 250 connections and this " +#~ "setting is set to 0.3, the pool will reclaim at most 75 idle connections " +#~ "if it's overloaded. Default: 0.1" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +#~ "hideSitename" +#~ msgid "Hides instance name from PleromaFE banner" +#~ msgstr "Hides instance name from PleromaFE banner" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +#~ "minimalScopesMode" +#~ msgid "" +#~ "Limit scope selection to Direct, User default, and Scope of post replying " +#~ "to. Also prevents replying to a DM with a public post from PleromaFE." +#~ msgstr "" +#~ "Limit scope selection to Direct, User default, and Scope of post replying " +#~ "to. Also prevents replying to a DM with a public post from PleromaFE." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :dstport" +#~ msgid "Port advertised in URLs (optional, defaults to port)" +#~ msgstr "Port advertised in URLs (optional, defaults to port)" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :enabled" +#~ msgid "Enables the gopher interface" +#~ msgstr "Enables the gopher interface" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :ip" +#~ msgid "IP address to bind to" +#~ msgstr "IP address to bind to" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :port" +#~ msgid "Port to bind to" +#~ msgstr "Port to bind to" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :federation" +#~ msgid "Settings for federation pool." +#~ msgstr "Settings for federation pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :federation > :" +#~ "max_connections" +#~ msgid "Number workers in the pool." +#~ msgstr "Number workers in the pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :federation > :timeout" +#~ msgid "Timeout while `hackney` will wait for response." +#~ msgstr "Timeout while `hackney` will wait for response." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :media" +#~ msgid "Settings for media pool." +#~ msgstr "Settings for media pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :media > :max_connections" +#~ msgid "Number workers in the pool." +#~ msgstr "Number workers in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +#~ msgid "Timeout while `hackney` will wait for response." +#~ msgstr "Timeout while `hackney` will wait for response." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :upload" +#~ msgid "Settings for upload pool." +#~ msgstr "Settings for upload pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :upload > :max_connections" +#~ msgid "Number workers in the pool." +#~ msgstr "Number workers in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +#~ msgid "Timeout while `hackney` will wait for response." +#~ msgstr "Timeout while `hackney` will wait for response." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:http > :proxy_url" +#~ msgid "Proxy URL" +#~ msgstr "Proxy URL" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :birthday_min_age" +#~ msgid "" +#~ "Minimum required age for users to create account. Only used if birthday " +#~ "is required." +#~ msgstr "" +#~ "Minimum required age for users to create account. Only used if birthday " +#~ "is required." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :birthday_required" +#~ msgid "Require users to enter their birthday." +#~ msgstr "Require users to enter their birthday." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +#~ msgid "" +#~ "The maximum number of recommended accounts. 0 will disable the feature." +#~ msgstr "" +#~ "The maximum number of recommended accounts. 0 will disable the feature." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :max_media_attachments" +#~ msgid "Maximum number of post media attachments" +#~ msgstr "Maximum number of post media attachments" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default" +#~ msgid "Settings for default pool." +#~ msgstr "Settings for default pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :federation" +#~ msgid "Settings for federation pool." +#~ msgstr "Settings for federation pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:pools > :federation > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :federation > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media" +#~ msgid "Settings for media pool." +#~ msgstr "Settings for media pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload" +#~ msgid "Settings for upload pool." +#~ msgstr "Settings for upload pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:shout > :enabled" +#~ msgid "Enables the backend Shoutbox chat feature." +#~ msgstr "Enables the backend Shoutbox chat feature." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:shout > :limit" +#~ msgid "Shout message character limit." +#~ msgstr "Shout message character limit." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +#~ msgid "Enables sending a chat message to newly registered users" +#~ msgstr "Enables sending a chat message to newly registered users" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +#~ msgid "" +#~ "A message that will be sent to newly registered users as a chat message" +#~ msgstr "" +#~ "A message that will be sent to newly registered users as a chat message" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +#~ msgid "The nickname of the local user that sends a welcome chat message" +#~ msgstr "The nickname of the local user that sends a welcome chat message" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "auth" +#~ msgid "Enables HTTP Basic Auth for app metrics endpoint." +#~ msgstr "Enables HTTP Basic Auth for app metrics endpoint." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "enabled" +#~ msgid "[Pleroma extension] Enables app metrics endpoint." +#~ msgstr "[Pleroma extension] Enables app metrics endpoint." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "format" +#~ msgid "App metrics endpoint output format." +#~ msgstr "App metrics endpoint output format." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "ip_whitelist" +#~ msgid "" +#~ "Restrict access of app metrics endpoint to the specified IP addresses." +#~ msgstr "" +#~ "Restrict access of app metrics endpoint to the specified IP addresses." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "path" +#~ msgid "App metrics endpoint URI path." +#~ msgstr "App metrics endpoint URI path." + +#, fuzzy +#~ msgctxt "config description at :quack > :level" +#~ msgid "Log level" +#~ msgstr "Log level" + +#, fuzzy +#~ msgctxt "config description at :quack > :meta" +#~ msgid "Configure which metadata you want to report on" +#~ msgstr "Configure which metadata you want to report on" + +#, fuzzy +#~ msgctxt "config description at :quack > :webhook_url" +#~ msgid "Configure the Slack incoming webhook" +#~ msgstr "Configure the Slack incoming webhook" + +#, fuzzy +#~ msgctxt "config label at :esshd > :handler" +#~ msgid "Handler" +#~ msgstr "Handler" + +#, fuzzy +#~ msgctxt "config label at :esshd > :password_authenticator" +#~ msgid "Password authenticator" +#~ msgstr "Password authenticator" + +#, fuzzy +#~ msgctxt "config label at :esshd > :port" +#~ msgid "Port" +#~ msgstr "Port" + +#, fuzzy +#~ msgctxt "config label at :esshd > :priv_dir" +#~ msgid "Priv dir" +#~ msgstr "Priv dir" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +#~ msgid "Connect timeout" +#~ msgstr "Connect timeout" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:connections_pool > :" +#~ "connection_acquisition_retries" +#~ msgid "Connection acquisition retries" +#~ msgstr "Connection acquisition retries" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +#~ msgid "Connection acquisition wait" +#~ msgstr "Connection acquisition wait" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +#~ msgid "Reclaim multiplier" +#~ msgstr "Reclaim multiplier" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +#~ "minimalScopesMode" +#~ msgid "Minimal scopes mode" +#~ msgstr "Minimal scopes mode" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :dstport" +#~ msgid "Dstport" +#~ msgstr "Dstport" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :ip" +#~ msgid "IP" +#~ msgstr "IP" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :port" +#~ msgid "Port" +#~ msgstr "Port" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :federation" +#~ msgid "Federation" +#~ msgstr "Federation" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:hackney_pools > :federation > :max_connections" +#~ msgid "Max connections" +#~ msgstr "Max connections" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :media" +#~ msgid "Media" +#~ msgstr "Media" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:hackney_pools > :media > :max_connections" +#~ msgid "Max connections" +#~ msgstr "Max connections" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +#~ msgid "Timeout" +#~ msgstr "Timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :upload" +#~ msgid "Upload" +#~ msgstr "Upload" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:hackney_pools > :upload > :max_connections" +#~ msgid "Max connections" +#~ msgstr "Max connections" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +#~ msgid "Timeout" +#~ msgstr "Timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:http > :send_user_agent" +#~ msgid "Send user agent" +#~ msgstr "Send user agent" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :birthday_min_age" +#~ msgid "Birthday min age" +#~ msgstr "Birthday min age" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :birthday_required" +#~ msgid "Birthday required" +#~ msgstr "Birthday required" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +#~ msgid "Max endorsed users" +#~ msgstr "Max endorsed users" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :max_media_attachments" +#~ msgid "Max media attachments" +#~ msgstr "Max media attachments" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :default" +#~ msgid "Default" +#~ msgstr "Default" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :default > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation" +#~ msgid "Federation" +#~ msgstr "Federation" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +#~ msgid "Recv timeout" +#~ msgstr "Recv timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media" +#~ msgid "Media" +#~ msgstr "Media" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +#~ msgid "Recv timeout" +#~ msgstr "Recv timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload" +#~ msgid "Upload" +#~ msgstr "Upload" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +#~ msgid "Recv timeout" +#~ msgstr "Recv timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:shout > :enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:shout > :limit" +#~ msgid "Limit" +#~ msgstr "Limit" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:welcome > :chat_message" +#~ msgid "Chat message" +#~ msgstr "Chat message" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +#~ msgid "Message" +#~ msgstr "Message" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +#~ msgid "Sender nickname" +#~ msgstr "Sender nickname" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +#~ msgid "Auth" +#~ msgstr "Auth" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +#~ msgid "Format" +#~ msgstr "Format" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "ip_whitelist" +#~ msgid "IP Whitelist" +#~ msgstr "IP Whitelist" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +#~ msgid "Path" +#~ msgstr "Path" + +#, fuzzy +#~ msgctxt "config label at :quack > :level" +#~ msgid "Level" +#~ msgstr "Level" + +#, fuzzy +#~ msgctxt "config label at :quack > :meta" +#~ msgid "Meta" +#~ msgstr "Meta" + +#, fuzzy +#~ msgctxt "config label at :quack > :webhook_url" +#~ msgid "Webhook URL" +#~ msgstr "Webhook URL" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :short_description" +#~ msgid "" +#~ "Shorter version of instance description. It can be seen on `/api/v1/" +#~ "instance`" +#~ msgstr "" +#~ "Shorter version of instance description. It can be seen on `/api/v1/" +#~ "instance`" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :short_description" +#~ msgid "Short description" +#~ msgstr "Short description" From ec74b60d5625065b7e9f3a33aa21712460eeadf7 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 7 Jul 2023 18:48:42 +0000 Subject: [PATCH 168/178] Translated using Weblate (Thai) Currently translated at 100.0% (0 of 0 strings) Added translation using Weblate (Thai) Co-authored-by: Anonymous Co-authored-by: Pongsatorn Paewsoongnern Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-config-descriptions/th/ Translation: Pleroma fe/Akkoma Backend (Config Descriptions) --- .../th/LC_MESSAGES/config_descriptions.po | 6359 +++++++++++++++++ 1 file changed, 6359 insertions(+) create mode 100644 priv/gettext/th/LC_MESSAGES/config_descriptions.po diff --git a/priv/gettext/th/LC_MESSAGES/config_descriptions.po b/priv/gettext/th/LC_MESSAGES/config_descriptions.po new file mode 100644 index 000000000..0a8dd5843 --- /dev/null +++ b/priv/gettext/th/LC_MESSAGES/config_descriptions.po @@ -0,0 +1,6359 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-07-07 18:47+0000\n" +"PO-Revision-Date: 2023-07-07 18:48+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Thai \n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.14\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here has no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger" +msgid "Logger-related settings" +msgstr "Logger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :mime" +msgid "Mime Types settings" +msgstr "Mime Types settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" +msgstr "" +"Allows setting a token that can be used to authenticate requests with admin " +"privileges without a normal user account token. Append the `admin_token` " +"parameter to requests to utilize it. (Please reconsider using HTTP Basic " +"Auth or OAuth-based authentication if possible)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Authenticator" +msgstr "Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug" +msgid "CORS plug config" +msgstr "CORS plug config" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger" +msgid "Logger" +msgstr "Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime" +msgid "Mime Types" +msgstr "Mime Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Admin Token" +msgstr "Pleroma Admin Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Authenticator" +msgstr "Pleroma Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console" +msgid "Console logger settings" +msgstr "Console logger settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger" +msgid "ExSyslogger-related settings" +msgstr "ExSyslogger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub" +msgid "ActivityPub-related settings" +msgstr "ActivityPub-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets" +msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" +msgstr "" +"This section configures assets to be used with various frontends. Currently " +"the only option relates to mascots on the mastodon frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth" +msgid "Authentication / authorization settings" +msgstr "Authentication / authorization settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications" +msgid "Email notifications settings" +msgstr "Email notifications settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features" +msgid "Customizable features" +msgstr "Customizable features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed" +msgid "Configure feed rendering" +msgstr "Configure feed rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends" +msgid "Installed frontends management" +msgstr "Installed frontends management" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http" +msgid "HTTP settings" +msgstr "HTTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security" +msgid "HTTP security settings" +msgstr "HTTP security settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance" +msgid "Instance-related settings" +msgstr "Instance-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons" +msgid "Control favicons for instances" +msgstr "Control favicons for instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap" +msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgstr "" +"Use LDAP for user authentication. When a user logs in to the Pleroma " +"instance, the name and password will be verified by trying to authenticate " +"(bind) to a LDAP server. If a user exists in the LDAP directory but there is " +"no account with the same name yet on the Pleroma instance then a new Pleroma " +"account will be created with the same name as the LDAP user name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool" +msgid "Majic/libmagic configuration" +msgstr "Majic/libmagic configuration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest" +msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgstr "" +"This section describe PWA manifest instance-specific values. Currently this " +"option relate only for MastoFE." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules" +msgid "Custom Runtime Modules" +msgstr "Custom Runtime Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf" +msgid "General MRF settings" +msgstr "General MRF settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration" +msgid "Adds automatic expiration to all local activities" +msgstr "Adds automatic expiration to all local activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot" +msgid "Automatically follows newly discovered accounts." +msgstr "Automatically follows newly discovered accounts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag" +msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgstr "" +"Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (" +"without the leading #)\n" +"\n" +"Note: This MRF Policy is always enabled, if you want to disable it you have " +"to set empty lists.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread" +msgid "Block messages with excessive user mentions" +msgstr "Block messages with excessive user mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword" +msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgstr "" +"Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs" +".pm/elixir/Regex.html)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention" +msgid "Block messages which mention a specific user" +msgstr "Block messages which mention a specific user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_normalize_markup" +msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." +msgstr "MRF NormalizeMarkup settings. Scrub configured hypertext markup." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age" +msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgstr "" +"Rejects or delists posts based on their timestamp deviance from your " +"server's clock." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic" +msgid "RejectNonPublic drops posts with non-public visibility settings." +msgstr "RejectNonPublic drops posts with non-public visibility settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple" +msgid "Simple ingress policies" +msgstr "Simple ingress policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji" +msgid "Steals emojis from selected instances when it sees them." +msgstr "Steals emojis from selected instances when it sees them." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain" +msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgstr "" +"This policy processes messages through an alternate pipeline when a given " +"message matches certain criteria. All criteria are configured as a map of " +"regular expressions to lists of policy modules." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary" +msgid "Filter messages which belong to certain activity vocabularies" +msgstr "Filter messages which belong to certain activity vocabularies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2" +msgid "Configure OAuth 2 provider capabilities" +msgstr "Configure OAuth 2 provider capabilities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table" +msgid "`populate_hashtags_table` background migration settings" +msgstr "`populate_hashtags_table` background migration settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit" +msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgstr "" +"Rate limit settings. This is an advanced feature enabled only for :" +"authentication by default." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media" +msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgstr "" +"If enabled the instance will parse metadata from attached links to generate " +"link previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe" +msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgstr "" +"Render profiles and posts using server-generated HTML that is viewable " +"without using JavaScript" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer" +msgid "Settings for notifications streamer" +msgstr "Settings for notifications streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes" +msgid "URI schemes related settings" +msgstr "URI schemes related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl" +msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgstr "" +"The expiration time for the web responses cache. Values should be in " +"milliseconds or `nil` to disable expiration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome" +msgid "Welcome messages settings" +msgstr "Welcome messages settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers" +msgid "Includes custom worker options not interpretable directly by `Oban`" +msgstr "Includes custom worker options not interpretable directly by `Oban`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter" +msgid "Limits configuration for background tasks." +msgstr "Limits configuration for background tasks." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban" +msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgstr "" +"[Oban](https://github.com/sorentwo/oban) asynchronous job processor " +"configuration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha" +msgid "Captcha-related settings" +msgstr "Captcha-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgstr "" +"Kocaptcha is a very simple captcha service with a single API endpoint, the " +"source code is here: https://github.com/koto-bank/kocaptcha. The default " +"endpoint (https://captcha.kotobank.ch) is hosted by the developer." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" +msgid "Mailer-related settings" +msgstr "Mailer-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "New users admin email digest" +msgstr "New users admin email digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" +msgid "Email template settings" +msgstr "Email template settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter" +msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgstr "" +"Configuration for Pleroma's link formatter which parses mentions, hashtags, " +"and URLs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" +msgid "Scheduled activities settings" +msgstr "Scheduled activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload" +msgid "Upload general settings" +msgstr "Upload general settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Filter replaces the filename of the upload" +msgstr "Filter replaces the filename of the upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Uploads mogrify filter settings" +msgstr "Uploads mogrify filter settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" +msgid "Local uploader-related settings" +msgstr "Local uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" +msgid "S3 uploader-related settings" +msgstr "S3 uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup" +msgid "Account Backup" +msgstr "Account Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "HTTP invalidate settings" +msgstr "HTTP invalidate settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Invalidation script settings" +msgstr "Invalidation script settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata" +msgid "Metadata-related settings" +msgstr "Metadata-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgstr "" +"`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git." +"pleroma.social/pleroma/remote_ip) but with runtime configuration.\n" +"**If your instance is not behind at least one reverse proxy, you should not " +"enable this plug.**\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload" +msgid "Preload-related settings" +msgstr "Preload-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Expired activities settings" +msgstr "Expired activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details" +msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgstr "" +"Web Push Notifications configuration. You can use the mix task mix " +"web_push.gen.keypair to generate it." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3" +msgid "S3" +msgstr "S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console" +msgid "Console Logger" +msgstr "Console Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger" +msgid "ExSyslogger" +msgstr "ExSyslogger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub" +msgid "ActivityPub" +msgstr "ActivityPub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets" +msgid "Assets" +msgstr "Assets" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth" +msgid "Auth" +msgstr "Auth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications" +msgid "Email notifications" +msgstr "Email notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji" +msgid "Emoji" +msgstr "Emoji" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features" +msgid "Features" +msgstr "Features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed" +msgid "Feed" +msgstr "Feed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations" +msgid "Frontend configurations" +msgstr "Frontend configurations" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends" +msgid "Frontends" +msgstr "Frontends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http" +msgid "HTTP" +msgstr "HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security" +msgid "HTTP security" +msgstr "HTTP security" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance" +msgid "Instance" +msgstr "Instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons" +msgid "Instances favicons" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap" +msgid "LDAP" +msgstr "LDAP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool" +msgid "Majic pool" +msgstr "Majic pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest" +msgid "Manifest" +msgstr "Manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup" +msgid "Markup Settings" +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules" +msgid "Modules" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf" +msgid "MRF" +msgstr "MRF" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration" +msgid "MRF Activity Expiration Policy" +msgstr "MRF Activity Expiration Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot" +msgid "MRF FollowBot Policy" +msgstr "MRF FollowBot Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag" +msgid "MRF Hashtag" +msgstr "MRF Hashtag" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread" +msgid "MRF Hellthread" +msgstr "MRF Hellthread" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword" +msgid "MRF Keyword" +msgstr "MRF Keyword" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention" +msgid "MRF Mention" +msgstr "MRF Mention" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup" +msgid "MRF Normalize Markup" +msgstr "MRF Normalize Markup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age" +msgid "MRF Object Age" +msgstr "MRF Object Age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic" +msgid "MRF Reject Non Public" +msgstr "MRF Reject Non Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple" +msgid "MRF Simple" +msgstr "MRF Simple" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji" +msgid "MRF Emojis" +msgstr "MRF Emojis" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain" +msgid "MRF Subchain" +msgstr "MRF Subchain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary" +msgid "MRF Vocabulary" +msgstr "MRF Vocabulary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2" +msgid "OAuth2" +msgstr "OAuth2" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table" +msgid "Populate hashtags table" +msgstr "Populate hashtags table" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit" +msgid "Rate limit" +msgstr "Rate limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated" +msgid "Restrict Unauthenticated" +msgstr "Restrict Unauthenticated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media" +msgid "Rich media" +msgstr "Rich media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe" +msgid "Static FE" +msgstr "Static FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer" +msgid "Streamer" +msgstr "Streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes" +msgid "URI Schemes" +msgstr "URI Schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user" +msgid "User" +msgstr "User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl" +msgid "Web cache TTL" +msgstr "Web cache TTL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome" +msgid "Welcome" +msgstr "Welcome" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter" +msgid "ConcurrentLimiter" +msgstr "ConcurrentLimiter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban" +msgid "Oban" +msgstr "Oban" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha" +msgid "Pleroma.Captcha" +msgstr "Pleroma.Captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Pleroma.Captcha.Kocaptcha" +msgstr "Pleroma.Captcha.Kocaptcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" +msgid "Pleroma.Emails.Mailer" +msgstr "Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "Pleroma.Emails.NewUsersDigestEmail" +msgstr "Pleroma.Emails.NewUsersDigestEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" +msgid "Pleroma.Emails.UserEmail" +msgstr "Pleroma.Emails.UserEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter" +msgid "Linkify" +msgstr "Linkify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" +msgid "Pleroma.ScheduledActivity" +msgstr "Pleroma.ScheduledActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload" +msgid "Pleroma.Upload" +msgstr "Pleroma.Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Pleroma.Upload.Filter.AnonymizeFilename" +msgstr "Pleroma.Upload.Filter.AnonymizeFilename" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Pleroma.Upload.Filter.Mogrify" +msgstr "Pleroma.Upload.Filter.Mogrify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" +msgid "Pleroma.Uploaders.Local" +msgstr "Pleroma.Uploaders.Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" +msgid "Pleroma.Uploaders.S3" +msgstr "Pleroma.Uploaders.S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User" +msgid "Pleroma.User" +msgstr "Pleroma.User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup" +msgid "Pleroma.User.Backup" +msgstr "Pleroma.User.Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" +msgid "Pleroma.Web.ApiSpec.CastAndValidate" +msgstr "Pleroma.Web.ApiSpec.CastAndValidate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "Pleroma.Web.MediaProxy.Invalidation.Http" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Http" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Pleroma.Web.MediaProxy.Invalidation.Script" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Script" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata" +msgid "Pleroma.Web.Metadata" +msgstr "Pleroma.Web.Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "Pleroma.Web.Plugs.RemoteIp" +msgstr "Pleroma.Web.Plugs.RemoteIp" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload" +msgid "Pleroma.Web.Preload" +msgstr "Pleroma.Web.Preload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Pleroma.Workers.PurgeExpiredActivity" +msgstr "Pleroma.Workers.PurgeExpiredActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details" +msgid "Vapid Details" +msgstr "Vapid Details" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :access_key_id" +msgid "S3 access key ID" +msgstr "S3 access key ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :host" +msgid "S3 host" +msgstr "S3 host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :region" +msgid "S3 region (for AWS)" +msgstr "S3 region (for AWS)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger > :backends" +msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgstr "" +"Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :" +"ex_syslogger } - to syslog, Quack.Logger - to Slack." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :ident" +msgid "A string that's prepended to every message, and is typically set to the app name" +msgstr "" +"A string that's prepended to every message, and is typically set to the app " +"name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :blockers_visible" +msgid "Whether a user can see someone who has blocked them" +msgstr "Whether a user can see someone who has blocked them" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Following handshake timeout" +msgstr "Following handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +msgstr "" +"The number of Note replies' URIs to be included with outgoing federation (`5`" +" to match Mastodon hardcoded value, `0` to disable the output)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" +msgid "Whether to federate blocks to other instances" +msgstr "Whether to federate blocks to other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches with HTTP signatures" +msgstr "Sign object fetches with HTTP signatures" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" +msgid "Whether blocks result in people getting unfollowed" +msgstr "Whether blocks result in people getting unfollowed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_mascot" +msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgstr "" +"This will be used as the default mascot on MastoFE. Default: " +"`:pleroma_fox_tan`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_user_avatar" +msgid "URL of the default user avatar" +msgstr "URL of the default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :mascots" +msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgstr "" +"Keyword of mascots, each element must contain both an URL and a mime_type key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :auth_template" +msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgstr "" +"Authentication form template. By default it's `show.html` which corresponds " +"to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +msgstr "" +"OAuth admin scope requirement toggle. If enabled, admin actions explicitly " +"demand admin OAuth scope(s) presence in OAuth token (client app must support " +"admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` " +"user flag grants access to admin-specific actions." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" +msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgstr "" +"The list of enabled OAuth consumer strategies. By default it's set by " +"OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-" +"delimited string should be of format \"strategy\" or \"strategy:dependency\" " +"(e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is " +"named differently than ueberauth_)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgstr "" +"OAuth consumer mode authentication form template. By default it's `consumer." +"html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." +"html.eex`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest" +msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgstr "" +"emails of \"what you've missed\" for users who have been inactive for a while" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +msgid "Globally enable or disable digest emails" +msgstr "Globally enable or disable digest emails" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Minimum user inactivity threshold" +msgstr "Minimum user inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +msgid "Minimum interval between digest emails to one user" +msgstr "Minimum interval between digest emails to one user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +msgstr "" +"When to send digest email, in crontab format. \"0 0 0\" is the default, " +"meaning \"once a week at midnight on Sunday morning\"." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :default_manifest" +msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgstr "" +"Location of the JSON-manifest. This manifest contains information about the " +"emoji-packs you can download. Currently only one manifest can be added (no " +"arrays)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :groups" +msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgstr "" +"Emojis are ordered in groups (tags). This is an array of key-value pairs " +"where the key is the group name and the value is the location or array of " +"locations. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :pack_extensions" +msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgstr "" +"A list of file extensions for emojis, when no emoji.txt for a pack is present" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :shortcode_globs" +msgid "Location of custom emoji files. * can be used as a wildcard." +msgstr "Location of custom emoji files. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" +msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." +msgstr "" +"Setting to force toggle / force disable improved hashtags timeline. " +"`:enabled` forces hashtags to be fetched from `hashtags` table for hashtags " +"timeline. `:disabled` forces object-embedded hashtags to be used (slower). " +"Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [" +"unless overridden] when HashtagsTableMigrator completes)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title" +msgid "Configure title rendering" +msgstr "Configure title rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :max_length" +msgid "Maximum number of characters before truncating title" +msgstr "Maximum number of characters before truncating title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :omission" +msgid "Replacement which will be used after truncating string" +msgstr "Replacement which will be used after truncating string" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Settings for Pleroma FE" +msgstr "Settings for Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "When disabled, auto-hide the subject field if it's empty" +msgstr "When disabled, auto-hide the subject field if it's empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "URL of the background, unless viewing a user profile with a background that is set" +msgstr "" +"URL of the background, unless viewing a user profile with a background that " +"is set" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "When a message has a subject (aka Content Warning), collapse it by default" +msgstr "" +"When a message has a subject (aka Content Warning), collapse it by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Enables green text on lines prefixed with the > character" +msgstr "Enables green text on lines prefixed with the > character" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hides filtered statuses from timelines" +msgstr "Hides filtered statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hides muted statuses from timelines" +msgstr "Hides muted statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide notices statistics (repeats, favorites, ...)" +msgstr "Hide notices statistics (repeats, favorites, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +msgstr "" +"Hide profile statistics (posts, posts per day, followers, followings, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "URL of the logo, defaults to Pleroma's logo" +msgstr "URL of the logo, defaults to Pleroma's logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +msgstr "" +"Allows you to adjust vertical margins between logo boundary and navbar " +"borders. The idea is that to have logo's image without any extra margins and " +"instead adjust them to your need in layout." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +msgstr "" +"By default it assumes logo used will be monochrome with alpha channel to be " +"compatible with both light and dark themes. If you want a colorful logo you " +"must disable logoMask." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +msgstr "" +"URL of the image to use for hiding NSFW media attachments in the timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Default post formatting option" +msgstr "Default post formatting option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Relative URL which indicates where to redirect when a user is logged in" +msgstr "Relative URL which indicates where to redirect when a user is logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Relative URL which indicates where to redirect when a user isn't logged in" +msgstr "" +"Relative URL which indicates where to redirect when a user isn't logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "Copy the scope (private/unlisted/public) in replies to posts by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Enables panel displaying functionality of the instance on the About page" +msgstr "" +"Enables panel displaying functionality of the instance on the About page" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Whether to show the instance's custom panel" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Change alignment of sidebar and panels to the right" +msgstr "Change alignment of sidebar and panels to the right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +msgstr "" +"Allows changing the default behaviour of subject lines in replies.\n" +" `email`: copy and preprend re:, as in email,\n" +" `masto`: copy verbatim, as in Mastodon,\n" +" `noop`: don't copy the subject." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Which theme to use. Available themes are defined in styles.json" +msgstr "Which theme to use. Available themes are defined in styles.json" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin" +msgid "Admin frontend" +msgstr "Admin frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available" +msgid "A map containing available frontends and parameters for their installation." +msgstr "" +"A map containing available frontends and parameters for their installation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_dir" +msgid "The directory inside the zip file " +msgstr "The directory inside the zip file " + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_url" +msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgstr "" +"Either an url to a zip file containing the frontend or a template to build " +"it by inserting the `ref`. The string `${ref}` will be replaced by the " +"configured `ref`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +msgid "The custom HTTP headers for the frontend" +msgstr "The custom HTTP headers for the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > git" +msgid "URL of the git repository of the frontend" +msgstr "URL of the git repository of the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > name" +msgid "Name of the frontend." +msgstr "Name of the frontend." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > ref" +msgid "Reference of the frontend to be used." +msgstr "Reference of the frontend to be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary" +msgid "Primary frontend, the one that is served for all pages by default" +msgstr "Primary frontend, the one that is served for all pages by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter" +msgid "Adapter specific options" +msgstr "Adapter specific options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL options for HTTP adapter" +msgstr "SSL options for HTTP adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "List of TLS version to use" +msgstr "List of TLS version to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :user_agent" +msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgstr "" +"What user agent to use. Must be a string or an atom `:default`. Default " +"value is `:default`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :enabled" +msgid "Whether the managed content security policy is enabled" +msgstr "Whether the managed content security policy is enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :referrer_policy" +msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" +msgstr "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :report_uri" +msgid "Adds the specified URL to report-uri and report-to group in CSP header" +msgstr "Adds the specified URL to report-uri and report-to group in CSP header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts" +msgid "Whether to additionally send a Strict-Transport-Security header" +msgstr "Whether to additionally send a Strict-Transport-Security header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts_max_age" +msgid "The maximum age for the Strict-Transport-Security header if sent" +msgstr "The maximum age for the Strict-Transport-Security header if sent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_activation_required" +msgid "Require users to confirm their emails before signing in" +msgstr "Require users to confirm their emails before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_approval_required" +msgid "Require users to be manually approved by an admin before signing in" +msgstr "Require users to be manually approved by an admin before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_name_length" +msgid "An account field name maximum length. Default: 512." +msgstr "An account field name maximum length. Default: 512." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_value_length" +msgid "An account field value maximum length. Default: 2048." +msgstr "An account field value maximum length. Default: 2048." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allow_relay" +msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgstr "" +"Permits remote instances to subscribe to all public posts of your instance. " +"(Important!) This may increase the visibility of your instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allowed_post_formats" +msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" +msgstr "MIME-type list of formats allowed to be posted (transformed into HTML)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :attachment_links" +msgid "Enable to automatically add attachment link text to statuses" +msgstr "Enable to automatically add attachment link text to statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" +msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgstr "" +"Set to nicknames of (local) users that every new user should automatically " +"follow" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" +msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgstr "" +"Set to nicknames of (local) users that automatically follows every newly " +"registered user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" +msgid "File size limit of user's profile avatars" +msgstr "File size limit of user's profile avatars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :background_upload_limit" +msgid "File size limit of user's profile backgrounds" +msgstr "File size limit of user's profile backgrounds" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :banner_upload_limit" +msgid "File size limit of user's profile banners" +msgstr "File size limit of user's profile banners" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :cleanup_attachments" +msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgstr "" +"Enable to remove associated attachments when status is removed.\n" +"This will not affect duplicates and attachments without status.\n" +"Enabling this will increase load to database when deleting statuses on " +"larger instances.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :description" +msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgstr "" +"The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :email" +msgid "Email used to reach an Administrator/Moderator of the instance" +msgstr "Email used to reach an Administrator/Moderator of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :extended_nickname_format" +msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgstr "" +"Enable to use extended local nicknames format (allows underscores/dashes). " +"This will break federation with older software for theses nicknames." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :external_user_synchronization" +msgid "Enabling following/followers counters synchronization for external users" +msgstr "" +"Enabling following/followers counters synchronization for external users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federating" +msgid "Enable federation with other instances" +msgstr "Enable federation with other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +msgstr "" +"Max. depth of reply-to and reply activities fetching on incoming federation, " +"to prevent out-of-memory situations while fetching very long threads. If set " +"to `nil`, threads of any depth will be fetched. Lower this value if you " +"experience out-of-memory crashes." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +msgstr "" +"Timeout (in days) of each external federation target being unreachable prior " +"to pausing federating to it" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :instance_thumbnail" +msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgstr "" +"The instance thumbnail can be any image that represents your instance and is " +"used by some apps or services when they display information about your " +"instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :invites_enabled" +msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgstr "" +"Enable user invitations for admins (depends on `registrations_open` being " +"disabled)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit" +msgid "Posts character limit (CW/Subject included in the counter)" +msgstr "Posts character limit (CW/Subject included in the counter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit_to_local_content" +msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgstr "" +"Limit unauthenticated users to search for local statutes and users only. " +"Default: `:unauthenticated`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_account_fields" +msgid "The maximum number of custom fields in the user profile. Default: 10." +msgstr "The maximum number of custom fields in the user profile. Default: 10." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" +msgid "The maximum number of pinned statuses. 0 will disable the feature." +msgstr "The maximum number of pinned statuses. 0 will disable the feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" +msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgstr "" +"The maximum number of custom fields in the remote user profile. Default: 20." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_report_comment_size" +msgid "The maximum size of the report comment. Default: 1000." +msgstr "The maximum size of the report comment. Default: 1000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi-factor authentication settings" +msgstr "Multi-factor authentication settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "MFA backup codes settings" +msgstr "MFA backup codes settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +msgstr "" +"Determines the length of backup one-time pass-codes, in characters. Defaults " +"to 16 characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number of backup codes to generate." +msgstr "Number of backup codes to generate." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +msgstr "" +"Determines the length of a one-time pass-code, in characters. Defaults to 6 " +"characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +msgstr "" +"A period for which the TOTP code will be valid, in seconds. Defaults to 30 " +"seconds." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :name" +msgid "Name of the instance" +msgstr "Name of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :notify_email" +msgid "Envelope FROM address for mail sent via Pleroma" +msgstr "Envelope FROM address for mail sent via Pleroma" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits" +msgid "A map with poll limits for local polls" +msgstr "A map with poll limits for local polls" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Maximum expiration time (in seconds)" +msgstr "Maximum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Maximum number of characters per option" +msgstr "Maximum number of characters per option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +msgid "Maximum number of options" +msgstr "Maximum number of options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Minimum expiration time (in seconds)" +msgstr "Minimum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :profile_directory" +msgid "Enable profile directory." +msgstr "Enable profile directory." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registration_reason_length" +msgid "Maximum registration reason length. Default: 500." +msgstr "Maximum registration reason length. Default: 500." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registrations_open" +msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgstr "" +"Enable registrations for anyone. Invitations require this setting to be " +"disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_limit" +msgid "Hard character limit beyond which remote posts will be dropped" +msgstr "Hard character limit beyond which remote posts will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" +msgid "The default amount of days to retain remote posts when pruning the database" +msgstr "" +"The default amount of days to retain remote posts when pruning the database" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" +msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgstr "" +"If enabled, only mentions at the beginning of a post will be used to address " +"people in direct messages. This is to prevent accidental mentioning of " +"people when talking about them (e.g. \"@admin please keep an eye on @" +"bad_actor\"). Default: disabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :show_reactions" +msgid "Let favourites and emoji reactions be viewed through the API." +msgstr "Let favourites and emoji reactions be viewed through the API." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :skip_thread_containment" +msgid "Skip filtering out broken threads. Default: enabled." +msgstr "Skip filtering out broken threads. Default: enabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :static_dir" +msgid "Instance static directory" +msgstr "Instance static directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :upload_limit" +msgid "File size limit of uploads (except for avatar, background, banner)" +msgstr "File size limit of uploads (except for avatar, background, banner)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_bio_length" +msgid "A user bio maximum length. Default: 5000." +msgstr "A user bio maximum length. Default: 5000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_name_length" +msgid "A user name maximum length. Default: 100." +msgstr "A user name maximum length. Default: 100." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons > :enabled" +msgid "Allow/disallow displaying and getting instances favicons" +msgstr "Allow/disallow displaying and getting instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :base" +msgid "LDAP base, e.g. \"dc=example,dc=com\"" +msgstr "LDAP base, e.g. \"dc=example,dc=com\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :enabled" +msgid "Enables LDAP authentication" +msgstr "Enables LDAP authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :host" +msgid "LDAP server hostname" +msgstr "LDAP server hostname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :port" +msgid "LDAP port, e.g. 389 or 636" +msgstr "LDAP port, e.g. 389 or 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :ssl" +msgid "Enable to use SSL, usually implies the port 636" +msgstr "Enable to use SSL, usually implies the port 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts" +msgid "Additional SSL options" +msgstr "Additional SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tls" +msgid "Enable to use STARTTLS, usually implies the port 389" +msgstr "Enable to use STARTTLS, usually implies the port 389" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts" +msgid "Additional TLS options" +msgstr "Additional TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :uid" +msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgstr "" +"LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter " +"will be \"cn=username,base\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool > :size" +msgid "Number of majic workers to start." +msgstr "Number of majic workers to start." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :icons" +msgid "Describe the icons of the app" +msgstr "Describe the icons of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:markup > :scrub_policy" +msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgstr "" +"Module names are shortened (removed leading `Pleroma.HTML.` part), but on " +"adding custom module you need to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" +msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgstr "" +"Enables proxying of remote media preview to the instance's proxy. Requires " +"enabled media proxy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" +msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgstr "" +"Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +msgstr "" +"Min content length (in bytes) to perform preview. Media smaller in size will " +"be served without thumbnailing." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max height of preview thumbnail for images (video preview always has " +"original dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max width of preview thumbnail for images (video preview always has original " +"dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :base_url" +msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgstr "" +"The base URL to access a user-uploaded file. Useful when you want to proxy " +"the media files via another host/CDN fronts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :enabled" +msgid "Enables proxying of remote media via the instance's proxy" +msgstr "Enables proxying of remote media via the instance's proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enables media cache object invalidation." +msgstr "Enables media cache object invalidation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Module which will be used to purge objects from the cache." +msgstr "Module which will be used to purge objects from the cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" +msgid "Internal Pleroma.ReverseProxy settings" +msgstr "Internal Pleroma.ReverseProxy settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +msgstr "" +"Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Timeout (in milliseconds) of GET request to the remote URI." +msgstr "Timeout (in milliseconds) of GET request to the remote URI." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +msgstr "" +"Redirects the client to the origin server upon encountering HTTP errors.\n" +"\n" +"Note that files larger than Max Body Length will trigger an error. (e.g., " +"Peertube videos)\n" +"\n" +"\n" +"**WARNING:** This setting will allow larger files to be accessed, but " +"exposes the\n" +"\n" +"IP addresses of your users to the other servers, bypassing the MediaProxy.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :whitelist" +msgid "List of hosts with scheme to bypass the MediaProxy" +msgstr "List of hosts with scheme to bypass the MediaProxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules > :runtime_dir" +msgid "A path to custom Elixir modules (such as MRF policies)." +msgstr "A path to custom Elixir modules (such as MRF policies)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :policies" +msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgstr "" +"A list of MRF policies enabled. Module names are shortened (removed leading " +"`Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency" +msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgstr "" +"Make the content of your Message Rewrite Facility settings public (via " +"nodeinfo)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" +msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgstr "" +"Exclude specific instance names from MRF transparency. The use of the " +"exclusions feature will be disclosed in nodeinfo as a boolean value. You can " +"also provide a reason for excluding these instance names. The instances and " +"reasons won't be publicly disclosed." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" +msgid "Default global expiration time for all local activities (in days)" +msgstr "Default global expiration time for all local activities (in days)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "The name of the bot account to use for following newly discovered users." +msgstr "" +"The name of the bot account to use for following newly discovered users." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +msgstr "" +"A list of hashtags which result in message being removed from federated " +"timelines (a.k.a unlisted)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :reject" +msgid "A list of hashtags which result in message being rejected." +msgstr "A list of hashtags which result in message being rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" +msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgstr "" +"A list of hashtags which result in message being set as sensitive (a.k.a " +"NSFW/R-18)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the message gets removed from " +"timelines anddisables notifications. Set to 0 to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the messaged gets rejected. Set to 0 " +"to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being removed from federated " +"timelines (a.k.a unlisted).\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :reject" +msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being rejected.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :replace" +msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgstr "" +" **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in " +"the format of `~r/PATTERN/`.\n" +"\n" +" **Replacement**: a string. Leaving the field empty is permitted.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention > :actors" +msgid "A list of actors for which any post mentioning them will be dropped" +msgstr "A list of actors for which any post mentioning them will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :actions" +msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgstr "" +"A list of actions to apply to the post. `:delist` removes the post from " +"public timelines; `:strip_followers` removes followers from the ActivityPub " +"recipient list ensuring they won't be delivered to home timelines; `:reject` " +"rejects the message entirely" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :threshold" +msgid "Required age (in seconds) of a post before actions are taken." +msgstr "Required age (in seconds) of a post before actions are taken." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Whether to allow direct messages" +msgstr "Whether to allow direct messages" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Whether to allow followers-only posts" +msgstr "Whether to allow followers-only posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :accept" +msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to only accept activities from (except deletes) and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" +msgid "List of instances to strip avatars from and the reason for doing so" +msgstr "List of instances to strip avatars from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" +msgid "List of instances to strip banners from and the reason for doing so" +msgstr "List of instances to strip banners from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +msgstr "" +"List of instances to remove from the Federated (aka The Whole Known Network) " +"Timeline and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :followers_only" +msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgstr "" +"Force posts from the given instances to be visible by followers only and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" +msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgstr "" +"List of instances to tag all media as NSFW (sensitive) from and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_removal" +msgid "List of instances to strip media attachments from and the reason for doing so" +msgstr "" +"List of instances to strip media attachments from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject" +msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to reject activities from (except deletes) and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" +msgid "List of instances to reject deletions from and the reason for doing so" +msgstr "List of instances to reject deletions from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :report_removal" +msgid "List of instances to reject reports from and the reason for doing so" +msgstr "List of instances to reject reports from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" +msgid "List of hosts to steal emojis from" +msgstr "List of hosts to steal emojis from" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns or matches to reject shortcodes with.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgstr "" +"File size limit (in bytes), checked before an emoji is saved to the disk" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" +msgid "Matches a series of regular expressions against the actor field" +msgstr "Matches a series of regular expressions against the actor field" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" +msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgstr "" +"A list of ActivityStreams terms to accept. If empty, all supported messages " +"are accepted." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" +msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgstr "" +"A list of ActivityStreams terms to reject. If empty, no messages are " +"rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgstr "" +"Enable a background job to clean expired OAuth tokens. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgstr "" +"Keeps old refresh token or generate new refresh token when to obtain an " +"access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" +msgid "The lifetime in seconds of the access token" +msgstr "The lifetime in seconds of the access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +msgstr "" +"Max accepted rate of objects that failed in the migration. Any value from " +"0.0 which tolerates no errors to 1.0 which will enable the feature even if " +"hashtags transfer failed for all records." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +msgstr "" +"Sleep interval between each chunk of processed records in order to decrease " +"the load on the system (defaults to 0 and should be keep default on most " +"instances)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" +msgid "For registering user accounts from the same IP address" +msgstr "For registering user accounts from the same IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :authentication" +msgid "For authentication create / password check / user existence check requests" +msgstr "" +"For authentication create / password check / user existence check requests" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" +msgid "For actions on relation with a specific user (follow, unfollow)" +msgstr "For actions on relation with a specific user (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relations_actions" +msgid "For actions on relationships with all users (follow, unfollow)" +msgstr "For actions on relationships with all users (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :search" +msgid "For the search requests (account & status search etc.)" +msgstr "For the search requests (account & status search etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :status_id_action" +msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgstr "" +"For fav / unfav or reblog / unreblog actions on the same status by the same " +"user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" +msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgstr "" +"For create / delete / fav / unfav / reblog / unreblog actions on any statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :timeline" +msgid "For requests to timelines (each timeline has it's own limiter)" +msgstr "For requests to timelines (each timeline has it's own limiter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Settings for user profiles." +msgstr "Settings for user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Settings for public and federated timelines." +msgstr "Settings for public and federated timelines." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :enabled" +msgid "Enables RichMedia parsing of URLs" +msgstr "Enables RichMedia parsing of URLs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :failure_backoff" +msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgstr "" +"Amount of milliseconds after request failure, during which the request will " +"not be retried." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" +msgid "List of hosts which will be ignored by the metadata parser" +msgstr "List of hosts which will be ignored by the metadata parser" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_tld" +msgid "List TLDs (top-level domains) which will ignore for parse metadata" +msgstr "List TLDs (top-level domains) which will ignore for parse metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :parsers" +msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgstr "" +"List of Rich Media parsers. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ttl_setters" +msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgstr "" +"List of rich media TTL setters. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe > :enabled" +msgid "Enables the rendering of static HTML. Default: disabled." +msgstr "Enables the rendering of static HTML. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :overflow_workers" +msgid "Maximum number of workers created if pool is empty" +msgstr "Maximum number of workers created if pool is empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :workers" +msgid "Number of workers to send notifications" +msgstr "Number of workers to send notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" +msgid "List of the scheme part that is considered valid to be an URL" +msgstr "List of the scheme part that is considered valid to be an URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgstr "" +"Activity pub routes (except question activities). Default: `nil` (no " +"expiration)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +msgstr "" +"Activity pub routes (question activities). Default: `30_000` (30 seconds)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enables sending a direct message to newly registered users" +msgstr "Enables sending a direct message to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :message" +msgid "A message that will be sent to newly registered users" +msgstr "A message that will be sent to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome message" +msgstr "The nickname of the local user that sends a welcome message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :enabled" +msgid "Enables sending an email to newly registered users" +msgstr "Enables sending an email to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :html" +msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"HTML content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :sender" +msgid "Email address and/or nickname that will be used to send the welcome email." +msgstr "" +"Email address and/or nickname that will be used to send the welcome email." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :subject" +msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Subject of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :text" +msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Text content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers > :retries" +msgid "Max retry attempts for failed jobs, per `Oban` queue" +msgstr "Max retry attempts for failed jobs, per `Oban` queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." +msgstr "Concurrent limits configuration for MediaProxyWarmingPolicy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Concurrent limits configuration for getting RichMedia for activities." +msgstr "Concurrent limits configuration for getting RichMedia for activities." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :crontab" +msgid "Settings for cron background jobs" +msgstr "Settings for cron background jobs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :log" +msgid "Logs verbose mode" +msgstr "Logs verbose mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues" +msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgstr "" +"Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration queue" +msgstr "Activity expiration queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachment deletion queue" +msgstr "Attachment deletion queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :background" +msgid "Background queue" +msgstr "Background queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :backup" +msgid "Backup queue" +msgstr "Backup queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" +msgid "Incoming federation queue" +msgstr "Incoming federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Outgoing federation queue" +msgstr "Outgoing federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :mailer" +msgid "Email sender queue, see Pleroma.Emails.Mailer" +msgstr "Email sender queue, see Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" +msgstr "Scheduled activities queue, see Pleroma.ScheduledActivities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier queue" +msgstr "Transmogrifier queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :web_push" +msgid "Web push notifications queue" +msgstr "Web push notifications queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" +msgid "Whether the captcha should be shown on registration" +msgstr "Whether the captcha should be shown on registration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :method" +msgid "The method/service to use for captcha" +msgstr "The method/service to use for captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "The time in seconds for which the captcha is valid" +msgstr "The time in seconds for which the captcha is valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "The kocaptcha endpoint to use" +msgstr "The kocaptcha endpoint to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgstr "" +"One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/" +"swoosh/Swoosh.html#module-adapters)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "SMTP AUTH enforcement mode" +msgstr "SMTP AUTH enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "SMTP AUTH password" +msgstr "SMTP AUTH password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "SMTP port" +msgstr "SMTP port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Hostname or IP address" +msgstr "Hostname or IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "SMTP temporary (4xx) error retries" +msgstr "SMTP temporary (4xx) error retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use Implicit SSL/TLS. e.g. port 465" +msgstr "Use Implicit SSL/TLS. e.g. port 465" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "Explicit TLS (STARTTLS) enforcement mode" +msgstr "Explicit TLS (STARTTLS) enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "SMTP AUTH username" +msgstr "SMTP AUTH username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enables new users admin digest email when `true`" +msgstr "Enables new users admin digest email when `true`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgstr "" +"A path to a custom logo. Set it to `nil` to use the default Pleroma logo." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "A map with color settings for email templates." +msgstr "A map with color settings for email templates." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :class" +msgid "Specify the class to be added to the generated link. Disable to clear." +msgstr "Specify the class to be added to the generated link. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" +msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" +msgstr "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" +msgid "Link URLs will open in a new window/tab." +msgstr "Link URLs will open in a new window/tab." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" +msgid "Override the rel attribute. Disable to clear." +msgstr "Override the rel attribute. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip the scheme prefix." +msgstr "Strip the scheme prefix." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" +msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgstr "" +"Set to a number to truncate URLs longer than the number. Truncated URLs will " +"end in `...`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgstr "" +"Set to false to disable TLD validation for URLs/emails. Can be set to :" +"no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` " +"will be validated, but `http://example.loki` won't)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +msgstr "" +"The number of scheduled activities a user is allowed to create in a single " +"day. Default: 25." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Whether scheduled activities are sent to the job queue to be executed" +msgstr "Whether scheduled activities are sent to the job queue to be executed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +msgstr "" +"The number of scheduled activities a user is allowed to create in total. " +"Default: 300." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgstr "" +"Base URL for the uploads. Required if you use a CDN or host attachments " +"under a different domain." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Set max length of a filename to display. 0 = no limit. Default: 30" +msgstr "Set max length of a filename to display. 0 = no limit. Default: 30" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filters" +msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgstr "" +"List of filter modules for uploads. Module names are shortened (removed " +"leading `Pleroma.Upload.Filter.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" +msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgstr "" +"If enabled, a name parameter will be added to the URL of the upload. For " +"example `https://instance.tld/media/imagehash.png?name=realname.png`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgstr "" +"Proxy requests to the remote uploader.\n" +"\n" +"Useful if media upload endpoint is not internet accessible.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" +msgid "Module which will be used for uploads" +msgstr "Module which will be used for uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +msgstr "" +"Text to replace filenames in links. If no setting, {random}.extension will " +"be used. You can get the original filename extension by using {extension}, " +"for example custom-file-name.{extension}." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgstr "" +"List of actions for the mogrify command. It's possible to add self-written " +"settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080" +">\"}` value will be parsed into valid list of the settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Path where user's uploads will be saved" +msgstr "Path where user's uploads will be saved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "S3 bucket" +msgstr "S3 bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "S3 bucket namespace" +msgstr "S3 bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +msgstr "" +"Enable streaming uploads, when enabled the file will be sent to the server " +"in chunks as it's being read. This may be unsupported by some providers, try " +"disabling this if you have upload problems." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +msgstr "" +"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set " +"folder name or \"\" etc. For example, when using CDN to S3 virtual host " +"format, set \"\". At this time, write CNAME to CDN in Upload base_url." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" +msgid "List of email domains users may not register with." +msgstr "List of email domains users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "List of nicknames users may not register with." +msgstr "List of nicknames users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit user to export not more often than once per N days" +msgstr "Limit user to export not more often than once per N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Remove backup achives after N days" +msgstr "Remove backup achives after N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Enables strict input validation (useful in development, not recommended in production)" +msgstr "" +"Enables strict input validation (useful in development, not recommended in " +"production)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "HTTP headers of request" +msgstr "HTTP headers of request" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "HTTP method of request. Default: :purge" +msgstr "HTTP method of request. Default: :purge" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Request options" +msgstr "Request options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Path to executable script which will purge cached items." +msgstr "Path to executable script which will purge cached items." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +msgstr "" +"Optional URL format preprocessing. Only required for Apache's htcacheclean." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "List of metadata providers to enable" +msgstr "List of metadata providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "When enabled NSFW attachments will be shown in previews" +msgstr "When enabled NSFW attachments will be shown in previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enable/disable the plug. Default: disabled." +msgstr "Enable/disable the plug. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgstr "" +" A list of strings naming the HTTP headers to use when deriving the true " +"client IP. Default: `[\"x-forwarded-for\"]`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgstr "" +"A list of upstream proxy IP subnets in CIDR notation from which we will " +"parse the content of `headers`. Defaults to `[]`. IPv4 entries without a " +"bitmask will be assumed to be /32 and IPv6 /128." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgstr "" +" A list of reserved IP subnets in CIDR notation which should be ignored if " +"found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\"" +", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" +msgid "List of preload providers to enable" +msgstr "List of preload providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enables expired activities addition & deletion" +msgstr "Enables expired activities addition & deletion" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Minimum lifetime for ephemeral activity (in seconds)" +msgstr "Minimum lifetime for ephemeral activity (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +msgid "VAPID private key" +msgstr "VAPID private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +msgid "VAPID public key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :subject" +msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgstr "" +"A mailto link for the administrative contact. It's best if this email is not " +"a personal email address, but rather a group email to the instance " +"moderation team." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :credentials" +msgid "Credentials" +msgstr "Credentials" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :expose" +msgid "Expose" +msgstr "Expose" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :max_age" +msgid "Max age" +msgstr "Max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :methods" +msgid "Methods" +msgstr "Methods" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :access_key_id" +msgid "Access key" +msgstr "Access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :region" +msgid "Region" +msgstr "Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger > :backends" +msgid "Backends" +msgstr "Backends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :ident" +msgid "Ident" +msgstr "Ident" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types" +msgid "Types" +msgstr "Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/activity+json" +msgid "\"application/activity+json\"" +msgstr "\"application/activity+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/jrd+json" +msgid "\"application/jrd+json\"" +msgstr "\"application/jrd+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/ld+json" +msgid "\"application/ld+json\"" +msgstr "\"application/ld+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xml" +msgid "\"application/xml\"" +msgstr "\"application/xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xrd+xml" +msgid "\"application/xrd+xml\"" +msgstr "\"application/xrd+xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" +msgid "Pleroma.Web.Auth.Authenticator" +msgstr "Pleroma.Web.Auth.Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :blockers_visible" +msgid "Blockers visible" +msgstr "Blockers visible" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Follow handshake timeout" +msgstr "Follow handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" +msgid "Note replies output limit" +msgstr "Note replies output limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" +msgid "Outgoing blocks" +msgstr "Outgoing blocks" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches" +msgstr "Sign object fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" +msgid "Unfollow blocked" +msgstr "Unfollow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_mascot" +msgid "Default mascot" +msgstr "Default mascot" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_user_avatar" +msgid "Default user avatar" +msgstr "Default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :mascots" +msgid "Mascots" +msgstr "Mascots" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :auth_template" +msgid "Auth template" +msgstr "Auth template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "Enforce OAuth admin scope usage" +msgstr "Enforce OAuth admin scope usage" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" +msgid "OAuth consumer strategies" +msgstr "OAuth consumer strategies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer template" +msgstr "OAuth consumer template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest" +msgid "Digest" +msgstr "Digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :active" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Inactivity threshold" +msgstr "Inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" +msgid "Interval" +msgstr "Interval" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" +msgid "Schedule" +msgstr "Schedule" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :default_manifest" +msgid "Default manifest" +msgstr "Default manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :groups" +msgid "Groups" +msgstr "Groups" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :pack_extensions" +msgid "Pack extensions" +msgstr "Pack extensions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" +msgid "Shared pack cache s/file" +msgstr "Shared pack cache s/file" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shortcode_globs" +msgid "Shortcode globs" +msgstr "Shortcode globs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" +msgid "Improved hashtag timeline" +msgstr "Improved hashtag timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title" +msgid "Post title" +msgstr "Post title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :max_length" +msgid "Max length" +msgstr "Max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :omission" +msgid "Omission" +msgstr "Omission" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Pleroma FE" +msgstr "Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "Always show subject input" +msgstr "Always show subject input" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "Collapse message with subject" +msgstr "Collapse message with subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Greentext" +msgstr "Greentext" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hide Filtered Statuses" +msgstr "Hide Filtered Statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hide Muted Posts" +msgstr "Hide Muted Posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide post stats" +msgstr "Hide post stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide user stats" +msgstr "Hide user stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Logo margin" +msgstr "Logo margin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "Logo mask" +msgstr "Logo mask" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "NSFW Censor Image" +msgstr "NSFW Censor Image" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Post Content Type" +msgstr "Post Content Type" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Redirect root login" +msgstr "Redirect root login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Redirect root no login" +msgstr "Redirect root no login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Scope copy" +msgstr "Scope copy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Show instance features panel" +msgstr "Show instance features panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "Show instance specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Sidebar on Right" +msgstr "Sidebar on Right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Subject line behavior" +msgstr "Subject line behavior" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Theme" +msgstr "Theme" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin" +msgid "Admin" +msgstr "Admin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available" +msgid "Available" +msgstr "Available" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_dir" +msgid "Build directory" +msgstr "Build directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_url" +msgid "Build URL" +msgstr "Build URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +msgid "Custom HTTP headers" +msgstr "Custom HTTP headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > git" +msgid "Git Repository URL" +msgstr "Git Repository URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary" +msgid "Primary" +msgstr "Primary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL Options" +msgstr "SSL Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "Versions" +msgstr "Versions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "Proxy URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :user_agent" +msgid "User agent" +msgstr "User agent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :referrer_policy" +msgid "Referrer policy" +msgstr "Referrer policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :report_uri" +msgid "Report URI" +msgstr "Report URI" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts" +msgid "STS" +msgstr "STS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts_max_age" +msgid "STS max age" +msgstr "STS max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_activation_required" +msgid "Account activation required" +msgstr "Account activation required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_approval_required" +msgid "Account approval required" +msgstr "Account approval required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_name_length" +msgid "Account field name length" +msgstr "Account field name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_value_length" +msgid "Account field value length" +msgstr "Account field value length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allow_relay" +msgid "Allow relay" +msgstr "Allow relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allowed_post_formats" +msgid "Allowed post formats" +msgstr "Allowed post formats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :attachment_links" +msgid "Attachment links" +msgstr "Attachment links" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" +msgid "Autofollowed nicknames" +msgstr "Autofollowed nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" +msgid "Autofollowing nicknames" +msgstr "Autofollowing nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" +msgid "Avatar upload limit" +msgstr "Avatar upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :background_upload_limit" +msgid "Background upload limit" +msgstr "Background upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :banner_upload_limit" +msgid "Banner upload limit" +msgstr "Banner upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :cleanup_attachments" +msgid "Cleanup attachments" +msgstr "Cleanup attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :description" +msgid "Description" +msgstr "Description" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :email" +msgid "Admin Email Address" +msgstr "Admin Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :extended_nickname_format" +msgid "Extended nickname format" +msgstr "Extended nickname format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :external_user_synchronization" +msgid "External user synchronization" +msgstr "External user synchronization" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federating" +msgid "Federating" +msgstr "Federating" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Fed. incoming replies max depth" +msgstr "Fed. incoming replies max depth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Fed. reachability timeout days" +msgstr "Fed. reachability timeout days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :healthcheck" +msgid "Healthcheck" +msgstr "Healthcheck" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :instance_thumbnail" +msgid "Instance thumbnail" +msgstr "Instance thumbnail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :invites_enabled" +msgid "Invites enabled" +msgstr "Invites enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit" +msgid "Limit" +msgstr "Limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit_to_local_content" +msgid "Limit to local content" +msgstr "Limit to local content" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_account_fields" +msgid "Max account fields" +msgstr "Max account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" +msgid "Max pinned statuses" +msgstr "Max pinned statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" +msgid "Max remote account fields" +msgstr "Max remote account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_report_comment_size" +msgid "Max report comment size" +msgstr "Max report comment size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi factor authentication" +msgstr "Multi factor authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "Backup codes" +msgstr "Backup codes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Length" +msgstr "Length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number" +msgstr "Number" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Digits" +msgstr "Digits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "Period" +msgstr "Period" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :notify_email" +msgid "Sender Email Address" +msgstr "Sender Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits" +msgid "Poll limits" +msgstr "Poll limits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Max expiration" +msgstr "Max expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Max option chars" +msgstr "Max option chars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" +msgid "Max options" +msgstr "Max options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Min expiration" +msgstr "Min expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :privileged_staff" +msgid "Privileged staff" +msgstr "Privileged staff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :profile_directory" +msgid "Profile directory" +msgstr "Profile directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :public" +msgid "Public" +msgstr "Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :quarantined_instances" +msgid "Quarantined instances" +msgstr "Quarantined instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registration_reason_length" +msgid "Registration reason length" +msgstr "Registration reason length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registrations_open" +msgid "Registrations open" +msgstr "Registrations open" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_limit" +msgid "Remote limit" +msgstr "Remote limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" +msgid "Remote post retention days" +msgstr "Remote post retention days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" +msgid "Safe DM mentions" +msgstr "Safe DM mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :show_reactions" +msgid "Show reactions" +msgstr "Show reactions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :skip_thread_containment" +msgid "Skip thread containment" +msgstr "Skip thread containment" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :static_dir" +msgid "Static dir" +msgstr "Static dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :upload_limit" +msgid "Upload limit" +msgstr "Upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_bio_length" +msgid "User bio length" +msgstr "User bio length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_name_length" +msgid "User name length" +msgstr "User name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :base" +msgid "Base" +msgstr "Base" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :ssl" +msgid "SSL" +msgstr "SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts" +msgid "SSL options" +msgstr "SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tls" +msgid "TLS" +msgstr "TLS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts" +msgid "TLS options" +msgstr "TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :uid" +msgid "UID" +msgstr "UID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :icons" +msgid "Icons" +msgstr "Icons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :theme_color" +msgid "Theme color" +msgstr "Theme color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_fonts" +msgid "Allow fonts" +msgstr "Allow fonts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_headings" +msgid "Allow headings" +msgstr "Allow headings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_inline_images" +msgid "Allow inline images" +msgstr "Allow inline images" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_tables" +msgid "Allow tables" +msgstr "Allow tables" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" +msgid "Image quality" +msgstr "Image quality" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length" +msgstr "Min content length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Thumbnail max height" +msgstr "Thumbnail max height" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Thumbnail max width" +msgstr "Thumbnail max width" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation" +msgid "Invalidation" +msgstr "Invalidation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Provider" +msgstr "Provider" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" +msgid "Advanced MediaProxy Options" +msgstr "Advanced MediaProxy Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Max body length" +msgstr "Max body length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Max read duration" +msgstr "Max read duration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirect on failure" +msgstr "Redirect on failure" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :whitelist" +msgid "Whitelist" +msgstr "Whitelist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules > :runtime_dir" +msgid "Runtime dir" +msgstr "Runtime dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :policies" +msgid "Policies" +msgstr "Policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency" +msgid "MRF transparency" +msgstr "MRF transparency" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" +msgid "MRF transparency exclusions" +msgstr "MRF transparency exclusions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" +msgid "Days" +msgstr "Days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "Follower nickname" +msgstr "Follower nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" +msgid "Sensitive" +msgstr "Sensitive" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Delist threshold" +msgstr "Delist threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Reject threshold" +msgstr "Reject threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :replace" +msgid "Replace" +msgstr "Replace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention > :actors" +msgid "Actors" +msgstr "Actors" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :actions" +msgid "Actions" +msgstr "Actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :threshold" +msgid "Threshold" +msgstr "Threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Allow direct" +msgstr "Allow direct" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Allow followers-only" +msgstr "Allow followers-only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" +msgid "Avatar removal" +msgstr "Avatar removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" +msgid "Banner removal" +msgstr "Banner removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :followers_only" +msgid "Followers only" +msgstr "Followers only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" +msgid "Media NSFW" +msgstr "Media NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_removal" +msgid "Media removal" +msgstr "Media removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" +msgid "Reject deletes" +msgstr "Reject deletes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :report_removal" +msgid "Report removal" +msgstr "Report removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" +msgid "Hosts" +msgstr "Hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "Rejected shortcodes" +msgstr "Rejected shortcodes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "Size limit" +msgstr "Size limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" +msgid "Match actor" +msgstr "Match actor" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Clean expired tokens" +msgstr "Clean expired tokens" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Issue new refresh token" +msgstr "Issue new refresh token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" +msgid "Token expires in" +msgstr "Token expires in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Fault rate allowance" +msgstr "Fault rate allowance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval ms" +msgstr "Sleep interval ms" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" +msgid "App account creation" +msgstr "App account creation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :authentication" +msgid "Authentication" +msgstr "Authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" +msgid "Relation ID action" +msgstr "Relation ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relations_actions" +msgid "Relations actions" +msgstr "Relations actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :search" +msgid "Search" +msgstr "Search" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :status_id_action" +msgid "Status ID action" +msgstr "Status ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" +msgid "Statuses actions" +msgstr "Statuses actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :timeline" +msgid "Timeline" +msgstr "Timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" +msgid "Activities" +msgstr "Activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Profiles" +msgstr "Profiles" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Timelines" +msgstr "Timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Federated" +msgstr "Federated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :failure_backoff" +msgid "Failure backoff" +msgstr "Failure backoff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" +msgid "Ignore hosts" +msgstr "Ignore hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_tld" +msgid "Ignore TLD" +msgstr "Ignore TLD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :parsers" +msgid "Parsers" +msgstr "Parsers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ttl_setters" +msgid "TTL setters" +msgstr "TTL setters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :overflow_workers" +msgid "Overflow workers" +msgstr "Overflow workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" +msgid "Valid schemes" +msgstr "Valid schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user > :deny_follow_blocked" +msgid "Deny follow blocked" +msgstr "Deny follow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub" +msgstr "Activity pub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub question" +msgstr "Activity pub question" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message" +msgid "Direct message" +msgstr "Direct message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :message" +msgid "Message" +msgstr "Message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "Sender nickname" +msgstr "Sender nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email" +msgid "Email" +msgstr "Email" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :html" +msgid "Html" +msgstr "Html" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :sender" +msgid "Sender" +msgstr "Sender" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers > :retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgstr "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Pleroma.Web.RichMedia.Helpers" +msgstr "Pleroma.Web.RichMedia.Helpers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :crontab" +msgid "Crontab" +msgstr "Crontab" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :log" +msgid "Log" +msgstr "Log" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues" +msgid "Queues" +msgstr "Queues" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration" +msgstr "Activity expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachments cleanup" +msgstr "Attachments cleanup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :backup" +msgid "Backup" +msgstr "Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" +msgid "Federator incoming" +msgstr "Federator incoming" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Federator outgoing" +msgstr "Federator outgoing" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :mailer" +msgid "Mailer" +msgstr "Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities" +msgstr "Scheduled activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier" +msgstr "Transmogrifier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :web_push" +msgid "Web push" +msgstr "Web push" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "Seconds valid" +msgstr "Seconds valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" +msgid "Mailer Enabled" +msgstr "Mailer Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +msgid "AWS Access Key" +msgstr "AWS Access Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +msgid "AWS Region" +msgstr "AWS Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +msgid "AWS Secret Key" +msgstr "AWS Secret Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +msgid "Dyn API Key" +msgstr "Dyn API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +msgid "GMail API Access Token" +msgstr "GMail API Access Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +msgid "Mailgun API Key" +msgstr "Mailgun API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +msgid "Domain" +msgstr "Domain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +msgid "MailJet Public API Key" +msgstr "MailJet Public API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +msgid "MailJet Private API Key" +msgstr "MailJet Private API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +msgid "Mandrill API Key" +msgstr "Mandrill API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +msgid "Postmark API Key" +msgstr "Postmark API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "AUTH Mode" +msgstr "AUTH Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "Password" +msgstr "Password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Relay" +msgstr "Relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use SSL" +msgstr "Use SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "STARTTLS Mode" +msgstr "STARTTLS Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "Username" +msgstr "Username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +msgid "SendGrid API Key" +msgstr "SendGrid API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +msgid "Cmd args" +msgstr "Cmd args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +msgid "Cmd path" +msgstr "Cmd path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +msgid "Qmail compat mode" +msgstr "Qmail compat mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +msgid "SocketLabs API Key" +msgstr "SocketLabs API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +msgid "Server ID" +msgstr "Server ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +msgid "SparkPost API key" +msgstr "SparkPost API key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "Styling" +msgstr "Styling" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +msgid "Content background color" +msgstr "Content background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +msgid "Header color" +msgstr "Header color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +msgid "Link color" +msgstr "Link color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +msgid "Text color" +msgstr "Text color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +msgid "Text muted color" +msgstr "Text muted color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :class" +msgid "Class" +msgstr "Class" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" +msgid "Extra" +msgstr "Extra" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" +msgid "New window" +msgstr "New window" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" +msgid "Rel" +msgstr "Rel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip prefix" +msgstr "Strip prefix" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" +msgid "Truncate" +msgstr "Truncate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Validate tld" +msgstr "Validate tld" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "Daily user limit" +msgstr "Daily user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "Total user limit" +msgstr "Total user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Filename display max length" +msgstr "Filename display max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filters" +msgid "Filters" +msgstr "Filters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" +msgid "Link name" +msgstr "Link name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy remote" +msgstr "Proxy remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" +msgid "Uploader" +msgstr "Uploader" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "Args" +msgstr "Args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Uploads" +msgstr "Uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "Bucket" +msgstr "Bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "Bucket namespace" +msgstr "Bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Streaming enabled" +msgstr "Streaming enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "Truncated namespace" +msgstr "Truncated namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" +msgid "Email blacklist" +msgstr "Email blacklist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "Restricted nicknames" +msgstr "Restricted nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit days" +msgstr "Limit days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Purge after days" +msgstr "Purge after days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Strict" +msgstr "Strict" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Options" +msgstr "Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +msgid "Params" +msgstr "Params" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Script path" +msgstr "Script path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "URL Format" +msgstr "URL Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "Unfurl NSFW" +msgstr "Unfurl NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "Proxies" +msgstr "Proxies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid "Reserved" +msgstr "Reserved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Min lifetime" +msgstr "Min lifetime" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" +msgid "Private key" +msgstr "Private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" +msgid "Public key" +msgstr "Public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Authorized fetch mode" +msgstr "Authorized fetch mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures on AP fetches" +msgstr "Require HTTP signatures on AP fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :max_collection_objects" +msgid "The maximum number of items to fetch from a remote collections. Setting this too low can lead to only getting partial collections, but too high and you can end up fetching far too many objects." +msgstr "" +"The maximum number of items to fetch from a remote collections. Setting this " +"too low can lead to only getting partial collections, but too high and you " +"can end up fetching far too many objects." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:argos_translate" +msgid "ArgosTranslate Settings." +msgstr "ArgosTranslate Settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:argos_translate > :command_argos_translate" +msgid "command for `argos-translate`. Can be the command if it's in your PATH, or the full path to the file." +msgstr "" +"command for `argos-translate`. Can be the command if it's in your PATH, or " +"the full path to the file." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:argos_translate > :command_argospm" +msgid "command for `argospm`. Can be the command if it's in your PATH, or the full path to the file." +msgstr "" +"command for `argospm`. Can be the command if it's in your PATH, or the full " +"path to the file." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:argos_translate > :strip_html" +msgid "Strip html from the post before translating it." +msgstr "Strip html from the post before translating it." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:deepl" +msgid "DeepL Settings." +msgstr "DeepL Settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:deepl > :api_key" +msgid "API key for DeepL" +msgstr "API key for DeepL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:deepl > :tier" +msgid "API Tier" +msgstr "API Tier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe and masto_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe and masto_fe are configured. If you want to add your own " +"configuration your settings all fields must be complete." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :masto_fe" +msgid "Settings for Masto FE" +msgstr "Settings for Masto FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :masto_fe > :showInstanceSpecificPanel" +msgid "Whenether to show the instance's specific panel" +msgstr "Whenether to show the instance's specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :conversationDisplay" +msgid "How to display conversations (linear or tree)" +msgstr "How to display conversations (linear or tree)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSiteFavicon" +msgid "Whether to hide the instance favicon from the navbar" +msgstr "Whether to hide the instance favicon from the navbar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSiteName" +msgid "Whether to hide the site name from the navbar" +msgstr "Whether to hide the site name from the navbar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :renderMisskeyMarkdown" +msgid "Whether to render Misskey-flavoured markdown" +msgstr "Whether to render Misskey-flavoured markdown" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showNavShortcuts" +msgid "Whether to put extra navigation options on the navbar" +msgstr "Whether to put extra navigation options on the navbar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showPanelNavShortcuts" +msgid "Whether to put timeline nav tabs on the top of the panel" +msgstr "Whether to put timeline nav tabs on the top of the panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showWiderShortcuts" +msgid "Whether to add extra space between navbar icons" +msgstr "Whether to add extra space between navbar icons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :stopGifs" +msgid "Whether to pause animated images until they're hovered on" +msgstr "Whether to pause animated images until they're hovered on" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon" +msgid "Mastodon frontend" +msgstr "Mastodon frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger" +msgid "Swagger API reference frontend" +msgstr "Swagger API reference frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > enabled" +msgid "Whether to have this enabled at all" +msgstr "Whether to have this enabled at all" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :pool_size" +msgid "Number of concurrent outbound HTTP requests to allow. Default 50." +msgstr "Number of concurrent outbound HTTP requests to allow. Default 50." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :pool_timeout" +msgid "Timeout for initiating HTTP requests (in ms, default 5000)" +msgstr "Timeout for initiating HTTP requests (in ms, default 5000)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL - of the format http://host:port. Advise setting in .exs instead of admin-fe due to this being set at boot-time." +msgstr "" +"Proxy URL - of the format http://host:port. Advise setting in .exs instead " +"of admin-fe due to this being set at boot-time." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :receive_timeout" +msgid "Timeout for waiting on remote servers to respond to HTTP requests (in ms, default 15000)" +msgstr "" +"Timeout for waiting on remote servers to respond to HTTP requests (in ms, " +"default 15000)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :export_prometheus_metrics" +msgid "Enable prometheus metrics (at /api/v1/akkoma/metrics)" +msgstr "Enable prometheus metrics (at /api/v1/akkoma/metrics)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :languages" +msgid "Languages the instance uses" +msgstr "Languages the instance uses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :local_bubble" +msgid "List of instances that make up your local bubble (closely-related instances). Used to populate the 'bubble' timeline (domain only)." +msgstr "" +"List of instances that make up your local bubble (closely-related instances)" +". Used to populate the 'bubble' timeline (domain only)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses)" +msgstr "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :public" +msgid "Switching this on will allow unauthenticated users access to all public resources on your instance Switching it off is useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" +"Switching this on will allow unauthenticated users access to all public " +"resources on your instance Switching it off is useful for disabling the " +"Local Timeline and The Whole Known Network. Note: when setting to `false`, " +"please also check `:restrict_unauthenticated` setting." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "(Deprecated, will be removed in next release) List of ActivityPub instances where activities will not be sent, and the reason for doing so" +msgstr "" +"(Deprecated, will be removed in next release) List of ActivityPub instances " +"where activities will not be sent, and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_nodeinfo" +msgid "Control favicons for instances" +msgstr "Control favicons for instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_nodeinfo > :enabled" +msgid "Allow/disallow getting instance nodeinfo" +msgstr "Allow/disallow getting instance nodeinfo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:libre_translate" +msgid "LibreTranslate Settings." +msgstr "LibreTranslate Settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:libre_translate > :api_key" +msgid "API key for libretranslate" +msgstr "API key for libretranslate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:libre_translate > :url" +msgid "URL for libretranslate" +msgstr "URL for libretranslate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app - this is only used for mastodon-fe" +msgstr "" +"Describe the background color of the app - this is only used for mastodon-fe" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app - this is only used for mastodon-fe" +msgstr "Describe the theme color of the app - this is only used for mastodon-fe" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "Obfuscate domains in MRF transparency. This is useful if the domain you're blocking contains words you don't want displayed, but still want to disclose the MRF settings." +msgstr "" +"Obfuscate domains in MRF transparency. This is useful if the domain you're " +"blocking contains words you don't want displayed, but still want to disclose " +"the MRF settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_inline_quote" +msgid "Force quote post URLs inline" +msgstr "Force quote post URLs inline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix before the link" +msgstr "Prefix before the link" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :handle_threads" +msgid "Enable to filter replies to threads based from their originating instance, using the reject and accept rules" +msgstr "" +"Enable to filter replies to threads based from their originating instance, " +"using the reject and accept rules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow unauthenticated viewing of timelines, user profiles and statuses." +msgstr "" +"Disallow unauthenticated viewing of timelines, user profiles and statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for posts." +msgstr "Settings for posts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow viewing local posts." +msgstr "Disallow viewing local posts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow viewing remote posts." +msgstr "Disallow viewing remote posts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow viewing local user profiles." +msgstr "Disallow viewing local user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow viewing remote user profiles." +msgstr "Disallow viewing remote user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow viewing the whole known network timeline." +msgstr "Disallow viewing the whole known network timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow viewing the public timeline." +msgstr "Disallow viewing the public timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:translator" +msgid "Translation Settings" +msgstr "Translation Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:translator > :enabled" +msgid "Is translation enabled?" +msgstr "Is translation enabled?" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:translator > :module" +msgid "Translation module." +msgstr "Translation module." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers > :timeout" +msgid "Timeout for jobs, per `Oban` queue, in ms" +msgstr "Timeout for jobs, per `Oban` queue, in ms" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search" +msgid "General search settings." +msgstr "General search settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search > :module" +msgid "Selected search module." +msgstr "Selected search module." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch settings." +msgstr "Elasticsearch settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "The API module used by Elasticsearch. Should always be Elasticsearch.API.HTTP" +msgstr "" +"The API module used by Elasticsearch. Should always be Elasticsearch.API.HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes" +msgid "The indices to set up in Elasticsearch" +msgstr "The indices to set up in Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities" +msgid "Config for the index to use for activities" +msgstr "Config for the index to use for activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :bulk_page_size" +msgid "Size for bulk put requests, mostly used on building the index" +msgstr "Size for bulk put requests, mostly used on building the index" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :bulk_wait_interval" +msgid "Time to wait between bulk put requests (in ms)" +msgstr "Time to wait between bulk put requests (in ms)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :settings" +msgid "Path to the file containing index settings for the activities index. Should contain a mapping." +msgstr "" +"Path to the file containing index settings for the activities index. Should " +"contain a mapping." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :sources" +msgid "The internal types to use for this index" +msgstr "The internal types to use for this index" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :store" +msgid "The internal store module" +msgstr "The internal store module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :json_library" +msgid "The JSON module used to encode/decode when communicating with Elasticsearch" +msgstr "" +"The JSON module used to encode/decode when communicating with Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :password" +msgid "Password to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" +"Password to connect to ES. Set to nil if your cluster is unauthenticated." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Elasticsearch URL." +msgstr "Elasticsearch URL." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :username" +msgid "Username to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" +"Username to connect to ES. Set to nil if your cluster is unauthenticated." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch" +msgid "Meilisearch settings." +msgstr "Meilisearch settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch > :initial_indexing_chunk_size" +msgid "Amount of posts in a batch when running the initial indexing operation. Should probably not be more than 100000 since there's a limit on maximum insert size" +msgstr "" +"Amount of posts in a batch when running the initial indexing operation. " +"Should probably not be more than 100000 since there's a limit on maximum " +"insert size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "Private key for meilisearch authentication, or `nil` to disable private key authentication." +msgstr "" +"Private key for meilisearch authentication, or `nil` to disable private key " +"authentication." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Meilisearch URL." +msgstr "Meilisearch URL." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "Specific provider to hand out themes to instances that scrape index.html" +msgstr "" +"Specific provider to hand out themes to instances that scrape index.html" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :theme_color" +msgid "The 'accent color' of the instance, used in places like misskey's instance ticker" +msgstr "" +"The 'accent color' of the instance, used in places like misskey's instance " +"ticker" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :max_collection_objects" +msgid "Max collection objects" +msgstr "Max collection objects" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:argos_translate" +msgid "Argos translate" +msgstr "Argos translate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :command_argos_translate" +msgid "Command argos translate" +msgstr "Command argos translate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :command_argospm" +msgid "Command argospm" +msgstr "Command argospm" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :strip_html" +msgid "Strip html" +msgstr "Strip html" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:deepl" +msgid "DeepL" +msgstr "DeepL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:deepl > :api_key" +msgid "Api key" +msgstr "Api key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:deepl > :tier" +msgid "Tier" +msgstr "Tier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :masto_fe" +msgid "Masto FE" +msgstr "Masto FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :masto_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "Show instance specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :conversationDisplay" +msgid "Conversation display style" +msgstr "Conversation display style" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSiteFavicon" +msgid "Hide site favicon" +msgstr "Hide site favicon" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSiteName" +msgid "Hide site name" +msgstr "Hide site name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :renderMisskeyMarkdown" +msgid "Render misskey markdown" +msgstr "Render misskey markdown" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showNavShortcuts" +msgid "Show navbar shortcuts" +msgstr "Show navbar shortcuts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showPanelNavShortcuts" +msgid "Show timeline panel nav shortcuts" +msgstr "Show timeline panel nav shortcuts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showWiderShortcuts" +msgid "Increase navbar shortcut spacing" +msgstr "Increase navbar shortcut spacing" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :stopGifs" +msgid "Stop Gifs" +msgstr "Stop Gifs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon" +msgid "Mastodon" +msgstr "Mastodon" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger" +msgid "Swagger" +msgstr "Swagger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :pool_size" +msgid "Pool size" +msgstr "Pool size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :pool_timeout" +msgid "HTTP Pool Request Timeout" +msgstr "HTTP Pool Request Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :receive_timeout" +msgid "HTTP Receive Timeout" +msgstr "HTTP Receive Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :export_prometheus_metrics" +msgid "Export prometheus metrics" +msgstr "Export prometheus metrics" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :languages" +msgid "Languages" +msgstr "Languages" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :local_bubble" +msgid "Local bubble" +msgstr "Local bubble" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_nodeinfo" +msgid "Instances nodeinfo" +msgstr "Instances nodeinfo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_nodeinfo > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:libre_translate" +msgid "Libre translate" +msgstr "Libre translate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:libre_translate > :api_key" +msgid "Api key" +msgstr "Api key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:libre_translate > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "MRF domain obfuscation" +msgstr "MRF domain obfuscation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_inline_quote" +msgid "MRF Inline Quote" +msgstr "MRF Inline Quote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix" +msgstr "Prefix" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :handle_threads" +msgid "Apply to entire threads" +msgstr "Apply to entire threads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:translator" +msgid "Translator" +msgstr "Translator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:translator > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:translator > :module" +msgid "Module" +msgstr "Module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search" +msgid "Search" +msgstr "Search" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search > :module" +msgid "Module" +msgstr "Module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch" +msgstr "Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "Api" +msgstr "Api" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes" +msgid "Indexes" +msgstr "Indexes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities" +msgid "Activities" +msgstr "Activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :bulk_page_size" +msgid "Bulk page size" +msgstr "Bulk page size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :bulk_wait_interval" +msgid "Bulk wait interval" +msgstr "Bulk wait interval" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :settings" +msgid "Settings" +msgstr "Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :sources" +msgid "Sources" +msgstr "Sources" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :activities > :store" +msgid "Store" +msgstr "Store" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :json_library" +msgid "Json library" +msgstr "Json library" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :password" +msgid "Password" +msgstr "Password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :username" +msgid "Username" +msgstr "Username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch" +msgid "Pleroma.Search.Meilisearch" +msgstr "Pleroma.Search.Meilisearch" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :initial_indexing_chunk_size" +msgid "Initial indexing chunk size" +msgstr "Initial indexing chunk size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "Private key" +msgstr "Private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "Pleroma.Web.Metadata.Providers.Theme" +msgstr "Pleroma.Web.Metadata.Providers.Theme" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :theme_color" +msgid "Theme color" +msgstr "Theme color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/v1/pleroma/healthcheck`" +msgstr "If enabled, system data will be shown on `/api/v1/pleroma/healthcheck`" From 7f57935669ae2050eaa31b6aabd34febc53cc3bd Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 7 Jul 2023 18:48:42 +0000 Subject: [PATCH 169/178] Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-errors/ Translation: Pleroma fe/Akkoma Backend (Errors) --- .../nl/LC_MESSAGES/config_descriptions.po | 2919 +++++++++++------ 1 file changed, 1852 insertions(+), 1067 deletions(-) diff --git a/priv/gettext/nl/LC_MESSAGES/config_descriptions.po b/priv/gettext/nl/LC_MESSAGES/config_descriptions.po index 1770b9bfa..18b9fdd19 100644 --- a/priv/gettext/nl/LC_MESSAGES/config_descriptions.po +++ b/priv/gettext/nl/LC_MESSAGES/config_descriptions.po @@ -3,37 +3,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-06 21:54+0000\n" -"PO-Revision-Date: 2022-08-06 21:55+0000\n" +"PO-Revision-Date: 2023-02-21 09:45+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Dutch \n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13.1\n" - -# # This file is a PO Template file. -# # -# # "msgid"s here are often extracted from source code. -# # Add new translations manually only if they're dynamic -# # translations that can't be statically extracted. -# # -# # Run "mix gettext.extract" to bring this file up to -# # date. Leave "msgstr"s empty as changing them here has no -# # effect: edit them in PO (.po) files instead. -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd" -msgid "" -"Before enabling this you must add :esshd to mix.exs as one of the " -"extra_applications and generate host keys in your priv dir with ssh-keygen -" -"m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" -msgstr "" -"Before enabling this you must add :esshd to mix.exs as one of the " -"extra_applications and generate host keys in your priv dir with ssh-keygen -" -"m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +"X-Generator: Weblate 4.14\n" #: lib/pleroma/docs/translator.ex:5 #, fuzzy @@ -67,24 +46,12 @@ msgctxt "config description at :pleroma" msgid "Authenticator" msgstr "Authenticator" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack" -msgid "Quack-related settings" -msgstr "Quack-related settings" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :cors_plug" msgid "CORS plug config" msgstr "CORS plug config" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd" -msgid "ESSHD" -msgstr "ESSHD" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :logger" @@ -109,12 +76,6 @@ msgctxt "config label at :pleroma" msgid "Pleroma Authenticator" msgstr "Pleroma Authenticator" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack" -msgid "Quack Logger" -msgstr "Quack Logger" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :logger-:console" @@ -149,12 +110,6 @@ msgctxt "config description at :pleroma-:auth" msgid "Authentication / authorization settings" msgstr "Authentication / authorization settings" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:connections_pool" -msgid "Advanced settings for `Gun` connections pool" -msgstr "Advanced settings for `Gun` connections pool" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:email_notifications" @@ -173,38 +128,12 @@ msgctxt "config description at :pleroma-:feed" msgid "Configure feed rendering" msgstr "Configure feed rendering" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations" -msgid "" -"This form can be used to configure a keyword list that keeps the " -"configuration data for any kind of frontend. By default, settings for " -"pleroma_fe are configured. If you want to add your own configuration your " -"settings all fields must be complete." -msgstr "" -"This form can be used to configure a keyword list that keeps the " -"configuration data for any kind of frontend. By default, settings for " -"pleroma_fe are configured. If you want to add your own configuration your " -"settings all fields must be complete." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:frontends" msgid "Installed frontends management" msgstr "Installed frontends management" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher" -msgid "Gopher settings" -msgstr "Gopher settings" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools" -msgid "Advanced settings for `Hackney` connections pools" -msgstr "Advanced settings for `Hackney` connections pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:http" @@ -393,12 +322,6 @@ msgctxt "config description at :pleroma-:oauth2" msgid "Configure OAuth 2 provider capabilities" msgstr "Configure OAuth 2 provider capabilities" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools" -msgid "Advanced settings for `Gun` workers pools" -msgstr "Advanced settings for `Gun` workers pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:populate_hashtags_table" @@ -415,16 +338,6 @@ msgstr "" "Rate limit settings. This is an advanced feature enabled only for :" "authentication by default." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated" -msgid "" -"Disallow viewing timelines, user profiles and statuses for unauthenticated " -"users." -msgstr "" -"Disallow viewing timelines, user profiles and statuses for unauthenticated " -"users." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:rich_media" @@ -435,12 +348,6 @@ msgstr "" "If enabled the instance will parse metadata from attached links to generate " "link previews" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:shout" -msgid "Pleroma shout settings" -msgstr "Pleroma shout settings" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:static_fe" @@ -636,13 +543,6 @@ msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Expired activities settings" msgstr "Expired activities settings" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" -msgid "Prometheus app metrics endpoint configuration" -msgstr "Prometheus app metrics endpoint configuration" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :web_push_encryption-:vapid_details" @@ -689,12 +589,6 @@ msgctxt "config label at :pleroma-:auth" msgid "Auth" msgstr "Auth" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool" -msgid "Connections pool" -msgstr "Connections pool" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:email_notifications" @@ -731,18 +625,6 @@ msgctxt "config label at :pleroma-:frontends" msgid "Frontends" msgstr "Frontends" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher" -msgid "Gopher" -msgstr "Gopher" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools" -msgid "Hackney pools" -msgstr "Hackney pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:http" @@ -899,12 +781,6 @@ msgctxt "config label at :pleroma-:oauth2" msgid "OAuth2" msgstr "OAuth2" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools" -msgid "Pools" -msgstr "Pools" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:populate_hashtags_table" @@ -929,12 +805,6 @@ msgctxt "config label at :pleroma-:rich_media" msgid "Rich media" msgstr "Rich media" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:shout" -msgid "Shout" -msgstr "Shout" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:static_fe" @@ -1115,48 +985,12 @@ msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Pleroma.Workers.PurgeExpiredActivity" msgstr "Pleroma.Workers.PurgeExpiredActivity" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" -msgid "Pleroma.Web.Endpoint.MetricsExporter" -msgstr "Pleroma.Web.Endpoint.MetricsExporter" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details" msgid "Vapid Details" msgstr "Vapid Details" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :enabled" -msgid "Enables SSH" -msgstr "Enables SSH" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :handler" -msgid "Handler module" -msgstr "Handler module" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :password_authenticator" -msgid "Authenticator module" -msgstr "Authenticator module" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :port" -msgid "Port to connect" -msgstr "Port to connect" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :esshd > :priv_dir" -msgid "Dir with SSH keys" -msgstr "Dir with SSH keys" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :ex_aws-:s3 > :access_key_id" @@ -1350,57 +1184,6 @@ msgstr "" "html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." "html.eex`." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" -msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." -msgstr "Timeout while `gun` will wait until connection is up. Default: 5000ms." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:connections_pool > :" -"connection_acquisition_retries" -msgid "" -"Number of attempts to acquire the connection from the pool if it is " -"overloaded. Default: 5" -msgstr "" -"Number of attempts to acquire the connection from the pool if it is " -"overloaded. Default: 5" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:connections_pool > :" -"connection_acquisition_wait" -msgid "" -"Timeout to acquire a connection from pool. The total max time is this value " -"multiplied by the number of retries. Default: 250ms." -msgstr "" -"Timeout to acquire a connection from pool. The total max time is this value " -"multiplied by the number of retries. Default: 250ms." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:connections_pool > :max_connections" -msgid "Maximum number of connections in the pool. Default: 250 connections." -msgstr "Maximum number of connections in the pool. Default: 250 connections." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:connections_pool > :reclaim_multiplier" -msgid "" -"Multiplier for the number of idle connection to be reclaimed if the pool is " -"full. For example if the pool maxes out at 250 connections and this setting " -"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " -"overloaded. Default: 0.1" -msgstr "" -"Multiplier for the number of idle connection to be reclaimed if the pool is " -"full. For example if the pool maxes out at 250 connections and this setting " -"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " -"overloaded. Default: 0.1" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:email_notifications > :digest" @@ -1582,14 +1365,6 @@ msgctxt "" msgid "Hide notices statistics (repeats, favorites, ...)" msgstr "Hide notices statistics (repeats, favorites, ...)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" -"hideSitename" -msgid "Hides instance name from PleromaFE banner" -msgstr "Hides instance name from PleromaFE banner" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -1635,18 +1410,6 @@ msgstr "" "compatible with both light and dark themes. If you want a colorful logo you " "must disable logoMask." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" -"minimalScopesMode" -msgid "" -"Limit scope selection to Direct, User default, and Scope of post replying " -"to. Also prevents replying to a DM with a public post from PleromaFE." -msgstr "" -"Limit scope selection to Direct, User default, and Scope of post replying " -"to. Also prevents replying to a DM with a public post from PleromaFE." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -1846,89 +1609,6 @@ msgstr "" "Reference of the installed frontend to be used. Valid config must include " "both `Name` and `Reference` values." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :dstport" -msgid "Port advertised in URLs (optional, defaults to port)" -msgstr "Port advertised in URLs (optional, defaults to port)" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :enabled" -msgid "Enables the gopher interface" -msgstr "Enables the gopher interface" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :ip" -msgid "IP address to bind to" -msgstr "IP address to bind to" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:gopher > :port" -msgid "Port to bind to" -msgstr "Port to bind to" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :federation" -msgid "Settings for federation pool." -msgstr "Settings for federation pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :federation > :" -"max_connections" -msgid "Number workers in the pool." -msgstr "Number workers in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :federation > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "Timeout while `hackney` will wait for response." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :media" -msgid "Settings for media pool." -msgstr "Settings for media pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :media > :max_connections" -msgid "Number workers in the pool." -msgstr "Number workers in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "Timeout while `hackney` will wait for response." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :upload" -msgid "Settings for upload pool." -msgstr "Settings for upload pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:hackney_pools > :upload > :max_connections" -msgid "Number workers in the pool." -msgstr "Number workers in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" -msgid "Timeout while `hackney` will wait for response." -msgstr "Timeout while `hackney` will wait for response." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:http > :adapter" @@ -1948,12 +1628,6 @@ msgctxt "" msgid "List of TLS version to use" msgstr "List of TLS version to use" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:http > :proxy_url" -msgid "Proxy URL" -msgstr "Proxy URL" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:http > :user_agent" @@ -2080,22 +1754,6 @@ msgctxt "config description at :pleroma-:instance > :banner_upload_limit" msgid "File size limit of user's profile banners" msgstr "File size limit of user's profile banners" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :birthday_min_age" -msgid "" -"Minimum required age for users to create account. Only used if birthday is " -"required." -msgstr "" -"Minimum required age for users to create account. Only used if birthday is " -"required." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :birthday_required" -msgid "Require users to enter their birthday." -msgstr "Require users to enter their birthday." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :cleanup_attachments" @@ -2177,12 +1835,6 @@ msgstr "" "Timeout (in days) of each external federation target being unreachable prior " "to pausing federating to it" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :healthcheck" -msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" -msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :instance_thumbnail" @@ -2227,19 +1879,6 @@ msgctxt "config description at :pleroma-:instance > :max_account_fields" msgid "The maximum number of custom fields in the user profile. Default: 10." msgstr "The maximum number of custom fields in the user profile. Default: 10." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :max_endorsed_users" -msgid "The maximum number of recommended accounts. 0 will disable the feature." -msgstr "" -"The maximum number of recommended accounts. 0 will disable the feature." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :max_media_attachments" -msgid "Maximum number of post media attachments" -msgstr "Maximum number of post media attachments" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" @@ -2373,48 +2012,12 @@ msgctxt "" msgid "Minimum expiration time (in seconds)" msgstr "Minimum expiration time (in seconds)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :privileged_staff" -msgid "" -"Let moderators access sensitive data (e.g. updating user credentials, get " -"password reset token, delete users, index and read private statuses and " -"chats)" -msgstr "" -"Let moderators access sensitive data (e.g. updating user credentials, get " -"password reset token, delete users, index and read private statuses and " -"chats)" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:instance > :profile_directory" msgid "Enable profile directory." msgstr "Enable profile directory." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :public" -msgid "" -"Makes the client API in authenticated mode-only except for user-profiles. " -"Useful for disabling the Local Timeline and The Whole Known Network. Note: " -"when setting to `false`, please also check `:restrict_unauthenticated` " -"setting." -msgstr "" -"Makes the client API in authenticated mode-only except for user-profiles. " -"Useful for disabling the Local Timeline and The Whole Known Network. Note: " -"when setting to `false`, please also check `:restrict_unauthenticated` " -"setting." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :quarantined_instances" -msgid "" -"List of ActivityPub instances where private (DMs, followers-only) activities " -"will not be sent and the reason for doing so" -msgstr "" -"List of ActivityPub instances where private (DMs, followers-only) activities " -"will not be sent and the reason for doing so" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -2591,24 +2194,12 @@ msgctxt "config description at :pleroma-:majic_pool > :size" msgid "Number of majic workers to start." msgstr "Number of majic workers to start." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:manifest > :background_color" -msgid "Describe the background color of the app" -msgstr "Describe the background color of the app" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:manifest > :icons" msgid "Describe the icons of the app" msgstr "Describe the icons of the app" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:manifest > :theme_color" -msgid "Describe the theme color of the app" -msgstr "Describe the theme color of the app" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:markup > :scrub_policy" @@ -3106,126 +2697,6 @@ msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" msgid "The lifetime in seconds of the access token" msgstr "The lifetime in seconds of the access token" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default" -msgid "Settings for default pool." -msgstr "Settings for default pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :default > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation" -msgid "Settings for federation pool." -msgstr "Settings for federation pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :federation > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media" -msgid "Settings for media pool." -msgstr "Settings for media pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :media > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload" -msgid "Settings for upload pool." -msgstr "Settings for upload pool." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" -msgid "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" -msgstr "" -"Maximum number of requests waiting for other requests to finish. After this " -"number is reached, the pool will start returning errrors when a new request " -"is made" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" -msgid "Timeout for the pool while gun will wait for response" -msgstr "Timeout for the pool while gun will wait for response" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:pools > :upload > :size" -msgid "Maximum number of concurrent requests in the pool." -msgstr "Maximum number of concurrent requests in the pool." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -3309,72 +2780,18 @@ msgctxt "config description at :pleroma-:rate_limit > :timeline" msgid "For requests to timelines (each timeline has it's own limiter)" msgstr "For requests to timelines (each timeline has it's own limiter)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :activities" -msgid "Settings for statuses." -msgstr "Settings for statuses." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :activities > :" -"local" -msgid "Disallow view local statuses." -msgstr "Disallow view local statuses." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :activities > :" -"remote" -msgid "Disallow view remote statuses." -msgstr "Disallow view remote statuses." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" msgid "Settings for user profiles." msgstr "Settings for user profiles." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :profiles > :local" -msgid "Disallow view local user profiles." -msgstr "Disallow view local user profiles." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :profiles > :" -"remote" -msgid "Disallow view remote user profiles." -msgstr "Disallow view remote user profiles." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" msgid "Settings for public and federated timelines." msgstr "Settings for public and federated timelines." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :timelines > :" -"federated" -msgid "Disallow view federated timeline." -msgstr "Disallow view federated timeline." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:restrict_unauthenticated > :timelines > :" -"local" -msgid "Disallow view public timeline." -msgstr "Disallow view public timeline." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:rich_media > :enabled" @@ -3427,18 +2844,6 @@ msgstr "" "`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " "to use full name." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:shout > :enabled" -msgid "Enables the backend Shoutbox chat feature." -msgstr "Enables the backend Shoutbox chat feature." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:shout > :limit" -msgid "Shout message character limit." -msgstr "Shout message character limit." - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:static_fe > :enabled" @@ -3482,26 +2887,6 @@ msgid "" msgstr "" "Activity pub routes (question activities). Default: `30_000` (30 seconds)." -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" -msgid "Enables sending a chat message to newly registered users" -msgstr "Enables sending a chat message to newly registered users" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:welcome > :chat_message > :message" -msgid "A message that will be sent to newly registered users as a chat message" -msgstr "" -"A message that will be sent to newly registered users as a chat message" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :pleroma-:welcome > :chat_message > :sender_nickname" -msgid "The nickname of the local user that sends a welcome chat message" -msgstr "The nickname of the local user that sends a welcome chat message" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" @@ -4178,64 +3563,6 @@ msgctxt "" msgid "Minimum lifetime for ephemeral activity (in seconds)" msgstr "Minimum lifetime for ephemeral activity (in seconds)" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"auth" -msgid "Enables HTTP Basic Auth for app metrics endpoint." -msgstr "Enables HTTP Basic Auth for app metrics endpoint." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"enabled" -msgid "[Pleroma extension] Enables app metrics endpoint." -msgstr "[Pleroma extension] Enables app metrics endpoint." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"format" -msgid "App metrics endpoint output format." -msgstr "App metrics endpoint output format." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"ip_whitelist" -msgid "Restrict access of app metrics endpoint to the specified IP addresses." -msgstr "Restrict access of app metrics endpoint to the specified IP addresses." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"path" -msgid "App metrics endpoint URI path." -msgstr "App metrics endpoint URI path." - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack > :level" -msgid "Log level" -msgstr "Log level" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack > :meta" -msgid "Configure which metadata you want to report on" -msgstr "Configure which metadata you want to report on" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :quack > :webhook_url" -msgid "Configure the Slack incoming webhook" -msgstr "Configure the Slack incoming webhook" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -4292,36 +3619,6 @@ msgctxt "config label at :cors_plug > :methods" msgid "Methods" msgstr "Methods" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :handler" -msgid "Handler" -msgstr "Handler" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :password_authenticator" -msgid "Password authenticator" -msgstr "Password authenticator" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :port" -msgid "Port" -msgstr "Port" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :esshd > :priv_dir" -msgid "Priv dir" -msgstr "Priv dir" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :ex_aws-:s3 > :access_key_id" @@ -4520,38 +3817,6 @@ msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" msgid "OAuth consumer template" msgstr "OAuth consumer template" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" -msgid "Connect timeout" -msgstr "Connect timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:connections_pool > :connection_acquisition_retries" -msgid "Connection acquisition retries" -msgstr "Connection acquisition retries" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:connections_pool > :connection_acquisition_wait" -msgid "Connection acquisition wait" -msgstr "Connection acquisition wait" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" -msgid "Reclaim multiplier" -msgstr "Reclaim multiplier" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:email_notifications > :digest" @@ -4698,14 +3963,6 @@ msgctxt "" msgid "Hide post stats" msgstr "Hide post stats" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" -"hideSitename" -msgid "Hide Sitename" -msgstr "Hide Sitename" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -4735,14 +3992,6 @@ msgctxt "" msgid "Logo mask" msgstr "Logo mask" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" -"minimalScopesMode" -msgid "Minimal scopes mode" -msgstr "Minimal scopes mode" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -4900,85 +4149,6 @@ msgctxt "config label at :pleroma-:frontends > :primary > ref" msgid "Reference" msgstr "Reference" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :dstport" -msgid "Dstport" -msgstr "Dstport" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :ip" -msgid "IP" -msgstr "IP" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:gopher > :port" -msgid "Port" -msgstr "Port" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :federation" -msgid "Federation" -msgstr "Federation" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :pleroma-:hackney_pools > :federation > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" -msgid "Timeout" -msgstr "Timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :media" -msgid "Media" -msgstr "Media" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" -msgid "Timeout" -msgstr "Timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :upload" -msgid "Upload" -msgstr "Upload" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" -msgid "Max connections" -msgstr "Max connections" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" -msgid "Timeout" -msgstr "Timeout" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:http > :adapter" @@ -5003,12 +4173,6 @@ msgctxt "config label at :pleroma-:http > :proxy_url" msgid "Proxy URL" msgstr "Proxy URL" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:http > :send_user_agent" -msgid "Send user agent" -msgstr "Send user agent" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:http > :user_agent" @@ -5117,18 +4281,6 @@ msgctxt "config label at :pleroma-:instance > :banner_upload_limit" msgid "Banner upload limit" msgstr "Banner upload limit" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :birthday_min_age" -msgid "Birthday min age" -msgstr "Birthday min age" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :birthday_required" -msgid "Birthday required" -msgstr "Birthday required" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:instance > :cleanup_attachments" @@ -5215,18 +4367,6 @@ msgctxt "config label at :pleroma-:instance > :max_account_fields" msgid "Max account fields" msgstr "Max account fields" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :max_endorsed_users" -msgid "Max endorsed users" -msgstr "Max endorsed users" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:instance > :max_media_attachments" -msgid "Max media attachments" -msgstr "Max media attachments" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" @@ -5895,102 +5035,6 @@ msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" msgid "Token expires in" msgstr "Token expires in" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default" -msgid "Default" -msgstr "Default" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :default > :size" -msgid "Size" -msgstr "Size" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation" -msgid "Federation" -msgstr "Federation" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :federation > :size" -msgid "Size" -msgstr "Size" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media" -msgid "Media" -msgstr "Media" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :media > :size" -msgid "Size" -msgstr "Size" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload" -msgid "Upload" -msgstr "Upload" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" -msgid "Max waiting" -msgstr "Max waiting" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" -msgid "Recv timeout" -msgstr "Recv timeout" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:pools > :upload > :size" -msgid "Size" -msgstr "Size" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "" @@ -6149,18 +5193,6 @@ msgctxt "config label at :pleroma-:rich_media > :ttl_setters" msgid "TTL setters" msgstr "TTL setters" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:shout > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:shout > :limit" -msgid "Limit" -msgstr "Limit" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:static_fe > :enabled" @@ -6203,30 +5235,6 @@ msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" msgid "Activity pub question" msgstr "Activity pub question" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message" -msgid "Chat message" -msgstr "Chat message" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message > :message" -msgid "Message" -msgstr "Message" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" -msgid "Sender nickname" -msgstr "Sender nickname" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:welcome > :direct_message" @@ -7003,60 +6011,6 @@ msgctxt "" msgid "Min lifetime" msgstr "Min lifetime" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" -msgid "Auth" -msgstr "Auth" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" -msgid "Enabled" -msgstr "Enabled" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" -msgid "Format" -msgstr "Format" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" -"ip_whitelist" -msgid "IP Whitelist" -msgstr "IP Whitelist" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "" -"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" -msgid "Path" -msgstr "Path" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack > :level" -msgid "Level" -msgstr "Level" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack > :meta" -msgid "Meta" -msgstr "Meta" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config label at :quack > :webhook_url" -msgid "Webhook URL" -msgstr "Webhook URL" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" @@ -7075,20 +6029,6 @@ msgctxt "config label at :web_push_encryption-:vapid_details > :subject" msgid "Subject" msgstr "Subject" -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" -msgid "Require HTTP signatures for AP fetches" -msgstr "Require HTTP signatures for AP fetches" - -#: lib/pleroma/docs/translator.ex:5 -#, fuzzy -msgctxt "config description at :pleroma-:instance > :short_description" -msgid "" -"Shorter version of instance description. It can be seen on `/api/v1/instance`" -msgstr "" -"Shorter version of instance description. It can be seen on `/api/v1/instance`" - #: lib/pleroma/docs/translator.ex:5 #, fuzzy msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" @@ -7097,6 +6037,1851 @@ msgstr "Authorized fetch mode" #: lib/pleroma/docs/translator.ex:5 #, fuzzy -msgctxt "config label at :pleroma-:instance > :short_description" -msgid "Short description" -msgstr "Short description" +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures on AP fetches" +msgstr "Require HTTP signatures for AP fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:activitypub > :max_collection_objects" +msgid "" +"The maximum number of items to fetch from a remote collections. Setting this " +"too low can lead to only getting partial collections, but too high and you " +"can end up fetching far too many objects." +msgstr "" +"The maximum number of items to fetch from a remote collections. Setting this " +"too low can lead to only getting partial collections, but too high and you " +"can end up fetching far too many objects." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:argos_translate" +msgid "ArgosTranslate Settings." +msgstr "Preload-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:argos_translate > :command_argos_translate" +msgid "" +"command for `argos-translate`. Can be the command if it's in your PATH, or " +"the full path to the file." +msgstr "" +"command for `argos-translate`. Can be the command if it's in your PATH, or " +"the full path to the file." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:argos_translate > :command_argospm" +msgid "" +"command for `argospm`. Can be the command if it's in your PATH, or the full " +"path to the file." +msgstr "" +"command for `argospm`. Can be the command if it's in your PATH, or the full " +"path to the file." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:argos_translate > :strip_html" +msgid "Strip html from the post before translating it." +msgstr "Strip html from the post before translating it." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:deepl" +msgid "DeepL Settings." +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:deepl > :api_key" +msgid "API key for DeepL" +msgstr "API key for DeepL" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:deepl > :tier" +msgid "API Tier" +msgstr "API Tier" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe and masto_fe are configured. If you want to add your own " +"configuration your settings all fields must be complete." +msgstr "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe are configured. If you want to add your own configuration your " +"settings all fields must be complete." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :masto_fe" +msgid "Settings for Masto FE" +msgstr "Settings for Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :masto_fe > :" +"showInstanceSpecificPanel" +msgid "Whenether to show the instance's specific panel" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"conversationDisplay" +msgid "How to display conversations (linear or tree)" +msgstr "How to display conversations (linear or tree)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteFavicon" +msgid "Whether to hide the instance favicon from the navbar" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteName" +msgid "Whether to hide the site name from the navbar" +msgstr "Whether to hide the site name from the navbar" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"renderMisskeyMarkdown" +msgid "Whether to render Misskey-flavoured markdown" +msgstr "Whether to render Misskey-flavoured markdown" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showNavShortcuts" +msgid "Whether to put extra navigation options on the navbar" +msgstr "Whether to put extra navigation options on the navbar" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showPanelNavShortcuts" +msgid "Whether to put timeline nav tabs on the top of the panel" +msgstr "Whether to put timeline nav tabs on the top of the panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showWiderShortcuts" +msgid "Whether to add extra space between navbar icons" +msgstr "Whether to add extra space between navbar icons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"stopGifs" +msgid "Whether to pause animated images until they're hovered on" +msgstr "Whether to pause animated images until they're hovered on" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon" +msgid "Mastodon frontend" +msgstr "Admin frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon > name" +msgid "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :mastodon > ref" +msgid "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger" +msgid "Swagger API reference frontend" +msgstr "Swagger API reference frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > enabled" +msgid "Whether to have this enabled at all" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > name" +msgid "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:frontends > :swagger > ref" +msgid "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :pool_size" +msgid "Number of concurrent outbound HTTP requests to allow. Default 50." +msgstr "Number of concurrent outbound HTTP requests to allow. Default 50." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :pool_timeout" +msgid "Timeout for initiating HTTP requests (in ms, default 5000)" +msgstr "Timeout for initiating HTTP requests (in ms, default 5000)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "" +"Proxy URL - of the format http://host:port. Advise setting in .exs instead " +"of admin-fe due to this being set at boot-time." +msgstr "" +"Proxy URL - of the format http://host:port. Advise setting in .exs instead " +"of admin-fe due to this being set at boot-time." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:http > :receive_timeout" +msgid "" +"Timeout for waiting on remote servers to respond to HTTP requests (in ms, " +"default 15000)" +msgstr "" +"Timeout for waiting on remote servers to respond to HTTP requests (in ms, " +"default 15000)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :export_prometheus_metrics" +msgid "Enable prometheus metrics (at /api/v1/akkoma/metrics)" +msgstr "Enable prometheus metrics (at /api/v1/akkoma/metrics)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :languages" +msgid "Languages the instance uses" +msgstr "Name of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :local_bubble" +msgid "" +"List of instances that make up your local bubble (closely-related " +"instances). Used to populate the 'bubble' timeline (domain only)." +msgstr "" +"List of instances that make up your local bubble (closely-related instances)" +". Used to populate the 'bubble' timeline (domain only)." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses)" +msgstr "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses and " +"chats)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :public" +msgid "" +"Switching this on will allow unauthenticated users access to all public " +"resources on your instance Switching it off is useful for disabling the " +"Local Timeline and The Whole Known Network. Note: when setting to `false`, " +"please also check `:restrict_unauthenticated` setting." +msgstr "" +"Makes the client API in authenticated mode-only except for user-profiles. " +"Useful for disabling the Local Timeline and The Whole Known Network. Note: " +"when setting to `false`, please also check `:restrict_unauthenticated` " +"setting." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "" +"(Deprecated, will be removed in next release) List of ActivityPub instances " +"where activities will not be sent, and the reason for doing so" +msgstr "" +"List of ActivityPub instances where private (DMs, followers-only) activities " +"will not be sent and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instances_nodeinfo" +msgid "Control favicons for instances" +msgstr "Control favicons for instances" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instances_nodeinfo > :enabled" +msgid "Allow/disallow getting instance nodeinfo" +msgstr "Allow/disallow displaying and getting instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:libre_translate" +msgid "LibreTranslate Settings." +msgstr "Logger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:libre_translate > :api_key" +msgid "API key for libretranslate" +msgstr "API key for libretranslate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:libre_translate > :url" +msgid "URL for libretranslate" +msgstr "URL for libretranslate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "" +"Describe the background color of the app - this is only used for mastodon-fe" +msgstr "Describe the background color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app - this is only used for mastodon-fe" +msgstr "Describe the theme color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "" +"Obfuscate domains in MRF transparency. This is useful if the domain you're " +"blocking contains words you don't want displayed, but still want to disclose " +"the MRF settings." +msgstr "" +"Obfuscate domains in MRF transparency. This is useful if the domain you're " +"blocking contains words you don't want displayed, but still want to disclose " +"the MRF settings." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf_inline_quote" +msgid "Force quote post URLs inline" +msgstr "Force quote post URLs inline" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix before the link" +msgstr "Prefix before the link" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :handle_threads" +msgid "" +"Enable to filter replies to threads based from their originating instance, " +"using the reject and accept rules" +msgstr "" +"Enable to filter replies to threads based from their originating instance, " +"using the reject and accept rules" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "" +"Disallow unauthenticated viewing of timelines, user profiles and statuses." +msgstr "" +"Disallow viewing timelines, user profiles and statuses for unauthenticated " +"users." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for posts." +msgstr "Settings for statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities > :" +"local" +msgid "Disallow viewing local posts." +msgstr "Disallow view local statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities > :" +"remote" +msgid "Disallow viewing remote posts." +msgstr "Disallow view remote statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow viewing local user profiles." +msgstr "Disallow view local user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :profiles > :" +"remote" +msgid "Disallow viewing remote user profiles." +msgstr "Disallow view remote user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :timelines > :" +"federated" +msgid "Disallow viewing the whole known network timeline." +msgstr "Disallow view federated timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :timelines > :" +"local" +msgid "Disallow viewing the public timeline." +msgstr "Disallow view public timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:translator" +msgid "Translation Settings" +msgstr "Invalidation script settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:translator > :enabled" +msgid "Is translation enabled?" +msgstr "Streaming enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:translator > :module" +msgid "Translation module." +msgstr "Handler module" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:workers > :timeout" +msgid "Timeout for jobs, per `Oban` queue, in ms" +msgstr "Max retry attempts for failed jobs, per `Oban` queue" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search" +msgid "General search settings." +msgstr "General MRF settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search > :module" +msgid "Selected search module." +msgstr "Rejected shortcodes" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch settings." +msgstr "Email template settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "" +"The API module used by Elasticsearch. Should always be Elasticsearch.API.HTTP" +msgstr "" +"The API module used by Elasticsearch. Should always be Elasticsearch.API.HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes" +msgid "The indices to set up in Elasticsearch" +msgstr "The indices to set up in Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities" +msgid "Config for the index to use for activities" +msgstr "Config for the index to use for activities" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :bulk_page_size" +msgid "Size for bulk put requests, mostly used on building the index" +msgstr "Size for bulk put requests, mostly used on building the index" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :bulk_wait_interval" +msgid "Time to wait between bulk put requests (in ms)" +msgstr "Time to wait between bulk put requests (in ms)" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :settings" +msgid "" +"Path to the file containing index settings for the activities index. Should " +"contain a mapping." +msgstr "" +"Path to the file containing index settings for the activities index. Should " +"contain a mapping." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :sources" +msgid "The internal types to use for this index" +msgstr "The internal types to use for this index" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"indexes > :activities > :store" +msgid "The internal store module" +msgstr "Authenticator module" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"json_library" +msgid "" +"The JSON module used to encode/decode when communicating with Elasticsearch" +msgstr "" +"The JSON module used to encode/decode when communicating with Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"password" +msgid "" +"Password to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" +"Password to connect to ES. Set to nil if your cluster is unauthenticated." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Elasticsearch URL." +msgstr "Elasticsearch URL." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :" +"username" +msgid "" +"Username to connect to ES. Set to nil if your cluster is unauthenticated." +msgstr "" +"Username to connect to ES. Set to nil if your cluster is unauthenticated." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch" +msgid "Meilisearch settings." +msgstr "Mailer-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Meilisearch > :" +"initial_indexing_chunk_size" +msgid "" +"Amount of posts in a batch when running the initial indexing operation. " +"Should probably not be more than 100000 since there's a limit on maximum " +"insert size" +msgstr "" +"Amount of posts in a batch when running the initial indexing operation. " +"Should probably not be more than 100000 since there's a limit on maximum " +"insert size" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "" +"Private key for meilisearch authentication, or `nil` to disable private key " +"authentication." +msgstr "" +"Private key for meilisearch authentication, or `nil` to disable private key " +"authentication." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Meilisearch URL." +msgstr "Meilisearch URL." + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "" +"Specific provider to hand out themes to instances that scrape index.html" +msgstr "" +"Specific provider to hand out themes to instances that scrape index.html" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :" +"theme_color" +msgid "" +"The 'accent color' of the instance, used in places like misskey's instance " +"ticker" +msgstr "" +"The 'accent color' of the instance, used in places like misskey's instance " +"ticker" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:activitypub > :max_collection_objects" +msgid "Max collection objects" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate" +msgid "Argos translate" +msgstr "Argos translate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :command_argos_translate" +msgid "Command argos translate" +msgstr "Command argos translate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :command_argospm" +msgid "Command argospm" +msgstr "Cmd args" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:argos_translate > :strip_html" +msgid "Strip html" +msgstr "Strict" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:deepl" +msgid "DeepL" +msgstr "DeepL" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:deepl > :api_key" +msgid "Api key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:deepl > :tier" +msgid "Tier" +msgstr "Tier" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :masto_fe" +msgid "Masto FE" +msgstr "Masto FE" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :masto_fe > :" +"showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "Show instance specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"conversationDisplay" +msgid "Conversation display style" +msgstr "Conversation display style" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteFavicon" +msgid "Hide site favicon" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSiteName" +msgid "Hide site name" +msgstr "Hide Sitename" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"renderMisskeyMarkdown" +msgid "Render misskey markdown" +msgstr "Render misskey markdown" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showNavShortcuts" +msgid "Show navbar shortcuts" +msgstr "Show navbar shortcuts" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showPanelNavShortcuts" +msgid "Show timeline panel nav shortcuts" +msgstr "Show timeline panel nav shortcuts" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showWiderShortcuts" +msgid "Increase navbar shortcut spacing" +msgstr "Increase navbar shortcut spacing" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :stopGifs" +msgid "Stop Gifs" +msgstr "Stop Gifs" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon" +msgid "Mastodon" +msgstr "Mastodon" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :mastodon > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger" +msgid "Swagger" +msgstr "Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:frontends > :swagger > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:http > :pool_size" +msgid "Pool size" +msgstr "Pools" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:http > :pool_timeout" +msgid "HTTP Pool Request Timeout" +msgstr "HTTP Pool Request Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:http > :receive_timeout" +msgid "HTTP Receive Timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instance > :export_prometheus_metrics" +msgid "Export prometheus metrics" +msgstr "Export prometheus metrics" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instance > :languages" +msgid "Languages" +msgstr "Languages" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instance > :local_bubble" +msgid "Local bubble" +msgstr "Local bubble" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instances_nodeinfo" +msgid "Instances nodeinfo" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:instances_nodeinfo > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:libre_translate" +msgid "Libre translate" +msgstr "Libre translate" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:libre_translate > :api_key" +msgid "Api key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:libre_translate > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency_obfuscate_domains" +msgid "MRF domain obfuscation" +msgstr "MRF domain obfuscation" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf_inline_quote" +msgid "MRF Inline Quote" +msgstr "MRF Inline Quote" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf_inline_quote > :prefix" +msgid "Prefix" +msgstr "Prefix" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :handle_threads" +msgid "Apply to entire threads" +msgstr "Apply to entire threads" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:translator" +msgid "Translator" +msgstr "Translator" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:translator > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:translator > :module" +msgid "Module" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-:workers > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search" +msgid "Search" +msgstr "Search" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search > :module" +msgid "Module" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster" +msgid "Elasticsearch" +msgstr "Elasticsearch" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :api" +msgid "Api" +msgstr "Api" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes" +msgid "Indexes" +msgstr "Indexes" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities" +msgid "Activities" +msgstr "Activities" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :bulk_page_size" +msgid "Bulk page size" +msgstr "Bulk page size" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :bulk_wait_interval" +msgid "Bulk wait interval" +msgstr "Bulk wait interval" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :settings" +msgid "Settings" +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :sources" +msgid "Sources" +msgstr "Sources" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :indexes > :" +"activities > :store" +msgid "Store" +msgstr "Store" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :json_library" +msgid "Json library" +msgstr "Json library" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :password" +msgid "Password" +msgstr "Password" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Elasticsearch.Cluster > :username" +msgid "Username" +msgstr "Username" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch" +msgid "Pleroma.Search.Meilisearch" +msgstr "Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Search.Meilisearch > :" +"initial_indexing_chunk_size" +msgid "Initial indexing chunk size" +msgstr "Initial indexing chunk size" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :private_key" +msgid "Private key" +msgstr "Private key" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Search.Meilisearch > :url" +msgid "Url" +msgstr "Url" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme" +msgid "Pleroma.Web.Metadata.Providers.Theme" +msgstr "Pleroma.Web.Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.Metadata.Providers.Theme > :theme_color" +msgid "Theme color" +msgstr "Theme color" + +#: lib/pleroma/docs/translator.ex:5 +#, fuzzy +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/v1/pleroma/healthcheck`" +msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" + +# # This file is a PO Template file. +# # +# # "msgid"s here are often extracted from source code. +# # Add new translations manually only if they're dynamic +# # translations that can't be statically extracted. +# # +# # Run "mix gettext.extract" to bring this file up to +# # date. Leave "msgstr"s empty as changing them here has no +# # effect: edit them in PO (.po) files instead. +#, fuzzy +#~ msgctxt "config description at :esshd" +#~ msgid "" +#~ "Before enabling this you must add :esshd to mix.exs as one of the " +#~ "extra_applications and generate host keys in your priv dir with ssh-" +#~ "keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +#~ msgstr "" +#~ "Before enabling this you must add :esshd to mix.exs as one of the " +#~ "extra_applications and generate host keys in your priv dir with ssh-" +#~ "keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" + +#, fuzzy +#~ msgctxt "config description at :quack" +#~ msgid "Quack-related settings" +#~ msgstr "Quack-related settings" + +#, fuzzy +#~ msgctxt "config label at :esshd" +#~ msgid "ESSHD" +#~ msgstr "ESSHD" + +#, fuzzy +#~ msgctxt "config label at :quack" +#~ msgid "Quack Logger" +#~ msgstr "Quack Logger" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:connections_pool" +#~ msgid "Advanced settings for `Gun` connections pool" +#~ msgstr "Advanced settings for `Gun` connections pool" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher" +#~ msgid "Gopher settings" +#~ msgstr "Gopher settings" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools" +#~ msgid "Advanced settings for `Hackney` connections pools" +#~ msgstr "Advanced settings for `Hackney` connections pools" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools" +#~ msgid "Advanced settings for `Gun` workers pools" +#~ msgstr "Advanced settings for `Gun` workers pools" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:shout" +#~ msgid "Pleroma shout settings" +#~ msgstr "Pleroma shout settings" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +#~ msgid "Prometheus app metrics endpoint configuration" +#~ msgstr "Prometheus app metrics endpoint configuration" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:connections_pool" +#~ msgid "Connections pool" +#~ msgstr "Connections pool" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher" +#~ msgid "Gopher" +#~ msgstr "Gopher" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools" +#~ msgid "Hackney pools" +#~ msgstr "Hackney pools" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:shout" +#~ msgid "Shout" +#~ msgstr "Shout" + +#, fuzzy +#~ msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +#~ msgid "Pleroma.Web.Endpoint.MetricsExporter" +#~ msgstr "Pleroma.Web.Endpoint.MetricsExporter" + +#, fuzzy +#~ msgctxt "config description at :esshd > :enabled" +#~ msgid "Enables SSH" +#~ msgstr "Enables SSH" + +#, fuzzy +#~ msgctxt "config description at :esshd > :port" +#~ msgid "Port to connect" +#~ msgstr "Port to connect" + +#, fuzzy +#~ msgctxt "config description at :esshd > :priv_dir" +#~ msgid "Dir with SSH keys" +#~ msgstr "Dir with SSH keys" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :connect_timeout" +#~ msgid "" +#~ "Timeout while `gun` will wait until connection is up. Default: 5000ms." +#~ msgstr "" +#~ "Timeout while `gun` will wait until connection is up. Default: 5000ms." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :" +#~ "connection_acquisition_retries" +#~ msgid "" +#~ "Number of attempts to acquire the connection from the pool if it is " +#~ "overloaded. Default: 5" +#~ msgstr "" +#~ "Number of attempts to acquire the connection from the pool if it is " +#~ "overloaded. Default: 5" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :" +#~ "connection_acquisition_wait" +#~ msgid "" +#~ "Timeout to acquire a connection from pool. The total max time is this " +#~ "value multiplied by the number of retries. Default: 250ms." +#~ msgstr "" +#~ "Timeout to acquire a connection from pool. The total max time is this " +#~ "value multiplied by the number of retries. Default: 250ms." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :max_connections" +#~ msgid "Maximum number of connections in the pool. Default: 250 connections." +#~ msgstr "" +#~ "Maximum number of connections in the pool. Default: 250 connections." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:connections_pool > :reclaim_multiplier" +#~ msgid "" +#~ "Multiplier for the number of idle connection to be reclaimed if the pool " +#~ "is full. For example if the pool maxes out at 250 connections and this " +#~ "setting is set to 0.3, the pool will reclaim at most 75 idle connections " +#~ "if it's overloaded. Default: 0.1" +#~ msgstr "" +#~ "Multiplier for the number of idle connection to be reclaimed if the pool " +#~ "is full. For example if the pool maxes out at 250 connections and this " +#~ "setting is set to 0.3, the pool will reclaim at most 75 idle connections " +#~ "if it's overloaded. Default: 0.1" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +#~ "hideSitename" +#~ msgid "Hides instance name from PleromaFE banner" +#~ msgstr "Hides instance name from PleromaFE banner" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +#~ "minimalScopesMode" +#~ msgid "" +#~ "Limit scope selection to Direct, User default, and Scope of post replying " +#~ "to. Also prevents replying to a DM with a public post from PleromaFE." +#~ msgstr "" +#~ "Limit scope selection to Direct, User default, and Scope of post replying " +#~ "to. Also prevents replying to a DM with a public post from PleromaFE." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :dstport" +#~ msgid "Port advertised in URLs (optional, defaults to port)" +#~ msgstr "Port advertised in URLs (optional, defaults to port)" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :enabled" +#~ msgid "Enables the gopher interface" +#~ msgstr "Enables the gopher interface" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :ip" +#~ msgid "IP address to bind to" +#~ msgstr "IP address to bind to" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:gopher > :port" +#~ msgid "Port to bind to" +#~ msgstr "Port to bind to" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :federation" +#~ msgid "Settings for federation pool." +#~ msgstr "Settings for federation pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :federation > :" +#~ "max_connections" +#~ msgid "Number workers in the pool." +#~ msgstr "Number workers in the pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :federation > :timeout" +#~ msgid "Timeout while `hackney` will wait for response." +#~ msgstr "Timeout while `hackney` will wait for response." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :media" +#~ msgid "Settings for media pool." +#~ msgstr "Settings for media pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :media > :max_connections" +#~ msgid "Number workers in the pool." +#~ msgstr "Number workers in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +#~ msgid "Timeout while `hackney` will wait for response." +#~ msgstr "Timeout while `hackney` will wait for response." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :upload" +#~ msgid "Settings for upload pool." +#~ msgstr "Settings for upload pool." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:hackney_pools > :upload > :max_connections" +#~ msgid "Number workers in the pool." +#~ msgstr "Number workers in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +#~ msgid "Timeout while `hackney` will wait for response." +#~ msgstr "Timeout while `hackney` will wait for response." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:http > :proxy_url" +#~ msgid "Proxy URL" +#~ msgstr "Proxy URL" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :birthday_min_age" +#~ msgid "" +#~ "Minimum required age for users to create account. Only used if birthday " +#~ "is required." +#~ msgstr "" +#~ "Minimum required age for users to create account. Only used if birthday " +#~ "is required." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :birthday_required" +#~ msgid "Require users to enter their birthday." +#~ msgstr "Require users to enter their birthday." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +#~ msgid "" +#~ "The maximum number of recommended accounts. 0 will disable the feature." +#~ msgstr "" +#~ "The maximum number of recommended accounts. 0 will disable the feature." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :max_media_attachments" +#~ msgid "Maximum number of post media attachments" +#~ msgstr "Maximum number of post media attachments" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default" +#~ msgid "Settings for default pool." +#~ msgstr "Settings for default pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :default > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :federation" +#~ msgid "Settings for federation pool." +#~ msgstr "Settings for federation pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:pools > :federation > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :federation > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media" +#~ msgid "Settings for media pool." +#~ msgstr "Settings for media pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :media > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload" +#~ msgid "Settings for upload pool." +#~ msgstr "Settings for upload pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +#~ msgid "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" +#~ msgstr "" +#~ "Maximum number of requests waiting for other requests to finish. After " +#~ "this number is reached, the pool will start returning errrors when a new " +#~ "request is made" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +#~ msgid "Timeout for the pool while gun will wait for response" +#~ msgstr "Timeout for the pool while gun will wait for response" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:pools > :upload > :size" +#~ msgid "Maximum number of concurrent requests in the pool." +#~ msgstr "Maximum number of concurrent requests in the pool." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:shout > :enabled" +#~ msgid "Enables the backend Shoutbox chat feature." +#~ msgstr "Enables the backend Shoutbox chat feature." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:shout > :limit" +#~ msgid "Shout message character limit." +#~ msgstr "Shout message character limit." + +#, fuzzy +#~ msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +#~ msgid "Enables sending a chat message to newly registered users" +#~ msgstr "Enables sending a chat message to newly registered users" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +#~ msgid "" +#~ "A message that will be sent to newly registered users as a chat message" +#~ msgstr "" +#~ "A message that will be sent to newly registered users as a chat message" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +#~ msgid "The nickname of the local user that sends a welcome chat message" +#~ msgstr "The nickname of the local user that sends a welcome chat message" + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "auth" +#~ msgid "Enables HTTP Basic Auth for app metrics endpoint." +#~ msgstr "Enables HTTP Basic Auth for app metrics endpoint." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "enabled" +#~ msgid "[Pleroma extension] Enables app metrics endpoint." +#~ msgstr "[Pleroma extension] Enables app metrics endpoint." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "format" +#~ msgid "App metrics endpoint output format." +#~ msgstr "App metrics endpoint output format." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "ip_whitelist" +#~ msgid "" +#~ "Restrict access of app metrics endpoint to the specified IP addresses." +#~ msgstr "" +#~ "Restrict access of app metrics endpoint to the specified IP addresses." + +#, fuzzy +#~ msgctxt "" +#~ "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "path" +#~ msgid "App metrics endpoint URI path." +#~ msgstr "App metrics endpoint URI path." + +#, fuzzy +#~ msgctxt "config description at :quack > :level" +#~ msgid "Log level" +#~ msgstr "Log level" + +#, fuzzy +#~ msgctxt "config description at :quack > :meta" +#~ msgid "Configure which metadata you want to report on" +#~ msgstr "Configure which metadata you want to report on" + +#, fuzzy +#~ msgctxt "config description at :quack > :webhook_url" +#~ msgid "Configure the Slack incoming webhook" +#~ msgstr "Configure the Slack incoming webhook" + +#, fuzzy +#~ msgctxt "config label at :esshd > :handler" +#~ msgid "Handler" +#~ msgstr "Handler" + +#, fuzzy +#~ msgctxt "config label at :esshd > :password_authenticator" +#~ msgid "Password authenticator" +#~ msgstr "Password authenticator" + +#, fuzzy +#~ msgctxt "config label at :esshd > :port" +#~ msgid "Port" +#~ msgstr "Port" + +#, fuzzy +#~ msgctxt "config label at :esshd > :priv_dir" +#~ msgid "Priv dir" +#~ msgstr "Priv dir" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +#~ msgid "Connect timeout" +#~ msgstr "Connect timeout" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:connections_pool > :" +#~ "connection_acquisition_retries" +#~ msgid "Connection acquisition retries" +#~ msgstr "Connection acquisition retries" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +#~ msgid "Connection acquisition wait" +#~ msgstr "Connection acquisition wait" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +#~ msgid "Reclaim multiplier" +#~ msgstr "Reclaim multiplier" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +#~ "minimalScopesMode" +#~ msgid "Minimal scopes mode" +#~ msgstr "Minimal scopes mode" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :dstport" +#~ msgid "Dstport" +#~ msgstr "Dstport" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :ip" +#~ msgid "IP" +#~ msgstr "IP" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:gopher > :port" +#~ msgid "Port" +#~ msgstr "Port" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :federation" +#~ msgid "Federation" +#~ msgstr "Federation" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:hackney_pools > :federation > :max_connections" +#~ msgid "Max connections" +#~ msgstr "Max connections" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :media" +#~ msgid "Media" +#~ msgstr "Media" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:hackney_pools > :media > :max_connections" +#~ msgid "Max connections" +#~ msgstr "Max connections" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +#~ msgid "Timeout" +#~ msgstr "Timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :upload" +#~ msgid "Upload" +#~ msgstr "Upload" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:hackney_pools > :upload > :max_connections" +#~ msgid "Max connections" +#~ msgstr "Max connections" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +#~ msgid "Timeout" +#~ msgstr "Timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:http > :send_user_agent" +#~ msgid "Send user agent" +#~ msgstr "Send user agent" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :birthday_min_age" +#~ msgid "Birthday min age" +#~ msgstr "Birthday min age" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :birthday_required" +#~ msgid "Birthday required" +#~ msgstr "Birthday required" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +#~ msgid "Max endorsed users" +#~ msgstr "Max endorsed users" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :max_media_attachments" +#~ msgid "Max media attachments" +#~ msgstr "Max media attachments" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :default" +#~ msgid "Default" +#~ msgstr "Default" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :default > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation" +#~ msgid "Federation" +#~ msgstr "Federation" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +#~ msgid "Recv timeout" +#~ msgstr "Recv timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :federation > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media" +#~ msgid "Media" +#~ msgstr "Media" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +#~ msgid "Recv timeout" +#~ msgstr "Recv timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :media > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload" +#~ msgid "Upload" +#~ msgstr "Upload" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +#~ msgid "Max waiting" +#~ msgstr "Max waiting" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +#~ msgid "Recv timeout" +#~ msgstr "Recv timeout" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:pools > :upload > :size" +#~ msgid "Size" +#~ msgstr "Size" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:shout > :enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:shout > :limit" +#~ msgid "Limit" +#~ msgstr "Limit" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:welcome > :chat_message" +#~ msgid "Chat message" +#~ msgstr "Chat message" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +#~ msgid "Message" +#~ msgstr "Message" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +#~ msgid "Sender nickname" +#~ msgstr "Sender nickname" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +#~ msgid "Auth" +#~ msgstr "Auth" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "enabled" +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +#~ msgid "Format" +#~ msgstr "Format" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +#~ "ip_whitelist" +#~ msgid "IP Whitelist" +#~ msgstr "IP Whitelist" + +#, fuzzy +#~ msgctxt "" +#~ "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +#~ msgid "Path" +#~ msgstr "Path" + +#, fuzzy +#~ msgctxt "config label at :quack > :level" +#~ msgid "Level" +#~ msgstr "Level" + +#, fuzzy +#~ msgctxt "config label at :quack > :meta" +#~ msgid "Meta" +#~ msgstr "Meta" + +#, fuzzy +#~ msgctxt "config label at :quack > :webhook_url" +#~ msgid "Webhook URL" +#~ msgstr "Webhook URL" + +#, fuzzy +#~ msgctxt "config description at :pleroma-:instance > :short_description" +#~ msgid "" +#~ "Shorter version of instance description. It can be seen on `/api/v1/" +#~ "instance`" +#~ msgstr "" +#~ "Shorter version of instance description. It can be seen on `/api/v1/" +#~ "instance`" + +#, fuzzy +#~ msgctxt "config label at :pleroma-:instance > :short_description" +#~ msgid "Short description" +#~ msgstr "Short description" From d8f127f6d52f754adeb267d4154e2305943872f2 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 7 Jul 2023 18:48:42 +0000 Subject: [PATCH 170/178] Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-errors/ Translation: Pleroma fe/Akkoma Backend (Errors) --- .../zh_Hans/LC_MESSAGES/static_pages.po | 601 ++++++++++++++++++ 1 file changed, 601 insertions(+) create mode 100644 priv/gettext/zh_Hans/LC_MESSAGES/static_pages.po diff --git a/priv/gettext/zh_Hans/LC_MESSAGES/static_pages.po b/priv/gettext/zh_Hans/LC_MESSAGES/static_pages.po new file mode 100644 index 000000000..cd9daf110 --- /dev/null +++ b/priv/gettext/zh_Hans/LC_MESSAGES/static_pages.po @@ -0,0 +1,601 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-23 12:41+0000\n" +"PO-Revision-Date: 2023-02-24 13:57+0000\n" +"Last-Translator: SevicheCC \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.14\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here as no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button" +msgid "Authorize" +msgstr "批准" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error fetching user" +msgstr "无法获取用户信息" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remote follow" +msgstr "跨站关注" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for auth code entry" +msgid "Authentication code" +msgstr "验证码" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for password entry" +msgid "Password" +msgstr "密码" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for username entry" +msgid "Username" +msgstr "用户名" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for login" +msgid "Authorize" +msgstr "授权" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for mfa" +msgid "Authorize" +msgstr "授权" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error following account" +msgstr "无法关注账户" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header, need login" +msgid "Log in to follow" +msgstr "登录以关注" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow mfa header" +msgid "Two-factor authentication" +msgstr "双因素身份验证" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow success" +msgid "Account followed!" +msgstr "已关注该账号!" + +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:7 +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for account id" +msgid "Your account ID, e.g. lain@quitter.se" +msgstr "你的账号ID,比如:lain@quitter.se" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for following with a remote account" +msgid "Follow" +msgstr "关注" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error: %{error}" +msgstr "错误:%{error}" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remotely follow %{nickname}" +msgstr "远程关注 %{nickname}" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "password reset button" +msgid "Reset" +msgstr "重制" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset failed homepage link" +msgid "Homepage" +msgstr "主页" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset failed message" +msgid "Password reset failed" +msgstr "密码重置失败" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "password reset form confirm password prompt" +msgid "Confirmation" +msgstr "确认" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset form password prompt" +msgid "Password" +msgstr "密码" + +#: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset invalid token message" +msgid "Invalid Token" +msgstr "无效 Token" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "password reset successful homepage link" +msgid "Homepage" +msgstr "主页" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset successful message" +msgid "Password changed!" +msgstr "密码已修改!" + +#: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 +#: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 +#, elixir-autogen, elixir-format +msgctxt "tag feed description" +msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." +msgstr "这些是带有 #%{tag} " +"标签的公开帖文。如果你在联邦宇宙的任何地方有账户,你可以与它们进行交互。" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:3 +#, elixir-autogen, elixir-format +msgctxt "oauth authorization exists page title" +msgid "Authorization exists" +msgstr "已存在授权" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize approve button" +msgid "Approve" +msgstr "允许" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:35 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize cancel button" +msgid "Cancel" +msgstr "取消" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:26 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize message" +msgid "Application %{client_name} is requesting access to your account." +msgstr "应用程序 %{client_name} 正在请求访问您的帐户。" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:3 +#, elixir-autogen, elixir-format +msgctxt "oauth authorized page title" +msgid "Successfully authorized" +msgstr "授权成功" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider page title" +msgid "Sign in with external provider" +msgstr "使用外部服务进行登录" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider sign in button" +msgid "Sign in with %{strategy}" +msgstr "用 %{strategy} 登录" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:59 +#, elixir-autogen, elixir-format +msgctxt "oauth login button" +msgid "Log In" +msgstr "登录" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:56 +#, elixir-autogen, elixir-format +msgctxt "oauth login password prompt" +msgid "Password" +msgstr "密码" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:52 +#, elixir-autogen, elixir-format +msgctxt "oauth login username prompt" +msgid "Username" +msgstr "用户名" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:44 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname prompt" +msgid "Pleroma Handle" +msgstr "Pleroma账号" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:42 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname unchangeable warning" +msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." +msgstr "选择时要慎重!您以后将无法更改此项。不过您可以更改您的显示名称。" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 +#, elixir-autogen, elixir-format +msgctxt "oauth register page email prompt" +msgid "Email" +msgstr "邮箱" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "oauth register page fill form prompt" +msgid "If you'd like to register a new account, please provide the details below." +msgstr "如果您想注册一个新账户,请提供以下细节。" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login button" +msgid "Proceed as existing user" +msgstr "以现有用户身份进行" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login password prompt" +msgid "Password" +msgstr "密码" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login prompt" +msgid "Alternatively, sign in to connect to existing account." +msgstr "或者登录后连接到现有账户。" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login username prompt" +msgid "Name or email" +msgstr "名字或者邮箱" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 +#, elixir-autogen, elixir-format +msgctxt "oauth register page nickname prompt" +msgid "Nickname" +msgstr "昵称" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 +#, elixir-autogen, elixir-format +msgctxt "oauth register page register button" +msgid "Proceed as new user" +msgstr "以新用户身份进行" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "Registration Details" +msgstr "注册细节" + +#: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "oauth scopes message" +msgid "The following permissions will be granted" +msgstr "将授予以下权限" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:6 +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:6 +#, elixir-autogen, elixir-format +msgctxt "oauth token code message" +msgid "Token code is
%{token}" +msgstr "Token 码是
%{token}" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:14 +#, elixir-autogen, elixir-format +msgctxt "mfa auth code prompt" +msgid "Authentication code" +msgstr "授权码" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:9 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page title" +msgid "Two-factor authentication" +msgstr "双因素身份验证" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:25 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page use recovery code link" +msgid "Enter a two-factor recovery code" +msgstr "输入一个双因素恢复的恢复代码" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:22 +#, elixir-autogen, elixir-format +msgctxt "mfa auth verify code button" +msgid "Verify" +msgstr "认证" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:9 +#, elixir-autogen, elixir-format +msgctxt "mfa recover page title" +msgid "Two-factor recovery" +msgstr "双因素恢复" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:14 +#, elixir-autogen, elixir-format +msgctxt "mfa recover recovery code prompt" +msgid "Recovery code" +msgstr "恢复码" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:25 +#, elixir-autogen, elixir-format +msgctxt "mfa recover use 2fa code link" +msgid "Enter a two-factor code" +msgstr "输入一个双重因素验证码" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:22 +#, elixir-autogen, elixir-format +msgctxt "mfa recover verify recovery code button" +msgid "Verify" +msgstr "验证" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:42 +#, elixir-autogen, elixir-format +msgctxt "static fe profile page remote follow button" +msgid "Remote follow" +msgstr "跨站关注" + +#: lib/pleroma/web/templates/email/digest.html.eex:163 +#, elixir-autogen, elixir-format +msgctxt "digest email header line" +msgid "Hey %{nickname}, here is what you've missed!" +msgstr "嗨 %{nickname},这是你错过的一些东西!" + +#: lib/pleroma/web/templates/email/digest.html.eex:544 +#, elixir-autogen, elixir-format +msgctxt "digest email receiver address" +msgid "The email address you are subscribed as is %{email}. " +msgstr "" +"您订阅的电子邮件地址是 %{email}。 " + +#: lib/pleroma/web/templates/email/digest.html.eex:538 +#, elixir-autogen, elixir-format +msgctxt "digest email sending reason" +msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." +msgstr "您之所以会收到来自%{instance} Pleroma " +"实例的邮件摘要,是因为您已经注册了该服务实例。" + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action" +msgid "To unsubscribe, please go %{here}." +msgstr "取消订阅,请点击 %{here}." + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action link text" +msgid "here" +msgstr "这里" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe failed message" +msgid "UNSUBSCRIBE FAILURE" +msgstr "取消订阅失败" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe successful message" +msgid "UNSUBSCRIBE SUCCESSFUL" +msgstr "成功取消订阅" + +#: lib/pleroma/web/templates/email/digest.html.eex:385 +#, elixir-format +msgctxt "new followers count header" +msgid "%{count} New Follower" +msgid_plural "%{count} New Followers" +msgstr[0] "%{count} 个新关注者" + +#: lib/pleroma/emails/user_email.ex:384 +#, elixir-autogen, elixir-format +msgctxt "account archive email subject" +msgid "Your account archive is ready" +msgstr "您的账户档案已经准备好了" + +#: lib/pleroma/emails/user_email.ex:188 +#, elixir-autogen, elixir-format +msgctxt "approval pending email body" +msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" +msgstr "" +"

正在等待批准

\n" +"

您在%{instance_name}的账户正在被工作人员审查。一旦您的账户被批准通过,您" +"将收到另一封电子邮件。

\n" + +#: lib/pleroma/emails/user_email.ex:202 +#, elixir-autogen, elixir-format +msgctxt "approval pending email subject" +msgid "Your account is awaiting approval" +msgstr "您的账户正在等待审批" + +#: lib/pleroma/emails/user_email.ex:158 +#, elixir-autogen, elixir-format +msgctxt "confirmation email body" +msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" +msgstr "" +"

感谢注册%{instance_name}

\n" +"

需要电子邮件确认才能激活该账户

\n" +"

请点击以下链接以 确认您的账户

\n" + +#: lib/pleroma/emails/user_email.ex:174 +#, elixir-autogen, elixir-format +msgctxt "confirmation email subject" +msgid "%{instance_name} account confirmation" +msgstr "%{instance_name} 账户确认" + +#: lib/pleroma/emails/user_email.ex:310 +#, elixir-autogen, elixir-format +msgctxt "digest email subject" +msgid "Your digest from %{instance_name}" +msgstr "您来自 %{instance_name} 的摘要邮件" + +#: lib/pleroma/emails/user_email.ex:81 +#, elixir-autogen, elixir-format +msgctxt "password reset email body" +msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" +msgstr "" +"

在 %{instance_name} 重置您的密码

\n" +"

有人请求更改您在 %{instance_name} 的账户密码。

\n" +"

如果这是您的操作,请点击以下链接继续重置密码:重置密码

\n" +"

如果这不是您的操作,请不用担心:您的数据是安全的,您的密码未被更改。

\n" + +#: lib/pleroma/emails/user_email.ex:98 +#, elixir-autogen, elixir-format +msgctxt "password reset email subject" +msgid "Password reset" +msgstr "重置密码" + +#: lib/pleroma/emails/user_email.ex:215 +#, elixir-autogen, elixir-format +msgctxt "successful registration email body" +msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" +msgstr "" +"

你好,@%{nickname},

\n" +"

你在 %{instance_name} 的账户已经成功注册。

\n" +"

无需进行其他操作即可激活你的账户。

\n" + +#: lib/pleroma/emails/user_email.ex:231 +#, elixir-autogen, elixir-format +msgctxt "successful registration email subject" +msgid "Account registered on %{instance_name}" +msgstr "账号注册在 %{instance_name}" + +#: lib/pleroma/emails/user_email.ex:136 +#, elixir-autogen, elixir-format +msgctxt "user invitation email subject" +msgid "Invitation to %{instance_name}" +msgstr "邀请加入 %{instance_name}" + +#: lib/pleroma/emails/user_email.ex:53 +#, elixir-autogen, elixir-format +msgctxt "welcome email html body" +msgid "Welcome to %{instance_name}!" +msgstr "欢迎来到%{instance_name}!" + +#: lib/pleroma/emails/user_email.ex:41 +#, elixir-autogen, elixir-format +msgctxt "welcome email subject" +msgid "Welcome to %{instance_name}!" +msgstr "欢迎来到%{instance_name}!" + +#: lib/pleroma/emails/user_email.ex:65 +#, elixir-autogen, elixir-format +msgctxt "welcome email text body" +msgid "Welcome to %{instance_name}!" +msgstr "欢迎来到 %{instance_name}!" + +#: lib/pleroma/emails/user_email.ex:368 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - admin requested" +msgid "

Admin @%{admin_nickname} requested a full backup of your Akkoma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" +"

管理员 @%{admin_nickname} 请求对你的 Akkoma " +"账户进行完整备份,备份已准备好可供下载:

\n" +"

%{download_url}

\n" + +#: lib/pleroma/emails/user_email.ex:356 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - self-requested" +msgid "

You requested a full backup of your Akkoma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" +"

您请求了 Akkoma 帐户的完整备份。备份已准备就绪,可以下载:

\n" +"

%{download_url}

\n" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:41 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "This is your first visit! Please enter your Akkoma handle." +msgstr "这是您的第一次访问!请填写您的Akkoma账号。" + +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:123 +#, elixir-autogen, elixir-format +msgctxt "remote follow error message - unknown error" +msgid "Something went wrong." +msgstr "发生了一些错误。" + +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:67 +#, elixir-autogen, elixir-format +msgctxt "remote follow error message - user not found" +msgid "Could not find user" +msgstr "无法找到相应用户" + +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "status interact authorization button" +msgid "Interact" +msgstr "互动" + +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "status interact error" +msgid "Error: %{error}" +msgstr "错误:%{error}" + +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:95 +#, elixir-autogen, elixir-format +msgctxt "status interact error message - status not found" +msgid "Could not find status" +msgstr "无法找到帖文" + +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:144 +#, elixir-autogen, elixir-format +msgctxt "status interact error message - unknown error" +msgid "Something went wrong." +msgstr "发生了一些错误。" + +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "status interact header" +msgid "Interacting with %{nickname}'s %{status_link}" +msgstr "与 %{nickname} 的 %{status_link} 进行交互" + +#: lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "status interact header - status link text" +msgid "status" +msgstr "帖文" + +#: lib/pleroma/emails/user_email.ex:119 +#, elixir-autogen, elixir-format +msgctxt "user invitation email body" +msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Akkoma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" +msgstr "" +"

您被邀请加入 %{instance_name}

\n" +"

%{inviter_name} 邀请您加入 %{instance_name},这是一个使用 Akkoma " +"联邦社交网络平台的实例。

\n" +"

点击以下链接注册: 接受邀请.

\n" From 4c9da36748f08a84c0a9d9650e19e90653848b8d Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 7 Jul 2023 18:48:42 +0000 Subject: [PATCH 171/178] Translated using Weblate (Chinese (Simplified)) Currently translated at 94.6% (89 of 94 strings) Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: SevicheCC Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-errors/zh_Hans/ Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-static-pages/ Translation: Pleroma fe/Akkoma Backend (Errors) Translation: Pleroma fe/Akkoma Backend (Static pages) --- priv/gettext/zh_Hans/LC_MESSAGES/errors.po | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/priv/gettext/zh_Hans/LC_MESSAGES/errors.po b/priv/gettext/zh_Hans/LC_MESSAGES/errors.po index ecf1dab6b..772ddd13a 100644 --- a/priv/gettext/zh_Hans/LC_MESSAGES/errors.po +++ b/priv/gettext/zh_Hans/LC_MESSAGES/errors.po @@ -3,16 +3,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-09-20 13:18+0000\n" -"PO-Revision-Date: 2020-12-14 06:00+0000\n" -"Last-Translator: shironeko \n" -"Language-Team: Chinese (Simplified) \n" +"PO-Revision-Date: 2023-02-26 08:57+0000\n" +"Last-Translator: SevicheCC \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.4\n" +"X-Generator: Weblate 4.14\n" ## This file is a PO Template file. ## @@ -146,7 +146,7 @@ msgid "Cannot post an empty status without attachments" msgstr "无法发送空白且不包含附件的状态" #: lib/pleroma/web/common_api/utils.ex:511 -#, elixir-format, fuzzy +#, elixir-format msgid "Comment must be up to %{max_size} characters" msgstr "评论最多可使用 %{max_size} 字符" @@ -250,7 +250,7 @@ msgstr "没有该对话" #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:388 #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:414 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:456 -#, elixir-format, fuzzy +#, elixir-format msgid "No such permission_group" msgstr "没有该权限组" @@ -297,7 +297,7 @@ msgid "This resource requires authentication." msgstr "该资源需要认证。" #: lib/pleroma/plugs/rate_limiter/rate_limiter.ex:206 -#, elixir-format, fuzzy +#, elixir-format msgid "Throttled" msgstr "节流了" @@ -380,7 +380,7 @@ msgid "Failed" msgstr "失败" #: lib/pleroma/web/oauth/oauth_controller.ex:410 -#, elixir-format, fuzzy +#, elixir-format msgid "Failed to authenticate: %{message}." msgstr "认证失败:%{message}。" @@ -406,7 +406,7 @@ msgid "Invalid Username/Password" msgstr "无效的用户名/密码" #: lib/pleroma/web/twitter_api/twitter_api.ex:118 -#, elixir-format, fuzzy +#, elixir-format msgid "Invalid answer data" msgstr "无效的回答数据" @@ -437,7 +437,7 @@ msgid "Unsupported OAuth provider: %{provider}." msgstr "不支持的 OAuth 提供者:%{provider}。" #: lib/pleroma/uploaders/uploader.ex:72 -#, elixir-format, fuzzy +#, elixir-format msgid "Uploader callback timeout" msgstr "上传回复超时" @@ -452,7 +452,7 @@ msgid "CAPTCHA Error" msgstr "验证码错误" #: lib/pleroma/web/common_api/common_api.ex:290 -#, elixir-format, fuzzy +#, elixir-format msgid "Could not add reaction emoji" msgstr "无法添加表情反应" From 99d660c9ad6f9b3ab7b9f0a3feb2e5a2b4496974 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 7 Jul 2023 18:48:42 +0000 Subject: [PATCH 172/178] Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-errors/ Translation: Pleroma fe/Akkoma Backend (Errors) --- .../zh_Hans/LC_MESSAGES/posix_errors.po | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 priv/gettext/zh_Hans/LC_MESSAGES/posix_errors.po diff --git a/priv/gettext/zh_Hans/LC_MESSAGES/posix_errors.po b/priv/gettext/zh_Hans/LC_MESSAGES/posix_errors.po new file mode 100644 index 000000000..6143178e3 --- /dev/null +++ b/priv/gettext/zh_Hans/LC_MESSAGES/posix_errors.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-23 12:40+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_Hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 3.7.2\n" + +## This file is a PO Template file. +## +## `msgid`s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run `mix gettext.extract` to bring this file up to +## date. Leave `msgstr`s empty as changing them here as no +## effect: edit them in PO (`.po`) files instead. +msgid "eperm" +msgstr "" + +msgid "eacces" +msgstr "" + +msgid "eagain" +msgstr "" + +msgid "ebadf" +msgstr "" + +msgid "ebadmsg" +msgstr "" + +msgid "ebusy" +msgstr "" + +msgid "edeadlk" +msgstr "" + +msgid "edeadlock" +msgstr "" + +msgid "edquot" +msgstr "" + +msgid "eexist" +msgstr "" + +msgid "efault" +msgstr "" + +msgid "efbig" +msgstr "" + +msgid "eftype" +msgstr "" + +msgid "eintr" +msgstr "" + +msgid "einval" +msgstr "" + +msgid "eio" +msgstr "" + +msgid "eisdir" +msgstr "" + +msgid "eloop" +msgstr "" + +msgid "emfile" +msgstr "" + +msgid "emlink" +msgstr "" + +msgid "emultihop" +msgstr "" + +msgid "enametoolong" +msgstr "" + +msgid "enfile" +msgstr "" + +msgid "enobufs" +msgstr "" + +msgid "enodev" +msgstr "" + +msgid "enolck" +msgstr "" + +msgid "enolink" +msgstr "" + +msgid "enoent" +msgstr "" + +msgid "enomem" +msgstr "" + +msgid "enospc" +msgstr "" + +msgid "enosr" +msgstr "" + +msgid "enostr" +msgstr "" + +msgid "enosys" +msgstr "" + +msgid "enotblk" +msgstr "" + +msgid "enotdir" +msgstr "" + +msgid "enotsup" +msgstr "" + +msgid "enxio" +msgstr "" + +msgid "eopnotsupp" +msgstr "" + +msgid "eoverflow" +msgstr "" + +msgid "epipe" +msgstr "" + +msgid "erange" +msgstr "" + +msgid "erofs" +msgstr "" + +msgid "espipe" +msgstr "" + +msgid "esrch" +msgstr "" + +msgid "estale" +msgstr "" + +msgid "etxtbsy" +msgstr "" + +msgid "exdev" +msgstr "" From eba3cce77b45e89028f7e6bfa708b469b7416914 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 7 Jul 2023 18:48:42 +0000 Subject: [PATCH 173/178] Update translation files Updated by "Squash Git commits" hook in Weblate. Translation: Pleroma fe/Akkoma Backend (Config Descriptions) Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-config-descriptions/ --- CHANGELOG.md | 1 - lib/pleroma/user.ex | 1 - ...tance_actors_to_actor_type_application.exs | 21 ------------------- test/pleroma/web/activity_pub/relay_test.exs | 6 ------ 4 files changed, 29 deletions(-) delete mode 100644 priv/repo/migrations/20230202154409_instance_actors_to_actor_type_application.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index c2f3757fe..7b7f36a85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -103,7 +103,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Rich media will now hard-exit after 5 seconds, to prevent timeline hangs - HTTP Content Security Policy is now far more strict to prevent any potential XSS/CSS leakages - Follow requests are now paginated, matches mastodon API spec, so use the Link header to paginate. -- `internal.fetch` and `relay` actors are now represented with the actor type `Application` ### Fixed - /api/v1/accounts/lookup will now respect restrict\_unauthenticated diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 119e80a4f..66090b596 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -2010,7 +2010,6 @@ defp create_service_actor(uri, nickname) do %User{ invisible: true, local: true, - actor_type: "Application", ap_id: uri, nickname: nickname, follower_address: uri <> "/followers" diff --git a/priv/repo/migrations/20230202154409_instance_actors_to_actor_type_application.exs b/priv/repo/migrations/20230202154409_instance_actors_to_actor_type_application.exs deleted file mode 100644 index 5bf10704a..000000000 --- a/priv/repo/migrations/20230202154409_instance_actors_to_actor_type_application.exs +++ /dev/null @@ -1,21 +0,0 @@ -defmodule Pleroma.Repo.Migrations.InstanceActorsToActorTypeApplication do - use Ecto.Migration - - def up do - execute(""" - update users - set actor_type = 'Application' - where local - and (ap_id like '%/relay' or ap_id like '%/internal/fetch') - """) - end - - def down do - execute(""" - update users - set actor_type = 'Person' - where local - and (ap_id like '%/relay' or ap_id like '%/internal/fetch') - """) - end -end diff --git a/test/pleroma/web/activity_pub/relay_test.exs b/test/pleroma/web/activity_pub/relay_test.exs index 0bbfc316b..d6de7d61e 100644 --- a/test/pleroma/web/activity_pub/relay_test.exs +++ b/test/pleroma/web/activity_pub/relay_test.exs @@ -19,12 +19,6 @@ test "gets an actor for the relay" do assert user.ap_id == "#{Pleroma.Web.Endpoint.url()}/relay" end - test "relay actor is an application" do - # See - user = Relay.get_actor() - assert user.actor_type == "Application" - end - test "relay actor is invisible" do user = Relay.get_actor() assert User.invisible?(user) From b63fca2dd7dba04882413fe3354a4988deeba9bf Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 27 Jul 2023 14:19:28 +0100 Subject: [PATCH 174/178] only build ARM AMD64 on develop --- .woodpecker/build-amd64.yml | 29 ++------------------------ .woodpecker/build-arm64.yml | 35 ++++---------------------------- docs/docs/installation/otp_en.md | 6 +++--- 3 files changed, 9 insertions(+), 61 deletions(-) diff --git a/.woodpecker/build-amd64.yml b/.woodpecker/build-amd64.yml index 3c445988b..b73d1b5d4 100644 --- a/.woodpecker/build-amd64.yml +++ b/.woodpecker/build-amd64.yml @@ -17,8 +17,6 @@ variables: branch: - develop - stable - - refs/tags/v* - - refs/tags/stable-* - &on-stable when: event: @@ -26,7 +24,6 @@ variables: - tag branch: - stable - - refs/tags/stable-* - &on-point-release when: event: @@ -104,7 +101,7 @@ pipeline: # Canonical amd64-musl musl: image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 - <<: *on-release + <<: *on-point-release environment: MIX_ENV: prod commands: @@ -119,31 +116,9 @@ pipeline: release-musl: image: akkoma/releaser - <<: *on-release + <<: *on-point-release secrets: *scw-secrets commands: - export SOURCE=akkoma-amd64-musl.zip - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-amd64-musl.zip - /bin/sh /entrypoint.sh - - docs: - <<: *on-point-release - secrets: - - SCW_ACCESS_KEY - - SCW_SECRET_KEY - - SCW_DEFAULT_ORGANIZATION_ID - environment: - CI: "true" - image: python:3.10-slim - commands: - - apt-get update && apt-get install -y rclone wget git zip - - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 - - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli - - chmod +x scaleway-cli - - ./scaleway-cli object config install type=rclone - - cd docs - - pip install -r requirements.txt - - mkdocs build - - zip -r docs.zip site/* - - cd site - - rclone copy . scaleway:akkoma-docs/$CI_COMMIT_BRANCH/ diff --git a/.woodpecker/build-arm64.yml b/.woodpecker/build-arm64.yml index f45a91db0..ec1300cec 100644 --- a/.woodpecker/build-arm64.yml +++ b/.woodpecker/build-arm64.yml @@ -15,10 +15,7 @@ variables: - push - tag branch: - - develop - stable - - refs/tags/v* - - refs/tags/stable-* - &on-stable when: event: @@ -26,13 +23,11 @@ variables: - tag branch: - stable - - refs/tags/stable-* - &on-point-release when: event: - push branch: - - develop - stable - &on-pr-open when: @@ -75,7 +70,7 @@ pipeline: debian-bullseye: image: hexpm/elixir:1.14.3-erlang-25.2.2-debian-bullseye-20230109 - <<: *on-release + <<: *on-point-release environment: MIX_ENV: prod DEBIAN_FRONTEND: noninteractive @@ -92,7 +87,7 @@ pipeline: release-debian: image: akkoma/releaser:arm64 - <<: *on-release + <<: *on-point-release secrets: *scw-secrets commands: - export SOURCE=akkoma-arm64.zip @@ -104,7 +99,7 @@ pipeline: # Canonical arm64-musl musl: image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 - <<: *on-release + <<: *on-point-release environment: MIX_ENV: prod commands: @@ -119,31 +114,9 @@ pipeline: release-musl: image: akkoma/releaser:arm64 - <<: *on-release + <<: *on-point-release secrets: *scw-secrets commands: - export SOURCE=akkoma-arm64-musl.zip - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64-musl.zip - /bin/sh /entrypoint.sh - - docs: - <<: *on-point-release - secrets: - - SCW_ACCESS_KEY - - SCW_SECRET_KEY - - SCW_DEFAULT_ORGANIZATION_ID - environment: - CI: "true" - image: python:3.10-slim - commands: - - apt-get update && apt-get install -y rclone wget git zip - - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_arm64 - - mv scaleway-cli_2.5.1_linux_arm64 scaleway-cli - - chmod +x scaleway-cli - - ./scaleway-cli object config install type=rclone - - cd docs - - pip install -r requirements.txt - - mkdocs build - - zip -r docs.zip site/* - - cd site - - rclone copy . scaleway:akkoma-docs/$CI_COMMIT_BRANCH/ diff --git a/docs/docs/installation/otp_en.md b/docs/docs/installation/otp_en.md index 2a9735f3c..4a87e17d5 100644 --- a/docs/docs/installation/otp_en.md +++ b/docs/docs/installation/otp_en.md @@ -22,11 +22,11 @@ Use the following mapping to figure out your flavour: | distribution | architecture | flavour | available branches | | --------------- | ------------------ | ------------------- | ------------------- | | debian bullseye | amd64 | amd64 | develop, stable | -| debian bullseye | arm64 | arm64 | develop, stable | +| debian bullseye | arm64 | arm64 | stable | | ubuntu focal | amd64 | amd64 | develop, stable | -| ubuntu focal | arm64 | arm64 | develop, stable | +| ubuntu focal | arm64 | arm64 | stable | | ubuntu jammy | amd64 | amd64-ubuntu-jammy | develop, stable | -| ubuntu jammy | arm64 | arm64-ubuntu-jammy | develop, stable | +| ubuntu jammy | arm64 | arm64-ubuntu-jammy | stable | | alpine | amd64 | amd64-musl | stable | | alpine | arm64 | arm64-musl | stable | From 800c4bc4426d9a6c261cc3c40a0700e4ad3b2484 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 27 Jul 2023 14:21:12 +0100 Subject: [PATCH 175/178] correct build conditions --- .woodpecker/build-amd64.yml | 11 ++--------- .woodpecker/build-arm64.yml | 14 ++++---------- docs/docs/installation/otp_en.md | 2 +- 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/.woodpecker/build-amd64.yml b/.woodpecker/build-amd64.yml index b73d1b5d4..ff29daa61 100644 --- a/.woodpecker/build-amd64.yml +++ b/.woodpecker/build-amd64.yml @@ -24,13 +24,6 @@ variables: - tag branch: - stable - - &on-point-release - when: - event: - - push - branch: - - develop - - stable - &on-pr-open when: event: @@ -101,7 +94,7 @@ pipeline: # Canonical amd64-musl musl: image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 - <<: *on-point-release + <<: *on-stable environment: MIX_ENV: prod commands: @@ -116,7 +109,7 @@ pipeline: release-musl: image: akkoma/releaser - <<: *on-point-release + <<: *on-stable secrets: *scw-secrets commands: - export SOURCE=akkoma-amd64-musl.zip diff --git a/.woodpecker/build-arm64.yml b/.woodpecker/build-arm64.yml index ec1300cec..0fae85945 100644 --- a/.woodpecker/build-arm64.yml +++ b/.woodpecker/build-arm64.yml @@ -23,12 +23,6 @@ variables: - tag branch: - stable - - &on-point-release - when: - event: - - push - branch: - - stable - &on-pr-open when: event: @@ -70,7 +64,7 @@ pipeline: debian-bullseye: image: hexpm/elixir:1.14.3-erlang-25.2.2-debian-bullseye-20230109 - <<: *on-point-release + <<: *on-stable environment: MIX_ENV: prod DEBIAN_FRONTEND: noninteractive @@ -87,7 +81,7 @@ pipeline: release-debian: image: akkoma/releaser:arm64 - <<: *on-point-release + <<: *on-stable secrets: *scw-secrets commands: - export SOURCE=akkoma-arm64.zip @@ -99,7 +93,7 @@ pipeline: # Canonical arm64-musl musl: image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 - <<: *on-point-release + <<: *on-stable environment: MIX_ENV: prod commands: @@ -114,7 +108,7 @@ pipeline: release-musl: image: akkoma/releaser:arm64 - <<: *on-point-release + <<: *on-stable secrets: *scw-secrets commands: - export SOURCE=akkoma-arm64-musl.zip diff --git a/docs/docs/installation/otp_en.md b/docs/docs/installation/otp_en.md index 4a87e17d5..3f3129193 100644 --- a/docs/docs/installation/otp_en.md +++ b/docs/docs/installation/otp_en.md @@ -24,7 +24,7 @@ Use the following mapping to figure out your flavour: | debian bullseye | amd64 | amd64 | develop, stable | | debian bullseye | arm64 | arm64 | stable | | ubuntu focal | amd64 | amd64 | develop, stable | -| ubuntu focal | arm64 | arm64 | stable | +| ubuntu focal | arm64 | arm64 | develop, stable | | ubuntu jammy | amd64 | amd64-ubuntu-jammy | develop, stable | | ubuntu jammy | arm64 | arm64-ubuntu-jammy | stable | | alpine | amd64 | amd64-musl | stable | From 7a6ccf68f0f4f9939224b1b3023f90f95583919d Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 27 Jul 2023 14:21:44 +0100 Subject: [PATCH 176/178] correct ARM build conditions --- .woodpecker/build-arm64.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.woodpecker/build-arm64.yml b/.woodpecker/build-arm64.yml index 0fae85945..3ab6161e5 100644 --- a/.woodpecker/build-arm64.yml +++ b/.woodpecker/build-arm64.yml @@ -16,6 +16,7 @@ variables: - tag branch: - stable + - develop - &on-stable when: event: From 08768776e218ee5ae49edaa227c3de73210d7d03 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 27 Jul 2023 14:24:29 +0100 Subject: [PATCH 177/178] don't release arm64 into the amd64 filename --- .woodpecker/build-arm64.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.woodpecker/build-arm64.yml b/.woodpecker/build-arm64.yml index 3ab6161e5..deb61087c 100644 --- a/.woodpecker/build-arm64.yml +++ b/.woodpecker/build-arm64.yml @@ -58,8 +58,6 @@ pipeline: secrets: *scw-secrets commands: - export SOURCE=akkoma-ubuntu-jammy.zip - - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-ubuntu-jammy.zip - - /bin/sh /entrypoint.sh - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64-ubuntu-jammy.zip - /bin/sh /entrypoint.sh From 801fe9fe32f3c7bc6ffdabfb8a18827f18309a0c Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 27 Jul 2023 14:41:18 +0100 Subject: [PATCH 178/178] Changelog --- CHANGELOG.md | 8 ++++++++ docs/docs/installation/otp_en.md | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b7f36a85..6f2c2f425 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Added a new configuration option to the MediaProxy feature that allows the blocking of specific domains from using the media proxy or being explicitly allowed by the Content-Security-Policy. - Please make sure instances you wanted to block media from are not in the MediaProxy `whitelist`, and instead use `blocklist`. - `OnlyMedia` Upload Filter to simplify restricting uploads to audio, image, and video types +- ARM64 OTP builds + - Ubuntu22 builds are available for develop and stable + - other distributions are stable only + +## Changed + +- Alpine OTP builds are now from alpine 3.18, which is SSLv3 compatible. + If you use alpine OTP builds you will have to update your local system. ## Fixed diff --git a/docs/docs/installation/otp_en.md b/docs/docs/installation/otp_en.md index 3f3129193..9de4e4824 100644 --- a/docs/docs/installation/otp_en.md +++ b/docs/docs/installation/otp_en.md @@ -24,9 +24,9 @@ Use the following mapping to figure out your flavour: | debian bullseye | amd64 | amd64 | develop, stable | | debian bullseye | arm64 | arm64 | stable | | ubuntu focal | amd64 | amd64 | develop, stable | -| ubuntu focal | arm64 | arm64 | develop, stable | +| ubuntu focal | arm64 | arm64 | stable | | ubuntu jammy | amd64 | amd64-ubuntu-jammy | develop, stable | -| ubuntu jammy | arm64 | arm64-ubuntu-jammy | stable | +| ubuntu jammy | arm64 | arm64-ubuntu-jammy | develop, stable | | alpine | amd64 | amd64-musl | stable | | alpine | arm64 | arm64-musl | stable |