From: Mark Felder Date: Thu, 10 Sep 2020 21:02:11 +0000 (-0500) Subject: Merge branch 'develop' into feature/gen-magic X-Git-Url: https://git.squeep.com/?a=commitdiff_plain;h=55562ca9362d66553ea3638c91174bbeb6c637f1;p=akkoma Merge branch 'develop' into feature/gen-magic --- 55562ca9362d66553ea3638c91174bbeb6c637f1 diff --cc .gitlab-ci.yml index 685106969,dc953a929..29eb8d6b9 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@@ -22,10 -22,9 +22,11 @@@ stages - docker before_script: + - apt-get update && apt-get install -y cmake - mix local.hex --force - mix local.rebar --force + - apt-get -qq update + - apt-get install -y libmagic-dev build: stage: build diff --cc CHANGELOG.md index 8925f31f6,75357f05e..a5c75bd4f --- a/CHANGELOG.md +++ b/CHANGELOG.md @@@ -3,15 -3,92 +3,93 @@@ All notable changes to this project wil The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - ## [unreleased] + ## Unreleased ### Changed + ++- **Breaking** Requires `libmagic` (or `file`) to guess file types. + - Renamed `:await_up_timeout` in `:connections_pool` namespace to `:connect_timeout`, old name is deprecated. + - Renamed `:timeout` in `pools` namespace to `:recv_timeout`, old name is deprecated. + + ### Removed + + - **Breaking:** `Pleroma.Workers.Cron.StatsWorker` setting from Oban `:crontab` (moved to a simpler implementation). + - **Breaking:** `Pleroma.Workers.Cron.ClearOauthTokenWorker` setting from Oban `:crontab` (moved to scheduled jobs). + - **Breaking:** `Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker` setting from Oban `:crontab` (moved to scheduled jobs). + + ### Changed + - Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option). + + ## [2.1.1] - 2020-09-08 + + ### Security + - Fix possible DoS in Mastodon API user search due to an error in match clauses, leading to an infinite recursion and subsequent OOM with certain inputs. + - Fix metadata leak for accounts and statuses on private instances. + - Fix possible DoS in Admin API search using an atom leak vulnerability. Authentication with admin rights was required to exploit. + + ### Changed + + - **Breaking:** The metadata providers RelMe and Feed are no longer configurable. RelMe should always be activated and Feed only provides a header tag for the actual RSS/Atom feed when the instance is public. + - Improved error message when cmake is not available at build stage. + + ### Added + - Rich media failure tracking (along with `:failure_backoff` option). + + ### Fixed + - Default HTTP adapter not respecting pool setting, leading to possible OOM. + - Fixed uploading webp images when the Exiftool Upload Filter is enabled by skipping them + - Mastodon API: Search parameter `following` now correctly returns the followings rather than the followers + - Mastodon API: Timelines hanging for (`number of posts with links * rich media timeout`) in the worst case. + Reduced to just rich media timeout. + - Mastodon API: Cards being wrong for preview statuses due to cache key collision. + - Password resets no longer processed for deactivated accounts. + - Favicon scraper raising exceptions on URLs longer than 255 characters. + + ## [2.1.0] - 2020-08-28 + + ### Changed + + - **Breaking:** The default descriptions on uploads are now empty. The old behavior (filename as default) can be configured, see the cheat sheet. + - **Breaking:** Added the ObjectAgePolicy to the default set of MRFs. This will delist and strip the follower collection of any message received that is older than 7 days. This will stop users from seeing very old messages in the timelines. The messages can still be viewed on the user's page and in conversations. They also still trigger notifications. + - **Breaking:** Elixir >=1.9 is now required (was >= 1.8) + - **Breaking:** Configuration: `:auto_linker, :opts` moved to `:pleroma, Pleroma.Formatter`. Old config namespace is deprecated. + - **Breaking:** Configuration: `:instance, welcome_user_nickname` moved to `:welcome, :direct_message, :sender_nickname`, `:instance, :welcome_message` moved to `:welcome, :direct_message, :message`. Old config namespace is deprecated. + - **Breaking:** LDAP: Fallback to local database authentication has been removed for security reasons and lack of a mechanism to ensure the passwords are synchronized when LDAP passwords are updated. + - **Breaking** Changed defaults for `:restrict_unauthenticated` so that when `:instance, :public` is set to `false` then all `:restrict_unauthenticated` items be effectively set to `true`. If you'd like to allow unauthenticated access to specific API endpoints on a private instance, please explicitly set `:restrict_unauthenticated` to non-default value in `config/prod.secret.exs`. + - In Conversations, return only direct messages as `last_status` + - Using the `only_media` filter on timelines will now exclude reblog media - MFR policy to set global expiration for all local Create activities - OGP rich media parser merged with TwitterCard - - **Breaking** Requires `libmagic` (or `file`) to guess file types. + - Configuration: `:instance, rewrite_policy` moved to `:mrf, policies`, `:instance, :mrf_transparency` moved to `:mrf, :transparency`, `:instance, :mrf_transparency_exclusions` moved to `:mrf, :transparency_exclusions`. Old config namespace is deprecated. + - Configuration: `:media_proxy, whitelist` format changed to host with scheme (e.g. `http://example.com` instead of `example.com`). Domain format is deprecated. +
API Changes + + - **Breaking:** Pleroma API: The routes to update avatar, banner and background have been removed. + - **Breaking:** Image description length is limited now. - **Breaking:** Emoji API: changed methods and renamed routes. + - **Breaking:** Notification Settings API for suppressing notifications has been simplified down to `block_from_strangers`. + - **Breaking:** Notification Settings API option for hiding push notification contents has been renamed to `hide_notification_contents`. + - MastodonAPI: Allow removal of avatar, banner and background. + - Streaming: Repeats of a user's posts will no longer be pushed to the user's stream. + - Mastodon API: Added `pleroma.metadata.fields_limits` to /api/v1/instance + - Mastodon API: On deletion, returns the original post text. + - Mastodon API: Add `pleroma.unread_count` to the Marker entity. + - Mastodon API: Added `pleroma.metadata.post_formats` to /api/v1/instance + - Mastodon API (legacy): Allow query parameters for `/api/v1/domain_blocks`, e.g. `/api/v1/domain_blocks?domain=badposters.zone` + - Mastodon API: Make notifications about statuses from muted users and threads read automatically + - Pleroma API: `/api/pleroma/captcha` responses now include `seconds_valid` with an integer value. + +
+ +
+ Admin API Changes + + - **Breaking** Changed relay `/api/pleroma/admin/relay` endpoints response format. + - Status visibility stats: now can return stats per instance. + - Mix task to refresh counter cache (`mix pleroma.refresh_counter_cache`) +
### Removed diff --cc config/config.exs index f58b99faa,88c47fd03..46a649b73 --- a/config/config.exs +++ b/config/config.exs @@@ -678,12 -770,12 +770,14 @@@ config :pleroma, :hackney_pools timeout: 300_000 ] +config :pleroma, :majic_pool, size: 2 + + private_instance? = :if_instance_is_private + config :pleroma, :restrict_unauthenticated, - timelines: %{local: false, federated: false}, - profiles: %{local: false, remote: false}, - activities: %{local: false, remote: false} + timelines: %{local: private_instance?, federated: private_instance?}, + profiles: %{local: private_instance?, remote: private_instance?}, + activities: %{local: private_instance?, remote: private_instance?} config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false diff --cc config/description.exs index 2afc5e366,82c7bc6a7..d05adf88b --- a/config/description.exs +++ b/config/description.exs @@@ -3321,23 -3565,95 +3565,109 @@@ config :pleroma, :config_description, key: :strict, type: :boolean, description: - "Enables strict input validation (useful in development, not recommended in production)", - suggestions: [false] + "Enables strict input validation (useful in development, not recommended in production)" + } + ] + }, + %{ + group: :pleroma, + key: :instances_favicons, + type: :group, + description: "Control favicons for instances", + children: [ + %{ + key: :enabled, + type: :boolean, + description: "Allow/disallow displaying and getting instances favicons" + } + ] + }, + %{ + group: :ex_aws, + key: :s3, + type: :group, + descriptions: "S3 service related settings", + children: [ + %{ + key: :access_key_id, + type: :string, + description: "S3 access key ID", + suggestions: ["AKIAQ8UKHTGIYN7DMWWJ"] + }, + %{ + key: :secret_access_key, + type: :string, + description: "Secret access key", + suggestions: ["JFGt+fgH1UQ7vLUQjpW+WvjTdV/UNzVxcwn7DkaeFKtBS5LvoXvIiME4NQBsT6ZZ"] + }, + %{ + key: :host, + type: :string, + description: "S3 host", + suggestions: ["s3.eu-central-1.amazonaws.com"] + } + ] + }, + %{ + group: :pleroma, + key: :frontends, + type: :group, + description: "Installed frontends management", + children: [ + %{ + key: :primary, + type: :map, + description: "Primary frontend, the one that is served for all pages by default", + children: installed_frontend_options + }, + %{ + key: :admin, + type: :map, + description: "Admin frontend", + children: installed_frontend_options + }, + %{ + key: :available, + type: :map, + description: + "A map containing available frontends and parameters for their installation.", + children: [ + frontend_options + ] + } + ] + }, + %{ + group: :pleroma, + key: Pleroma.Web.Preload, + type: :group, + description: "Preload-related settings", + children: [ + %{ + key: :providers, + type: {:list, :module}, + description: "List of preload providers to enable", + suggestions: [ + Pleroma.Web.Preload.Providers.Instance, + Pleroma.Web.Preload.Providers.User, + Pleroma.Web.Preload.Providers.Timelines, + Pleroma.Web.Preload.Providers.StatusNet + ] } ] + }, + %{ + group: :pleroma, + key: :majic_pool, + type: :group, + description: "Majic/libmagic configuration", + children: [ + %{ + key: :size, + type: :integer, + description: "Number of majic workers to start.", + suggestions: [2] + } + ] } ] diff --cc docs/installation/alpine_linux_en.md index d3b3e8279,a5683f18c..f393e4978 --- a/docs/installation/alpine_linux_en.md +++ b/docs/installation/alpine_linux_en.md @@@ -13,8 -13,8 +13,9 @@@ It assumes that you have administrativ * `erlang-parsetools` * `erlang-xmerl` * `git` +* `file-dev` * Development Tools + * `cmake` #### Optional packages used in this guide @@@ -40,7 -40,7 +41,7 @@@ sudo apk upgrad * Install some tools, which are needed later: ```shell - sudo apk add git build-base file-dev -sudo apk add git build-base cmake ++sudo apk add git build-base cmake file-dev ``` ### Install Elixir and Erlang diff --cc docs/installation/arch_linux_en.md index 36ef3e345,7fb69dd60..99eb011ad --- a/docs/installation/arch_linux_en.md +++ b/docs/installation/arch_linux_en.md @@@ -9,7 -9,7 +9,8 @@@ This guide will assume that you have ad * `elixir` * `git` * `base-devel` + * `cmake` +* `file` #### Optional packages used in this guide @@@ -27,7 -27,7 +28,7 @@@ sudo pacman -Sy * Install some of the above mentioned programs: ```shell - sudo pacman -S git base-devel elixir file -sudo pacman -S git base-devel elixir cmake ++sudo pacman -S git base-devel elixir cmake file ``` ### Install PostgreSQL diff --cc docs/installation/debian_based_en.md index 9357df5d2,60c2f47e5..58d15ce14 --- a/docs/installation/debian_based_en.md +++ b/docs/installation/debian_based_en.md @@@ -10,9 -10,9 +10,10 @@@ This guide will assume you are on Debia * `elixir` (1.8+, Follow the guide to install from the Erlang Solutions repo or use [asdf](https://github.com/asdf-vm/asdf) as the pleroma user) * `erlang-dev` * `erlang-nox` +* `libmagic-dev` * `git` * `build-essential` + * `cmake` #### Optional packages used in this guide @@@ -31,7 -31,7 +32,7 @@@ sudo apt full-upgrad * Install some of the above mentioned programs: ```shell - sudo apt install git build-essential postgresql postgresql-contrib libmagic-devel -sudo apt install git build-essential postgresql postgresql-contrib cmake ++sudo apt install git build-essential postgresql postgresql-contrib cmake libmagic-devel ``` ### Install Elixir and Erlang diff --cc docs/installation/debian_based_jp.md index 21cd4d2ad,c2dd840d3..d98162796 --- a/docs/installation/debian_based_jp.md +++ b/docs/installation/debian_based_jp.md @@@ -16,7 -16,7 +16,8 @@@ - `erlang-nox` - `git` - `build-essential` + - `cmake` +- `libmagic-dev` #### このガイドで利用している追加パッケージ @@@ -33,7 -33,7 +34,7 @@@ sudo apt full-upgrad * 上記に挙げたパッケージをインストールしておきます。 ``` - sudo apt install git build-essential postgresql postgresql-contrib libmagic-dev -sudo apt install git build-essential postgresql postgresql-contrib cmake ++sudo apt install git build-essential postgresql postgresql-contrib cmake libmagic-dev ``` diff --cc docs/installation/gentoo_en.md index d143e068f,5a676380c..0f7ed9d47 --- a/docs/installation/gentoo_en.md +++ b/docs/installation/gentoo_en.md @@@ -28,7 -28,7 +28,8 @@@ Gentoo quite pointedly does not come wi * `dev-db/postgresql` * `dev-lang/elixir` * `dev-vcs/git` + * `dev-util/cmake` +* `sys-apps/file` #### Optional ebuilds used in this guide @@@ -47,7 -47,7 +48,7 @@@ * Emerge all required the required and suggested software in one go: ```shell - # emerge --ask dev-db/postgresql dev-lang/elixir dev-vcs/git www-servers/nginx app-crypt/certbot app-crypt/certbot-nginx sys-apps/file - # emerge --ask dev-db/postgresql dev-lang/elixir dev-vcs/git www-servers/nginx app-crypt/certbot app-crypt/certbot-nginx dev-util/cmake ++ # emerge --ask dev-db/postgresql dev-lang/elixir dev-vcs/git www-servers/nginx app-crypt/certbot app-crypt/certbot-nginx dev-util/cmake sys-apps/file ``` If you would not like to install the optional packages, remove them from this line. diff --cc docs/installation/otp_en.md index e086cc1c4,b7e3bb2ac..32f04a9c4 --- a/docs/installation/otp_en.md +++ b/docs/installation/otp_en.md @@@ -27,17 -27,18 +27,19 @@@ Other than things bundled in the OTP re * PostgreSQL (also utilizes extensions in postgresql-contrib) * nginx (could be swapped with another reverse proxy but this guide covers only it) * certbot (for Let's Encrypt certificates, could be swapped with another ACME client, but this guide covers only it) +* libmagic/file - ```sh tab="Alpine" - echo "http://nl.alpinelinux.org/alpine/latest-stable/community" >> /etc/apk/repositories - apk update - apk add curl unzip ncurses postgresql postgresql-contrib nginx certbot file-dev - ``` - - ```sh tab="Debian/Ubuntu" - apt install curl unzip libncurses5 postgresql postgresql-contrib nginx certbot libmagic-dev - ``` + === "Alpine" + ``` + echo "http://nl.alpinelinux.org/alpine/latest-stable/community" >> /etc/apk/repositories + apk update - apk add curl unzip ncurses postgresql postgresql-contrib nginx certbot ++ apk add curl unzip ncurses postgresql postgresql-contrib nginx certbot file-dev + ``` + + === "Debian/Ubuntu" + ``` - apt install curl unzip libncurses5 postgresql postgresql-contrib nginx certbot ++ apt install curl unzip libncurses5 postgresql postgresql-contrib nginx certbot libmagic-dev + ``` ## Setup ### Configuring PostgreSQL diff --cc lib/pleroma/upload.ex index a0ba2f4c0,015c87593..db2cc1dae --- a/lib/pleroma/upload.ex +++ b/lib/pleroma/upload.ex @@@ -56,8 -56,16 +56,17 @@@ defmodule Pleroma.Upload d } defstruct [:id, :name, :tempfile, :content_type, :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 opts = get_opts(opts) diff --cc mix.exs index 8fcbaa34e,18f748672..d2a40bcc8 --- a/mix.exs +++ b/mix.exs @@@ -195,12 -187,21 +187,22 @@@ defmodule Pleroma.Mixfile d {:captcha, git: "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, - {:mox, "~> 0.5", only: :test}, {:restarter, path: "./restarter"}, + {:majic, git: "https://github.com/hrefhref/majic", branch: "develop"}, {:open_api_spex, git: "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", - ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"} + ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"}, + + ## dev & test + {:ex_doc, "~> 0.22", only: :dev, runtime: false}, + {:ex_machina, "~> 2.4", only: :test}, + {:credo, "~> 1.4", only: [:dev, :test], runtime: false}, + {:mock, "~> 0.3.5", only: :test}, + # temporary downgrade for excoveralls, hackney until hackney max_connections bug will be fixed + {:excoveralls, "0.12.3", only: :test}, + {:hackney, "1.15.2", override: true}, + {:mox, "~> 0.5", only: :test}, + {:websocket_client, git: "https://github.com/jeremyong/websocket_client.git", only: :test} ] ++ oauth_deps() end diff --cc mix.lock index b69f7eb8e,a28c47017..96d10641f --- a/mix.lock +++ b/mix.lock @@@ -63,22 -63,22 +63,23 @@@ "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, - "majic": {:git, "https://github.com/hrefhref/majic", "91a10cfa0c902eb889584238a3ef5aa595c21ef8", [branch: "develop"]}, - "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, + "linkify": {:hex, :linkify, "0.2.0", "2518bbbea21d2caa9d372424e1ad845b640c6630e2d016f1bd1f518f9ebcca28", [:mix], [], "hexpm", "b8ca8a68b79e30b7938d6c996085f3db14939f29538a59ca5101988bb7f917f6"}, ++ "majic": {:git, "https://github.com/hrefhref/majic", "51ecea6458c4b2fbc98272ce5ab2951f2c0d46cc", [branch: "develop"]}, + "makeup": {:hex, :makeup, "1.0.3", "e339e2f766d12e7260e6672dd4047405963c5ec99661abdc432e6ec67d29ef95", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "2e9b4996d11832947731f7608fed7ad2f9443011b3b479ae288011265cdd3dad"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.14.1", "4f0e96847c63c17841d42c08107405a005a2680eb9c7ccadfd757bd31dabccfb", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f2438b1a80eaec9ede832b5c41cd4f373b38fd7aa33e3b22d9db79e640cbde11"}, "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, - "mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm", "6cbe761d6a0ca5a31a0931bf4c63204bceb64538e664a8ecf784a9a6f3b875f1"}, + "mime": {:hex, :mime, "1.4.0", "5066f14944b470286146047d2f73518cf5cca82f8e4815cf35d196b58cf07c47", [:mix], [], "hexpm", "75fa42c4228ea9a23f70f123c74ba7cece6a03b1fd474fe13f6a7a85c6ea4ff6"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, - "mock": {:hex, :mock, "0.3.4", "c5862eb3b8c64237f45f586cf00c9d892ba07bb48305a43319d428ce3c2897dd", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "e6d886252f1a41f4ba06ecf2b4c8d38760b34b1c08a11c28f7397b2e03995964"}, - "mogrify": {:hex, :mogrify, "0.6.1", "de1b527514f2d95a7bbe9642eb556061afb337e220cf97adbf3a4e6438ed70af", [:mix], [], "hexpm", "3bc928d817974fa10cc11e6c89b9a9361e37e96dbbf3d868c41094ec05745dcd"}, - "mox": {:hex, :mox, "0.5.1", "f86bb36026aac1e6f924a4b6d024b05e9adbed5c63e8daa069bd66fb3292165b", [:mix], [], "hexpm", "052346cf322311c49a0f22789f3698eea030eec09b8c47367f0686ef2634ae14"}, + "mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"}, + "mogrify": {:hex, :mogrify, "0.7.4", "9b2496dde44b1ce12676f85d7dc531900939e6367bc537c7243a1b089435b32d", [:mix], [], "hexpm", "50d79e337fba6bc95bfbef918058c90f50b17eed9537771e61d4619488f099c3"}, + "mox": {:hex, :mox, "0.5.2", "55a0a5ba9ccc671518d068c8dddd20eeb436909ea79d1799e2209df7eaa98b6c", [:mix], [], "hexpm", "df4310628cd628ee181df93f50ddfd07be3e5ecc30232d3b6aadf30bdfe6092b"}, "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, - "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, + "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, "nimble_pool": {:hex, :nimble_pool, "0.1.0", "ffa9d5be27eee2b00b0c634eb649aa27f97b39186fec3c493716c2a33e784ec6", [:mix], [], "hexpm", "343a1eaa620ddcf3430a83f39f2af499fe2370390d4f785cd475b4df5acaf3f9"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, - "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, + "oban": {:hex, :oban, "2.0.0", "e6ce70d94dd46815ec0882a1ffb7356df9a9d5b8a40a64ce5c2536617a447379", [:mix], [{:ecto_sql, ">= 3.4.3", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cf574813bd048b98a698aa587c21367d2e06842d4e1b1993dcd6a696e9e633bd"}, "open_api_spex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", "f296ac0924ba3cf79c7a588c4c252889df4c2edd", [ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"]}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"},