giant massive dep upgrade and dialyxir-found error emporium (#371)

Co-authored-by: FloatingGhost <hannah@coffee-and-dreams.uk>
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/371
This commit is contained in:
floatingghost 2022-12-14 12:38:48 +00:00
parent 7f4d218cff
commit 07a48b9293
75 changed files with 688 additions and 555 deletions

View file

@ -8,11 +8,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Removed ### Removed
- Non-finch HTTP adapters - Non-finch HTTP adapters
### Upgrade notes - Legacy redirect from /api/pleroma/admin to /api/v1/pleroma/admin
- Ensure `config :tesla, :adapter` is either unset, or set to `{Tesla.Adapter.Finch, name: MyFinch}` in your .exs config
### Changed ### Changed
- Return HTTP error 413 when uploading an avatar or banner that's above the configured upload limit instead of a 500. - Return HTTP error 413 when uploading an avatar or banner that's above the configured upload limit instead of a 500.
### Upgrade notes
- Ensure `config :tesla, :adapter` is either unset, or set to `{Tesla.Adapter.Finch, name: MyFinch}` in your .exs config
## 2022.12 ## 2022.12
## Added ## Added

View file

@ -1,3 +1,4 @@
# credo:disable-for-this-file
# Pleroma: A lightweight social networking server # Pleroma: A lightweight social networking server
# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/> # Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

View file

@ -115,7 +115,6 @@ defmodule Mix.Tasks.Pleroma.Database do
nil nil
|> Pleroma.Workers.Cron.PruneDatabaseWorker.perform() |> Pleroma.Workers.Cron.PruneDatabaseWorker.perform()
|> IO.inspect()
end end
def run(["fix_likes_collections"]) do def run(["fix_likes_collections"]) do

View file

@ -1,3 +1,4 @@
# credo:disable-for-this-file
defmodule Mix.Tasks.Pleroma.Diagnostics do defmodule Mix.Tasks.Pleroma.Diagnostics do
alias Pleroma.Repo alias Pleroma.Repo
alias Pleroma.User alias Pleroma.User

View file

@ -247,9 +247,13 @@ defmodule Mix.Tasks.Pleroma.Instance do
config_dir = Path.dirname(config_path) config_dir = Path.dirname(config_path)
psql_dir = Path.dirname(psql_path) psql_dir = Path.dirname(psql_path)
[config_dir, psql_dir, static_dir, uploads_dir] to_create =
|> Enum.reject(&File.exists?/1) [config_dir, psql_dir, static_dir, uploads_dir]
|> Enum.map(&File.mkdir_p!/1) |> Enum.reject(&File.exists?/1)
for dir <- to_create do
File.mkdir_p!(dir)
end
shell_info("Writing config to #{config_path}.") shell_info("Writing config to #{config_path}.")
@ -319,6 +323,4 @@ defmodule Mix.Tasks.Pleroma.Instance do
enabled_filters enabled_filters
end end
defp upload_filters(_), do: []
end end

View file

@ -10,14 +10,11 @@ defmodule Mix.Tasks.Pleroma.Search do
def run(["import", "activities" | _rest]) do def run(["import", "activities" | _rest]) do
start_pleroma() start_pleroma()
IO.inspect(Pleroma.Config.get([Pleroma.Search.Elasticsearch.Cluster, :indexes, :activities]))
IO.inspect( Elasticsearch.Index.Bulk.upload(
Elasticsearch.Index.Bulk.upload( Pleroma.Search.Elasticsearch.Cluster,
Pleroma.Search.Elasticsearch.Cluster, "activities",
"activities", Pleroma.Config.get([Pleroma.Search.Elasticsearch.Cluster, :indexes, :activities])
Pleroma.Config.get([Pleroma.Search.Elasticsearch.Cluster, :indexes, :activities])
)
) )
end end
end end

View file

@ -378,9 +378,11 @@ defmodule Mix.Tasks.Pleroma.User do
def run(["show", nickname]) do def run(["show", nickname]) do
start_pleroma() start_pleroma()
nickname user =
|> User.get_cached_by_nickname() nickname
|> IO.inspect() |> User.get_cached_by_nickname()
shell_info("#{inspect(user)}")
end end
def run(["send_confirmation", nickname]) do def run(["send_confirmation", nickname]) do
@ -389,7 +391,6 @@ defmodule Mix.Tasks.Pleroma.User do
with %User{} = user <- User.get_cached_by_nickname(nickname) do with %User{} = user <- User.get_cached_by_nickname(nickname) do
user user
|> Pleroma.Emails.UserEmail.account_confirmation_email() |> Pleroma.Emails.UserEmail.account_confirmation_email()
|> IO.inspect()
|> Pleroma.Emails.Mailer.deliver!() |> Pleroma.Emails.Mailer.deliver!()
shell_info("#{nickname}'s email sent") shell_info("#{nickname}'s email sent")
@ -465,7 +466,7 @@ defmodule Mix.Tasks.Pleroma.User do
with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do
blocks = User.following_ap_ids(user) blocks = User.following_ap_ids(user)
IO.inspect(blocks, limit: :infinity) IO.puts("#{inspect(blocks)}")
end end
end end

View file

@ -38,7 +38,11 @@ defmodule Pleroma.Activity.HTML do
def invalidate_cache_for(activity_id) do def invalidate_cache_for(activity_id) do
keys = get_cache_keys_for(activity_id) keys = get_cache_keys_for(activity_id)
Enum.map(keys, &@cachex.del(:scrubber_cache, &1))
for key <- keys do
@cachex.del(:scrubber_cache, key)
end
@cachex.del(:scrubber_management_cache, activity_id) @cachex.del(:scrubber_management_cache, activity_id)
end end

View file

@ -24,8 +24,10 @@ defmodule Pleroma.Announcement do
end end
def change(struct, params \\ %{}) do def change(struct, params \\ %{}) do
params = validate_params(struct, params)
struct struct
|> cast(validate_params(struct, params), [:data, :starts_at, :ends_at, :rendered]) |> cast(params, [:data, :starts_at, :ends_at, :rendered])
|> validate_required([:data]) |> validate_required([:data])
end end

View file

@ -198,6 +198,8 @@ defmodule Pleroma.Application do
] ]
end end
@spec task_children(atom()) :: [map()]
defp task_children(:test) do defp task_children(:test) do
[ [
%{ %{
@ -223,6 +225,7 @@ defmodule Pleroma.Application do
] ]
end end
@spec elasticsearch_children :: [Pleroma.Search.Elasticsearch.Cluster]
def elasticsearch_children do def elasticsearch_children do
config = Config.get([Pleroma.Search, :module]) config = Config.get([Pleroma.Search, :module])

View file

@ -194,8 +194,6 @@ defmodule Pleroma.ApplicationRequirements do
end end
end end
defp check_system_commands!(result), do: result
defp check_repo_pool_size!(:ok) do defp check_repo_pool_size!(:ok) do
if Pleroma.Config.get([Pleroma.Repo, :pool_size], 10) != 10 and if Pleroma.Config.get([Pleroma.Repo, :pool_size], 10) != 10 and
not Pleroma.Config.get([:dangerzone, :override_repo_pool_size], false) do not Pleroma.Config.get([:dangerzone, :override_repo_pool_size], false) do

View file

@ -209,7 +209,9 @@ defmodule Pleroma.Emoji.Pack do
with :ok <- validate_shareable_packs_available(uri) do with :ok <- validate_shareable_packs_available(uri) do
uri uri
|> URI.merge("/api/pleroma/emoji/packs?page=#{opts[:page]}&page_size=#{opts[:page_size]}") |> URI.merge(
"/api/v1/pleroma/emoji/packs?page=#{opts[:page]}&page_size=#{opts[:page_size]}"
)
|> http_get() |> http_get()
end end
end end
@ -250,7 +252,7 @@ defmodule Pleroma.Emoji.Pack do
with :ok <- validate_shareable_packs_available(uri), with :ok <- validate_shareable_packs_available(uri),
{:ok, remote_pack} <- {:ok, remote_pack} <-
uri |> URI.merge("/api/pleroma/emoji/pack?name=#{name}") |> http_get(), uri |> URI.merge("/api/v1/pleroma/emoji/pack?name=#{name}") |> http_get(),
{:ok, %{sha: sha, url: url} = pack_info} <- fetch_pack_info(remote_pack, uri, name), {:ok, %{sha: sha, url: url} = pack_info} <- fetch_pack_info(remote_pack, uri, name),
{:ok, archive} <- download_archive(url, sha), {:ok, archive} <- download_archive(url, sha),
pack <- copy_as(remote_pack, as || name), pack <- copy_as(remote_pack, as || name),
@ -591,7 +593,7 @@ defmodule Pleroma.Emoji.Pack do
{:ok, {:ok,
%{ %{
sha: sha, sha: sha,
url: URI.merge(uri, "/api/pleroma/emoji/packs/archive?name=#{name}") |> to_string() url: URI.merge(uri, "/api/v1/pleroma/emoji/packs/archive?name=#{name}") |> to_string()
}} }}
%{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) -> %{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) ->

View file

@ -14,6 +14,8 @@ defmodule Pleroma.FollowingRelationship do
alias Pleroma.Repo alias Pleroma.Repo
alias Pleroma.User alias Pleroma.User
@type follow_state :: :follow_pending | :follow_accept | :follow_reject | :unfollow
schema "following_relationships" do schema "following_relationships" do
field(:state, State, default: :follow_pending) field(:state, State, default: :follow_pending)
@ -72,6 +74,7 @@ defmodule Pleroma.FollowingRelationship do
end end
end end
@spec follow(User.t(), User.t()) :: {:ok, User.t(), User.t()} | {:error, any}
def follow(%User{} = follower, %User{} = following, state \\ :follow_accept) do def follow(%User{} = follower, %User{} = following, state \\ :follow_accept) do
with {:ok, _following_relationship} <- with {:ok, _following_relationship} <-
%__MODULE__{} %__MODULE__{}
@ -81,6 +84,7 @@ defmodule Pleroma.FollowingRelationship do
end end
end end
@spec unfollow(User.t(), User.t()) :: {:ok, User.t(), User.t()} | {:error, any}
def unfollow(%User{} = follower, %User{} = following) do def unfollow(%User{} = follower, %User{} = following) do
case get(follower, following) do case get(follower, following) do
%__MODULE__{} = following_relationship -> %__MODULE__{} = following_relationship ->
@ -89,10 +93,12 @@ defmodule Pleroma.FollowingRelationship do
end end
_ -> _ ->
{:ok, nil} {:ok, follower, following}
end end
end end
@spec after_update(follow_state(), User.t(), User.t()) ::
{:ok, User.t(), User.t()} | {:error, any()}
defp after_update(state, %User{} = follower, %User{} = following) do defp after_update(state, %User{} = follower, %User{} = following) do
with {:ok, following} <- User.update_follower_count(following), with {:ok, following} <- User.update_follower_count(following),
{:ok, follower} <- User.update_following_count(follower) do {:ok, follower} <- User.update_following_count(follower) do
@ -103,6 +109,8 @@ defmodule Pleroma.FollowingRelationship do
}) })
{:ok, follower, following} {:ok, follower, following}
else
err -> {:error, err}
end end
end end

View file

@ -104,10 +104,10 @@ defmodule Pleroma.Helpers.MediaHelper do
args: args args: args
]) ])
fifo = Port.open(to_charlist(fifo_path), [:eof, :binary, :stream, :out]) fifo = File.open!(fifo_path, [:append, :binary])
fix = Pleroma.Helpers.QtFastStart.fix(env.body) fix = Pleroma.Helpers.QtFastStart.fix(env.body)
true = Port.command(fifo, fix) IO.binwrite(fifo, fix)
:erlang.port_close(fifo) File.close(fifo)
loop_recv(pid) loop_recv(pid)
after after
File.rm(fifo_path) File.rm(fifo_path)

View file

@ -14,9 +14,7 @@ defmodule Pleroma.HTTP.AdapterHelper do
alias Pleroma.HTTP.AdapterHelper alias Pleroma.HTTP.AdapterHelper
require Logger require Logger
@type proxy :: @type proxy :: {Connection.proxy_type(), Connection.host(), pos_integer(), list()}
{Connection.host(), pos_integer()}
| {Connection.proxy_type(), Connection.host(), pos_integer()}
@callback options(keyword(), URI.t()) :: keyword() @callback options(keyword(), URI.t()) :: keyword()
@ -25,7 +23,6 @@ defmodule Pleroma.HTTP.AdapterHelper do
def format_proxy(proxy_url) do def format_proxy(proxy_url) do
case parse_proxy(proxy_url) do case parse_proxy(proxy_url) do
{:ok, host, port} -> {:http, host, port, []}
{:ok, type, host, port} -> {type, host, port, []} {:ok, type, host, port} -> {type, host, port, []}
_ -> nil _ -> nil
end end
@ -94,8 +91,7 @@ defmodule Pleroma.HTTP.AdapterHelper do
defp proxy_type(_), do: {:error, :unknown} defp proxy_type(_), do: {:error, :unknown}
@spec parse_proxy(String.t() | tuple() | nil) :: @spec parse_proxy(String.t() | tuple() | nil) ::
{:ok, host(), pos_integer()} {:ok, proxy_type(), host(), pos_integer()}
| {:ok, proxy_type(), host(), pos_integer()}
| {:error, atom()} | {:error, atom()}
| nil | nil
def parse_proxy(nil), do: nil def parse_proxy(nil), do: nil

View file

@ -14,7 +14,7 @@ defmodule Pleroma.Migrators.Support.BaseMigrator do
@callback fault_rate_allowance() :: integer() | float() @callback fault_rate_allowance() :: integer() | float()
defmacro __using__(_opts) do defmacro __using__(_opts) do
quote do quote generated: true do
use GenServer use GenServer
require Logger require Logger

View file

@ -237,7 +237,8 @@ defmodule Pleroma.ModerationLog do
insert_log_entry_with_message(%ModerationLog{data: data}) insert_log_entry_with_message(%ModerationLog{data: data})
end end
@spec insert_log_entry_with_message(ModerationLog) :: {:ok, ModerationLog} | {:error, any} @spec insert_log_entry_with_message(ModerationLog.t()) ::
{:ok, ModerationLog.t()} | {:error, any}
defp insert_log_entry_with_message(entry) do defp insert_log_entry_with_message(entry) do
entry.data["message"] entry.data["message"]
|> put_in(get_log_entry_message(entry)) |> put_in(get_log_entry_message(entry))

View file

@ -240,7 +240,7 @@ defmodule Pleroma.Object do
{:ok, _} <- invalid_object_cache(object) do {:ok, _} <- invalid_object_cache(object) do
cleanup_attachments( cleanup_attachments(
Config.get([:instance, :cleanup_attachments]), Config.get([:instance, :cleanup_attachments]),
%{"object" => object} %{object: object}
) )
{:ok, object, deleted_activity} {:ok, object, deleted_activity}
@ -249,7 +249,7 @@ defmodule Pleroma.Object do
@spec cleanup_attachments(boolean(), %{required(:object) => map()}) :: @spec cleanup_attachments(boolean(), %{required(:object) => map()}) ::
{:ok, Oban.Job.t() | nil} {:ok, Oban.Job.t() | nil}
def cleanup_attachments(true, %{"object" => _} = params) do def cleanup_attachments(true, %{object: _} = params) do
AttachmentsCleanupWorker.enqueue("cleanup_attachments", params) AttachmentsCleanupWorker.enqueue("cleanup_attachments", params)
end end

View file

@ -61,9 +61,6 @@ defmodule Pleroma.ReleaseTasks do
IO.puts("The database for #{inspect(@repo)} has already been created") IO.puts("The database for #{inspect(@repo)} has already been created")
{:error, term} when is_binary(term) -> {:error, term} when is_binary(term) ->
IO.puts(:stderr, "The database for #{inspect(@repo)} couldn't be created: #{term}")
{:error, term} ->
IO.puts( IO.puts(
:stderr, :stderr,
"The database for #{inspect(@repo)} couldn't be created: #{inspect(term)}" "The database for #{inspect(@repo)} couldn't be created: #{inspect(term)}"

View file

@ -66,6 +66,7 @@ defmodule Pleroma.ReverseProxy.Client.Tesla do
@impl true @impl true
@spec close(map) :: :ok | no_return() @spec close(map) :: :ok | no_return()
def close(%{pid: _pid}) do def close(%{pid: _pid}) do
:ok
end end
defp check_adapter do defp check_adapter do

View file

@ -13,25 +13,21 @@ defmodule Pleroma.Search.Elasticsearch do
def es_query(:activity, query, offset, limit) do def es_query(:activity, query, offset, limit) do
must = Parsers.Activity.parse(query) must = Parsers.Activity.parse(query)
if must == [] do %{
:skip size: limit,
else from: offset,
%{ terminate_after: 50,
size: limit, timeout: "5s",
from: offset, sort: [
terminate_after: 50, "_score",
timeout: "5s", %{"_timestamp" => %{order: "desc", format: "basic_date_time"}}
sort: [ ],
"_score", query: %{
%{"_timestamp" => %{order: "desc", format: "basic_date_time"}} bool: %{
], must: must
query: %{
bool: %{
must: must
}
} }
} }
end }
end end
defp maybe_fetch(:activity, search_query) do defp maybe_fetch(:activity, search_query) do

View file

@ -57,5 +57,5 @@ end
defimpl Elasticsearch.Document, for: Pleroma.Object do defimpl Elasticsearch.Document, for: Pleroma.Object do
def id(obj), do: obj.id def id(obj), do: obj.id
def routing(_), do: false def routing(_), do: false
def encode(_), do: nil def encode(_), do: %{}
end end

View file

@ -154,10 +154,11 @@ defmodule Pleroma.Search.Meilisearch do
with {:ok, res} <- result, with {:ok, res} <- result,
true <- Map.has_key?(res, "taskUid") do true <- Map.has_key?(res, "taskUid") do
# Do nothing {:ok, res}
else else
_ -> err ->
Logger.error("Failed to add activity #{activity.id} to index: #{inspect(result)}") Logger.error("Failed to add activity #{activity.id} to index: #{inspect(result)}")
{:error, err}
end end
end end
end end

View file

@ -4,7 +4,7 @@ defmodule Pleroma.Search.SearchBackend do
The whole activity is passed, to allow filtering on things such as scope. The whole activity is passed, to allow filtering on things such as scope.
""" """
@callback add_to_index(activity :: Pleroma.Activity.t()) :: nil @callback add_to_index(activity :: Pleroma.Activity.t()) :: {:ok, any()} | {:error, any()}
@doc """ @doc """
Remove the object from the index. Remove the object from the index.
@ -13,5 +13,5 @@ defmodule Pleroma.Search.SearchBackend do
is what contains the actual content and there is no need for fitlering when removing is what contains the actual content and there is no need for fitlering when removing
from index. from index.
""" """
@callback remove_from_index(object :: Pleroma.Object.t()) :: nil @callback remove_from_index(object :: Pleroma.Object.t()) :: {:ok, any()} | {:error, any()}
end end

View file

@ -27,7 +27,7 @@ defmodule Pleroma.Signature do
_ -> _ ->
case Pleroma.Web.WebFinger.finger(maybe_ap_id) do case Pleroma.Web.WebFinger.finger(maybe_ap_id) do
%{"ap_id" => ap_id} -> {:ok, ap_id} {:ok, %{"ap_id" => ap_id}} -> {:ok, ap_id}
_ -> {:error, maybe_ap_id} _ -> {:error, maybe_ap_id}
end end
end end

View file

@ -162,7 +162,7 @@ defmodule Pleroma.Upload do
defp prepare_upload(%{img: "data:image/" <> image_data}, opts) do defp prepare_upload(%{img: "data:image/" <> image_data}, opts) do
parsed = Regex.named_captures(~r/(?<filetype>jpeg|png|gif);base64,(?<data>.*)/, image_data) parsed = Regex.named_captures(~r/(?<filetype>jpeg|png|gif);base64,(?<data>.*)/, image_data)
data = Base.decode64!(parsed["data"], ignore: :whitespace) data = Base.decode64!(parsed["data"], ignore: :whitespace)
hash = Base.encode16(:crypto.hash(:sha256, data), lower: true) hash = Base.encode16(:crypto.hash(:sha256, data), case: :lower)
with :ok <- check_binary_size(data, opts.size_limit), with :ok <- check_binary_size(data, opts.size_limit),
tmp_path <- tempfile_for_image(data), tmp_path <- tempfile_for_image(data),

View file

@ -77,7 +77,6 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do
%{width: width, height: height} %{width: width, height: height}
else else
nil -> {:error, {:ffprobe, :command_not_found}} nil -> {:error, {:ffprobe, :command_not_found}}
{:error, _} = error -> error
end end
end end
end end

View file

@ -9,7 +9,7 @@ defmodule Pleroma.Upload.Filter.Exiftool do
""" """
@behaviour Pleroma.Upload.Filter @behaviour Pleroma.Upload.Filter
@spec filter(Pleroma.Upload.t()) :: {:ok, any()} | {:error, String.t()} @spec filter(Pleroma.Upload.t()) :: {:ok, :noop} | {:ok, :filtered} | {:error, String.t()}
# Formats not compatible with exiftool at this time # Formats not compatible with exiftool at this time
def filter(%Pleroma.Upload{content_type: "image/heic"}), do: {:ok, :noop} def filter(%Pleroma.Upload{content_type: "image/heic"}), do: {:ok, :noop}

View file

@ -38,7 +38,7 @@ defmodule Pleroma.Upload.Filter.Mogrifun do
[{"fill", "yellow"}, {"tint", "40"}] [{"fill", "yellow"}, {"tint", "40"}]
] ]
@spec filter(Pleroma.Upload.t()) :: {:ok, atom()} | {:error, String.t()} @spec filter(Pleroma.Upload.t()) :: {:ok, :filtered | :noop} | {:error, String.t()}
def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do
try do try do
Filter.Mogrify.do_filter(file, [Enum.random(@filters)]) Filter.Mogrify.do_filter(file, [Enum.random(@filters)])

View file

