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
\nYour 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}
\nEmail confirmation is required to activate the account.
\nPlease 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}
\nSomeone has requested password change for your account at %{instance_name}.
\nIf it was you, visit the following link to proceed: reset password.
\nIf 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},
\nYour account at %{instance_name} has been registered successfully.
\nNo 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.
\nClick 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.
\nClick 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$v7*%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*