Merge branch 'develop' into feature/gen-magic
authorMark Felder <feld@FreeBSD.org>
Thu, 10 Sep 2020 21:02:11 +0000 (16:02 -0500)
committerMark Felder <feld@FreeBSD.org>
Thu, 10 Sep 2020 21:05:22 +0000 (16:05 -0500)
18 files changed:
1  2 
.gitlab-ci.yml
CHANGELOG.md
config/config.exs
config/description.exs
docs/installation/alpine_linux_en.md
docs/installation/arch_linux_en.md
docs/installation/debian_based_en.md
docs/installation/debian_based_jp.md
docs/installation/gentoo_en.md
docs/installation/otp_en.md
lib/pleroma/application.ex
lib/pleroma/upload.ex
lib/pleroma/web/activity_pub/activity_pub_controller.ex
lib/pleroma/web/pleroma_api/controllers/account_controller.ex
mix.exs
mix.lock
test/upload_test.exs
test/web/activity_pub/activity_pub_controller_test.exs

diff --cc .gitlab-ci.yml
index 685106969d360c90a9894d99fff25056faf7c4c9,dc953a9291802571bbb021c7b43e5c72b9187bb1..29eb8d6b94020153924cd6014311777de7d3810a
@@@ -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 8925f31f63106419bb4c8442195b0967898598a9,75357f05edc20cf20cc62c471e1bc6e85fb687ac..a5c75bd4fa8931694d0fa30e74b0109270cbac85
@@@ -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 <link> 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.
  <details>
    <summary>API Changes</summary>
+ - **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.
+ </details>
+ <details>
+   <summary>Admin API Changes</summary>
+ - **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`)
  </details>
  
  ### Removed
index f58b99faa4b31495c9cf3c8daf4156a78ca8b435,88c47fd032c382b9e92a021dcccdd4c5bbdba869..46a649b73a6e8a756df08eec8b608177f857ddee
@@@ -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
  
index 2afc5e3666909f0ce8f8e49b071033f5aad44d42,82c7bc6a7d0c98a45b43d8323d120ed490c1320e..d05adf88be5c218b3c745dfce3ca1ca78d156da3
@@@ -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]
 +      }
 +    ]
    }
  ]
index d3b3e8279cadb6aa054b1a6124aa44ebe10a05f9,a5683f18c14fe04a60ca09c6aa5903b1331ea1ee..f393e497883e5569484b1b9ee60f5f1c91d6413a
@@@ -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
index 36ef3e345c347ac0bd087a60c4e9193e2f78198b,7fb69dd60bc03b39901e9dd226541cfa53fec711..99eb011ad7f33b387dccf88f1e5a14036e79cf90
@@@ -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
index 9357df5d237851f38c26f695bb05fcfbc77461ad,60c2f47e5207b3337ba8de8ac16f5cc89a179aef..58d15ce1472ffd1201b1b8c4cbce5fcc7969545d
@@@ -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
index 21cd4d2adc1c747bd508d2ff3dfd93b0e96b3309,c2dd840d30f42403479289561d03408e4a380796..d98162796dff718c5543dcbebb21e546c53e09c7
@@@ -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
  ```
  
  
index d143e068fe92cbc7ced392faf668b2c5663ba999,5a676380cc98872d74d7ab42266f780ef115fa81..0f7ed9d474d43d0477c31e63c2ed98ca39f518b2
@@@ -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. 
index e086cc1c46689183132e3949f520c3ca1cef1e49,b7e3bb2ac4e2956eba5e0175ba3016fc2dab5feb..32f04a9c452970433e86fd61c3f59461844a4087
@@@ -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
Simple merge
index a0ba2f4c0b1c7f9cb3ba34c693124811346b3cb0,015c875938967e3fed944f7eb21b46a85274cb96..db2cc1dae278009701222528e3bd159a7b7a494e
@@@ -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 8fcbaa34eb3cf23f6e1e73a8cec70eb2ef10ce84,18f748672af60eff8bda89e822fa43307a0277bf..d2a40bcc8a94eff625690d7287be86be6f32c7f7
+++ 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 b69f7eb8e72674404a3fb500d0af0bcb459f1c21,a28c47017a950e56f733b9fd343e8dc6a31dbf2e..96d10641f9a5f77b3e51d67c03254edb5420f2ea
+++ b/mix.lock
    "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"},
Simple merge