@ -3,6 +3,10 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.User do defmodule Pleroma.User do
@moduledoc """
A user, local or remote
"""
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
@ -549,9 +553,17 @@ defmodule Pleroma.User do
end end
defp put_fields(changeset) do defp put_fields(changeset) do
# These fields are inconsistent in tests when it comes to binary/atom keys
if raw_fields = get_change(changeset, :raw_fields) do if raw_fields = get_change(changeset, :raw_fields) do
raw_fields = raw_fields =
raw_fields raw_fields
|> Enum.map(fn
%{name: name, value: value} ->
%{"name" => name, "value" => value}
%{"name" => _} = field ->
field
end)
|> Enum.filter(fn %{"name" => n} -> n != "" end) |> Enum.filter(fn %{"name" => n} -> n != "" end)
fields = fields =
@ -705,7 +717,8 @@ defmodule Pleroma.User do
|> put_private_key() |> put_private_key()
end end
def register_changeset(struct, params \\ %{}, opts \\ []) do @spec register_changeset(User.t(), map(), keyword()) :: Changeset.t()
def register_changeset(%User{} = struct, params \\ %{}, opts \\ []) do
bio_limit = Config.get([:instance, :user_bio_length], 5000) bio_limit = Config.get([:instance, :user_bio_length], 5000)
name_limit = Config.get([:instance, :user_name_length], 100) name_limit = Config.get([:instance, :user_name_length], 100)
reason_limit = Config.get([:instance, :registration_reason_length], 500) reason_limit = Config.get([:instance, :registration_reason_length], 500)
@ -819,12 +832,14 @@ defmodule Pleroma.User do
end end
@doc "Inserts provided changeset, performs post-registration actions (confirmation email sending etc.)" @doc "Inserts provided changeset, performs post-registration actions (confirmation email sending etc.)"
@spec register(Changeset.t()) :: {:ok, User.t()} | {:error, any} | nil
def register(%Ecto.Changeset{} = changeset) do def register(%Ecto.Changeset{} = changeset) do
with {:ok, user} <- Repo.insert(changeset) do with {:ok, user} <- Repo.insert(changeset) do
post_register_action(user) post_register_action(user)
end end
end end
@spec post_register_action(User.t()) :: {:error, any} | {:ok, User.t()}
def post_register_action(%User{is_confirmed: false} = user) do def post_register_action(%User{is_confirmed: false} = user) do
with {:ok, _} <- maybe_send_confirmation_email(user) do with {:ok, _} <- maybe_send_confirmation_email(user) do
{:ok, user} {:ok, user}
@ -939,7 +954,8 @@ defmodule Pleroma.User do
def needs_update?(_), do: true def needs_update?(_), do: true
@spec maybe_direct_follow(User.t(), User.t()) :: {:ok, User.t()} | {:error, String.t()} @spec maybe_direct_follow(User.t(), User.t()) ::
{:ok, User.t(), User.t()} | {:error, String.t()}
# "Locked" (self-locked) users demand explicit authorization of follow requests # "Locked" (self-locked) users demand explicit authorization of follow requests
def maybe_direct_follow(%User{} = follower, %User{local: true, is_locked: true} = followed) do def maybe_direct_follow(%User{} = follower, %User{local: true, is_locked: true} = followed) do
@ -1072,6 +1088,11 @@ defmodule Pleroma.User do
get_cached_by_nickname(nickname) get_cached_by_nickname(nickname)
end end
@spec set_cache(
{:error, any}
| {:ok, User.t()}
| User.t()
) :: {:ok, User.t()} | {:error, any}
def set_cache({:ok, user}), do: set_cache(user) def set_cache({:ok, user}), do: set_cache(user)
def set_cache({:error, err}), do: {:error, err} def set_cache({:error, err}), do: {:error, err}
@ -1082,12 +1103,14 @@ defmodule Pleroma.User do
{:ok, user} {:ok, user}
end end
@spec update_and_set_cache(User.t(), map()) :: {:ok, User.t()} | {:error, any}
def update_and_set_cache(struct, params) do def update_and_set_cache(struct, params) do
struct struct
|> update_changeset(params) |> update_changeset(params)
|> update_and_set_cache() |> update_and_set_cache()
end end
@spec update_and_set_cache(Changeset.t()) :: {:ok, User.t()} | {:error, any}
def update_and_set_cache(%{data: %Pleroma.User{} = user} = changeset) do def update_and_set_cache(%{data: %Pleroma.User{} = user} = changeset) do
was_superuser_before_update = User.superuser?(user) was_superuser_before_update = User.superuser?(user)
@ -1142,6 +1165,7 @@ defmodule Pleroma.User do
end end
end end
@spec get_cached_by_id(String.t()) :: nil | Pleroma.User.t()
def get_cached_by_id(id) do def get_cached_by_id(id) do
key = "id:#{id}" key = "id:#{id}"
@ -2302,6 +2326,7 @@ defmodule Pleroma.User do
end end
end end
@spec delete_alias(User.t(), User.t()) :: {:error, :no_such_alias}
def delete_alias(user, alias_user) do def delete_alias(user, alias_user) do
current_aliases = user.also_known_as || [] current_aliases = user.also_known_as || []
alias_ap_id = alias_user.ap_id alias_ap_id = alias_user.ap_id
@ -2417,7 +2442,7 @@ defmodule Pleroma.User do
cast(user, params, [:is_confirmed, :confirmation_token]) cast(user, params, [:is_confirmed, :confirmation_token])
end end
@spec approval_changeset(User.t(), keyword()) :: Changeset.t() @spec approval_changeset(Changeset.t(), keyword()) :: Changeset.t()
def approval_changeset(user, set_approval: approved?) do def approval_changeset(user, set_approval: approved?) do
cast(user, %{is_approved: approved?}, [:is_approved]) cast(user, %{is_approved: approved?}, [:is_approved])
end end
@ -2492,15 +2517,19 @@ defmodule Pleroma.User do
with {:ok, relationship} <- UserRelationship.create_block(user, blocked) do with {:ok, relationship} <- UserRelationship.create_block(user, blocked) do
@cachex.del(:user_cache, "blocked_users_ap_ids:#{user.ap_id}") @cachex.del(:user_cache, "blocked_users_ap_ids:#{user.ap_id}")
{:ok, relationship} {:ok, relationship}
else
err -> err
end end
end end
@spec add_to_block(User.t(), User.t()) :: @spec remove_from_block(User.t(), User.t()) ::
{:ok, UserRelationship.t()} | {:ok, nil} | {:error, Ecto.Changeset.t()} {:ok, UserRelationship.t()} | {:ok, nil} | {:error, Ecto.Changeset.t()}
defp remove_from_block(%User{} = user, %User{} = blocked) do defp remove_from_block(%User{} = user, %User{} = blocked) do
with {:ok, relationship} <- UserRelationship.delete_block(user, blocked) do with {:ok, relationship} <- UserRelationship.delete_block(user, blocked) do
@cachex.del(:user_cache, "blocked_users_ap_ids:#{user.ap_id}") @cachex.del(:user_cache, "blocked_users_ap_ids:#{user.ap_id}")
{:ok, relationship} {:ok, relationship}
else
err -> err
end end
end end

View file

@ -130,7 +130,8 @@ defmodule Pleroma.User.Backup do
:ok <- statuses(dir, backup.user), :ok <- statuses(dir, backup.user),
:ok <- likes(dir, backup.user), :ok <- likes(dir, backup.user),
:ok <- bookmarks(dir, backup.user), :ok <- bookmarks(dir, backup.user),
{:ok, zip_path} <- :zip.create(String.to_charlist(dir <> ".zip"), @files, cwd: dir), {:ok, zip_path} <-
:zip.create(String.to_charlist(dir <> ".zip"), @files, cwd: String.to_charlist(dir)),
{:ok, _} <- File.rm_rf(dir) do {:ok, _} <- File.rm_rf(dir) do
{:ok, to_string(zip_path)} {:ok, to_string(zip_path)}
end end

View file

@ -56,7 +56,10 @@ defmodule Pleroma.Web do
plug_module.skip_plug(conn) plug_module.skip_plug(conn)
rescue rescue
UndefinedFunctionError -> UndefinedFunctionError ->
raise "`#{plug_module}` is not skippable. Append `use Pleroma.Web, :plug` to its code." reraise(
"`#{plug_module}` is not skippable. Append `use Pleroma.Web, :plug` to its code.",
__STACKTRACE__
)
end end
end end
) )

View file

@ -1531,6 +1531,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
defp normalize_image(urls) when is_list(urls), do: urls |> List.first() |> normalize_image() defp normalize_image(urls) when is_list(urls), do: urls |> List.first() |> normalize_image()
defp normalize_image(_), do: nil defp normalize_image(_), do: nil
defp normalize_also_known_as(aka) when is_list(aka), do: aka
defp normalize_also_known_as(aka) when is_binary(aka), do: [aka]
defp normalize_also_known_as(nil), do: []
defp object_to_user_data(data, additional) do defp object_to_user_data(data, additional) do
fields = fields =
data data
@ -1576,6 +1580,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
also_known_as = also_known_as =
data data
|> Map.get("alsoKnownAs", []) |> Map.get("alsoKnownAs", [])
|> normalize_also_known_as()
|> Enum.filter(fn url -> |> Enum.filter(fn url ->
case URI.parse(url) do case URI.parse(url) do
%URI{scheme: "http"} -> true %URI{scheme: "http"} -> true

View file

@ -3,6 +3,8 @@ defmodule Pleroma.Web.AkkomaAPI.TranslationController do
alias Pleroma.Web.Plugs.OAuthScopesPlug alias Pleroma.Web.Plugs.OAuthScopesPlug
require Logger
@cachex Pleroma.Config.get([:cachex, :provider], Cachex) @cachex Pleroma.Config.get([:cachex, :provider], Cachex)
@unauthenticated_access %{fallback: :proceed_unauthenticated, scopes: []} @unauthenticated_access %{fallback: :proceed_unauthenticated, scopes: []}
@ -26,8 +28,12 @@ defmodule Pleroma.Web.AkkomaAPI.TranslationController do
conn conn
|> json(%{source: source_languages, target: dest_languages}) |> json(%{source: source_languages, target: dest_languages})
else else
{:enabled, false} -> json(conn, %{}) {:enabled, false} ->
e -> IO.inspect(e) json(conn, %{})
e ->
Logger.error("Translation language list error: #{inspect(e)}")
{:error, e}
end end
end end

View file

@ -231,9 +231,18 @@ defmodule Pleroma.Web.ApiSpec.PleromaEmojiPackOperation do
"application/json", "application/json",
%Schema{ %Schema{
type: :object, type: :object,
additionalProperties: emoji_pack(), properties: %{
count: %Schema{type: :integer},
packs: %Schema{
type: :object,
additionalProperties: emoji_pack()
}
},
example: %{ example: %{
"emojos" => emoji_pack().example "count" => 4,
"packs" => %{
"emojos" => emoji_pack().example
}
} }
} }
) )

View file

@ -60,6 +60,8 @@ defmodule Pleroma.Web.Auth.PleromaAuthenticator do
def get_registration(%Plug.Conn{} = _conn), do: {:error, :missing_credentials} def get_registration(%Plug.Conn{} = _conn), do: {:error, :missing_credentials}
@doc "Creates Pleroma.User record basing on params and Pleroma.Registration record." @doc "Creates Pleroma.User record basing on params and Pleroma.Registration record."
@spec create_from_registration(Plug.Conn.t(), Registration.t()) ::
{:ok, User.t()} | {:error, any()}
def create_from_registration( def create_from_registration(
%Plug.Conn{params: %{"authorization" => registration_attrs}}, %Plug.Conn{params: %{"authorization" => registration_attrs}},
%Registration{} = registration %Registration{} = registration
@ -89,6 +91,8 @@ defmodule Pleroma.Web.Auth.PleromaAuthenticator do
{:ok, _} <- {:ok, _} <-
Registration.changeset(registration, %{user_id: new_user.id}) |> Repo.update() do Registration.changeset(registration, %{user_id: new_user.id}) |> Repo.update() do
{:ok, new_user} {:ok, new_user}
else
err -> err
end end
end end

View file

@ -87,16 +87,18 @@ defmodule Pleroma.Web.ControllerHelper do
def assign_account_by_id(conn, _) do def assign_account_by_id(conn, _) do
case Pleroma.User.get_cached_by_id(conn.params.id) do case Pleroma.User.get_cached_by_id(conn.params.id) do
%Pleroma.User{} = account -> assign(conn, :account, account) %Pleroma.User{} = account ->
nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt() assign(conn, :account, account)
nil ->
Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found})
|> halt()
end end
end end
@spec try_render(Plug.Conn.t(), any, any) :: Plug.Conn.t()
def try_render(conn, target, params) when is_binary(target) do def try_render(conn, target, params) when is_binary(target) do
case render(conn, target, params) do render(conn, target, params)
nil -> render_error(conn, :not_implemented, "Can't display this activity")
res -> res
end
end end
def try_render(conn, _, _) do def try_render(conn, _, _) do

View file

@ -123,7 +123,7 @@ defmodule Pleroma.Web.Endpoint do
plug(Plug.Parsers, plug(Plug.Parsers,
parsers: [ parsers: [
:urlencoded, :urlencoded,
{:multipart, length: {Config, :get, [[:instance, :upload_limit]]}}, Pleroma.Web.Plugs.Parsers.Multipart,
:json :json
], ],
pass: ["*/*"], pass: ["*/*"],

View file

@ -1,26 +0,0 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.Fallback.LegacyPleromaApiRerouterPlug do
alias Pleroma.Web.Endpoint
alias Pleroma.Web.Fallback.RedirectController
def init(opts), do: opts
def call(%{path_info: ["api", "pleroma" | path_info_rest]} = conn, _opts) do
new_path_info = ["api", "v1", "pleroma" | path_info_rest]
new_request_path = Enum.join(new_path_info, "/")
conn
|> Map.merge(%{
path_info: new_path_info,
request_path: new_request_path
})
|> Endpoint.call(conn.params)
end
def call(conn, _opts) do
RedirectController.api_not_implemented(conn, %{})
end
end

View file

@ -30,6 +30,10 @@ defmodule Pleroma.Web.Metadata.Utils do
|> scrub_html_and_truncate_object_field(object) |> scrub_html_and_truncate_object_field(object)
end end
def scrub_html_and_truncate(%{data: _}) do
""
end
def scrub_html_and_truncate(content, max_length \\ 200) when is_binary(content) do def scrub_html_and_truncate(content, max_length \\ 200) when is_binary(content) do
content content
|> scrub_html |> scrub_html

View file

@ -558,10 +558,9 @@ defmodule Pleroma.Web.OAuth.OAuthController do
else else
{:error, changeset} -> {:error, changeset} ->
message = message =
Enum.map(changeset.errors, fn {field, {error, _}} -> Enum.map_join(changeset.errors, "; ", fn {field, {error, _}} ->
"#{field} #{error}" "#{field} #{error}"
end) end)
|> Enum.join("; ")
message = message =
String.replace( String.replace(

View file

@ -0,0 +1,21 @@
defmodule Pleroma.Web.Plugs.Parsers.Multipart do
@multipart Plug.Parsers.MULTIPART
alias Pleroma.Config
def init(opts) do
opts
end
def parse(conn, "multipart", subtype, headers, opts) do
length = Config.get([:instance, :upload_limit])
opts = @multipart.init([length: length] ++ opts)
@multipart.parse(conn, "multipart", subtype, headers, opts)
end
def parse(conn, _type, _subtype, _headers, _opts) do
{:next, conn}
end
end

View file

@ -8,7 +8,6 @@ defmodule Pleroma.Web.Plugs.RemoteIp do
""" """
alias Pleroma.Config alias Pleroma.Config
import Plug.Conn
@behaviour Plug @behaviour Plug
@ -16,15 +15,21 @@ defmodule Pleroma.Web.Plugs.RemoteIp do
def call(%{remote_ip: original_remote_ip} = conn, _) do def call(%{remote_ip: original_remote_ip} = conn, _) do
if Config.get([__MODULE__, :enabled]) do if Config.get([__MODULE__, :enabled]) do
%{remote_ip: new_remote_ip} = conn = RemoteIp.call(conn, remote_ip_opts()) {headers, proxies} = remote_ip_opts()
assign(conn, :remote_ip_found, original_remote_ip != new_remote_ip) new_remote_ip = RemoteIp.from(conn.req_headers, headers: headers, proxies: proxies)
if new_remote_ip != original_remote_ip do
Map.put(conn, :remote_ip, new_remote_ip)
else
conn
end
else else
conn conn
end end
end end
defp remote_ip_opts do defp remote_ip_opts do
headers = Config.get([__MODULE__, :headers], []) |> MapSet.new() headers = Config.get([__MODULE__, :headers], [])
reserved = Config.get([__MODULE__, :reserved], []) reserved = Config.get([__MODULE__, :reserved], [])
proxies = proxies =
@ -36,13 +41,10 @@ defmodule Pleroma.Web.Plugs.RemoteIp do
end end
defp maybe_add_cidr(proxy) when is_binary(proxy) do defp maybe_add_cidr(proxy) when is_binary(proxy) do
proxy = cond do
cond do "/" in String.codepoints(proxy) -> proxy
"/" in String.codepoints(proxy) -> proxy InetCidr.v4?(InetCidr.parse_address!(proxy)) -> proxy <> "/32"
InetCidr.v4?(InetCidr.parse_address!(proxy)) -> proxy <> "/32" InetCidr.v6?(InetCidr.parse_address!(proxy)) -> proxy <> "/128"
InetCidr.v6?(InetCidr.parse_address!(proxy)) -> proxy <> "/128" end
end
InetCidr.parse(proxy, true)
end end
end end

View file

@ -906,8 +906,6 @@ defmodule Pleroma.Web.Router do
scope "/", Pleroma.Web.Fallback do scope "/", Pleroma.Web.Fallback do
get("/registration/:token", RedirectController, :registration_page) get("/registration/:token", RedirectController, :registration_page)
get("/:maybe_nickname_or_id", RedirectController, :redirector_with_meta) get("/:maybe_nickname_or_id", RedirectController, :redirector_with_meta)
match(:*, "/api/pleroma*path", LegacyPleromaApiRerouterPlug, [])
get("/api*path", RedirectController, :api_not_implemented)
get("/*path", RedirectController, :redirector_with_preload) get("/*path", RedirectController, :redirector_with_preload)
options("/*path", RedirectController, :empty) options("/*path", RedirectController, :empty)

View file

@ -150,7 +150,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do
end end
end end
def remote_interaction(%{body_params: %{ap_id: ap_id, profile: profile}} = conn, _params) do def remote_interaction(
%Plug.Conn{body_params: %{ap_id: ap_id, profile: profile}} = conn,
_params
) do
with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile) do with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile) do
conn conn
|> json(%{url: String.replace(template, "{uri}", ap_id)}) |> json(%{url: String.replace(template, "{uri}", ap_id)})

View file

@ -100,6 +100,7 @@ defmodule Pleroma.Web.WebFinger do
Pleroma.Config.get([__MODULE__, :domain]) || Pleroma.Web.Endpoint.host() Pleroma.Config.get([__MODULE__, :domain]) || Pleroma.Web.Endpoint.host()
end end
@spec webfinger_from_xml(binary()) :: {:ok, map()} | nil
defp webfinger_from_xml(body) do defp webfinger_from_xml(body) do
with {:ok, doc} <- XML.parse_document(body) do with {:ok, doc} <- XML.parse_document(body) do
subject = XML.string_from_xpath("//Subject", doc) subject = XML.string_from_xpath("//Subject", doc)

View file

@ -36,7 +36,7 @@ defmodule Pleroma.Web.WebFinger.WebFingerController do
else else
_e -> _e ->
conn conn
|> put_status(404) |> put_status(:not_found)
|> json("Couldn't find user") |> json("Couldn't find user")
end end
end end

49
mix.exs
View file

@ -7,7 +7,7 @@ defmodule Pleroma.Mixfile do
version: version("3.5.0"), version: version("3.5.0"),
elixir: "~> 1.12", elixir: "~> 1.12",
elixirc_paths: elixirc_paths(Mix.env()), elixirc_paths: elixirc_paths(Mix.env()),
compilers: [:phoenix, :gettext] ++ Mix.compilers(), compilers: [:phoenix] ++ Mix.compilers(),
elixirc_options: [warnings_as_errors: warnings_as_errors()], elixirc_options: [warnings_as_errors: warnings_as_errors()],
xref: [exclude: [:eldap]], xref: [exclude: [:eldap]],
start_permanent: Mix.env() == :prod, start_permanent: Mix.env() == :prod,
@ -94,7 +94,8 @@ defmodule Pleroma.Mixfile do
# Specifies OAuth dependencies. # Specifies OAuth dependencies.
defp oauth_deps do defp oauth_deps do
oauth_strategy_packages = oauth_strategy_packages =
System.get_env("OAUTH_CONSUMER_STRATEGIES") "OAUTH_CONSUMER_STRATEGIES"
|> System.get_env()
|> to_string() |> to_string()
|> String.split() |> String.split()
|> Enum.map(fn strategy_entry -> |> Enum.map(fn strategy_entry ->
@ -113,32 +114,29 @@ defmodule Pleroma.Mixfile do
# Type `mix help deps` for examples and options. # Type `mix help deps` for examples and options.
defp deps do defp deps do
[ [
{:phoenix, "~> 1.6.11"}, {:phoenix, "~> 1.6.15"},
{:tzdata, "~> 1.1.1"}, {:tzdata, "~> 1.1.1"},
{:plug_cowboy, "~> 2.5"}, {:plug_cowboy, "~> 2.6"},
{:phoenix_pubsub, "~> 2.1"}, {:phoenix_pubsub, "~> 2.1"},
{:phoenix_ecto, "~> 4.4"}, {:phoenix_ecto, "~> 4.4"},
{:inet_cidr, "~> 1.0.0"},
{:ecto_enum, "~> 1.4"}, {:ecto_enum, "~> 1.4"},
{:ecto_sql, "~> 3.9.0"}, {:ecto_sql, "~> 3.9.0"},
{:postgrex, ">= 0.16.3"}, {:postgrex, ">= 0.16.3"},
{:oban, "~> 2.12.1"}, {:oban, "~> 2.12.1"},
{:gettext, {:gettext, "~> 0.20.0"},
git: "https://github.com/tusooa/gettext.git",
ref: "72fb2496b6c5280ed911bdc3756890e7f38a4808",
override: true},
{:bcrypt_elixir, "~> 2.2"}, {:bcrypt_elixir, "~> 2.2"},
{:trailing_format_plug, "~> 0.0.7"},
{:fast_sanitize, "~> 0.2.3"}, {:fast_sanitize, "~> 0.2.3"},
{:html_entities, "~> 0.5", override: true}, {:html_entities, "~> 0.5"},
{:phoenix_html, "~> 3.1", override: true}, {:phoenix_html, "~> 3.2"},
{:calendar, "~> 1.0"}, {:calendar, "~> 1.0"},
{:cachex, "~> 3.4"}, {:cachex, "~> 3.4"},
{:poison, "~> 5.0", override: true}, {:tesla, "~> 1.4.4"},
{:tesla, "~> 1.4.4", override: true},
{:castore, "~> 0.1"}, {:castore, "~> 0.1"},
{:cowlib, "~> 2.9", override: true}, {:cowlib, "~> 2.9"},
{:finch, "~> 0.14.0"}, {:finch, "~> 0.14.0"},
{:jason, "~> 1.2"}, {:jason, "~> 1.2"},
{:trailing_format_plug, "~> 0.0.7"},
{:mogrify, "~> 0.9.1"}, {:mogrify, "~> 0.9.1"},
{:ex_aws, "~> 2.1.6"}, {:ex_aws, "~> 2.1.6"},
{:ex_aws_s3, "~> 2.0"}, {:ex_aws_s3, "~> 2.0"},
@ -172,39 +170,40 @@ defmodule Pleroma.Mixfile do
{:plug_static_index_html, "~> 1.0.0"}, {:plug_static_index_html, "~> 1.0.0"},
{:flake_id, "~> 0.1.0"}, {:flake_id, "~> 0.1.0"},
{:concurrent_limiter, "~> 0.1.1"}, {:concurrent_limiter, "~> 0.1.1"},
{:remote_ip, {:remote_ip, "~> 1.1.0"},
git: "https://git.pleroma.social/pleroma/remote_ip.git",
ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"},
{:captcha, {:captcha,
git: "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", git: "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git",
ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"},
{:restarter, path: "./restarter"}, {:restarter, path: "./restarter"},
{:majic, "~> 1.0"}, {:majic, "~> 1.0"},
{:eblurhash, "~> 1.2.2"}, {:eblurhash, "~> 1.2.2"},
{:open_api_spex, "3.10.0"}, {:open_api_spex, "~> 3.16.0"},
{:search_parser, {:search_parser,
git: "https://github.com/FloatingGhost/pleroma-contrib-search-parser.git", git: "https://github.com/FloatingGhost/pleroma-contrib-search-parser.git",
ref: "08971a81e68686f9ac465cfb6661d51c5e4e1e7f"}, ref: "08971a81e68686f9ac465cfb6661d51c5e4e1e7f"},
{:nimble_parsec, "~> 1.0", override: true}, {:nimble_parsec, "~> 1.0", override: true},
{:phoenix_live_dashboard, "~> 0.6.2"}, {:phoenix_live_dashboard, "~> 0.7.2"},
{:ecto_psql_extras, "~> 0.6"}, {:ecto_psql_extras, "~> 0.6"},
{:elasticsearch, {:elasticsearch,
git: "https://akkoma.dev/AkkomaGang/elasticsearch-elixir.git", ref: "main"}, git: "https://akkoma.dev/AkkomaGang/elasticsearch-elixir.git", ref: "main"},
{:mfm_parser, {:mfm_parser,
git: "https://akkoma.dev/AkkomaGang/mfm-parser.git", git: "https://akkoma.dev/AkkomaGang/mfm-parser.git",
ref: "912fba81152d4d572e457fd5427f9875b2bc3dbe"}, ref: "912fba81152d4d572e457fd5427f9875b2bc3dbe"},
{:poison, ">= 0.0.0"},
# indirect dependency version override
{:plug, "~> 1.10.4", override: true},
## dev & test ## dev & test
{:ex_doc, "~> 0.22", only: :dev, runtime: false}, {:ex_doc, "~> 0.22", only: :dev, runtime: false},
{:ex_machina, "~> 2.4", only: :test}, {:ex_machina, "~> 2.4", only: :test},
{:credo, "~> 1.6", only: [:dev, :test], runtime: false}, {:credo,
git: "https://github.com/rrrene/credo.git",
ref: "1c1b99ea41a457761383d81aaf6a606913996fe7",
only: [:dev, :test],
runtime: false},
{:mock, "~> 0.3.5", only: :test}, {:mock, "~> 0.3.5", only: :test},
{:excoveralls, "0.15.1", only: :test}, {:excoveralls, "0.15.1", only: :test},
{:mox, "~> 1.0", only: :test}, {:mox, "~> 1.0", only: :test},
{:websockex, "~> 0.4.3", only: :test} {:websockex, "~> 0.4.3", only: :test},
{:dialyxir, "~> 1.0", only: [:dev], runtime: false}
] ++ oauth_deps() ] ++ oauth_deps()
end end
@ -336,7 +335,7 @@ defmodule Pleroma.Mixfile do
# Pleroma: A lightweight social networking server # Pleroma: A lightweight social networking server
# Copyright © 2017-#{year} Pleroma Authors <https://pleroma.social/> # Copyright © 2017-#{year} Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
# Akkoma: The cooler pleroma # Akkoma: Magically expressive social media
# Copyright © 2022-#{year} Akkoma Authors <https://akkoma.dev/> # Copyright © 2022-#{year} Akkoma Authors <https://akkoma.dev/>
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only

View file

@ -17,13 +17,14 @@
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"},
"cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"},
"credo": {:hex, :credo, "1.6.7", "323f5734350fd23a456f2688b9430e7d517afb313fbd38671b8a4449798a7854", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "41e110bfb007f7eda7f897c10bf019ceab9a0b269ce79f015d54b0dcf4fc7dd3"}, "credo": {:git, "https://github.com/rrrene/credo.git", "1c1b99ea41a457761383d81aaf6a606913996fe7", [ref: "1c1b99ea41a457761383d81aaf6a606913996fe7"]},
"crypt": {:git, "https://github.com/msantos/crypt.git", "f75cd55325e33cbea198fb41fe41871392f8fb76", [ref: "f75cd55325e33cbea198fb41fe41871392f8fb76"]}, "crypt": {:git, "https://github.com/msantos/crypt.git", "f75cd55325e33cbea198fb41fe41871392f8fb76", [ref: "f75cd55325e33cbea198fb41fe41871392f8fb76"]},
"custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"},
"db_connection": {:hex, :db_connection, "2.4.3", "3b9aac9f27347ec65b271847e6baeb4443d8474289bd18c1d6f4de655b70c94d", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c127c15b0fa6cfb32eed07465e05da6c815b032508d4ed7c116122871df73c12"}, "db_connection": {:hex, :db_connection, "2.4.3", "3b9aac9f27347ec65b271847e6baeb4443d8474289bd18c1d6f4de655b70c94d", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c127c15b0fa6cfb32eed07465e05da6c815b032508d4ed7c116122871df73c12"},
"decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, "decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"},
"deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"},
"earmark": {:hex, :earmark, "1.4.33", "2b33a505180583f98bfa17317f03973b52081bdb24a11be05a7f4fa6d64dd8bf", [:mix], [{:earmark_parser, "~> 1.4.29", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "21b31363d6a0a70802cfbaf2de88355778aa76654298a072bce2e01d1858ae06"}, "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_parser": {:hex, :earmark_parser, "1.4.29", "149d50dcb3a93d9f3d6f3ecf18c918fb5a2d3c001b5d3305c926cddfbd33355b", [:mix], [], "hexpm", "4902af1b3eb139016aed210888748db8070b8125c2342ce3dcae4f38dcc63503"},
"eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"}, "eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"},
"ecto": {:hex, :ecto, "3.9.2", "017db3bc786ff64271108522c01a5d3f6ba0aea5c84912cfb0dd73bf13684108", [: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", "21466d5177e09e55289ac7eade579a642578242c7a3a9f91ad5c6583337a9d15"}, "ecto": {:hex, :ecto, "3.9.2", "017db3bc786ff64271108522c01a5d3f6ba0aea5c84912cfb0dd73bf13684108", [: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", "21466d5177e09e55289ac7eade579a642578242c7a3a9f91ad5c6583337a9d15"},
@ -32,6 +33,7 @@
"ecto_sql": {:hex, :ecto_sql, "3.9.1", "9bd5894eecc53d5b39d0c95180d4466aff00e10679e13a5cfa725f6f85c03c22", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.9.0", [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", "5fd470a4fff2e829bbf9dcceb7f3f9f6d1e49b4241e802f614de6b8b67c51118"}, "ecto_sql": {:hex, :ecto_sql, "3.9.1", "9bd5894eecc53d5b39d0c95180d4466aff00e10679e13a5cfa725f6f85c03c22", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.9.0", [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", "5fd470a4fff2e829bbf9dcceb7f3f9f6d1e49b4241e802f614de6b8b67c51118"},
"elasticsearch": {:git, "https://akkoma.dev/AkkomaGang/elasticsearch-elixir.git", "6cd946f75f6ab9042521a009d1d32d29a90113ca", [ref: "main"]}, "elasticsearch": {:git, "https://akkoma.dev/AkkomaGang/elasticsearch-elixir.git", "6cd946f75f6ab9042521a009d1d32d29a90113ca", [ref: "main"]},
"elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"}, "elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"},
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"}, "eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"},
"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": {: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.3.3", "61412e524616ea31d3f31675d8bc4c73f277e367dee0ae8245610446f9b778aa", [: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", "0044f0b6f9ce925666021eafd630de64c2b3404d79c85245cc7c8a9a32d7f104"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.3.3", "61412e524616ea31d3f31675d8bc4c73f277e367dee0ae8245610446f9b778aa", [: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", "0044f0b6f9ce925666021eafd630de64c2b3404d79c85245cc7c8a9a32d7f104"},
@ -47,7 +49,7 @@
"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"}, "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.0", "002d0cc194b48794d74711731db004fafeb328fe676976f160685262d43706a8", [:mix], [], "hexpm", "9c3a9f43f40dde00332a589bd9d389b90c1f518aef500364d00636acc5ebc99c"},
"gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"},
"gettext": {:git, "https://github.com/tusooa/gettext.git", "72fb2496b6c5280ed911bdc3756890e7f38a4808", [ref: "72fb2496b6c5280ed911bdc3756890e7f38a4808"]}, "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"}, "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"},
"hpax": {:hex, :hpax, "0.1.2", "09a75600d9d8bbd064cdd741f21fc06fc1f4cf3d0fcc335e5aa19be1a7235c84", [:mix], [], "hexpm", "2c87843d5a23f5f16748ebe77969880e29809580efdaccd615cd3bed628a8c13"}, "hpax": {:hex, :hpax, "0.1.2", "09a75600d9d8bbd064cdd741f21fc06fc1f4cf3d0fcc335e5aa19be1a7235c84", [:mix], [], "hexpm", "2c87843d5a23f5f16748ebe77969880e29809580efdaccd615cd3bed628a8c13"},
"html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"}, "html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"},
@ -78,18 +80,18 @@
"nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"},
"nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"}, "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"}, "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.10.0", "94e9521ad525b3fcf6dc77da7c45f87fdac24756d4de588cb0816b413e7c1844", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "2dbb2bde3d2b821f06936e8dfaf3284331186556291946d84eeba3750ac28765"}, "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"},
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, "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.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_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_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.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"},
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.6.5", "1495bb014be12c9a9252eca04b9af54246f6b5c1e4cd1f30210cd00ec540cf8e", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.3", [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.17.7", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "ef4fa50dd78364409039c99cf6f98ab5209b4c5f8796c17f4db118324f0db852"}, "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.17.12", "74f4c0ad02d7deac2d04f50b52827a5efdc5c6e7fac5cede145f5f0e4183aedc", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.0 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "af6dd5e0aac16ff43571f527a8e0616d62cb80b10eb87aac82170243e50d99c8"}, "phoenix_live_view": {:hex, :phoenix_live_view, "0.18.3", "2e3d009422addf8b15c3dccc65ce53baccbe26f7cfd21d264680b5867789a9c1", [: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", "c8845177a866e017dcb7083365393c8f00ab061b8b6b2bda575891079dce81b2"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"}, "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_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.0", "c57bc5044f25f007dc86ab21895688c098a9f846a8dda6bc40e2d0ddc146e38f", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "1b066f99a26fd22064c12b2600a9a6e56700f591bf7b20b418054ea38b4d4357"},
"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"}, "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.10.4", "41eba7d1a2d671faaf531fa867645bd5a3dce0957d8e2a3f398ccff7d2ef017f", [:mix], [{:mime, "~> 1.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", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ad1e233fe73d2eec56616568d260777b67f53148a999dc2d048f4eb9778fe4a0"}, "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_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.3", "8f77d13aeb32bfd9e654cb68f0af517b371fb34c56c9f2b58fe3df1235c1251a", [:mix], [], "hexpm", "b5672099c6ad5c202c45f5a403f21a3411247f164e4a8fab056e5cd8a290f4a2"},
"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"}, "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"},
@ -97,16 +99,15 @@
"poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"},
"postgrex": {:hex, :postgrex, "0.16.5", "fcc4035cc90e23933c5d69a9cd686e329469446ef7abba2cf70f08e2c4b69810", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "edead639dc6e882618c01d8fc891214c481ab9a3788dfe38dd5e37fd1d5fb2e8"}, "postgrex": {:hex, :postgrex, "0.16.5", "fcc4035cc90e23933c5d69a9cd686e329469446ef7abba2cf70f08e2c4b69810", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "edead639dc6e882618c01d8fc891214c481ab9a3788dfe38dd5e37fd1d5fb2e8"},
"pot": {:hex, :pot, "1.0.2", "13abb849139fdc04ab8154986abbcb63bdee5de6ed2ba7e1713527e33df923dd", [:rebar3], [], "hexpm", "78fe127f5a4f5f919d6ea5a2a671827bd53eb9d37e5b4128c0ad3df99856c2e0"}, "pot": {:hex, :pot, "1.0.2", "13abb849139fdc04ab8154986abbcb63bdee5de6ed2ba7e1713527e33df923dd", [:rebar3], [], "hexpm", "78fe127f5a4f5f919d6ea5a2a671827bd53eb9d37e5b4128c0ad3df99856c2e0"},
"quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"},
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
"recon": {:hex, :recon, "2.5.2", "cba53fa8db83ad968c9a652e09c3ed7ddcc4da434f27c3eaa9ca47ffb2b1ff03", [:mix, :rebar3], [], "hexpm", "2c7523c8dee91dff41f6b3d63cba2bd49eb6d2fe5bf1eec0df7f87eb5e230e1c"}, "recon": {:hex, :recon, "2.5.2", "cba53fa8db83ad968c9a652e09c3ed7ddcc4da434f27c3eaa9ca47ffb2b1ff03", [:mix, :rebar3], [], "hexpm", "2c7523c8dee91dff41f6b3d63cba2bd49eb6d2fe5bf1eec0df7f87eb5e230e1c"},
"remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]}, "remote_ip": {:hex, :remote_ip, "1.1.0", "cb308841595d15df3f9073b7c39243a1dd6ca56e5020295cb012c76fbec50f2d", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "616ffdf66aaad6a72fc546dabf42eed87e2a99e97b09cbd92b10cc180d02ed74"},
"search_parser": {:git, "https://github.com/FloatingGhost/pleroma-contrib-search-parser.git", "08971a81e68686f9ac465cfb6661d51c5e4e1e7f", [ref: "08971a81e68686f9ac465cfb6661d51c5e4e1e7f"]}, "search_parser": {:git, "https://github.com/FloatingGhost/pleroma-contrib-search-parser.git", "08971a81e68686f9ac465cfb6661d51c5e4e1e7f", [ref: "08971a81e68686f9ac465cfb6661d51c5e4e1e7f"]},
"sleeplocks": {:hex, :sleeplocks, "1.1.2", "d45aa1c5513da48c888715e3381211c859af34bee9b8290490e10c90bb6ff0ca", [:rebar3], [], "hexpm", "9fe5d048c5b781d6305c1a3a0f40bb3dfc06f49bf40571f3d2d0c57eaa7f59a5"}, "sleeplocks": {:hex, :sleeplocks, "1.1.2", "d45aa1c5513da48c888715e3381211c859af34bee9b8290490e10c90bb6ff0ca", [:rebar3], [], "hexpm", "9fe5d048c5b781d6305c1a3a0f40bb3dfc06f49bf40571f3d2d0c57eaa7f59a5"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"},
"statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"}, "statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"},
"sweet_xml": {:hex, :sweet_xml, "0.7.3", "debb256781c75ff6a8c5cbf7981146312b66f044a2898f453709a53e5031b45b", [:mix], [], "hexpm", "e110c867a1b3fe74bfc7dd9893aa851f0eed5518d0d7cad76d7baafd30e4f5ba"}, "sweet_xml": {:hex, :sweet_xml, "0.7.3", "debb256781c75ff6a8c5cbf7981146312b66f044a2898f453709a53e5031b45b", [:mix], [], "hexpm", "e110c867a1b3fe74bfc7dd9893aa851f0eed5518d0d7cad76d7baafd30e4f5ba"},
"swoosh": {:hex, :swoosh, "1.8.2", "af9a22ab2c0d20b266f61acca737fa11a121902de9466a39e91bacdce012101c", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d058ba750eafadb6c09a84a352c14c5d1eeeda6e84945fcc95785b7f3067b7db"}, "swoosh": {:hex, :swoosh, "1.8.3", "733357d9a65da19c162171f08d1e42a6259236cf44d02a64711b776afbbbaa78", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c699abbac7a296c205055a7501c5d5261320ea1f08bde2392699a9e899815bc7"},
"syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"},
"table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"}, "table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"},
"telemetry": {:hex, :telemetry, "0.4.3", "a06428a514bdbc63293cd9a6263aad00ddeb66f608163bdec7c8995784080818", [:rebar3], [], "hexpm", "eb72b8365ffda5bed68a620d1da88525e326cb82a75ee61354fc24b844768041"}, "telemetry": {:hex, :telemetry, "0.4.3", "a06428a514bdbc63293cd9a6263aad00ddeb66f608163bdec7c8995784080818", [:rebar3], [], "hexpm", "eb72b8365ffda5bed68a620d1da88525e326cb82a75ee61354fc24b844768041"},

View file

@ -163,4 +163,8 @@ defmodule Credo.Check.Consistency.FileLocation do
line_no: 1 line_no: 1
) )
end end
defp append_issues_and_timings(_issues, exec) do
exec
end
end end

View file

@ -116,7 +116,7 @@ defmodule Pleroma.SignatureTest do
test "it calls webfinger for 'acct:' accounts" do test "it calls webfinger for 'acct:' accounts" do
with_mock(Pleroma.Web.WebFinger, with_mock(Pleroma.Web.WebFinger,
finger: fn _ -> %{"ap_id" => "https://gensokyo.2hu/users/raymoo"} end finger: fn _ -> {:ok, %{"ap_id" => "https://gensokyo.2hu/users/raymoo"}} end
) do ) do
assert Signature.key_id_to_actor_id("acct:raymoo@gensokyo.2hu") == assert Signature.key_id_to_actor_id("acct:raymoo@gensokyo.2hu") ==
{:ok, "https://gensokyo.2hu/users/raymoo"} {:ok, "https://gensokyo.2hu/users/raymoo"}

View file

@ -41,15 +41,16 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
user = insert(:user) user = insert(:user)
conn = get(build_conn(), "/api/pleroma/admin/users/#{user.nickname}?admin_token=password123") conn =
get(build_conn(), "/api/v1/pleroma/admin/users/#{user.nickname}?admin_token=password123")
assert json_response(conn, 200) assert json_response(conn, 200)
end end
test "GET /api/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope", test "GET /api/v1/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope",
%{admin: admin} do %{admin: admin} do
user = insert(:user) user = insert(:user)
url = "/api/pleroma/admin/users/#{user.nickname}" url = "/api/v1/pleroma/admin/users/#{user.nickname}"
good_token1 = insert(:oauth_token, user: admin, scopes: ["admin"]) good_token1 = insert(:oauth_token, user: admin, scopes: ["admin"])
good_token2 = insert(:oauth_token, user: admin, scopes: ["admin:read"]) good_token2 = insert(:oauth_token, user: admin, scopes: ["admin:read"])
@ -90,7 +91,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end
end end
describe "PUT /api/pleroma/admin/users/tag" do describe "PUT /api/v1/pleroma/admin/users/tag" do
setup %{conn: conn} do setup %{conn: conn} do
user1 = insert(:user, %{tags: ["x"]}) user1 = insert(:user, %{tags: ["x"]})
user2 = insert(:user, %{tags: ["y"]}) user2 = insert(:user, %{tags: ["y"]})
@ -100,7 +101,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> put( |> put(
"/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=" <> "/api/v1/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=" <>
"#{user2.nickname}&tags[]=foo&tags[]=bar" "#{user2.nickname}&tags[]=foo&tags[]=bar"
) )
@ -136,7 +137,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end
end end
describe "DELETE /api/pleroma/admin/users/tag" do describe "DELETE /api/v1/pleroma/admin/users/tag" do
setup %{conn: conn} do setup %{conn: conn} do
user1 = insert(:user, %{tags: ["x"]}) user1 = insert(:user, %{tags: ["x"]})
user2 = insert(:user, %{tags: ["y", "z"]}) user2 = insert(:user, %{tags: ["y", "z"]})
@ -146,7 +147,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> delete( |> delete(
"/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=" <> "/api/v1/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=" <>
"#{user2.nickname}&tags[]=x&tags[]=z" "#{user2.nickname}&tags[]=x&tags[]=z"
) )
@ -182,12 +183,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end
end end
describe "/api/pleroma/admin/users/:nickname/permission_group" do describe "/api/v1/pleroma/admin/users/:nickname/permission_group" do
test "GET is giving user_info", %{admin: admin, conn: conn} do test "GET is giving user_info", %{admin: admin, conn: conn} do
conn = conn =
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> get("/api/pleroma/admin/users/#{admin.nickname}/permission_group/") |> get("/api/v1/pleroma/admin/users/#{admin.nickname}/permission_group/")
assert json_response(conn, 200) == %{ assert json_response(conn, 200) == %{
"is_admin" => true, "is_admin" => true,
@ -201,7 +202,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn = conn =
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> post("/api/pleroma/admin/users/#{user.nickname}/permission_group/admin") |> post("/api/v1/pleroma/admin/users/#{user.nickname}/permission_group/admin")
assert json_response(conn, 200) == %{ assert json_response(conn, 200) == %{
"is_admin" => true "is_admin" => true
@ -220,7 +221,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn = conn =
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> post("/api/pleroma/admin/users/permission_group/admin", %{ |> post("/api/v1/pleroma/admin/users/permission_group/admin", %{
nicknames: [user_one.nickname, user_two.nickname] nicknames: [user_one.nickname, user_two.nickname]
}) })
@ -238,7 +239,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn = conn =
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> delete("/api/pleroma/admin/users/#{user.nickname}/permission_group/admin") |> delete("/api/v1/pleroma/admin/users/#{user.nickname}/permission_group/admin")
assert json_response(conn, 200) == %{"is_admin" => false} assert json_response(conn, 200) == %{"is_admin" => false}
@ -258,7 +259,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn = conn =
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> delete("/api/pleroma/admin/users/permission_group/admin", %{ |> delete("/api/v1/pleroma/admin/users/permission_group/admin", %{
nicknames: [user_one.nickname, user_two.nickname] nicknames: [user_one.nickname, user_two.nickname]
}) })
@ -271,13 +272,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end
end end
test "/api/pleroma/admin/users/:nickname/password_reset", %{conn: conn} do test "/api/v1/pleroma/admin/users/:nickname/password_reset", %{conn: conn} do
user = insert(:user) user = insert(:user)
conn = conn =
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> get("/api/pleroma/admin/users/#{user.nickname}/password_reset") |> get("/api/v1/pleroma/admin/users/#{user.nickname}/password_reset")
resp = json_response(conn, 200) resp = json_response(conn, 200)
@ -296,7 +297,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
response = response =
conn conn
|> put("/api/pleroma/admin/users/disable_mfa", %{nickname: user.nickname}) |> put("/api/v1/pleroma/admin/users/disable_mfa", %{nickname: user.nickname})
|> json_response(200) |> json_response(200)
assert response == user.nickname assert response == user.nickname
@ -309,19 +310,19 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
test "returns 404 if user not found", %{conn: conn} do test "returns 404 if user not found", %{conn: conn} do
response = response =
conn conn
|> put("/api/pleroma/admin/users/disable_mfa", %{nickname: "nickname"}) |> put("/api/v1/pleroma/admin/users/disable_mfa", %{nickname: "nickname"})
|> json_response(404) |> json_response(404)
assert response == %{"error" => "Not found"} assert response == %{"error" => "Not found"}
end end
end end
describe "GET /api/pleroma/admin/restart" do describe "GET /api/v1/pleroma/admin/restart" do
setup do: clear_config(:configurable_from_database, true) setup do: clear_config(:configurable_from_database, true)
test "pleroma restarts", %{conn: conn} do test "pleroma restarts", %{conn: conn} do
capture_log(fn -> capture_log(fn ->
assert conn |> get("/api/pleroma/admin/restart") |> json_response(200) == %{} assert conn |> get("/api/v1/pleroma/admin/restart") |> json_response(200) == %{}
end) =~ "pleroma restarted" end) =~ "pleroma restarted"
refute Restarter.Pleroma.need_reboot?() refute Restarter.Pleroma.need_reboot?()
@ -330,19 +331,19 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
test "need_reboot flag", %{conn: conn} do test "need_reboot flag", %{conn: conn} do
assert conn assert conn
|> get("/api/pleroma/admin/need_reboot") |> get("/api/v1/pleroma/admin/need_reboot")
|> json_response(200) == %{"need_reboot" => false} |> json_response(200) == %{"need_reboot" => false}
Restarter.Pleroma.need_reboot() Restarter.Pleroma.need_reboot()
assert conn assert conn
|> get("/api/pleroma/admin/need_reboot") |> get("/api/v1/pleroma/admin/need_reboot")
|> json_response(200) == %{"need_reboot" => true} |> json_response(200) == %{"need_reboot" => true}
on_exit(fn -> Restarter.Pleroma.refresh() end) on_exit(fn -> Restarter.Pleroma.refresh() end)
end end
describe "GET /api/pleroma/admin/users/:nickname/statuses" do describe "GET /api/v1/pleroma/admin/users/:nickname/statuses" do
setup do setup do
user = insert(:user) user = insert(:user)
@ -354,7 +355,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end
test "renders user's statuses", %{conn: conn, user: user} do test "renders user's statuses", %{conn: conn, user: user} do
conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}/statuses") conn = get(conn, "/api/v1/pleroma/admin/users/#{user.nickname}/statuses")
assert %{"total" => 3, "activities" => activities} = json_response(conn, 200) assert %{"total" => 3, "activities" => activities} = json_response(conn, 200)
assert length(activities) == 3 assert length(activities) == 3
@ -363,12 +364,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
test "renders user's statuses with pagination", %{conn: conn, user: user} do test "renders user's statuses with pagination", %{conn: conn, user: user} do
%{"total" => 3, "activities" => [activity1]} = %{"total" => 3, "activities" => [activity1]} =
conn conn
|> get("/api/pleroma/admin/users/#{user.nickname}/statuses?page_size=1&page=1") |> get("/api/v1/pleroma/admin/users/#{user.nickname}/statuses?page_size=1&page=1")
|> json_response(200) |> json_response(200)
%{"total" => 3, "activities" => [activity2]} = %{"total" => 3, "activities" => [activity2]} =
conn conn
|> get("/api/pleroma/admin/users/#{user.nickname}/statuses?page_size=1&page=2") |> get("/api/v1/pleroma/admin/users/#{user.nickname}/statuses?page_size=1&page=2")
|> json_response(200) |> json_response(200)
refute activity1 == activity2 refute activity1 == activity2
@ -381,7 +382,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
%{"total" => 4, "activities" => activities} = %{"total" => 4, "activities" => activities} =
conn conn
|> get("/api/pleroma/admin/users/#{user.nickname}/statuses") |> get("/api/v1/pleroma/admin/users/#{user.nickname}/statuses")
|> json_response(200) |> json_response(200)
assert length(activities) == 4 assert length(activities) == 4
@ -394,7 +395,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
%{"total" => 5, "activities" => activities} = %{"total" => 5, "activities" => activities} =
conn conn
|> get("/api/pleroma/admin/users/#{user.nickname}/statuses?godmode=true") |> get("/api/v1/pleroma/admin/users/#{user.nickname}/statuses?godmode=true")
|> json_response(200) |> json_response(200)
assert length(activities) == 5 assert length(activities) == 5
@ -407,19 +408,19 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
assert %{"total" => 0, "activities" => []} == assert %{"total" => 0, "activities" => []} ==
conn conn
|> get("/api/pleroma/admin/users/#{other_user.nickname}/statuses") |> get("/api/v1/pleroma/admin/users/#{other_user.nickname}/statuses")
|> json_response(200) |> json_response(200)
assert %{"total" => 1, "activities" => [_]} = assert %{"total" => 1, "activities" => [_]} =
conn conn
|> get( |> get(
"/api/pleroma/admin/users/#{other_user.nickname}/statuses?with_reblogs=true" "/api/v1/pleroma/admin/users/#{other_user.nickname}/statuses?with_reblogs=true"
) )
|> json_response(200) |> json_response(200)
end end
end end
describe "GET /api/pleroma/admin/moderation_log" do describe "GET /api/v1/pleroma/admin/moderation_log" do
setup do setup do
moderator = insert(:user, is_moderator: true) moderator = insert(:user, is_moderator: true)
@ -453,7 +454,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
inserted_at: NaiveDateTime.truncate(~N[2017-08-16 15:47:06.597036], :second) inserted_at: NaiveDateTime.truncate(~N[2017-08-16 15:47:06.597036], :second)
}) })
conn = get(conn, "/api/pleroma/admin/moderation_log") conn = get(conn, "/api/v1/pleroma/admin/moderation_log")
response = json_response(conn, 200) response = json_response(conn, 200)
[first_entry, second_entry] = response["items"] [first_entry, second_entry] = response["items"]
@ -497,7 +498,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
inserted_at: NaiveDateTime.truncate(~N[2017-08-16 15:47:06.597036], :second) inserted_at: NaiveDateTime.truncate(~N[2017-08-16 15:47:06.597036], :second)
}) })
conn1 = get(conn, "/api/pleroma/admin/moderation_log?page_size=1&page=1") conn1 = get(conn, "/api/v1/pleroma/admin/moderation_log?page_size=1&page=1")
response1 = json_response(conn1, 200) response1 = json_response(conn1, 200)
[first_entry] = response1["items"] [first_entry] = response1["items"]
@ -509,7 +510,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
assert first_entry["message"] == assert first_entry["message"] ==
"@#{admin.nickname} unfollowed relay: https://example.org/relay" "@#{admin.nickname} unfollowed relay: https://example.org/relay"
conn2 = get(conn, "/api/pleroma/admin/moderation_log?page_size=1&page=2") conn2 = get(conn, "/api/v1/pleroma/admin/moderation_log?page_size=1&page=2")
response2 = json_response(conn2, 200) response2 = json_response(conn2, 200)
[second_entry] = response2["items"] [second_entry] = response2["items"]
@ -555,7 +556,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn1 = conn1 =
get( get(
conn, conn,
"/api/pleroma/admin/moderation_log?start_date=#{second_date}" "/api/v1/pleroma/admin/moderation_log?start_date=#{second_date}"
) )
response1 = json_response(conn1, 200) response1 = json_response(conn1, 200)
@ -593,7 +594,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
} }
}) })
conn1 = get(conn, "/api/pleroma/admin/moderation_log?user_id=#{moderator.id}") conn1 = get(conn, "/api/v1/pleroma/admin/moderation_log?user_id=#{moderator.id}")
response1 = json_response(conn1, 200) response1 = json_response(conn1, 200)
[first_entry] = response1["items"] [first_entry] = response1["items"]
@ -615,7 +616,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
target: "https://example.org/relay" target: "https://example.org/relay"
}) })
conn1 = get(conn, "/api/pleroma/admin/moderation_log?search=unfo") conn1 = get(conn, "/api/v1/pleroma/admin/moderation_log?search=unfo")
response1 = json_response(conn1, 200) response1 = json_response(conn1, 200)
[first_entry] = response1["items"] [first_entry] = response1["items"]
@ -631,7 +632,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
%{conn: conn} do %{conn: conn} do
clear_config(Pleroma.Config.get([:instance, :limit_to_local_content]), :unauthenticated) clear_config(Pleroma.Config.get([:instance, :limit_to_local_content]), :unauthenticated)
user = insert(:user, %{local: false, nickname: "u@peer1.com"}) user = insert(:user, %{local: false, nickname: "u@peer1.com"})
conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials") conn = get(conn, "/api/v1/pleroma/admin/users/#{user.nickname}/credentials")
assert json_response(conn, 200) assert json_response(conn, 200)
end end
@ -639,7 +640,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
describe "GET /users/:nickname/credentials" do describe "GET /users/:nickname/credentials" do
test "gets the user credentials", %{conn: conn} do test "gets the user credentials", %{conn: conn} do
user = insert(:user) user = insert(:user)
conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials") conn = get(conn, "/api/v1/pleroma/admin/users/#{user.nickname}/credentials")
response = assert json_response(conn, 200) response = assert json_response(conn, 200)
assert response["email"] == user.email assert response["email"] == user.email
@ -651,7 +652,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn = conn =
build_conn() build_conn()
|> assign(:user, user) |> assign(:user, user)
|> get("/api/pleroma/admin/users/#{user.nickname}/credentials") |> get("/api/v1/pleroma/admin/users/#{user.nickname}/credentials")
assert json_response(conn, :forbidden) assert json_response(conn, :forbidden)
end end
@ -667,7 +668,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
assert user.password_reset_pending == false assert user.password_reset_pending == false
conn = conn =
patch(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials", %{ patch(conn, "/api/v1/pleroma/admin/users/#{user.nickname}/credentials", %{
"password" => "new_password", "password" => "new_password",
"email" => "new_email@example.com", "email" => "new_email@example.com",
"name" => "new_name" "name" => "new_name"
@ -697,7 +698,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn = conn =
build_conn() build_conn()
|> assign(:user, user) |> assign(:user, user)
|> patch("/api/pleroma/admin/users/#{user.nickname}/credentials", %{ |> patch("/api/v1/pleroma/admin/users/#{user.nickname}/credentials", %{
"password" => "new_password", "password" => "new_password",
"email" => "new_email@example.com", "email" => "new_email@example.com",
"name" => "new_name" "name" => "new_name"
@ -709,7 +710,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
test "changes actor type from permitted list", %{conn: conn, user: user} do test "changes actor type from permitted list", %{conn: conn, user: user} do
assert user.actor_type == "Person" assert user.actor_type == "Person"
assert patch(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials", %{ assert patch(conn, "/api/v1/pleroma/admin/users/#{user.nickname}/credentials", %{
"actor_type" => "Service" "actor_type" => "Service"
}) })
|> json_response(200) == %{"status" => "success"} |> json_response(200) == %{"status" => "success"}
@ -718,14 +719,14 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
assert updated_user.actor_type == "Service" assert updated_user.actor_type == "Service"
assert patch(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials", %{ assert patch(conn, "/api/v1/pleroma/admin/users/#{user.nickname}/credentials", %{
"actor_type" => "Application" "actor_type" => "Application"
}) })
|> json_response(400) == %{"errors" => %{"actor_type" => "is invalid"}} |> json_response(400) == %{"errors" => %{"actor_type" => "is invalid"}}
end end
test "update non existing user", %{conn: conn} do test "update non existing user", %{conn: conn} do
assert patch(conn, "/api/pleroma/admin/users/non-existing/credentials", %{ assert patch(conn, "/api/v1/pleroma/admin/users/non-existing/credentials", %{
"password" => "new_password" "password" => "new_password"
}) })
|> json_response(404) == %{"error" => "Not found"} |> json_response(404) == %{"error" => "Not found"}
@ -738,7 +739,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
assert user.password_reset_pending == false assert user.password_reset_pending == false
conn = conn =
patch(conn, "/api/pleroma/admin/users/force_password_reset", %{nicknames: [user.nickname]}) patch(conn, "/api/v1/pleroma/admin/users/force_password_reset", %{
nicknames: [user.nickname]
})
assert empty_json_response(conn) == "" assert empty_json_response(conn) == ""
@ -756,7 +759,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
refute second_user.is_confirmed refute second_user.is_confirmed
ret_conn = ret_conn =
patch(conn, "/api/pleroma/admin/users/confirm_email", %{ patch(conn, "/api/v1/pleroma/admin/users/confirm_email", %{
nicknames: [ nicknames: [
first_user.nickname, first_user.nickname,
second_user.nickname second_user.nickname
@ -783,7 +786,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
[first_user, second_user] = insert_pair(:user, is_confirmed: false) [first_user, second_user] = insert_pair(:user, is_confirmed: false)
ret_conn = ret_conn =
patch(conn, "/api/pleroma/admin/users/resend_confirmation_email", %{ patch(conn, "/api/v1/pleroma/admin/users/resend_confirmation_email", %{
nicknames: [ nicknames: [
first_user.nickname, first_user.nickname,
second_user.nickname second_user.nickname
@ -804,7 +807,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end
end end
describe "/api/pleroma/admin/stats" do describe "/api/v1/pleroma/admin/stats" do
test "status visibility count", %{conn: conn} do test "status visibility count", %{conn: conn} do
user = insert(:user) user = insert(:user)
CommonAPI.post(user, %{visibility: "public", status: "hey"}) CommonAPI.post(user, %{visibility: "public", status: "hey"})
@ -813,7 +816,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/stats") |> get("/api/v1/pleroma/admin/stats")
|> json_response(200) |> json_response(200)
assert %{"direct" => 0, "private" => 0, "public" => 1, "unlisted" => 2} = assert %{"direct" => 0, "private" => 0, "public" => 1, "unlisted" => 2} =
@ -831,7 +834,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/stats", instance: instance2) |> get("/api/v1/pleroma/admin/stats", instance: instance2)
|> json_response(200) |> json_response(200)
assert %{"direct" => 0, "private" => 1, "public" => 0, "unlisted" => 1} = assert %{"direct" => 0, "private" => 1, "public" => 0, "unlisted" => 1} =
@ -839,7 +842,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end
end end
describe "/api/pleroma/backups" do describe "/api/v1/pleroma/backups" do
test "it creates a backup", %{conn: conn} do test "it creates a backup", %{conn: conn} do
admin = %{id: admin_id, nickname: admin_nickname} = insert(:user, is_admin: true) admin = %{id: admin_id, nickname: admin_nickname} = insert(:user, is_admin: true)
token = insert(:oauth_admin_token, user: admin) token = insert(:oauth_admin_token, user: admin)
@ -849,7 +852,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn conn
|> assign(:user, admin) |> assign(:user, admin)
|> assign(:token, token) |> assign(:token, token)
|> post("/api/pleroma/admin/backups", %{nickname: user.nickname}) |> post("/api/v1/pleroma/admin/backups", %{nickname: user.nickname})
|> json_response(200) |> json_response(200)
assert [backup] = Repo.all(Pleroma.User.Backup) assert [backup] = Repo.all(Pleroma.User.Backup)
@ -890,7 +893,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn conn
|> assign(:user, admin) |> assign(:user, admin)
|> assign(:token, token) |> assign(:token, token)
|> post("/api/pleroma/admin/backups", %{nickname: user.nickname}) |> post("/api/v1/pleroma/admin/backups", %{nickname: user.nickname})
|> json_response(200) |> json_response(200)
assert [_backup] = Repo.all(Pleroma.User.Backup) assert [_backup] = Repo.all(Pleroma.User.Backup)
@ -899,7 +902,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
conn conn
|> assign(:user, admin) |> assign(:user, admin)
|> assign(:token, token) |> assign(:token, token)
|> post("/api/pleroma/admin/backups", %{nickname: user.nickname}) |> post("/api/v1/pleroma/admin/backups", %{nickname: user.nickname})
|> json_response(200) |> json_response(200)
assert Repo.aggregate(Pleroma.User.Backup, :count) == 2 assert Repo.aggregate(Pleroma.User.Backup, :count) == 2

View file

@ -30,11 +30,11 @@ defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do
{:ok, %{admin: admin, token: token, conn: conn}} {:ok, %{admin: admin, token: token, conn: conn}}
end end
describe "GET /api/pleroma/admin/frontends" do describe "GET /api/v1/pleroma/admin/frontends" do
test "it lists available frontends", %{conn: conn} do test "it lists available frontends", %{conn: conn} do
response = response =
conn conn
|> get("/api/pleroma/admin/frontends") |> get("/api/v1/pleroma/admin/frontends")
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
assert Enum.map(response, & &1["name"]) == assert Enum.map(response, & &1["name"]) ==
@ -48,7 +48,7 @@ defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/frontends") |> get("/api/v1/pleroma/admin/frontends")
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
assert Enum.map(response, & &1["name"]) == assert Enum.map(response, & &1["name"]) ==
@ -58,7 +58,7 @@ defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do
end end
end end
describe "POST /api/pleroma/admin/frontends/install" do describe "POST /api/v1/pleroma/admin/frontends/install" do
test "from available frontends", %{conn: conn} do test "from available frontends", %{conn: conn} do
clear_config([:frontends, :available], %{ clear_config([:frontends, :available], %{
"pleroma" => %{ "pleroma" => %{
@ -74,14 +74,14 @@ defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/frontends/install", %{name: "pleroma"}) |> post("/api/v1/pleroma/admin/frontends/install", %{name: "pleroma"})
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
assert File.exists?(Path.join([@dir, "frontends", "pleroma", "fantasy", "test.txt"])) assert File.exists?(Path.join([@dir, "frontends", "pleroma", "fantasy", "test.txt"]))
response = response =
conn conn
|> get("/api/pleroma/admin/frontends") |> get("/api/v1/pleroma/admin/frontends")
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
assert response == [ assert response == [
@ -106,7 +106,7 @@ defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/frontends/install", %{ |> post("/api/v1/pleroma/admin/frontends/install", %{
name: "pleroma", name: "pleroma",
file: "test/fixtures/tesla_mock/frontend.zip" file: "test/fixtures/tesla_mock/frontend.zip"
}) })
@ -122,7 +122,7 @@ defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/frontends/install", %{ |> post("/api/v1/pleroma/admin/frontends/install", %{
name: "unknown", name: "unknown",
ref: "baka", ref: "baka",
build_url: "http://gensokyo.2hu/madeup.zip", build_url: "http://gensokyo.2hu/madeup.zip",
@ -141,7 +141,7 @@ defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do
result = result =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/frontends/install", %{ |> post("/api/v1/pleroma/admin/frontends/install", %{
name: "unknown", name: "unknown",
ref: "baka", ref: "baka",
build_url: "http://gensokyo.2hu/madeup.zip", build_url: "http://gensokyo.2hu/madeup.zip",

View file

@ -37,26 +37,28 @@ defmodule Pleroma.Web.AdminAPI.InstanceControllerTest do
activity = insert(:note_activity, user: user2) activity = insert(:note_activity, user: user2)
%{"total" => 2, "activities" => activities} = %{"total" => 2, "activities" => activities} =
conn |> get("/api/pleroma/admin/instances/archae.me/statuses") |> json_response(200) conn |> get("/api/v1/pleroma/admin/instances/archae.me/statuses") |> json_response(200)
assert length(activities) == 2 assert length(activities) == 2
%{"total" => 1, "activities" => [_]} = %{"total" => 1, "activities" => [_]} =
conn |> get("/api/pleroma/admin/instances/test.com/statuses") |> json_response(200) conn |> get("/api/v1/pleroma/admin/instances/test.com/statuses") |> json_response(200)
%{"total" => 0, "activities" => []} = %{"total" => 0, "activities" => []} =
conn |> get("/api/pleroma/admin/instances/nonexistent.com/statuses") |> json_response(200) conn
|> get("/api/v1/pleroma/admin/instances/nonexistent.com/statuses")
|> json_response(200)
CommonAPI.repeat(activity.id, user) CommonAPI.repeat(activity.id, user)
%{"total" => 2, "activities" => activities} = %{"total" => 2, "activities" => activities} =
conn |> get("/api/pleroma/admin/instances/archae.me/statuses") |> json_response(200) conn |> get("/api/v1/pleroma/admin/instances/archae.me/statuses") |> json_response(200)
assert length(activities) == 2 assert length(activities) == 2
%{"total" => 3, "activities" => activities} = %{"total" => 3, "activities" => activities} =
conn conn
|> get("/api/pleroma/admin/instances/archae.me/statuses?with_reblogs=true") |> get("/api/v1/pleroma/admin/instances/archae.me/statuses?with_reblogs=true")
|> json_response(200) |> json_response(200)
assert length(activities) == 3 assert length(activities) == 3
@ -68,7 +70,7 @@ defmodule Pleroma.Web.AdminAPI.InstanceControllerTest do
response = response =
conn conn
|> delete("/api/pleroma/admin/instances/lain.com") |> delete("/api/v1/pleroma/admin/instances/lain.com")
|> json_response(200) |> json_response(200)
[:ok] = ObanHelpers.perform_all() [:ok] = ObanHelpers.perform_all()

View file

@ -28,9 +28,9 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do
{:ok, %{admin: admin, token: token, conn: conn}} {:ok, %{admin: admin, token: token, conn: conn}}
end end
describe "GET /api/pleroma/admin/instance_document/:name" do describe "GET /api/v1/pleroma/admin/instance_document/:name" do
test "return the instance document url", %{conn: conn} do test "return the instance document url", %{conn: conn} do
conn = get(conn, "/api/pleroma/admin/instance_document/instance-panel") conn = get(conn, "/api/v1/pleroma/admin/instance_document/instance-panel")
assert content = html_response(conn, 200) assert content = html_response(conn, 200)
assert String.contains?(content, @default_instance_panel) assert String.contains?(content, @default_instance_panel)
@ -44,7 +44,7 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do
build_conn() build_conn()
|> assign(:user, non_admin_user) |> assign(:user, non_admin_user)
|> assign(:token, token) |> assign(:token, token)
|> get("/api/pleroma/admin/instance_document/instance-panel") |> get("/api/v1/pleroma/admin/instance_document/instance-panel")
assert json_response(conn, :forbidden) assert json_response(conn, :forbidden)
end end
@ -52,13 +52,13 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do
test "it returns 404 if the instance document with the given name doesn't exist", %{ test "it returns 404 if the instance document with the given name doesn't exist", %{
conn: conn conn: conn
} do } do
conn = get(conn, "/api/pleroma/admin/instance_document/1234") conn = get(conn, "/api/v1/pleroma/admin/instance_document/1234")
assert json_response_and_validate_schema(conn, 404) assert json_response_and_validate_schema(conn, 404)
end end
end end
describe "PATCH /api/pleroma/admin/instance_document/:name" do describe "PATCH /api/v1/pleroma/admin/instance_document/:name" do
test "uploads the instance document", %{conn: conn} do test "uploads the instance document", %{conn: conn} do
image = %Plug.Upload{ image = %Plug.Upload{
content_type: "text/html", content_type: "text/html",
@ -69,7 +69,7 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/admin/instance_document/instance-panel", %{ |> patch("/api/v1/pleroma/admin/instance_document/instance-panel", %{
"file" => image "file" => image
}) })
@ -79,24 +79,24 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do
end end
end end
describe "DELETE /api/pleroma/admin/instance_document/:name" do describe "DELETE /api/v1/pleroma/admin/instance_document/:name" do
test "deletes the instance document", %{conn: conn} do test "deletes the instance document", %{conn: conn} do
File.mkdir!(@dir <> "/instance/") File.mkdir!(@dir <> "/instance/")
File.write!(@dir <> "/instance/panel.html", "Custom instance panel") File.write!(@dir <> "/instance/panel.html", "Custom instance panel")
conn_resp = conn_resp =
conn conn
|> get("/api/pleroma/admin/instance_document/instance-panel") |> get("/api/v1/pleroma/admin/instance_document/instance-panel")
assert html_response(conn_resp, 200) == "Custom instance panel" assert html_response(conn_resp, 200) == "Custom instance panel"
conn conn
|> delete("/api/pleroma/admin/instance_document/instance-panel") |> delete("/api/v1/pleroma/admin/instance_document/instance-panel")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
conn_resp = conn_resp =
conn conn
|> get("/api/pleroma/admin/instance_document/instance-panel") |> get("/api/v1/pleroma/admin/instance_document/instance-panel")
assert content = html_response(conn_resp, 200) assert content = html_response(conn_resp, 200)
assert String.contains?(content, @default_instance_panel) assert String.contains?(content, @default_instance_panel)

View file

@ -22,7 +22,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
{:ok, %{admin: admin, token: token, conn: conn}} {:ok, %{admin: admin, token: token, conn: conn}}
end end
describe "POST /api/pleroma/admin/users/email_invite, with valid config" do describe "POST /api/v1/pleroma/admin/users/email_invite, with valid config" do
setup do: clear_config([:instance, :registrations_open], false) setup do: clear_config([:instance, :registrations_open], false)
setup do: clear_config([:instance, :invites_enabled], true) setup do: clear_config([:instance, :invites_enabled], true)
@ -33,7 +33,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json;charset=utf-8") |> put_req_header("content-type", "application/json;charset=utf-8")
|> post("/api/pleroma/admin/users/email_invite", %{ |> post("/api/v1/pleroma/admin/users/email_invite", %{
email: recipient_email, email: recipient_email,
name: recipient_name name: recipient_name
}) })
@ -71,7 +71,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
|> assign(:user, non_admin_user) |> assign(:user, non_admin_user)
|> assign(:token, token) |> assign(:token, token)
|> put_req_header("content-type", "application/json;charset=utf-8") |> put_req_header("content-type", "application/json;charset=utf-8")
|> post("/api/pleroma/admin/users/email_invite", %{ |> post("/api/v1/pleroma/admin/users/email_invite", %{
email: "foo@bar.com", email: "foo@bar.com",
name: "JD" name: "JD"
}) })
@ -84,7 +84,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
conn conn
|> put_req_header("content-type", "application/json;charset=utf-8") |> put_req_header("content-type", "application/json;charset=utf-8")
|> post("/api/pleroma/admin/users/email_invite", %{email: recipient_email}) |> post("/api/v1/pleroma/admin/users/email_invite", %{email: recipient_email})
|> json_response_and_validate_schema(:no_content) |> json_response_and_validate_schema(:no_content)
token_record = token_record =
@ -113,7 +113,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
end end
end end
describe "POST /api/pleroma/admin/users/email_invite, with invalid config" do describe "POST /api/v1/pleroma/admin/users/email_invite, with invalid config" do
setup do: clear_config([:instance, :registrations_open]) setup do: clear_config([:instance, :registrations_open])
setup do: clear_config([:instance, :invites_enabled]) setup do: clear_config([:instance, :invites_enabled])
@ -124,7 +124,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/email_invite", %{ |> post("/api/v1/pleroma/admin/users/email_invite", %{
email: "foo@bar.com", email: "foo@bar.com",
name: "JD" name: "JD"
}) })
@ -143,7 +143,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/email_invite", %{ |> post("/api/v1/pleroma/admin/users/email_invite", %{
email: "foo@bar.com", email: "foo@bar.com",
name: "JD" name: "JD"
}) })
@ -156,12 +156,12 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
end end
end end
describe "POST /api/pleroma/admin/users/invite_token" do describe "POST /api/v1/pleroma/admin/users/invite_token" do
test "without options", %{conn: conn} do test "without options", %{conn: conn} do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/invite_token") |> post("/api/v1/pleroma/admin/users/invite_token")
invite_json = json_response_and_validate_schema(conn, 200) invite_json = json_response_and_validate_schema(conn, 200)
invite = UserInviteToken.find_by_token!(invite_json["token"]) invite = UserInviteToken.find_by_token!(invite_json["token"])
@ -175,7 +175,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/invite_token", %{ |> post("/api/v1/pleroma/admin/users/invite_token", %{
"expires_at" => Date.to_string(Date.utc_today()) "expires_at" => Date.to_string(Date.utc_today())
}) })
@ -192,7 +192,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/invite_token", %{"max_use" => 150}) |> post("/api/v1/pleroma/admin/users/invite_token", %{"max_use" => 150})
invite_json = json_response_and_validate_schema(conn, 200) invite_json = json_response_and_validate_schema(conn, 200)
invite = UserInviteToken.find_by_token!(invite_json["token"]) invite = UserInviteToken.find_by_token!(invite_json["token"])
@ -206,7 +206,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/invite_token", %{ |> post("/api/v1/pleroma/admin/users/invite_token", %{
"max_use" => 150, "max_use" => 150,
"expires_at" => Date.to_string(Date.utc_today()) "expires_at" => Date.to_string(Date.utc_today())
}) })
@ -220,9 +220,9 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
end end
end end
describe "GET /api/pleroma/admin/users/invites" do describe "GET /api/v1/pleroma/admin/users/invites" do
test "no invites", %{conn: conn} do test "no invites", %{conn: conn} do
conn = get(conn, "/api/pleroma/admin/users/invites") conn = get(conn, "/api/v1/pleroma/admin/users/invites")
assert json_response_and_validate_schema(conn, 200) == %{"invites" => []} assert json_response_and_validate_schema(conn, 200) == %{"invites" => []}
end end
@ -230,7 +230,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
test "with invite", %{conn: conn} do test "with invite", %{conn: conn} do
{:ok, invite} = UserInviteToken.create_invite() {:ok, invite} = UserInviteToken.create_invite()
conn = get(conn, "/api/pleroma/admin/users/invites") conn = get(conn, "/api/v1/pleroma/admin/users/invites")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"invites" => [ "invites" => [
@ -248,14 +248,14 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
end end
end end
describe "POST /api/pleroma/admin/users/revoke_invite" do describe "POST /api/v1/pleroma/admin/users/revoke_invite" do
test "with token", %{conn: conn} do test "with token", %{conn: conn} do
{:ok, invite} = UserInviteToken.create_invite() {:ok, invite} = UserInviteToken.create_invite()
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/revoke_invite", %{"token" => invite.token}) |> post("/api/v1/pleroma/admin/users/revoke_invite", %{"token" => invite.token})
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"expires_at" => nil, "expires_at" => nil,
@ -272,7 +272,7 @@ defmodule Pleroma.Web.AdminAPI.InviteControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/revoke_invite", %{"token" => "foo"}) |> post("/api/v1/pleroma/admin/users/revoke_invite", %{"token" => "foo"})
assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"} assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"}
end end

View file

@ -28,7 +28,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
{:ok, %{admin: admin, token: token, conn: conn}} {:ok, %{admin: admin, token: token, conn: conn}}
end end
describe "GET /api/pleroma/admin/media_proxy_caches" do describe "GET /api/v1/pleroma/admin/media_proxy_caches" do
test "shows banned MediaProxy URLs", %{conn: conn} do test "shows banned MediaProxy URLs", %{conn: conn} do
MediaProxy.put_in_banned_urls([ MediaProxy.put_in_banned_urls([
"http://localhost:4001/media/a688346.jpg", "http://localhost:4001/media/a688346.jpg",
@ -41,7 +41,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/media_proxy_caches?page_size=2") |> get("/api/v1/pleroma/admin/media_proxy_caches?page_size=2")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert response["page_size"] == 2 assert response["page_size"] == 2
@ -51,7 +51,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=2") |> get("/api/v1/pleroma/admin/media_proxy_caches?page_size=2&page=2")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert response["page_size"] == 2 assert response["page_size"] == 2
@ -61,7 +61,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=3") |> get("/api/v1/pleroma/admin/media_proxy_caches?page_size=2&page=3")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
results = results ++ response["urls"] results = results ++ response["urls"]
@ -89,7 +89,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/media_proxy_caches?page_size=2&query=F44") |> get("/api/v1/pleroma/admin/media_proxy_caches?page_size=2&query=F44")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert response["urls"] |> Enum.sort() == [ assert response["urls"] |> Enum.sort() == [
@ -102,7 +102,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
end end
end end
describe "POST /api/pleroma/admin/media_proxy_caches/delete" do describe "POST /api/v1/pleroma/admin/media_proxy_caches/delete" do
test "deleted MediaProxy URLs from banned", %{conn: conn} do test "deleted MediaProxy URLs from banned", %{conn: conn} do
MediaProxy.put_in_banned_urls([ MediaProxy.put_in_banned_urls([
"http://localhost:4001/media/a688346.jpg", "http://localhost:4001/media/a688346.jpg",
@ -111,7 +111,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/media_proxy_caches/delete", %{ |> post("/api/v1/pleroma/admin/media_proxy_caches/delete", %{
urls: ["http://localhost:4001/media/a688346.jpg"] urls: ["http://localhost:4001/media/a688346.jpg"]
}) })
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
@ -121,7 +121,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
end end
end end
describe "POST /api/pleroma/admin/media_proxy_caches/purge" do describe "POST /api/v1/pleroma/admin/media_proxy_caches/purge" do
test "perform invalidates cache of MediaProxy", %{conn: conn} do test "perform invalidates cache of MediaProxy", %{conn: conn} do
urls = [ urls = [
"http://example.com/media/a688346.jpg", "http://example.com/media/a688346.jpg",
@ -136,7 +136,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
] do ] do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/media_proxy_caches/purge", %{urls: urls, ban: false}) |> post("/api/v1/pleroma/admin/media_proxy_caches/purge", %{urls: urls, ban: false})
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
refute MediaProxy.in_banned_urls("http://example.com/media/a688346.jpg") refute MediaProxy.in_banned_urls("http://example.com/media/a688346.jpg")
@ -154,7 +154,7 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post( |> post(
"/api/pleroma/admin/media_proxy_caches/purge", "/api/v1/pleroma/admin/media_proxy_caches/purge",
%{urls: urls, ban: true} %{urls: urls, ban: true}
) )
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)

View file

@ -22,12 +22,12 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
{:ok, %{admin: admin, token: token, conn: conn}} {:ok, %{admin: admin, token: token, conn: conn}}
end end
describe "POST /api/pleroma/admin/oauth_app" do describe "POST /api/v1/pleroma/admin/oauth_app" do
test "errors", %{conn: conn} do test "errors", %{conn: conn} do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/oauth_app", %{}) |> post("/api/v1/pleroma/admin/oauth_app", %{})
|> json_response_and_validate_schema(400) |> json_response_and_validate_schema(400)
assert %{ assert %{
@ -42,7 +42,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/oauth_app", %{ |> post("/api/v1/pleroma/admin/oauth_app", %{
name: app_name, name: app_name,
redirect_uris: base_url redirect_uris: base_url
}) })
@ -64,7 +64,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/oauth_app", %{ |> post("/api/v1/pleroma/admin/oauth_app", %{
name: app_name, name: app_name,
redirect_uris: base_url, redirect_uris: base_url,
trusted: true trusted: true
@ -81,7 +81,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
end end
end end
describe "GET /api/pleroma/admin/oauth_app" do describe "GET /api/v1/pleroma/admin/oauth_app" do
setup do setup do
app = insert(:oauth_app) app = insert(:oauth_app)
{:ok, app: app} {:ok, app: app}
@ -90,7 +90,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
test "list", %{conn: conn} do test "list", %{conn: conn} do
response = response =
conn conn
|> get("/api/pleroma/admin/oauth_app") |> get("/api/v1/pleroma/admin/oauth_app")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert %{"apps" => apps, "count" => count, "page_size" => _} = response assert %{"apps" => apps, "count" => count, "page_size" => _} = response
@ -104,7 +104,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/oauth_app?page_size=#{page_size}") |> get("/api/v1/pleroma/admin/oauth_app?page_size=#{page_size}")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert %{"apps" => apps, "count" => _, "page_size" => ^page_size} = response assert %{"apps" => apps, "count" => _, "page_size" => ^page_size} = response
@ -115,7 +115,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
test "search by client name", %{conn: conn, app: app} do test "search by client name", %{conn: conn, app: app} do
response = response =
conn conn
|> get("/api/pleroma/admin/oauth_app?name=#{app.client_name}") |> get("/api/v1/pleroma/admin/oauth_app?name=#{app.client_name}")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert %{"apps" => [returned], "count" => _, "page_size" => _} = response assert %{"apps" => [returned], "count" => _, "page_size" => _} = response
@ -127,7 +127,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
test "search by client id", %{conn: conn, app: app} do test "search by client id", %{conn: conn, app: app} do
response = response =
conn conn
|> get("/api/pleroma/admin/oauth_app?client_id=#{app.client_id}") |> get("/api/v1/pleroma/admin/oauth_app?client_id=#{app.client_id}")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert %{"apps" => [returned], "count" => _, "page_size" => _} = response assert %{"apps" => [returned], "count" => _, "page_size" => _} = response
@ -141,7 +141,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/oauth_app?trusted=true") |> get("/api/v1/pleroma/admin/oauth_app?trusted=true")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert %{"apps" => [returned], "count" => _, "page_size" => _} = response assert %{"apps" => [returned], "count" => _, "page_size" => _} = response
@ -151,13 +151,13 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
end end
end end
describe "DELETE /api/pleroma/admin/oauth_app/:id" do describe "DELETE /api/v1/pleroma/admin/oauth_app/:id" do
test "with id", %{conn: conn} do test "with id", %{conn: conn} do
app = insert(:oauth_app) app = insert(:oauth_app)
response = response =
conn conn
|> delete("/api/pleroma/admin/oauth_app/" <> to_string(app.id)) |> delete("/api/v1/pleroma/admin/oauth_app/" <> to_string(app.id))
|> json_response_and_validate_schema(:no_content) |> json_response_and_validate_schema(:no_content)
assert response == "" assert response == ""
@ -166,14 +166,14 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
test "with non existance id", %{conn: conn} do test "with non existance id", %{conn: conn} do
response = response =
conn conn
|> delete("/api/pleroma/admin/oauth_app/0") |> delete("/api/v1/pleroma/admin/oauth_app/0")
|> json_response_and_validate_schema(:bad_request) |> json_response_and_validate_schema(:bad_request)
assert response == "" assert response == ""
end end
end end
describe "PATCH /api/pleroma/admin/oauth_app/:id" do describe "PATCH /api/v1/pleroma/admin/oauth_app/:id" do
test "with id", %{conn: conn} do test "with id", %{conn: conn} do
app = insert(:oauth_app) app = insert(:oauth_app)
@ -186,7 +186,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/oauth_app/#{id}", %{ |> patch("/api/v1/pleroma/admin/oauth_app/#{id}", %{
name: name, name: name,
trusted: true, trusted: true,
redirect_uris: url, redirect_uris: url,
@ -210,7 +210,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/oauth_app/0") |> patch("/api/v1/pleroma/admin/oauth_app/0")
|> json_response_and_validate_schema(:bad_request) |> json_response_and_validate_schema(:bad_request)
assert response == "" assert response == ""

View file

@ -34,7 +34,7 @@ defmodule Pleroma.Web.AdminAPI.RelayControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/relay", %{ |> post("/api/v1/pleroma/admin/relay", %{
relay_url: "http://mastodon.example.org/users/admin" relay_url: "http://mastodon.example.org/users/admin"
}) })
@ -58,7 +58,7 @@ defmodule Pleroma.Web.AdminAPI.RelayControllerTest do
User.follow(relay_user, user) User.follow(relay_user, user)
end) end)
conn = get(conn, "/api/pleroma/admin/relay") conn = get(conn, "/api/v1/pleroma/admin/relay")
assert json_response_and_validate_schema(conn, 200)["relays"] |> Enum.sort() == [ assert json_response_and_validate_schema(conn, 200)["relays"] |> Enum.sort() == [
%{ %{
@ -72,14 +72,14 @@ defmodule Pleroma.Web.AdminAPI.RelayControllerTest do
test "DELETE /relay", %{conn: conn, admin: admin} do test "DELETE /relay", %{conn: conn, admin: admin} do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/relay", %{ |> post("/api/v1/pleroma/admin/relay", %{
relay_url: "http://mastodon.example.org/users/admin" relay_url: "http://mastodon.example.org/users/admin"
}) })
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> delete("/api/pleroma/admin/relay", %{ |> delete("/api/v1/pleroma/admin/relay", %{
relay_url: "http://mastodon.example.org/users/admin" relay_url: "http://mastodon.example.org/users/admin"
}) })

View file

@ -25,7 +25,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
{:ok, %{admin: admin, token: token, conn: conn}} {:ok, %{admin: admin, token: token, conn: conn}}
end end
describe "GET /api/pleroma/admin/reports/:id" do describe "GET /api/v1/pleroma/admin/reports/:id" do
test "returns report by its id", %{conn: conn} do test "returns report by its id", %{conn: conn} do
[reporter, target_user] = insert_pair(:user) [reporter, target_user] = insert_pair(:user)
activity = insert(:note_activity, user: target_user) activity = insert(:note_activity, user: target_user)
@ -39,13 +39,13 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/reports/#{report_id}/notes", %{ |> post("/api/v1/pleroma/admin/reports/#{report_id}/notes", %{
content: "this is an admin note" content: "this is an admin note"
}) })
response = response =
conn conn
|> get("/api/pleroma/admin/reports/#{report_id}") |> get("/api/v1/pleroma/admin/reports/#{report_id}")
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
assert response["id"] == report_id assert response["id"] == report_id
@ -55,13 +55,13 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
end end
test "returns 404 when report id is invalid", %{conn: conn} do test "returns 404 when report id is invalid", %{conn: conn} do
conn = get(conn, "/api/pleroma/admin/reports/test") conn = get(conn, "/api/v1/pleroma/admin/reports/test")
assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"} assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"}
end end
end end
describe "PATCH /api/pleroma/admin/reports" do describe "PATCH /api/v1/pleroma/admin/reports" do
setup do setup do
[reporter, target_user] = insert_pair(:user) [reporter, target_user] = insert_pair(:user)
activity = insert(:note_activity, user: target_user) activity = insert(:note_activity, user: target_user)
@ -94,7 +94,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
conn conn
|> assign(:token, read_token) |> assign(:token, read_token)
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/reports", %{ |> patch("/api/v1/pleroma/admin/reports", %{
"reports" => [%{"state" => "resolved", "id" => id}] "reports" => [%{"state" => "resolved", "id" => id}]
}) })
|> json_response_and_validate_schema(403) |> json_response_and_validate_schema(403)
@ -106,7 +106,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
conn conn
|> assign(:token, write_token) |> assign(:token, write_token)
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/reports", %{ |> patch("/api/v1/pleroma/admin/reports", %{
"reports" => [%{"state" => "resolved", "id" => id}] "reports" => [%{"state" => "resolved", "id" => id}]
}) })
|> json_response_and_validate_schema(:no_content) |> json_response_and_validate_schema(:no_content)
@ -115,7 +115,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
test "mark report as resolved", %{conn: conn, id: id, admin: admin} do test "mark report as resolved", %{conn: conn, id: id, admin: admin} do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/reports", %{ |> patch("/api/v1/pleroma/admin/reports", %{
"reports" => [ "reports" => [
%{"state" => "resolved", "id" => id} %{"state" => "resolved", "id" => id}
] ]
@ -134,7 +134,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
test "closes report", %{conn: conn, id: id, admin: admin} do test "closes report", %{conn: conn, id: id, admin: admin} do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/reports", %{ |> patch("/api/v1/pleroma/admin/reports", %{
"reports" => [ "reports" => [
%{"state" => "closed", "id" => id} %{"state" => "closed", "id" => id}
] ]
@ -154,7 +154,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/reports", %{ |> patch("/api/v1/pleroma/admin/reports", %{
"reports" => [ "reports" => [
%{"state" => "test", "id" => id} %{"state" => "test", "id" => id}
] ]
@ -168,7 +168,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/reports", %{ |> patch("/api/v1/pleroma/admin/reports", %{
"reports" => [ "reports" => [
%{"state" => "closed", "id" => "test"} %{"state" => "closed", "id" => "test"}
] ]
@ -185,7 +185,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
} do } do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/reports", %{ |> patch("/api/v1/pleroma/admin/reports", %{
"reports" => [ "reports" => [
%{"state" => "resolved", "id" => id}, %{"state" => "resolved", "id" => id},
%{"state" => "closed", "id" => second_report_id} %{"state" => "closed", "id" => second_report_id}
@ -208,7 +208,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
end end
end end
describe "GET /api/pleroma/admin/reports" do describe "GET /api/v1/pleroma/admin/reports" do
test "returns empty response when no reports created", %{conn: conn} do test "returns empty response when no reports created", %{conn: conn} do
response = response =
conn conn
@ -300,14 +300,14 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
build_conn() build_conn()
|> assign(:user, user) |> assign(:user, user)
|> assign(:token, token) |> assign(:token, token)
|> get("/api/pleroma/admin/reports") |> get("/api/v1/pleroma/admin/reports")
assert json_response(conn, :forbidden) == assert json_response(conn, :forbidden) ==
%{"error" => "User is not a staff member."} %{"error" => "User is not a staff member."}
end end
test "returns 403 when requested by anonymous" do test "returns 403 when requested by anonymous" do
conn = get(build_conn(), "/api/pleroma/admin/reports") conn = get(build_conn(), "/api/v1/pleroma/admin/reports")
assert json_response(conn, :forbidden) == %{ assert json_response(conn, :forbidden) == %{
"error" => "Invalid credentials." "error" => "Invalid credentials."
@ -315,7 +315,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
end end
end end
describe "POST /api/pleroma/admin/reports/:id/notes" do describe "POST /api/v1/pleroma/admin/reports/:id/notes" do
setup %{conn: conn, admin: admin} do setup %{conn: conn, admin: admin} do
[reporter, target_user] = insert_pair(:user) [reporter, target_user] = insert_pair(:user)
activity = insert(:note_activity, user: target_user) activity = insert(:note_activity, user: target_user)
@ -329,13 +329,13 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/reports/#{report_id}/notes", %{ |> post("/api/v1/pleroma/admin/reports/#{report_id}/notes", %{
content: "this is disgusting!" content: "this is disgusting!"
}) })
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/reports/#{report_id}/notes", %{ |> post("/api/v1/pleroma/admin/reports/#{report_id}/notes", %{
content: "this is disgusting2!" content: "this is disgusting2!"
}) })
@ -356,7 +356,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
end end
test "it returns reports with notes", %{conn: conn, admin: admin} do test "it returns reports with notes", %{conn: conn, admin: admin} do
conn = get(conn, "/api/pleroma/admin/reports") conn = get(conn, "/api/v1/pleroma/admin/reports")
response = json_response_and_validate_schema(conn, 200) response = json_response_and_validate_schema(conn, 200)
notes = hd(response["reports"])["notes"] notes = hd(response["reports"])["notes"]
@ -379,7 +379,7 @@ defmodule Pleroma.Web.AdminAPI.ReportControllerTest do
assert ReportNote |> Repo.all() |> length() == 2 assert ReportNote |> Repo.all() |> length() == 2
assert [note, _] = Repo.all(ReportNote) assert [note, _] = Repo.all(ReportNote)
delete(conn, "/api/pleroma/admin/reports/#{report_id}/notes/#{note.id}") delete(conn, "/api/v1/pleroma/admin/reports/#{report_id}/notes/#{note.id}")
assert ReportNote |> Repo.all() |> length() == 1 assert ReportNote |> Repo.all() |> length() == 1
end end

View file

@ -25,10 +25,10 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
{:ok, %{admin: admin, token: token, conn: conn}} {:ok, %{admin: admin, token: token, conn: conn}}
end end
describe "GET /api/pleroma/admin/statuses/:id" do describe "GET /api/v1/pleroma/admin/statuses/:id" do
test "not found", %{conn: conn} do test "not found", %{conn: conn} do
assert conn assert conn
|> get("/api/pleroma/admin/statuses/not_found") |> get("/api/v1/pleroma/admin/statuses/not_found")
|> json_response_and_validate_schema(:not_found) |> json_response_and_validate_schema(:not_found)
end end
@ -37,7 +37,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/statuses/#{activity.id}") |> get("/api/v1/pleroma/admin/statuses/#{activity.id}")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert response["id"] == activity.id assert response["id"] == activity.id
@ -52,7 +52,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
end end
end end
describe "PUT /api/pleroma/admin/statuses/:id" do describe "PUT /api/v1/pleroma/admin/statuses/:id" do
setup do setup do
activity = insert(:note_activity) activity = insert(:note_activity)
@ -63,7 +63,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> put("/api/pleroma/admin/statuses/#{id}", %{"sensitive" => "true"}) |> put("/api/v1/pleroma/admin/statuses/#{id}", %{"sensitive" => "true"})
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
assert response["sensitive"] assert response["sensitive"]
@ -76,7 +76,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> put("/api/pleroma/admin/statuses/#{id}", %{"sensitive" => "false"}) |> put("/api/v1/pleroma/admin/statuses/#{id}", %{"sensitive" => "false"})
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
refute response["sensitive"] refute response["sensitive"]
@ -86,7 +86,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "public"}) |> put("/api/v1/pleroma/admin/statuses/#{id}", %{visibility: "public"})
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
assert response["visibility"] == "public" assert response["visibility"] == "public"
@ -99,7 +99,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "private"}) |> put("/api/v1/pleroma/admin/statuses/#{id}", %{visibility: "private"})
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
assert response["visibility"] == "private" assert response["visibility"] == "private"
@ -107,7 +107,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "unlisted"}) |> put("/api/v1/pleroma/admin/statuses/#{id}", %{visibility: "unlisted"})
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
assert response["visibility"] == "unlisted" assert response["visibility"] == "unlisted"
@ -117,14 +117,14 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "test"}) |> put("/api/v1/pleroma/admin/statuses/#{id}", %{visibility: "test"})
assert %{"error" => "test - Invalid value for enum."} = assert %{"error" => "test - Invalid value for enum."} =
json_response_and_validate_schema(conn, :bad_request) json_response_and_validate_schema(conn, :bad_request)
end end
end end
describe "DELETE /api/pleroma/admin/statuses/:id" do describe "DELETE /api/v1/pleroma/admin/statuses/:id" do
setup do setup do
activity = insert(:note_activity) activity = insert(:note_activity)
@ -133,7 +133,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
test "deletes status", %{conn: conn, id: id, admin: admin} do test "deletes status", %{conn: conn, id: id, admin: admin} do
conn conn
|> delete("/api/pleroma/admin/statuses/#{id}") |> delete("/api/v1/pleroma/admin/statuses/#{id}")
|> json_response_and_validate_schema(:ok) |> json_response_and_validate_schema(:ok)
refute Activity.get_by_id(id) refute Activity.get_by_id(id)
@ -145,13 +145,13 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
end end
test "returns 404 when the status does not exist", %{conn: conn} do test "returns 404 when the status does not exist", %{conn: conn} do
conn = delete(conn, "/api/pleroma/admin/statuses/test") conn = delete(conn, "/api/v1/pleroma/admin/statuses/test")
assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"} assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"}
end end
end end
describe "GET /api/pleroma/admin/statuses" do describe "GET /api/v1/pleroma/admin/statuses" do
test "returns all public and unlisted statuses", %{conn: conn, admin: admin} do test "returns all public and unlisted statuses", %{conn: conn, admin: admin} do
blocked = insert(:user) blocked = insert(:user)
user = insert(:user) user = insert(:user)
@ -166,7 +166,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/statuses") |> get("/api/v1/pleroma/admin/statuses")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
refute "private" in Enum.map(response, & &1["visibility"]) refute "private" in Enum.map(response, & &1["visibility"])
@ -181,7 +181,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
response = response =
conn conn
|> get("/api/pleroma/admin/statuses?local_only=true") |> get("/api/v1/pleroma/admin/statuses?local_only=true")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert length(response) == 1 assert length(response) == 1
@ -194,7 +194,7 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"}) {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"})
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"}) {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
conn = get(conn, "/api/pleroma/admin/statuses?godmode=true") conn = get(conn, "/api/v1/pleroma/admin/statuses?godmode=true")
assert json_response_and_validate_schema(conn, 200) |> length() == 3 assert json_response_and_validate_schema(conn, 200) |> length() == 3
end end
end end

View file

@ -42,15 +42,16 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
user = insert(:user) user = insert(:user)
conn = get(build_conn(), "/api/pleroma/admin/users/#{user.nickname}?admin_token=password123") conn =
get(build_conn(), "/api/v1/pleroma/admin/users/#{user.nickname}?admin_token=password123")
assert json_response_and_validate_schema(conn, 200) assert json_response_and_validate_schema(conn, 200)
end end
test "GET /api/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope", test "GET /api/v1/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope",
%{admin: admin} do %{admin: admin} do
user = insert(:user) user = insert(:user)
url = "/api/pleroma/admin/users/#{user.nickname}" url = "/api/v1/pleroma/admin/users/#{user.nickname}"
good_token1 = insert(:oauth_token, user: admin, scopes: ["admin"]) good_token1 = insert(:oauth_token, user: admin, scopes: ["admin"])
good_token2 = insert(:oauth_token, user: admin, scopes: ["admin:read"]) good_token2 = insert(:oauth_token, user: admin, scopes: ["admin:read"])
@ -91,7 +92,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
end end
end end
describe "DELETE /api/pleroma/admin/users" do describe "DELETE /api/v1/pleroma/admin/users" do
test "single user", %{admin: admin, conn: conn} do test "single user", %{admin: admin, conn: conn} do
clear_config([:instance, :federating], true) clear_config([:instance, :federating], true)
@ -120,7 +121,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn = conn =
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> delete("/api/pleroma/admin/users?nickname=#{user.nickname}") |> delete("/api/v1/pleroma/admin/users?nickname=#{user.nickname}")
ObanHelpers.perform_all() ObanHelpers.perform_all()
@ -156,7 +157,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> delete("/api/pleroma/admin/users", %{ |> delete("/api/v1/pleroma/admin/users", %{
nicknames: [user_one.nickname, user_two.nickname] nicknames: [user_one.nickname, user_two.nickname]
}) })
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
@ -170,13 +171,13 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
end end
end end
describe "/api/pleroma/admin/users" do describe "/api/v1/pleroma/admin/users" do
test "Create", %{conn: conn} do test "Create", %{conn: conn} do
response = response =
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users", %{ |> post("/api/v1/pleroma/admin/users", %{
"users" => [ "users" => [
%{ %{
"nickname" => "lain", "nickname" => "lain",
@ -207,7 +208,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users", %{ |> post("/api/v1/pleroma/admin/users", %{
"users" => [ "users" => [
%{ %{
"nickname" => "lain", "nickname" => "lain",
@ -237,7 +238,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users", %{ |> post("/api/v1/pleroma/admin/users", %{
"users" => [ "users" => [
%{ %{
"nickname" => user.nickname, "nickname" => user.nickname,
@ -267,7 +268,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users", %{ |> post("/api/v1/pleroma/admin/users", %{
"users" => [ "users" => [
%{ %{
"nickname" => "newuser", "nickname" => "newuser",
@ -307,11 +308,11 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
end end
end end
describe "/api/pleroma/admin/users/:nickname" do describe "/api/v1/pleroma/admin/users/:nickname" do
test "Show", %{conn: conn} do test "Show", %{conn: conn} do
user = insert(:user) user = insert(:user)
conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}") conn = get(conn, "/api/v1/pleroma/admin/users/#{user.nickname}")
assert user_response(user) == json_response_and_validate_schema(conn, 200) assert user_response(user) == json_response_and_validate_schema(conn, 200)
end end
@ -319,13 +320,13 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
test "when the user doesn't exist", %{conn: conn} do test "when the user doesn't exist", %{conn: conn} do
user = build(:user) user = build(:user)
conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}") conn = get(conn, "/api/v1/pleroma/admin/users/#{user.nickname}")
assert %{"error" => "Not found"} == json_response_and_validate_schema(conn, 404) assert %{"error" => "Not found"} == json_response_and_validate_schema(conn, 404)
end end
end end
describe "/api/pleroma/admin/users/follow" do describe "/api/v1/pleroma/admin/users/follow" do
test "allows to force-follow another user", %{admin: admin, conn: conn} do test "allows to force-follow another user", %{admin: admin, conn: conn} do
user = insert(:user) user = insert(:user)
follower = insert(:user) follower = insert(:user)
@ -333,7 +334,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/follow", %{ |> post("/api/v1/pleroma/admin/users/follow", %{
"follower" => follower.nickname, "follower" => follower.nickname,
"followed" => user.nickname "followed" => user.nickname
}) })
@ -350,7 +351,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
end end
end end
describe "/api/pleroma/admin/users/unfollow" do describe "/api/v1/pleroma/admin/users/unfollow" do
test "allows to force-unfollow another user", %{admin: admin, conn: conn} do test "allows to force-unfollow another user", %{admin: admin, conn: conn} do
user = insert(:user) user = insert(:user)
follower = insert(:user) follower = insert(:user)
@ -360,7 +361,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("/api/pleroma/admin/users/unfollow", %{ |> post("/api/v1/pleroma/admin/users/unfollow", %{
"follower" => follower.nickname, "follower" => follower.nickname,
"followed" => user.nickname "followed" => user.nickname
}) })
@ -377,12 +378,12 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
end end
end end
describe "GET /api/pleroma/admin/users" do describe "GET /api/v1/pleroma/admin/users" do
test "renders users array for the first page", %{conn: conn, admin: admin} do test "renders users array for the first page", %{conn: conn, admin: admin} do
user = insert(:user, local: false, tags: ["foo", "bar"]) user = insert(:user, local: false, tags: ["foo", "bar"])
user2 = insert(:user, is_approved: false, registration_reason: "I'm a chill dude") user2 = insert(:user, is_approved: false, registration_reason: "I'm a chill dude")
conn = get(conn, "/api/pleroma/admin/users?page=1") conn = get(conn, "/api/v1/pleroma/admin/users?page=1")
users = [ users = [
user_response( user_response(
@ -415,7 +416,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
assert %{"count" => 26, "page_size" => 10, "users" => users1} = assert %{"count" => 26, "page_size" => 10, "users" => users1} =
conn conn
|> get("/api/pleroma/admin/users?page=1&filters=", %{page_size: "10"}) |> get("/api/v1/pleroma/admin/users?page=1&filters=", %{page_size: "10"})
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert Enum.count(users1) == 10 assert Enum.count(users1) == 10
@ -423,7 +424,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
assert %{"count" => 26, "page_size" => 10, "users" => users2} = assert %{"count" => 26, "page_size" => 10, "users" => users2} =
conn conn
|> get("/api/pleroma/admin/users?page=2&filters=", %{page_size: "10"}) |> get("/api/v1/pleroma/admin/users?page=2&filters=", %{page_size: "10"})
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert Enum.count(users2) == 10 assert Enum.count(users2) == 10
@ -431,7 +432,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
assert %{"count" => 26, "page_size" => 10, "users" => users3} = assert %{"count" => 26, "page_size" => 10, "users" => users3} =
conn conn
|> get("/api/pleroma/admin/users?page=3&filters=", %{page_size: "10"}) |> get("/api/v1/pleroma/admin/users?page=3&filters=", %{page_size: "10"})
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert Enum.count(users3) == 6 assert Enum.count(users3) == 6
@ -441,7 +442,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
test "renders empty array for the second page", %{conn: conn} do test "renders empty array for the second page", %{conn: conn} do
insert(:user) insert(:user)
conn = get(conn, "/api/pleroma/admin/users?page=2") conn = get(conn, "/api/v1/pleroma/admin/users?page=2")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 2, "count" => 2,
@ -453,7 +454,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
test "regular search", %{conn: conn} do test "regular search", %{conn: conn} do
user = insert(:user, nickname: "bob") user = insert(:user, nickname: "bob")
conn = get(conn, "/api/pleroma/admin/users?query=bo") conn = get(conn, "/api/v1/pleroma/admin/users?query=bo")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1, "count" => 1,
@ -466,7 +467,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
user = insert(:user, nickname: "nickname@domain.com") user = insert(:user, nickname: "nickname@domain.com")
insert(:user) insert(:user)
conn = get(conn, "/api/pleroma/admin/users?query=domain.com") conn = get(conn, "/api/v1/pleroma/admin/users?query=domain.com")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1, "count" => 1,
@ -479,7 +480,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
user = insert(:user, nickname: "nickname@domain.com") user = insert(:user, nickname: "nickname@domain.com")
insert(:user) insert(:user)
conn = get(conn, "/api/pleroma/admin/users?query=nickname@domain.com") conn = get(conn, "/api/v1/pleroma/admin/users?query=nickname@domain.com")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1, "count" => 1,
@ -492,7 +493,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
user = insert(:user, name: "Display name") user = insert(:user, name: "Display name")
insert(:user) insert(:user)
conn = get(conn, "/api/pleroma/admin/users?name=display") conn = get(conn, "/api/v1/pleroma/admin/users?name=display")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1, "count" => 1,
@ -505,7 +506,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
user = insert(:user, email: "email@example.com") user = insert(:user, email: "email@example.com")
insert(:user) insert(:user)
conn = get(conn, "/api/pleroma/admin/users?email=email@example.com") conn = get(conn, "/api/v1/pleroma/admin/users?email=email@example.com")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1, "count" => 1,
@ -518,7 +519,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
user = insert(:user, nickname: "aalice") user = insert(:user, nickname: "aalice")
user2 = insert(:user, nickname: "alice") user2 = insert(:user, nickname: "alice")
conn1 = get(conn, "/api/pleroma/admin/users?query=a&page_size=1&page=1") conn1 = get(conn, "/api/v1/pleroma/admin/users?query=a&page_size=1&page=1")
assert json_response_and_validate_schema(conn1, 200) == %{ assert json_response_and_validate_schema(conn1, 200) == %{
"count" => 2, "count" => 2,
@ -526,7 +527,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
"users" => [user_response(user2)] "users" => [user_response(user2)]
} }
conn2 = get(conn, "/api/pleroma/admin/users?query=a&page_size=1&page=2") conn2 = get(conn, "/api/v1/pleroma/admin/users?query=a&page_size=1&page=2")
assert json_response_and_validate_schema(conn2, 200) == %{ assert json_response_and_validate_schema(conn2, 200) == %{
"count" => 2, "count" => 2,
@ -546,7 +547,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
build_conn() build_conn()
|> assign(:user, admin) |> assign(:user, admin)
|> assign(:token, token) |> assign(:token, token)
|> get("/api/pleroma/admin/users?query=bo&filters=local") |> get("/api/v1/pleroma/admin/users?query=bo&filters=local")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1, "count" => 1,
@ -561,7 +562,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
insert(:user, nickname: "bobb", local: false) insert(:user, nickname: "bobb", local: false)
conn = get(conn, "/api/pleroma/admin/users?filters=local") conn = get(conn, "/api/v1/pleroma/admin/users?filters=local")
users = [ users = [
user_response(user), user_response(user),
@ -590,7 +591,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
result = result =
conn conn
|> get("/api/pleroma/admin/users?filters=unconfirmed") |> get("/api/v1/pleroma/admin/users?filters=unconfirmed")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
users = users =
@ -614,7 +615,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
insert(:user, nickname: "happyboy", is_approved: true) insert(:user, nickname: "happyboy", is_approved: true)
conn = get(conn, "/api/pleroma/admin/users?filters=need_approval") conn = get(conn, "/api/v1/pleroma/admin/users?filters=need_approval")
users = [ users = [
user_response( user_response(
@ -635,7 +636,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
insert(:user) insert(:user)
insert(:user) insert(:user)
conn = get(conn, "/api/pleroma/admin/users?filters=is_admin") conn = get(conn, "/api/v1/pleroma/admin/users?filters=is_admin")
users = [ users = [
user_response(second_admin, %{ user_response(second_admin, %{
@ -660,7 +661,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
insert(:user) insert(:user)
insert(:user) insert(:user)
conn = get(conn, "/api/pleroma/admin/users?filters=is_moderator") conn = get(conn, "/api/v1/pleroma/admin/users?filters=is_moderator")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1, "count" => 1,
@ -739,7 +740,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
insert(:user) insert(:user)
insert(:user) insert(:user)
conn = get(conn, "/api/pleroma/admin/users?tags[]=first&tags[]=second") conn = get(conn, "/api/v1/pleroma/admin/users?tags[]=first&tags[]=second")
users = [ users = [
user_response(user2, %{"tags" => ["second"]}), user_response(user2, %{"tags" => ["second"]}),
@ -762,7 +763,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
build_conn() build_conn()
|> assign(:user, token.user) |> assign(:user, token.user)
|> assign(:token, token) |> assign(:token, token)
|> get("/api/pleroma/admin/users?filters=active") |> get("/api/v1/pleroma/admin/users?filters=active")
assert %{ assert %{
"count" => 2, "count" => 2,
@ -786,7 +787,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
build_conn() build_conn()
|> assign(:user, admin) |> assign(:user, admin)
|> assign(:token, token) |> assign(:token, token)
|> get("/api/pleroma/admin/users?filters=deactivated,external") |> get("/api/v1/pleroma/admin/users?filters=deactivated,external")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1, "count" => 1,
@ -798,7 +799,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
test "it omits relay user", %{admin: admin, conn: conn} do test "it omits relay user", %{admin: admin, conn: conn} do
assert %User{} = Relay.get_actor() assert %User{} = Relay.get_actor()
conn = get(conn, "/api/pleroma/admin/users") conn = get(conn, "/api/v1/pleroma/admin/users")
assert json_response_and_validate_schema(conn, 200) == %{ assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1, "count" => 1,
@ -810,7 +811,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
end end
end end
test "PATCH /api/pleroma/admin/users/activate", %{admin: admin, conn: conn} do test "PATCH /api/v1/pleroma/admin/users/activate", %{admin: admin, conn: conn} do
user_one = insert(:user, is_active: false) user_one = insert(:user, is_active: false)
user_two = insert(:user, is_active: false) user_two = insert(:user, is_active: false)
@ -818,7 +819,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch( |> patch(
"/api/pleroma/admin/users/activate", "/api/v1/pleroma/admin/users/activate",
%{nicknames: [user_one.nickname, user_two.nickname]} %{nicknames: [user_one.nickname, user_two.nickname]}
) )
@ -831,7 +832,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
"@#{admin.nickname} activated users: @#{user_one.nickname}, @#{user_two.nickname}" "@#{admin.nickname} activated users: @#{user_one.nickname}, @#{user_two.nickname}"
end end
test "PATCH /api/pleroma/admin/users/deactivate", %{admin: admin, conn: conn} do test "PATCH /api/v1/pleroma/admin/users/deactivate", %{admin: admin, conn: conn} do
user_one = insert(:user, is_active: true) user_one = insert(:user, is_active: true)
user_two = insert(:user, is_active: true) user_two = insert(:user, is_active: true)
@ -839,7 +840,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch( |> patch(
"/api/pleroma/admin/users/deactivate", "/api/v1/pleroma/admin/users/deactivate",
%{nicknames: [user_one.nickname, user_two.nickname]} %{nicknames: [user_one.nickname, user_two.nickname]}
) )
@ -852,7 +853,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
"@#{admin.nickname} deactivated users: @#{user_one.nickname}, @#{user_two.nickname}" "@#{admin.nickname} deactivated users: @#{user_one.nickname}, @#{user_two.nickname}"
end end
test "PATCH /api/pleroma/admin/users/approve", %{admin: admin, conn: conn} do test "PATCH /api/v1/pleroma/admin/users/approve", %{admin: admin, conn: conn} do
user_one = insert(:user, is_approved: false) user_one = insert(:user, is_approved: false)
user_two = insert(:user, is_approved: false) user_two = insert(:user, is_approved: false)
@ -860,7 +861,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch( |> patch(
"/api/pleroma/admin/users/approve", "/api/v1/pleroma/admin/users/approve",
%{nicknames: [user_one.nickname, user_two.nickname]} %{nicknames: [user_one.nickname, user_two.nickname]}
) )
@ -873,7 +874,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
"@#{admin.nickname} approved users: @#{user_one.nickname}, @#{user_two.nickname}" "@#{admin.nickname} approved users: @#{user_one.nickname}, @#{user_two.nickname}"
end end
test "PATCH /api/pleroma/admin/users/suggest", %{admin: admin, conn: conn} do test "PATCH /api/v1/pleroma/admin/users/suggest", %{admin: admin, conn: conn} do
user1 = insert(:user, is_suggested: false) user1 = insert(:user, is_suggested: false)
user2 = insert(:user, is_suggested: false) user2 = insert(:user, is_suggested: false)
@ -881,7 +882,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch( |> patch(
"/api/pleroma/admin/users/suggest", "/api/v1/pleroma/admin/users/suggest",
%{nicknames: [user1.nickname, user2.nickname]} %{nicknames: [user1.nickname, user2.nickname]}
) )
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
@ -898,7 +899,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
"@#{admin.nickname} added suggested users: @#{user1.nickname}, @#{user2.nickname}" "@#{admin.nickname} added suggested users: @#{user1.nickname}, @#{user2.nickname}"
end end
test "PATCH /api/pleroma/admin/users/unsuggest", %{admin: admin, conn: conn} do test "PATCH /api/v1/pleroma/admin/users/unsuggest", %{admin: admin, conn: conn} do
user1 = insert(:user, is_suggested: true) user1 = insert(:user, is_suggested: true)
user2 = insert(:user, is_suggested: true) user2 = insert(:user, is_suggested: true)
@ -906,7 +907,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch( |> patch(
"/api/pleroma/admin/users/unsuggest", "/api/v1/pleroma/admin/users/unsuggest",
%{nicknames: [user1.nickname, user2.nickname]} %{nicknames: [user1.nickname, user2.nickname]}
) )
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
@ -923,13 +924,16 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
"@#{admin.nickname} removed suggested users: @#{user1.nickname}, @#{user2.nickname}" "@#{admin.nickname} removed suggested users: @#{user1.nickname}, @#{user2.nickname}"
end end
test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admin, conn: conn} do test "PATCH /api/v1/pleroma/admin/users/:nickname/toggle_activation", %{
admin: admin,
conn: conn
} do
user = insert(:user) user = insert(:user)
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> patch("/api/pleroma/admin/users/#{user.nickname}/toggle_activation") |> patch("/api/v1/pleroma/admin/users/#{user.nickname}/toggle_activation")
assert json_response_and_validate_schema(conn, 200) == assert json_response_and_validate_schema(conn, 200) ==
user_response( user_response(

View file

@ -72,12 +72,6 @@ defmodule Pleroma.Web.FallbackTest do
end end
end end
test "GET /api*path", %{conn: conn} do
assert conn
|> get("/api/foo")
|> json_response(404) == %{"error" => "Not implemented"}
end
test "GET /pleroma/admin -> /pleroma/admin/", %{conn: conn} do test "GET /pleroma/admin -> /pleroma/admin/", %{conn: conn} do
assert redirected_to(get(conn, "/pleroma/admin")) =~ "/pleroma/admin/" assert redirected_to(get(conn, "/pleroma/admin")) =~ "/pleroma/admin/"
end end

View file

@ -38,7 +38,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
response = response =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("api/v1/statuses", %{ |> post("/api/v1/statuses", %{
"content_type" => "text/plain", "content_type" => "text/plain",
"source" => "Pleroma FE", "source" => "Pleroma FE",
"status" => "Hello world", "status" => "Hello world",
@ -51,7 +51,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
response = response =
conn conn
|> get("api/v1/statuses/#{response["id"]}", %{}) |> get("/api/v1/statuses/#{response["id"]}", %{})
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert response["reblogs_count"] == 0 assert response["reblogs_count"] == 0
@ -110,7 +110,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
conn_four = conn_four =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("api/v1/statuses", %{ |> post("/api/v1/statuses", %{
"status" => "oolong", "status" => "oolong",
"expires_in" => expires_in "expires_in" => expires_in
}) })
@ -133,7 +133,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("api/v1/statuses", %{ |> post("/api/v1/statuses", %{
"status" => "aa chikichiki banban" "status" => "aa chikichiki banban"
}) })
@ -164,7 +164,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
assert %{"error" => "Expiry date is too soon"} = assert %{"error" => "Expiry date is too soon"} =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("api/v1/statuses", %{ |> post("/api/v1/statuses", %{
"status" => "oolong", "status" => "oolong",
"expires_in" => expires_in "expires_in" => expires_in
}) })
@ -176,7 +176,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
assert %{"error" => "Expiry date is too soon"} = assert %{"error" => "Expiry date is too soon"} =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("api/v1/statuses", %{ |> post("/api/v1/statuses", %{
"status" => "oolong", "status" => "oolong",
"expires_in" => expires_in "expires_in" => expires_in
}) })
@ -190,7 +190,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
assert %{"error" => "[KeywordPolicy] Matches with rejected keyword"} = assert %{"error" => "[KeywordPolicy] Matches with rejected keyword"} =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("api/v1/statuses", %{"status" => "GNO/Linux"}) |> post("/api/v1/statuses", %{"status" => "GNO/Linux"})
|> json_response_and_validate_schema(422) |> json_response_and_validate_schema(422)
end end
@ -383,7 +383,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("api/v1/statuses", %{"status" => content, "visibility" => "direct"}) |> post("/api/v1/statuses", %{"status" => content, "visibility" => "direct"})
assert %{"id" => id} = response = json_response_and_validate_schema(conn, 200) assert %{"id" => id} = response = json_response_and_validate_schema(conn, 200)
assert response["visibility"] == "direct" assert response["visibility"] == "direct"
@ -420,7 +420,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
result = result =
conn conn
|> get("api/v1/statuses/#{activity}") |> get("/api/v1/statuses/#{activity}")
assert %{ assert %{
"content" => "cofe is my copilot", "content" => "cofe is my copilot",
@ -449,7 +449,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
result = result =
conn conn
|> get("api/v1/statuses/#{activity}") |> get("/api/v1/statuses/#{activity}")
assert %{ assert %{
"content" => "club mate is my wingman", "content" => "club mate is my wingman",
@ -1342,7 +1342,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
assert %{"id" => id} = assert %{"id" => id} =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> post("api/v1/statuses", %{ |> post("/api/v1/statuses", %{
"status" => "oolong", "status" => "oolong",
"expires_in" => expires_in "expires_in" => expires_in
}) })
@ -1511,7 +1511,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
conn conn
|> assign(:user, user3) |> assign(:user, user3)
|> assign(:token, insert(:oauth_token, user: user3, scopes: ["read:statuses"])) |> assign(:token, insert(:oauth_token, user: user3, scopes: ["read:statuses"]))
|> get("api/v1/timelines/home") |> get("/api/v1/timelines/home")
[reblogged_activity] = json_response_and_validate_schema(conn3, 200) [reblogged_activity] = json_response_and_validate_schema(conn3, 200)

View file

@ -288,7 +288,7 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
get(conn, "/api/v1/timelines/public") get(conn, "/api/v1/timelines/public")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert length(response) == 0 assert response == []
end end
test "doesn't return replies if follow is posting with users from blocked domain" do test "doesn't return replies if follow is posting with users from blocked domain" do
@ -527,7 +527,7 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
|> assign(:token, insert(:oauth_token, user: user_two, scopes: ["read:statuses"])) |> assign(:token, insert(:oauth_token, user: user_two, scopes: ["read:statuses"]))
# Only direct should be visible here # Only direct should be visible here
res_conn = get(conn_user_two, "api/v1/timelines/direct") res_conn = get(conn_user_two, "/api/v1/timelines/direct")
assert [status] = json_response_and_validate_schema(res_conn, :ok) assert [status] = json_response_and_validate_schema(res_conn, :ok)
@ -539,14 +539,14 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
build_conn() build_conn()
|> assign(:user, user_one) |> assign(:user, user_one)
|> assign(:token, insert(:oauth_token, user: user_one, scopes: ["read:statuses"])) |> assign(:token, insert(:oauth_token, user: user_one, scopes: ["read:statuses"]))
|> get("api/v1/timelines/direct") |> get("/api/v1/timelines/direct")
[status] = json_response_and_validate_schema(res_conn, :ok) [status] = json_response_and_validate_schema(res_conn, :ok)
assert %{"visibility" => "direct"} = status assert %{"visibility" => "direct"} = status
# Both should be visible here # Both should be visible here
res_conn = get(conn_user_two, "api/v1/timelines/home") res_conn = get(conn_user_two, "/api/v1/timelines/home")
[_s1, _s2] = json_response_and_validate_schema(res_conn, :ok) [_s1, _s2] = json_response_and_validate_schema(res_conn, :ok)
@ -559,14 +559,14 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
}) })
end) end)
res_conn = get(conn_user_two, "api/v1/timelines/direct") res_conn = get(conn_user_two, "/api/v1/timelines/direct")
statuses = json_response_and_validate_schema(res_conn, :ok) statuses = json_response_and_validate_schema(res_conn, :ok)
assert length(statuses) == 20 assert length(statuses) == 20
max_id = List.last(statuses)["id"] max_id = List.last(statuses)["id"]
res_conn = get(conn_user_two, "api/v1/timelines/direct?max_id=#{max_id}") res_conn = get(conn_user_two, "/api/v1/timelines/direct?max_id=#{max_id}")
assert [status] = json_response_and_validate_schema(res_conn, :ok) assert [status] = json_response_and_validate_schema(res_conn, :ok)
@ -591,7 +591,7 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
visibility: "direct" visibility: "direct"
}) })
res_conn = get(conn, "api/v1/timelines/direct") res_conn = get(conn, "/api/v1/timelines/direct")
[status] = json_response_and_validate_schema(res_conn, :ok) [status] = json_response_and_validate_schema(res_conn, :ok)
assert status["id"] == direct.id assert status["id"] == direct.id

View file

@ -388,7 +388,7 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do
"pleroma_background_image" => new_background_oversized "pleroma_background_image" => new_background_oversized
}) })
assert user_response = json_response_and_validate_schema(res, 413) assert json_response_and_validate_schema(res, 413)
assert user.background == %{} assert user.background == %{}
clear_config([:instance, :upload_limit], upload_limit) clear_config([:instance, :upload_limit], upload_limit)
@ -439,13 +439,13 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do
test "update fields", %{conn: conn} do test "update fields", %{conn: conn} do
fields = [ fields = [
%{"name" => "<a href=\"http://google.com\">foo</a>", "value" => "<script>bar</script>"}, %{name: "<a href=\"http://google.com\">foo</a>", value: "<script>bar</script>"},
%{"name" => "link.io", "value" => "cofe.io"} %{name: "link.io", value: "cofe.io"}
] ]
account_data = account_data =
conn conn
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) |> patch("/api/v1/accounts/update_credentials", %{fields_attributes: fields})
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert account_data["fields"] == [ assert account_data["fields"] == [
@ -467,13 +467,13 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do
test "emojis in fields labels", %{conn: conn} do test "emojis in fields labels", %{conn: conn} do
fields = [ fields = [
%{"name" => ":firefox:", "value" => "is best 2hu"}, %{name: ":firefox:", value: "is best 2hu"},
%{"name" => "they wins", "value" => ":blank:"} %{name: "they wins", value: ":blank:"}
] ]
account_data = account_data =
conn conn
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) |> patch("/api/v1/accounts/update_credentials", %{fields_attributes: fields})
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert account_data["fields"] == [ assert account_data["fields"] == [
@ -521,13 +521,13 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do
test "update fields with empty name", %{conn: conn} do test "update fields with empty name", %{conn: conn} do
fields = [ fields = [
%{"name" => "foo", "value" => ""}, %{name: "foo", value: ""},
%{"name" => "", "value" => "bar"} %{name: "", value: "bar"}
] ]
account = account =
conn conn
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) |> patch("/api/v1/accounts/update_credentials", %{fields_attributes: fields})
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert account["fields"] == [ assert account["fields"] == [
@ -542,30 +542,30 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do
long_name = Enum.map(0..name_limit, fn _ -> "x" end) |> Enum.join() long_name = Enum.map(0..name_limit, fn _ -> "x" end) |> Enum.join()
long_value = Enum.map(0..value_limit, fn _ -> "x" end) |> Enum.join() long_value = Enum.map(0..value_limit, fn _ -> "x" end) |> Enum.join()
fields = [%{"name" => "foo", "value" => long_value}] fields = [%{name: "foo", value: long_value}]
assert %{"error" => "Invalid request"} == assert %{"error" => "Invalid request"} ==
conn conn
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) |> patch("/api/v1/accounts/update_credentials", %{fields_attributes: fields})
|> json_response_and_validate_schema(403) |> json_response_and_validate_schema(403)
fields = [%{"name" => long_name, "value" => "bar"}] fields = [%{name: long_name, value: "bar"}]
assert %{"error" => "Invalid request"} == assert %{"error" => "Invalid request"} ==
conn conn
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) |> patch("/api/v1/accounts/update_credentials", %{fields_attributes: fields})
|> json_response_and_validate_schema(403) |> json_response_and_validate_schema(403)
clear_config([:instance, :max_account_fields], 1) clear_config([:instance, :max_account_fields], 1)
fields = [ fields = [
%{"name" => "foo", "value" => "bar"}, %{name: "foo", value: "bar"},
%{"name" => "link", "value" => "cofe.io"} %{"name" => "link", "value" => "cofe.io"}
] ]
assert %{"error" => "Invalid request"} == assert %{"error" => "Invalid request"} ==
conn conn
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields}) |> patch("/api/v1/accounts/update_credentials", %{fields_attributes: fields})
|> json_response_and_validate_schema(403) |> json_response_and_validate_schema(403)
end end
end end

View file

@ -133,7 +133,7 @@ defmodule Pleroma.Web.PleromaAPI.AccountControllerTest do
|> get("/api/v1/pleroma/accounts/#{user.id}/favourites") |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert length(response) == 0 assert response == []
end end
test "does not return others' favorited DM when user is not one of recipients", %{ test "does not return others' favorited DM when user is not one of recipients", %{

View file

@ -28,7 +28,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
{:ok, %{admin_conn: admin_conn}} {:ok, %{admin_conn: admin_conn}}
end end
describe "POST/PATCH/DELETE /api/pleroma/emoji/packs/files?name=:name" do describe "POST/PATCH/DELETE /api/v1/pleroma/emoji/packs/files?name=:name" do
setup do setup do
pack_file = "#{@emoji_path}/test_pack/pack.json" pack_file = "#{@emoji_path}/test_pack/pack.json"
original_content = File.read!(pack_file) original_content = File.read!(pack_file)
@ -55,7 +55,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
resp = resp =
admin_conn admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
file: %Plug.Upload{ file: %Plug.Upload{
content_type: "application/zip", content_type: "application/zip",
filename: "emojis.zip", filename: "emojis.zip",
@ -82,7 +82,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
test "create shortcode exists", %{admin_conn: admin_conn} do test "create shortcode exists", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank", shortcode: "blank",
filename: "dir/blank.png", filename: "dir/blank.png",
file: %Plug.Upload{ file: %Plug.Upload{
@ -100,7 +100,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank3", shortcode: "blank3",
filename: "dir/blank.png", filename: "dir/blank.png",
file: %Plug.Upload{ file: %Plug.Upload{
@ -118,7 +118,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> patch("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank", shortcode: "blank",
new_shortcode: "blank2", new_shortcode: "blank2",
new_filename: "dir_2/blank_3.png" new_filename: "dir_2/blank_3.png"
@ -134,7 +134,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank3", shortcode: "blank3",
filename: "dir/blank.png", filename: "dir/blank.png",
file: %Plug.Upload{ file: %Plug.Upload{
@ -152,7 +152,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> patch("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank3", shortcode: "blank3",
new_shortcode: "blank4", new_shortcode: "blank4",
new_filename: "dir_2/blank_3.png", new_filename: "dir_2/blank_3.png",
@ -170,7 +170,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
test "with empty filename", %{admin_conn: admin_conn} do test "with empty filename", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank2", shortcode: "blank2",
filename: "", filename: "",
file: %Plug.Upload{ file: %Plug.Upload{
@ -186,7 +186,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
test "add file with not loaded pack", %{admin_conn: admin_conn} do test "add file with not loaded pack", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=not_loaded", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=not_loaded", %{
shortcode: "blank3", shortcode: "blank3",
filename: "dir/blank.png", filename: "dir/blank.png",
file: %Plug.Upload{ file: %Plug.Upload{
@ -209,7 +209,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
]) do ]) do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=not_loaded", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=not_loaded", %{
shortcode: "blank3", shortcode: "blank3",
filename: "dir/blank.png", filename: "dir/blank.png",
file: %Plug.Upload{ file: %Plug.Upload{
@ -226,7 +226,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
test "remove file with not loaded pack", %{admin_conn: admin_conn} do test "remove file with not loaded pack", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/packs/files?name=not_loaded&shortcode=blank3") |> delete("/api/v1/pleroma/emoji/packs/files?name=not_loaded&shortcode=blank3")
|> json_response_and_validate_schema(:not_found) == %{ |> json_response_and_validate_schema(:not_found) == %{
"error" => "pack \"not_loaded\" is not found" "error" => "pack \"not_loaded\" is not found"
} }
@ -234,7 +234,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
test "remove file with empty shortcode", %{admin_conn: admin_conn} do test "remove file with empty shortcode", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/packs/files?name=not_loaded&shortcode=") |> delete("/api/v1/pleroma/emoji/packs/files?name=not_loaded&shortcode=")
|> json_response_and_validate_schema(:not_found) == %{ |> json_response_and_validate_schema(:not_found) == %{
"error" => "pack \"not_loaded\" is not found" "error" => "pack \"not_loaded\" is not found"
} }
@ -243,7 +243,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
test "update file with not loaded pack", %{admin_conn: admin_conn} do test "update file with not loaded pack", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/emoji/packs/files?name=not_loaded", %{ |> patch("/api/v1/pleroma/emoji/packs/files?name=not_loaded", %{
shortcode: "blank4", shortcode: "blank4",
new_shortcode: "blank3", new_shortcode: "blank3",
new_filename: "dir_2/blank_3.png" new_filename: "dir_2/blank_3.png"
@ -256,7 +256,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
test "new with shortcode as file with update", %{admin_conn: admin_conn} do test "new with shortcode as file with update", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank4", shortcode: "blank4",
filename: "dir/blank.png", filename: "dir/blank.png",
file: %Plug.Upload{ file: %Plug.Upload{
@ -274,7 +274,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> patch("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank4", shortcode: "blank4",
new_shortcode: "blank3", new_shortcode: "blank3",
new_filename: "dir_2/blank_3.png" new_filename: "dir_2/blank_3.png"
@ -289,7 +289,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
assert File.exists?("#{@emoji_path}/test_pack/dir_2/blank_3.png") assert File.exists?("#{@emoji_path}/test_pack/dir_2/blank_3.png")
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/packs/files?name=test_pack&shortcode=blank3") |> delete("/api/v1/pleroma/emoji/packs/files?name=test_pack&shortcode=blank3")
|> json_response_and_validate_schema(200) == %{ |> json_response_and_validate_schema(200) == %{
"blank" => "blank.png", "blank" => "blank.png",
"blank2" => "blank2.png" "blank2" => "blank2.png"
@ -311,7 +311,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank_url", shortcode: "blank_url",
file: "https://test-blank/blank_url.png" file: "https://test-blank/blank_url.png"
}) })
@ -331,7 +331,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> post("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
file: %Plug.Upload{ file: %Plug.Upload{
filename: "shortcode.png", filename: "shortcode.png",
path: "#{Pleroma.Config.get([:instance, :static_dir])}/add/shortcode.png" path: "#{Pleroma.Config.get([:instance, :static_dir])}/add/shortcode.png"
@ -346,7 +346,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
test "remove non existing shortcode in pack.json", %{admin_conn: admin_conn} do test "remove non existing shortcode in pack.json", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/packs/files?name=test_pack&shortcode=blank3") |> delete("/api/v1/pleroma/emoji/packs/files?name=test_pack&shortcode=blank3")
|> json_response_and_validate_schema(:bad_request) == %{ |> json_response_and_validate_schema(:bad_request) == %{
"error" => "Emoji \"blank3\" does not exist" "error" => "Emoji \"blank3\" does not exist"
} }
@ -355,7 +355,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
test "update non existing emoji", %{admin_conn: admin_conn} do test "update non existing emoji", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> patch("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank3", shortcode: "blank3",
new_shortcode: "blank4", new_shortcode: "blank4",
new_filename: "dir_2/blank_3.png" new_filename: "dir_2/blank_3.png"
@ -371,7 +371,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiFileControllerTest do
} = } =
admin_conn admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/emoji/packs/files?name=test_pack", %{ |> patch("/api/v1/pleroma/emoji/packs/files?name=test_pack", %{
shortcode: "blank", shortcode: "blank",
new_filename: "dir_2/blank_3.png" new_filename: "dir_2/blank_3.png"
}) })

View file

@ -29,13 +29,16 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
{:ok, %{admin_conn: admin_conn}} {:ok, %{admin_conn: admin_conn}}
end end
test "GET /api/pleroma/emoji/packs when :public: false", %{conn: conn} do test "GET /api/v1/pleroma/emoji/packs when :public: false", %{conn: conn} do
clear_config([:instance, :public], false) clear_config([:instance, :public], false)
conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200) conn |> get("/api/v1/pleroma/emoji/packs") |> json_response_and_validate_schema(200)
end end
test "GET /api/pleroma/emoji/packs", %{conn: conn} do test "GET /api/v1/pleroma/emoji/packs", %{conn: conn} do
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200) resp =
conn
|> get("/api/v1/pleroma/emoji/packs")
|> json_response_and_validate_schema(200)
assert resp["count"] == 4 assert resp["count"] == 4
@ -55,7 +58,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
resp = resp =
conn conn
|> get("/api/pleroma/emoji/packs?page_size=1") |> get("/api/v1/pleroma/emoji/packs?page_size=1")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert resp["count"] == 4 assert resp["count"] == 4
@ -68,7 +71,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
resp = resp =
conn conn
|> get("/api/pleroma/emoji/packs?page_size=1&page=2") |> get("/api/v1/pleroma/emoji/packs?page_size=1&page=2")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert resp["count"] == 4 assert resp["count"] == 4
@ -78,7 +81,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
resp = resp =
conn conn
|> get("/api/pleroma/emoji/packs?page_size=1&page=3") |> get("/api/v1/pleroma/emoji/packs?page_size=1&page=3")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert resp["count"] == 4 assert resp["count"] == 4
@ -88,7 +91,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
resp = resp =
conn conn
|> get("/api/pleroma/emoji/packs?page_size=1&page=4") |> get("/api/v1/pleroma/emoji/packs?page_size=1&page=4")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert resp["count"] == 4 assert resp["count"] == 4
@ -98,11 +101,11 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert [pack1, pack2, pack3, pack4] |> Enum.uniq() |> length() == 4 assert [pack1, pack2, pack3, pack4] |> Enum.uniq() |> length() == 4
end end
describe "GET /api/pleroma/emoji/packs/remote" do describe "GET /api/v1/pleroma/emoji/packs/remote" do
test "shareable instance", %{admin_conn: admin_conn, conn: conn} do test "shareable instance", %{admin_conn: admin_conn, conn: conn} do
resp = resp =
conn conn
|> get("/api/pleroma/emoji/packs?page=2&page_size=1") |> get("/api/v1/pleroma/emoji/packs?page=2&page_size=1")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
mock(fn mock(fn
@ -112,12 +115,17 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} ->
json(%{metadata: %{features: ["shareable_emoji_packs"]}}) json(%{metadata: %{features: ["shareable_emoji_packs"]}})
%{method: :get, url: "https://example.com/api/pleroma/emoji/packs?page=2&page_size=1"} -> %{
method: :get,
url: "https://example.com/api/v1/pleroma/emoji/packs?page=2&page_size=1"
} ->
json(resp) json(resp)
end) end)
assert admin_conn assert admin_conn
|> get("/api/pleroma/emoji/packs/remote?url=https://example.com&page=2&page_size=1") |> get(
"/api/v1/pleroma/emoji/packs/remote?url=https://example.com&page=2&page_size=1"
)
|> json_response_and_validate_schema(200) == resp |> json_response_and_validate_schema(200) == resp
end end
@ -131,18 +139,18 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
end) end)
assert admin_conn assert admin_conn
|> get("/api/pleroma/emoji/packs/remote?url=https://example.com") |> get("/api/v1/pleroma/emoji/packs/remote?url=https://example.com")
|> json_response_and_validate_schema(500) == %{ |> json_response_and_validate_schema(500) == %{
"error" => "The requested instance does not support sharing emoji packs" "error" => "The requested instance does not support sharing emoji packs"
} }
end end
end end
describe "GET /api/pleroma/emoji/packs/archive?name=:name" do describe "GET /api/v1/pleroma/emoji/packs/archive?name=:name" do
test "download shared pack", %{conn: conn} do test "download shared pack", %{conn: conn} do
resp = resp =
conn conn
|> get("/api/pleroma/emoji/packs/archive?name=test_pack") |> get("/api/v1/pleroma/emoji/packs/archive?name=test_pack")
|> response(200) |> response(200)
{:ok, arch} = :zip.unzip(resp, [:memory]) {:ok, arch} = :zip.unzip(resp, [:memory])
@ -153,7 +161,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
test "non existing pack", %{conn: conn} do test "non existing pack", %{conn: conn} do
assert conn assert conn
|> get("/api/pleroma/emoji/packs/archive?name=test_pack_for_import") |> get("/api/v1/pleroma/emoji/packs/archive?name=test_pack_for_import")
|> json_response_and_validate_schema(:not_found) == %{ |> json_response_and_validate_schema(:not_found) == %{
"error" => "Pack test_pack_for_import does not exist" "error" => "Pack test_pack_for_import does not exist"
} }
@ -161,7 +169,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
test "non downloadable pack", %{conn: conn} do test "non downloadable pack", %{conn: conn} do
assert conn assert conn
|> get("/api/pleroma/emoji/packs/archive?name=test_pack_nonshared") |> get("/api/v1/pleroma/emoji/packs/archive?name=test_pack_nonshared")
|> json_response_and_validate_schema(:forbidden) == %{ |> json_response_and_validate_schema(:forbidden) == %{
"error" => "error" =>
"Pack test_pack_nonshared cannot be downloaded from this instance, either pack sharing was disabled for this pack or some files are missing" "Pack test_pack_nonshared cannot be downloaded from this instance, either pack sharing was disabled for this pack or some files are missing"
@ -169,7 +177,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
end end
end end
describe "POST /api/pleroma/emoji/packs/download" do describe "POST /api/v1/pleroma/emoji/packs/download" do
test "shared pack from remote and non shared from fallback-src", %{ test "shared pack from remote and non shared from fallback-src", %{
admin_conn: admin_conn, admin_conn: admin_conn,
conn: conn conn: conn
@ -183,28 +191,28 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/pack?name=test_pack" url: "https://example.com/api/v1/pleroma/emoji/pack?name=test_pack"
} -> } ->
conn conn
|> get("/api/pleroma/emoji/pack?name=test_pack") |> get("/api/v1/pleroma/emoji/pack?name=test_pack")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
|> json() |> json()
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/packs/archive?name=test_pack" url: "https://example.com/api/v1/pleroma/emoji/packs/archive?name=test_pack"
} -> } ->
conn conn
|> get("/api/pleroma/emoji/packs/archive?name=test_pack") |> get("/api/v1/pleroma/emoji/packs/archive?name=test_pack")
|> response(200) |> response(200)
|> text() |> text()
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/pack?name=test_pack_nonshared" url: "https://example.com/api/v1/pleroma/emoji/pack?name=test_pack_nonshared"
} -> } ->
conn conn
|> get("/api/pleroma/emoji/pack?name=test_pack_nonshared") |> get("/api/v1/pleroma/emoji/pack?name=test_pack_nonshared")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
|> json() |> json()
@ -217,7 +225,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/download", %{ |> post("/api/v1/pleroma/emoji/packs/download", %{
url: "https://example.com", url: "https://example.com",
name: "test_pack", name: "test_pack",
as: "test_pack2" as: "test_pack2"
@ -228,7 +236,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert File.exists?("#{@emoji_path}/test_pack2/blank.png") assert File.exists?("#{@emoji_path}/test_pack2/blank.png")
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/pack?name=test_pack2") |> delete("/api/v1/pleroma/emoji/pack?name=test_pack2")
|> json_response_and_validate_schema(200) == "ok" |> json_response_and_validate_schema(200) == "ok"
refute File.exists?("#{@emoji_path}/test_pack2") refute File.exists?("#{@emoji_path}/test_pack2")
@ -236,7 +244,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post( |> post(
"/api/pleroma/emoji/packs/download", "/api/v1/pleroma/emoji/packs/download",
%{ %{
url: "https://example.com", url: "https://example.com",
name: "test_pack_nonshared", name: "test_pack_nonshared",
@ -249,7 +257,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert File.exists?("#{@emoji_path}/test_pack_nonshared2/blank.png") assert File.exists?("#{@emoji_path}/test_pack_nonshared2/blank.png")
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/pack?name=test_pack_nonshared2") |> delete("/api/v1/pleroma/emoji/pack?name=test_pack_nonshared2")
|> json_response_and_validate_schema(200) == "ok" |> json_response_and_validate_schema(200) == "ok"
refute File.exists?("#{@emoji_path}/test_pack_nonshared2") refute File.exists?("#{@emoji_path}/test_pack_nonshared2")
@ -267,7 +275,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post( |> post(
"/api/pleroma/emoji/packs/download", "/api/v1/pleroma/emoji/packs/download",
%{ %{
url: "https://old-instance", url: "https://old-instance",
name: "test_pack", name: "test_pack",
@ -289,14 +297,14 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/pack?name=pack_bad_sha" url: "https://example.com/api/v1/pleroma/emoji/pack?name=pack_bad_sha"
} -> } ->
{:ok, pack} = Pleroma.Emoji.Pack.load_pack("pack_bad_sha") {:ok, pack} = Pleroma.Emoji.Pack.load_pack("pack_bad_sha")
%Tesla.Env{status: 200, body: Jason.encode!(pack)} %Tesla.Env{status: 200, body: Jason.encode!(pack)}
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/packs/archive?name=pack_bad_sha" url: "https://example.com/api/v1/pleroma/emoji/packs/archive?name=pack_bad_sha"
} -> } ->
%Tesla.Env{ %Tesla.Env{
status: 200, status: 200,
@ -306,7 +314,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/download", %{ |> post("/api/v1/pleroma/emoji/packs/download", %{
url: "https://example.com", url: "https://example.com",
name: "pack_bad_sha", name: "pack_bad_sha",
as: "pack_bad_sha2" as: "pack_bad_sha2"
@ -326,7 +334,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/pack?name=test_pack" url: "https://example.com/api/v1/pleroma/emoji/pack?name=test_pack"
} -> } ->
{:ok, pack} = Pleroma.Emoji.Pack.load_pack("test_pack") {:ok, pack} = Pleroma.Emoji.Pack.load_pack("test_pack")
%Tesla.Env{status: 200, body: Jason.encode!(pack)} %Tesla.Env{status: 200, body: Jason.encode!(pack)}
@ -334,7 +342,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert admin_conn assert admin_conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/emoji/packs/download", %{ |> post("/api/v1/pleroma/emoji/packs/download", %{
url: "https://example.com", url: "https://example.com",
name: "test_pack", name: "test_pack",
as: "test_pack2" as: "test_pack2"
@ -346,7 +354,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
end end
end end
describe "PATCH/update /api/pleroma/emoji/pack?name=:name" do describe "PATCH/update /api/v1/pleroma/emoji/pack?name=:name" do
setup do setup do
pack_file = "#{@emoji_path}/test_pack/pack.json" pack_file = "#{@emoji_path}/test_pack/pack.json"
original_content = File.read!(pack_file) original_content = File.read!(pack_file)
@ -372,7 +380,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert conn assert conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch( |> patch(
"/api/pleroma/emoji/pack?name=test_pack", "/api/v1/pleroma/emoji/pack?name=test_pack",
%{"metadata" => ctx[:new_data]} %{"metadata" => ctx[:new_data]}
) )
|> json_response_and_validate_schema(500) |> json_response_and_validate_schema(500)
@ -382,7 +390,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
test "for a pack without a fallback source", ctx do test "for a pack without a fallback source", ctx do
assert ctx[:admin_conn] assert ctx[:admin_conn]
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/emoji/pack?name=test_pack", %{ |> patch("/api/v1/pleroma/emoji/pack?name=test_pack", %{
"metadata" => ctx[:new_data] "metadata" => ctx[:new_data]
}) })
|> json_response_and_validate_schema(200) == ctx[:new_data] |> json_response_and_validate_schema(200) == ctx[:new_data]
@ -410,7 +418,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert ctx[:admin_conn] assert ctx[:admin_conn]
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/emoji/pack?name=test_pack", %{metadata: new_data}) |> patch("/api/v1/pleroma/emoji/pack?name=test_pack", %{metadata: new_data})
|> json_response_and_validate_schema(200) == new_data_with_sha |> json_response_and_validate_schema(200) == new_data_with_sha
assert Jason.decode!(File.read!(ctx[:pack_file]))["pack"] == new_data_with_sha assert Jason.decode!(File.read!(ctx[:pack_file]))["pack"] == new_data_with_sha
@ -430,14 +438,14 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
assert ctx[:admin_conn] assert ctx[:admin_conn]
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> patch("/api/pleroma/emoji/pack?name=test_pack", %{metadata: new_data}) |> patch("/api/v1/pleroma/emoji/pack?name=test_pack", %{metadata: new_data})
|> json_response_and_validate_schema(:bad_request) == %{ |> json_response_and_validate_schema(:bad_request) == %{
"error" => "The fallback archive does not have all files specified in pack.json" "error" => "The fallback archive does not have all files specified in pack.json"
} }
end end
end end
describe "POST/DELETE /api/pleroma/emoji/pack?name=:name" do describe "POST/DELETE /api/v1/pleroma/emoji/pack?name=:name" do
test "returns an error on creates pack when file system not writable", %{ test "returns an error on creates pack when file system not writable", %{
admin_conn: admin_conn admin_conn: admin_conn
} do } do
@ -447,7 +455,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
{File, [:passthrough], [mkdir: fn ^path_pack -> {:error, :eacces} end]} {File, [:passthrough], [mkdir: fn ^path_pack -> {:error, :eacces} end]}
]) do ]) do
assert admin_conn assert admin_conn
|> post("/api/pleroma/emoji/pack?name=test_pack") |> post("/api/v1/pleroma/emoji/pack?name=test_pack")
|> json_response_and_validate_schema(500) == %{ |> json_response_and_validate_schema(500) == %{
"error" => "error" =>
"Unexpected error occurred while creating pack. (POSIX error: Permission denied)" "Unexpected error occurred while creating pack. (POSIX error: Permission denied)"
@ -467,7 +475,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
{File, [:passthrough], [rm_rf: fn ^path_pack -> {:error, :eacces, path_pack} end]} {File, [:passthrough], [rm_rf: fn ^path_pack -> {:error, :eacces, path_pack} end]}
]) do ]) do
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/pack?name=test_emoji_pack") |> delete("/api/v1/pleroma/emoji/pack?name=test_emoji_pack")
|> json_response_and_validate_schema(500) == %{ |> json_response_and_validate_schema(500) == %{
"error" => "error" =>
"Couldn't delete the `test_emoji_pack` pack (POSIX error: Permission denied)" "Couldn't delete the `test_emoji_pack` pack (POSIX error: Permission denied)"
@ -480,7 +488,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
test "creating and deleting a pack", %{admin_conn: admin_conn} do test "creating and deleting a pack", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> post("/api/pleroma/emoji/pack?name=test_created") |> post("/api/v1/pleroma/emoji/pack?name=test_created")
|> json_response_and_validate_schema(200) == "ok" |> json_response_and_validate_schema(200) == "ok"
assert File.exists?("#{@emoji_path}/test_created/pack.json") assert File.exists?("#{@emoji_path}/test_created/pack.json")
@ -492,7 +500,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
} }
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/pack?name=test_created") |> delete("/api/v1/pleroma/emoji/pack?name=test_created")
|> json_response_and_validate_schema(200) == "ok" |> json_response_and_validate_schema(200) == "ok"
refute File.exists?("#{@emoji_path}/test_created/pack.json") refute File.exists?("#{@emoji_path}/test_created/pack.json")
@ -505,7 +513,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
File.write!(Path.join(path, "pack.json"), pack_file) File.write!(Path.join(path, "pack.json"), pack_file)
assert admin_conn assert admin_conn
|> post("/api/pleroma/emoji/pack?name=test_created") |> post("/api/v1/pleroma/emoji/pack?name=test_created")
|> json_response_and_validate_schema(:conflict) == %{ |> json_response_and_validate_schema(:conflict) == %{
"error" => "A pack named \"test_created\" already exists" "error" => "A pack named \"test_created\" already exists"
} }
@ -515,7 +523,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
test "with empty name", %{admin_conn: admin_conn} do test "with empty name", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> post("/api/pleroma/emoji/pack?name= ") |> post("/api/v1/pleroma/emoji/pack?name= ")
|> json_response_and_validate_schema(:bad_request) == %{ |> json_response_and_validate_schema(:bad_request) == %{
"error" => "pack name cannot be empty" "error" => "pack name cannot be empty"
} }
@ -524,7 +532,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
test "deleting nonexisting pack", %{admin_conn: admin_conn} do test "deleting nonexisting pack", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/pack?name=non_existing") |> delete("/api/v1/pleroma/emoji/pack?name=non_existing")
|> json_response_and_validate_schema(:not_found) == %{ |> json_response_and_validate_schema(:not_found) == %{
"error" => "Pack non_existing does not exist" "error" => "Pack non_existing does not exist"
} }
@ -532,7 +540,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
test "deleting with empty name", %{admin_conn: admin_conn} do test "deleting with empty name", %{admin_conn: admin_conn} do
assert admin_conn assert admin_conn
|> delete("/api/pleroma/emoji/pack?name= ") |> delete("/api/v1/pleroma/emoji/pack?name= ")
|> json_response_and_validate_schema(:bad_request) == %{ |> json_response_and_validate_schema(:bad_request) == %{
"error" => "pack name cannot be empty" "error" => "pack name cannot be empty"
} }
@ -544,15 +552,22 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
File.rm!("#{@emoji_path}/test_pack_for_import/pack.json") File.rm!("#{@emoji_path}/test_pack_for_import/pack.json")
end) end)
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200) resp =
conn
|> get("/api/v1/pleroma/emoji/packs")
|> json_response_and_validate_schema(200)
refute Map.has_key?(resp["packs"], "test_pack_for_import") refute Map.has_key?(resp["packs"], "test_pack_for_import")
assert admin_conn assert admin_conn
|> get("/api/pleroma/emoji/packs/import") |> get("/api/v1/pleroma/emoji/packs/import")
|> json_response_and_validate_schema(200) == ["test_pack_for_import"] |> json_response_and_validate_schema(200) == ["test_pack_for_import"]
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200) resp =
conn
|> get("/api/v1/pleroma/emoji/packs")
|> json_response_and_validate_schema(200)
assert resp["packs"]["test_pack_for_import"]["files"] == %{"blank" => "blank.png"} assert resp["packs"]["test_pack_for_import"]["files"] == %{"blank" => "blank.png"}
File.rm!("#{@emoji_path}/test_pack_for_import/pack.json") File.rm!("#{@emoji_path}/test_pack_for_import/pack.json")
@ -568,10 +583,13 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
File.write!("#{@emoji_path}/test_pack_for_import/emoji.txt", emoji_txt_content) File.write!("#{@emoji_path}/test_pack_for_import/emoji.txt", emoji_txt_content)
assert admin_conn assert admin_conn
|> get("/api/pleroma/emoji/packs/import") |> get("/api/v1/pleroma/emoji/packs/import")
|> json_response_and_validate_schema(200) == ["test_pack_for_import"] |> json_response_and_validate_schema(200) == ["test_pack_for_import"]
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200) resp =
conn
|> get("/api/v1/pleroma/emoji/packs")
|> json_response_and_validate_schema(200)
assert resp["packs"]["test_pack_for_import"]["files"] == %{ assert resp["packs"]["test_pack_for_import"]["files"] == %{
"blank" => "blank.png", "blank" => "blank.png",
@ -580,7 +598,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
} }
end end
describe "GET /api/pleroma/emoji/pack?name=:name" do describe "GET /api/v1/pleroma/emoji/pack?name=:name" do
test "shows pack.json", %{conn: conn} do test "shows pack.json", %{conn: conn} do
assert %{ assert %{
"files" => files, "files" => files,
@ -595,7 +613,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
} }
} = } =
conn conn
|> get("/api/pleroma/emoji/pack?name=test_pack") |> get("/api/v1/pleroma/emoji/pack?name=test_pack")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert files == %{"blank" => "blank.png", "blank2" => "blank2.png"} assert files == %{"blank" => "blank.png", "blank2" => "blank2.png"}
@ -605,7 +623,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
"files_count" => 2 "files_count" => 2
} = } =
conn conn
|> get("/api/pleroma/emoji/pack?name=test_pack&page_size=1") |> get("/api/v1/pleroma/emoji/pack?name=test_pack&page_size=1")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert files |> Map.keys() |> length() == 1 assert files |> Map.keys() |> length() == 1
@ -615,7 +633,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
"files_count" => 2 "files_count" => 2
} = } =
conn conn
|> get("/api/pleroma/emoji/pack?name=test_pack&page_size=1&page=2") |> get("/api/v1/pleroma/emoji/pack?name=test_pack&page_size=1&page=2")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert files |> Map.keys() |> length() == 1 assert files |> Map.keys() |> length() == 1
@ -635,13 +653,13 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
} }
} = } =
conn conn
|> get("/api/pleroma/emoji/pack?name=blobs.gg") |> get("/api/v1/pleroma/emoji/pack?name=blobs.gg")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
end end
test "non existing pack", %{conn: conn} do test "non existing pack", %{conn: conn} do
assert conn assert conn
|> get("/api/pleroma/emoji/pack?name=non_existing") |> get("/api/v1/pleroma/emoji/pack?name=non_existing")
|> json_response_and_validate_schema(:not_found) == %{ |> json_response_and_validate_schema(:not_found) == %{
"error" => "Pack non_existing does not exist" "error" => "Pack non_existing does not exist"
} }
@ -649,7 +667,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
test "error name", %{conn: conn} do test "error name", %{conn: conn} do
assert conn assert conn
|> get("/api/pleroma/emoji/pack?name= ") |> get("/api/v1/pleroma/emoji/pack?name= ")
|> json_response_and_validate_schema(:bad_request) == %{ |> json_response_and_validate_schema(:bad_request) == %{
"error" => "pack name cannot be empty" "error" => "pack name cannot be empty"
} }

View file

@ -151,7 +151,10 @@ defmodule Pleroma.Web.PleromaAPI.TwoFactorAuthenticationControllerTest do
assert conn assert conn
|> put_req_header("authorization", "Bearer #{token.token}") |> put_req_header("authorization", "Bearer #{token.token}")
|> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "test", code: code}) |> post("/api/pleroma/accounts/mfa/confirm/totp", %{
password: "test",
code: code
})
|> json_response(:ok) |> json_response(:ok)
settings = refresh_record(user).multi_factor_authentication_settings settings = refresh_record(user).multi_factor_authentication_settings
@ -162,7 +165,10 @@ defmodule Pleroma.Web.PleromaAPI.TwoFactorAuthenticationControllerTest do
assert conn assert conn
|> put_req_header("authorization", "Bearer #{token2.token}") |> put_req_header("authorization", "Bearer #{token2.token}")
|> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "test", code: code}) |> post("/api/pleroma/accounts/mfa/confirm/totp", %{
password: "test",
code: code
})
|> json_response(403) == %{ |> json_response(403) == %{
"error" => "Insufficient permissions: write:security." "error" => "Insufficient permissions: write:security."
} }
@ -185,7 +191,10 @@ defmodule Pleroma.Web.PleromaAPI.TwoFactorAuthenticationControllerTest do
response = response =
conn conn
|> put_req_header("authorization", "Bearer #{token.token}") |> put_req_header("authorization", "Bearer #{token.token}")
|> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "xxx", code: code}) |> post("/api/pleroma/accounts/mfa/confirm/totp", %{
password: "xxx",
code: code
})
|> json_response(422) |> json_response(422)
settings = refresh_record(user).multi_factor_authentication_settings settings = refresh_record(user).multi_factor_authentication_settings
@ -212,7 +221,10 @@ defmodule Pleroma.Web.PleromaAPI.TwoFactorAuthenticationControllerTest do
response = response =
conn conn
|> put_req_header("authorization", "Bearer #{token.token}") |> put_req_header("authorization", "Bearer #{token.token}")
|> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "test", code: "code"}) |> post("/api/pleroma/accounts/mfa/confirm/totp", %{
password: "test",
code: "code"
})
|> json_response(422) |> json_response(422)
settings = refresh_record(user).multi_factor_authentication_settings settings = refresh_record(user).multi_factor_authentication_settings
@ -223,7 +235,10 @@ defmodule Pleroma.Web.PleromaAPI.TwoFactorAuthenticationControllerTest do
assert conn assert conn
|> put_req_header("authorization", "Bearer #{token2.token}") |> put_req_header("authorization", "Bearer #{token2.token}")
|> post("/api/pleroma/accounts/mfa/confirm/totp", %{password: "test", code: "code"}) |> post("/api/pleroma/accounts/mfa/confirm/totp", %{
password: "test",
code: "code"
})
|> json_response(403) == %{ |> json_response(403) == %{
"error" => "Insufficient permissions: write:security." "error" => "Insufficient permissions: write:security."
} }

View file

@ -10,28 +10,32 @@ defmodule Pleroma.Web.Plugs.RemoteIpTest do
import Pleroma.Tests.Helpers, only: [clear_config: 2] import Pleroma.Tests.Helpers, only: [clear_config: 2]
setup do: setup do
clear_config(RemoteIp, clear_config([RemoteIp, :enabled], true)
enabled: true, clear_config([RemoteIp, :headers], ["x-forwarded-for"])
headers: ["x-forwarded-for"], clear_config([RemoteIp, :proxies], [])
proxies: [],
reserved: [ clear_config(
"127.0.0.0/8", [RemoteIp, :reserved],
"::1/128", [
"fc00::/7", "127.0.0.0/8",
"10.0.0.0/8", "::1/128",
"172.16.0.0/12", "fc00::/7",
"192.168.0.0/16" "10.0.0.0/8",
] "172.16.0.0/12",
) "192.168.0.0/16"
]
)
end
test "disabled" do test "disabled" do
clear_config(RemoteIp, enabled: false) clear_config([RemoteIp, :enabled], false)
%{remote_ip: remote_ip} = conn(:get, "/") %{remote_ip: remote_ip} = conn(:get, "/")
conn = conn =
conn(:get, "/") :get
|> conn("/")
|> put_req_header("x-forwarded-for", "1.1.1.1") |> put_req_header("x-forwarded-for", "1.1.1.1")
|> RemoteIp.call(nil) |> RemoteIp.call(nil)
@ -40,7 +44,8 @@ defmodule Pleroma.Web.Plugs.RemoteIpTest do
test "enabled" do test "enabled" do
conn = conn =
conn(:get, "/") :get
|> conn("/")
|> put_req_header("x-forwarded-for", "1.1.1.1") |> put_req_header("x-forwarded-for", "1.1.1.1")
|> RemoteIp.call(nil) |> RemoteIp.call(nil)
@ -48,17 +53,20 @@ defmodule Pleroma.Web.Plugs.RemoteIpTest do
end end
test "custom headers" do test "custom headers" do
clear_config(RemoteIp, enabled: true, headers: ["cf-connecting-ip"]) clear_config([RemoteIp, :enabled], true)
clear_config([RemoteIp, :headers], ["cf-connecting-ip"])
conn = conn =
conn(:get, "/") :get
|> conn("/")
|> put_req_header("x-forwarded-for", "1.1.1.1") |> put_req_header("x-forwarded-for", "1.1.1.1")
|> RemoteIp.call(nil) |> RemoteIp.call(nil)
refute conn.remote_ip == {1, 1, 1, 1} refute conn.remote_ip == {1, 1, 1, 1}
conn = conn =
conn(:get, "/") :get
|> conn("/")
|> put_req_header("cf-connecting-ip", "1.1.1.1") |> put_req_header("cf-connecting-ip", "1.1.1.1")
|> RemoteIp.call(nil) |> RemoteIp.call(nil)
@ -67,7 +75,8 @@ defmodule Pleroma.Web.Plugs.RemoteIpTest do
test "custom proxies" do test "custom proxies" do
conn = conn =
conn(:get, "/") :get
|> conn("/")
|> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2") |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2")
|> RemoteIp.call(nil) |> RemoteIp.call(nil)
@ -76,7 +85,8 @@ defmodule Pleroma.Web.Plugs.RemoteIpTest do
clear_config([RemoteIp, :proxies], ["173.245.48.0/20"]) clear_config([RemoteIp, :proxies], ["173.245.48.0/20"])
conn = conn =
conn(:get, "/") :get
|> conn("/")
|> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2") |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1, 173.245.48.2")
|> RemoteIp.call(nil) |> RemoteIp.call(nil)
@ -87,7 +97,8 @@ defmodule Pleroma.Web.Plugs.RemoteIpTest do
clear_config([RemoteIp, :proxies], ["173.245.48.1"]) clear_config([RemoteIp, :proxies], ["173.245.48.1"])
conn = conn =
conn(:get, "/") :get
|> conn("/")
|> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1") |> put_req_header("x-forwarded-for", "173.245.48.1, 1.1.1.1")
|> RemoteIp.call(nil) |> RemoteIp.call(nil)
@ -99,7 +110,8 @@ defmodule Pleroma.Web.Plugs.RemoteIpTest do
clear_config([RemoteIp, :proxies], ["10.0.0.3/24"]) clear_config([RemoteIp, :proxies], ["10.0.0.3/24"])
conn = conn =
conn(:get, "/") :get
|> conn("/")
|> put_req_header("x-forwarded-for", "10.0.0.3, 1.1.1.1") |> put_req_header("x-forwarded-for", "10.0.0.3, 1.1.1.1")
|> RemoteIp.call(nil) |> RemoteIp.call(nil)

View file

@ -14,11 +14,11 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do
import Pleroma.Factory import Pleroma.Factory
import Swoosh.TestAssertions import Swoosh.TestAssertions
describe "GET /api/pleroma/password_reset/token" do describe "GET /api/v1/pleroma/password_reset/token" do
test "it returns error when token invalid", %{conn: conn} do test "it returns error when token invalid", %{conn: conn} do
response = response =
conn conn
|> get("/api/pleroma/password_reset/token") |> get("/api/v1/pleroma/password_reset/token")
|> html_response(:ok) |> html_response(:ok)
assert response =~ "<h2>Invalid Token</h2>" assert response =~ "<h2>Invalid Token</h2>"
@ -30,7 +30,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do
response = response =
conn conn
|> get("/api/pleroma/password_reset/#{token.token}") |> get("/api/v1/pleroma/password_reset/#{token.token}")
|> html_response(:ok) |> html_response(:ok)
assert response =~ "<h2>Password Reset for #{user.nickname}</h2>" assert response =~ "<h2>Password Reset for #{user.nickname}</h2>"
@ -45,14 +45,14 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do
response = response =
conn conn
|> get("/api/pleroma/password_reset/#{token.token}") |> get("/api/v1/pleroma/password_reset/#{token.token}")
|> html_response(:ok) |> html_response(:ok)
assert response =~ "<h2>Invalid Token</h2>" assert response =~ "<h2>Invalid Token</h2>"
end end
end end
describe "POST /api/pleroma/password_reset" do describe "POST /api/v1/pleroma/password_reset" do
test "it fails for an expired token", %{conn: conn} do test "it fails for an expired token", %{conn: conn} do
clear_config([:instance, :password_reset_token_validity], 0) clear_config([:instance, :password_reset_token_validity], 0)
@ -70,7 +70,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do
response = response =
conn conn
|> assign(:user, user) |> assign(:user, user)
|> post("/api/pleroma/password_reset", %{data: params}) |> post("/api/v1/pleroma/password_reset", %{data: params})
|> html_response(:ok) |> html_response(:ok)
refute response =~ "<h2>Password changed!</h2>" refute response =~ "<h2>Password changed!</h2>"
@ -90,7 +90,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do
response = response =
conn conn
|> assign(:user, user) |> assign(:user, user)
|> post("/api/pleroma/password_reset", %{data: params}) |> post("/api/v1/pleroma/password_reset", %{data: params})
|> html_response(:ok) |> html_response(:ok)
assert response =~ "<h2>Password changed!</h2>" assert response =~ "<h2>Password changed!</h2>"
@ -114,7 +114,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do
conn conn
|> assign(:user, user) |> assign(:user, user)
|> post("/api/pleroma/password_reset", %{data: params}) |> post("/api/v1/pleroma/password_reset", %{data: params})
|> html_response(:ok) |> html_response(:ok)
assert User.get_by_id(user.id).password_reset_pending == false assert User.get_by_id(user.id).password_reset_pending == false

View file

@ -77,11 +77,11 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
end end
end end
describe "/api/pleroma/emoji" do describe "/api/v1/pleroma/emoji" do
test "returns json with custom emoji with tags", %{conn: conn} do test "returns json with custom emoji with tags", %{conn: conn} do
emoji = emoji =
conn conn
|> get("/api/pleroma/emoji") |> get("/api/v1/pleroma/emoji")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert Enum.all?(emoji, fn assert Enum.all?(emoji, fn
@ -95,7 +95,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
end end
end end
describe "GET /api/pleroma/healthcheck" do describe "GET /api/v1/pleroma/healthcheck" do
setup do: clear_config([:instance, :healthcheck]) setup do: clear_config([:instance, :healthcheck])
test "returns 503 when healthcheck disabled", %{conn: conn} do test "returns 503 when healthcheck disabled", %{conn: conn} do
@ -103,7 +103,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
response = response =
conn conn
|> get("/api/pleroma/healthcheck") |> get("/api/v1/pleroma/healthcheck")
|> json_response_and_validate_schema(503) |> json_response_and_validate_schema(503)
assert response == %{} assert response == %{}
@ -116,7 +116,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
system_info: fn -> %Pleroma.Healthcheck{healthy: true} end do system_info: fn -> %Pleroma.Healthcheck{healthy: true} end do
response = response =
conn conn
|> get("/api/pleroma/healthcheck") |> get("/api/v1/pleroma/healthcheck")
|> json_response_and_validate_schema(200) |> json_response_and_validate_schema(200)
assert %{ assert %{
@ -136,7 +136,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
system_info: fn -> %Pleroma.Healthcheck{healthy: false} end do system_info: fn -> %Pleroma.Healthcheck{healthy: false} end do
response = response =
conn conn
|> get("/api/pleroma/healthcheck") |> get("/api/v1/pleroma/healthcheck")
|> json_response_and_validate_schema(503) |> json_response_and_validate_schema(503)
assert %{ assert %{
@ -334,7 +334,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
new: fn -> "test_captcha" end do new: fn -> "test_captcha" end do
resp = resp =
conn conn
|> get("/api/pleroma/captcha") |> get("/api/v1/pleroma/captcha")
|> response(200) |> response(200)
assert resp == "\"test_captcha\"" assert resp == "\"test_captcha\""
@ -459,7 +459,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "multipart/form-data") |> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/change_email", %{password: "test", email: "cofe@foobar.com"}) |> post("/api/pleroma/change_email", %{
password: "test",
email: "cofe@foobar.com"
})
assert json_response_and_validate_schema(conn, 200) == %{"status" => "success"} assert json_response_and_validate_schema(conn, 200) == %{"status" => "success"}
end end
@ -961,7 +964,9 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
conn = conn =
conn conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
|> delete("/api/pleroma/aliases", %{alias: non_alias_user |> User.full_nickname()}) |> delete("/api/pleroma/aliases", %{
alias: non_alias_user |> User.full_nickname()
})
assert %{"error" => "Account has no such alias."} = assert %{"error" => "Account has no such alias."} =
json_response_and_validate_schema(conn, 404) json_response_and_validate_schema(conn, 404)

View file

@ -123,7 +123,10 @@ defmodule Pleroma.Cluster do
defp start_peer({node_host, override_configs}) do defp start_peer({node_host, override_configs}) do
log(node_host, "booting federated VM") log(node_host, "booting federated VM")
{:ok, node} = :peer.start(%{host: ~c"127.0.0.1", name: node_name(node_host), args: vm_args()})
{:ok, _pid, node} =
:peer.start(%{host: ~c"127.0.0.1", name: node_name(node_host), args: vm_args()})
add_code_paths(node) add_code_paths(node)
load_apps_and_transfer_configuration(node, override_configs) load_apps_and_transfer_configuration(node, override_configs)
ensure_apps_started(node) ensure_apps_started(node)