forked from AkkomaGang/akkoma
Merge remote-tracking branch 'origin' into follower-hiding
This commit is contained in:
commit
76d6b1c6ab
65 changed files with 1358 additions and 1041 deletions
|
@ -72,6 +72,7 @@
|
||||||
config :pleroma, :websub, Pleroma.Web.Websub
|
config :pleroma, :websub, Pleroma.Web.Websub
|
||||||
config :pleroma, :ostatus, Pleroma.Web.OStatus
|
config :pleroma, :ostatus, Pleroma.Web.OStatus
|
||||||
config :pleroma, :httpoison, Pleroma.HTTP
|
config :pleroma, :httpoison, Pleroma.HTTP
|
||||||
|
config :tesla, adapter: Tesla.Adapter.Hackney
|
||||||
|
|
||||||
# Configures http settings, upstream proxy etc.
|
# Configures http settings, upstream proxy etc.
|
||||||
config :pleroma, :http, proxy_url: nil
|
config :pleroma, :http, proxy_url: nil
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
config :pleroma, :websub, Pleroma.Web.WebsubMock
|
config :pleroma, :websub, Pleroma.Web.WebsubMock
|
||||||
config :pleroma, :ostatus, Pleroma.Web.OStatusMock
|
config :pleroma, :ostatus, Pleroma.Web.OStatusMock
|
||||||
config :pleroma, :httpoison, HTTPoisonMock
|
config :tesla, adapter: Tesla.Mock
|
||||||
|
|
||||||
try do
|
try do
|
||||||
import_config "test.secret.exs"
|
import_config "test.secret.exs"
|
||||||
|
|
|
@ -8,7 +8,7 @@ defmodule Mix.Tasks.SetModerator do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use Mix.Task
|
use Mix.Task
|
||||||
import Mix.Ecto
|
import Ecto.Changeset
|
||||||
alias Pleroma.{Repo, User}
|
alias Pleroma.{Repo, User}
|
||||||
|
|
||||||
def run([nickname | rest]) do
|
def run([nickname | rest]) do
|
||||||
|
@ -21,14 +21,15 @@ def run([nickname | rest]) do
|
||||||
end
|
end
|
||||||
|
|
||||||
with %User{local: true} = user <- User.get_by_nickname(nickname) do
|
with %User{local: true} = user <- User.get_by_nickname(nickname) do
|
||||||
info =
|
info_cng = User.Info.admin_api_update(user.info, %{is_moderator: !!moderator})
|
||||||
user.info
|
|
||||||
|> Map.put("is_moderator", !!moderator)
|
|
||||||
|
|
||||||
cng = User.info_changeset(user, %{info: info})
|
user_cng =
|
||||||
{:ok, user} = User.update_and_set_cache(cng)
|
Ecto.Changeset.change(user)
|
||||||
|
|> put_embed(:info, info_cng)
|
||||||
|
|
||||||
IO.puts("Moderator status of #{nickname}: #{user.info["is_moderator"]}")
|
{:ok, user} = User.update_and_set_cache(user_cng)
|
||||||
|
|
||||||
|
IO.puts("Moderator status of #{nickname}: #{user.info.is_moderator}")
|
||||||
else
|
else
|
||||||
_ ->
|
_ ->
|
||||||
IO.puts("No local user #{nickname}")
|
IO.puts("No local user #{nickname}")
|
||||||
|
|
|
@ -4,3 +4,4 @@ CREATE DATABASE pleroma_dev OWNER pleroma;
|
||||||
--Extensions made by ecto.migrate that need superuser access
|
--Extensions made by ecto.migrate that need superuser access
|
||||||
CREATE EXTENSION IF NOT EXISTS citext;
|
CREATE EXTENSION IF NOT EXISTS citext;
|
||||||
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
||||||
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
defmodule Mix.Tasks.SetAdmin do
|
defmodule Mix.Tasks.SetAdmin do
|
||||||
use Mix.Task
|
use Mix.Task
|
||||||
|
import Ecto.Changeset
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
@ -9,21 +10,22 @@ defmodule Mix.Tasks.SetAdmin do
|
||||||
def run([nickname | rest]) do
|
def run([nickname | rest]) do
|
||||||
Application.ensure_all_started(:pleroma)
|
Application.ensure_all_started(:pleroma)
|
||||||
|
|
||||||
status =
|
admin =
|
||||||
case rest do
|
case rest do
|
||||||
[status] -> status == "true"
|
[admin] -> admin == "true"
|
||||||
_ -> true
|
_ -> true
|
||||||
end
|
end
|
||||||
|
|
||||||
with %User{local: true} = user <- User.get_by_nickname(nickname) do
|
with %User{local: true} = user <- User.get_by_nickname(nickname) do
|
||||||
info =
|
info_cng = User.Info.admin_api_update(user.info, %{is_admin: !!admin})
|
||||||
user.info
|
|
||||||
|> Map.put("is_admin", !!status)
|
|
||||||
|
|
||||||
cng = User.info_changeset(user, %{info: info})
|
user_cng =
|
||||||
{:ok, user} = User.update_and_set_cache(cng)
|
Ecto.Changeset.change(user)
|
||||||
|
|> put_embed(:info, info_cng)
|
||||||
|
|
||||||
IO.puts("Admin status of #{nickname}: #{user.info["is_admin"]}")
|
{:ok, user} = User.update_and_set_cache(user_cng)
|
||||||
|
|
||||||
|
IO.puts("Admin status of #{nickname}: #{user.info.is_admin}")
|
||||||
else
|
else
|
||||||
_ ->
|
_ ->
|
||||||
IO.puts("No local user #{nickname}")
|
IO.puts("No local user #{nickname}")
|
||||||
|
|
|
@ -10,11 +10,11 @@ defmodule Mix.Tasks.SetLocked do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use Mix.Task
|
use Mix.Task
|
||||||
import Mix.Ecto
|
import Ecto.Changeset
|
||||||
alias Pleroma.{Repo, User}
|
alias Pleroma.{Repo, User}
|
||||||
|
|
||||||
def run([nickname | rest]) do
|
def run([nickname | rest]) do
|
||||||
ensure_started(Repo, [])
|
Application.ensure_all_started(:pleroma)
|
||||||
|
|
||||||
locked =
|
locked =
|
||||||
case rest do
|
case rest do
|
||||||
|
@ -23,14 +23,15 @@ def run([nickname | rest]) do
|
||||||
end
|
end
|
||||||
|
|
||||||
with %User{local: true} = user <- User.get_by_nickname(nickname) do
|
with %User{local: true} = user <- User.get_by_nickname(nickname) do
|
||||||
info =
|
info_cng = User.Info.profile_update(user.info, %{locked: !!locked})
|
||||||
user.info
|
|
||||||
|> Map.put("locked", !!locked)
|
|
||||||
|
|
||||||
cng = User.info_changeset(user, %{info: info})
|
user_cng =
|
||||||
user = Repo.update!(cng)
|
Ecto.Changeset.change(user)
|
||||||
|
|> put_embed(:info, info_cng)
|
||||||
|
|
||||||
IO.puts("locked status of #{nickname}: #{user.info["locked"]}")
|
{:ok, user} = User.update_and_set_cache(user_cng)
|
||||||
|
|
||||||
|
IO.puts("Locked status of #{nickname}: #{user.info.locked}")
|
||||||
else
|
else
|
||||||
_ ->
|
_ ->
|
||||||
IO.puts("No local user #{nickname}")
|
IO.puts("No local user #{nickname}")
|
||||||
|
|
27
lib/pleroma/http/connection.ex
Normal file
27
lib/pleroma/http/connection.ex
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
defmodule Pleroma.HTTP.Connection do
|
||||||
|
@moduledoc """
|
||||||
|
Connection for http-requests.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@hackney_options [pool: :default]
|
||||||
|
@adapter Application.get_env(:tesla, :adapter)
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Configure a client connection
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
Tesla.Env.client
|
||||||
|
"""
|
||||||
|
@spec new(Keyword.t()) :: Tesla.Env.client()
|
||||||
|
def new(opts \\ []) do
|
||||||
|
Tesla.client([], {@adapter, hackney_options(opts)})
|
||||||
|
end
|
||||||
|
|
||||||
|
# fetch Hackney options
|
||||||
|
#
|
||||||
|
defp hackney_options(opts \\ []) do
|
||||||
|
options = Keyword.get(opts, :adapter, [])
|
||||||
|
@hackney_options ++ options
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,14 +1,42 @@
|
||||||
defmodule Pleroma.HTTP do
|
defmodule Pleroma.HTTP do
|
||||||
require HTTPoison
|
@moduledoc """
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
alias Pleroma.HTTP.Connection
|
||||||
|
alias Pleroma.HTTP.RequestBuilder, as: Builder
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Builds and perform http request.
|
||||||
|
|
||||||
|
# Arguments:
|
||||||
|
`method` - :get, :post, :put, :delete
|
||||||
|
`url`
|
||||||
|
`body`
|
||||||
|
`headers` - a keyworld list of headers, e.g. `[{"content-type", "text/plain"}]`
|
||||||
|
`options` - custom, per-request middleware or adapter options
|
||||||
|
|
||||||
|
# Returns:
|
||||||
|
`{:ok, %Tesla.Env{}}` or `{:error, error}`
|
||||||
|
|
||||||
|
"""
|
||||||
def request(method, url, body \\ "", headers \\ [], options \\ []) do
|
def request(method, url, body \\ "", headers \\ [], options \\ []) do
|
||||||
options =
|
options =
|
||||||
process_request_options(options)
|
process_request_options(options)
|
||||||
|> process_sni_options(url)
|
|> process_sni_options(url)
|
||||||
|
|
||||||
HTTPoison.request(method, url, body, headers, options)
|
%{}
|
||||||
|
|> Builder.method(method)
|
||||||
|
|> Builder.headers(headers)
|
||||||
|
|> Builder.opts(options)
|
||||||
|
|> Builder.url(url)
|
||||||
|
|> Builder.add_param(:body, :body, body)
|
||||||
|
|> Enum.into([])
|
||||||
|
|> (&Tesla.request(Connection.new(), &1)).()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp process_sni_options(options, nil), do: options
|
||||||
|
|
||||||
defp process_sni_options(options, url) do
|
defp process_sni_options(options, url) do
|
||||||
uri = URI.parse(url)
|
uri = URI.parse(url)
|
||||||
host = uri.host |> to_charlist()
|
host = uri.host |> to_charlist()
|
||||||
|
@ -22,7 +50,7 @@ defp process_sni_options(options, url) do
|
||||||
def process_request_options(options) do
|
def process_request_options(options) do
|
||||||
config = Application.get_env(:pleroma, :http, [])
|
config = Application.get_env(:pleroma, :http, [])
|
||||||
proxy = Keyword.get(config, :proxy_url, nil)
|
proxy = Keyword.get(config, :proxy_url, nil)
|
||||||
options = options ++ [hackney: [pool: :default]]
|
options = options ++ [adapter: [pool: :default]]
|
||||||
|
|
||||||
case proxy do
|
case proxy do
|
||||||
nil -> options
|
nil -> options
|
||||||
|
@ -30,8 +58,19 @@ def process_request_options(options) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def get(url, headers \\ [], options \\ []), do: request(:get, url, "", headers, options)
|
@doc """
|
||||||
|
Performs GET request.
|
||||||
|
|
||||||
|
See `Pleroma.HTTP.request/5`
|
||||||
|
"""
|
||||||
|
def get(url, headers \\ [], options \\ []),
|
||||||
|
do: request(:get, url, "", headers, options)
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Performs POST request.
|
||||||
|
|
||||||
|
See `Pleroma.HTTP.request/5`
|
||||||
|
"""
|
||||||
def post(url, body, headers \\ [], options \\ []),
|
def post(url, body, headers \\ [], options \\ []),
|
||||||
do: request(:post, url, body, headers, options)
|
do: request(:post, url, body, headers, options)
|
||||||
end
|
end
|
||||||
|
|
126
lib/pleroma/http/request_builder.ex
Normal file
126
lib/pleroma/http/request_builder.ex
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
defmodule Pleroma.HTTP.RequestBuilder do
|
||||||
|
@moduledoc """
|
||||||
|
Helper functions for building Tesla requests
|
||||||
|
"""
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Specify the request method when building a request
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
- request (Map) - Collected request options
|
||||||
|
- m (atom) - Request method
|
||||||
|
|
||||||
|
## Returns
|
||||||
|
|
||||||
|
Map
|
||||||
|
"""
|
||||||
|
@spec method(map(), atom) :: map()
|
||||||
|
def method(request, m) do
|
||||||
|
Map.put_new(request, :method, m)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Specify the request method when building a request
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
- request (Map) - Collected request options
|
||||||
|
- u (String) - Request URL
|
||||||
|
|
||||||
|
## Returns
|
||||||
|
|
||||||
|
Map
|
||||||
|
"""
|
||||||
|
@spec url(map(), String.t()) :: map()
|
||||||
|
def url(request, u) do
|
||||||
|
Map.put_new(request, :url, u)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Add headers to the request
|
||||||
|
"""
|
||||||
|
@spec headers(map(), list(tuple)) :: map()
|
||||||
|
def headers(request, h) do
|
||||||
|
Map.put_new(request, :headers, h)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Add custom, per-request middleware or adapter options to the request
|
||||||
|
"""
|
||||||
|
@spec opts(map(), Keyword.t()) :: map()
|
||||||
|
def opts(request, options) do
|
||||||
|
Map.put_new(request, :opts, options)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Add optional parameters to the request
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
- request (Map) - Collected request options
|
||||||
|
- definitions (Map) - Map of parameter name to parameter location.
|
||||||
|
- options (KeywordList) - The provided optional parameters
|
||||||
|
|
||||||
|
## Returns
|
||||||
|
|
||||||
|
Map
|
||||||
|
"""
|
||||||
|
@spec add_optional_params(map(), %{optional(atom) => atom}, keyword()) :: map()
|
||||||
|
def add_optional_params(request, _, []), do: request
|
||||||
|
|
||||||
|
def add_optional_params(request, definitions, [{key, value} | tail]) do
|
||||||
|
case definitions do
|
||||||
|
%{^key => location} ->
|
||||||
|
request
|
||||||
|
|> add_param(location, key, value)
|
||||||
|
|> add_optional_params(definitions, tail)
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
add_optional_params(request, definitions, tail)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Add optional parameters to the request
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
- request (Map) - Collected request options
|
||||||
|
- location (atom) - Where to put the parameter
|
||||||
|
- key (atom) - The name of the parameter
|
||||||
|
- value (any) - The value of the parameter
|
||||||
|
|
||||||
|
## Returns
|
||||||
|
|
||||||
|
Map
|
||||||
|
"""
|
||||||
|
@spec add_param(map(), atom, atom, any()) :: map()
|
||||||
|
def add_param(request, :body, :body, value), do: Map.put(request, :body, value)
|
||||||
|
|
||||||
|
def add_param(request, :body, key, value) do
|
||||||
|
request
|
||||||
|
|> Map.put_new_lazy(:body, &Tesla.Multipart.new/0)
|
||||||
|
|> Map.update!(
|
||||||
|
:body,
|
||||||
|
&Tesla.Multipart.add_field(&1, key, Poison.encode!(value),
|
||||||
|
headers: [{:"Content-Type", "application/json"}]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_param(request, :file, name, path) do
|
||||||
|
request
|
||||||
|
|> Map.put_new_lazy(:body, &Tesla.Multipart.new/0)
|
||||||
|
|> Map.update!(:body, &Tesla.Multipart.add_file(&1, path, name: name))
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_param(request, :form, name, value) do
|
||||||
|
request
|
||||||
|
|> Map.update(:body, %{name => value}, &Map.put(&1, name, value))
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_param(request, location, key, value) do
|
||||||
|
Map.update(request, location, [{key, value}], &(&1 ++ [{key, value}]))
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,30 +1,68 @@
|
||||||
defmodule Pleroma.Plugs.OAuthPlug do
|
defmodule Pleroma.Plugs.OAuthPlug do
|
||||||
import Plug.Conn
|
import Plug.Conn
|
||||||
alias Pleroma.User
|
import Ecto.Query
|
||||||
alias Pleroma.Repo
|
|
||||||
alias Pleroma.Web.OAuth.Token
|
|
||||||
|
|
||||||
def init(options) do
|
alias Pleroma.{
|
||||||
options
|
User,
|
||||||
end
|
Repo,
|
||||||
|
Web.OAuth.Token
|
||||||
|
}
|
||||||
|
|
||||||
|
@realm_reg Regex.compile!("Bearer\:?\s+(.*)$", "i")
|
||||||
|
|
||||||
|
def init(options), do: options
|
||||||
|
|
||||||
def call(%{assigns: %{user: %User{}}} = conn, _), do: conn
|
def call(%{assigns: %{user: %User{}}} = conn, _), do: conn
|
||||||
|
|
||||||
def call(conn, _) do
|
def call(conn, _) do
|
||||||
token =
|
with {:ok, token} <- fetch_token(conn),
|
||||||
case get_req_header(conn, "authorization") do
|
{:ok, user} <- fetch_user(token) do
|
||||||
["Bearer " <> header] -> header
|
assign(conn, :user, user)
|
||||||
_ -> get_session(conn, :oauth_token)
|
|
||||||
end
|
|
||||||
|
|
||||||
with token when not is_nil(token) <- token,
|
|
||||||
%Token{user_id: user_id} <- Repo.get_by(Token, token: token),
|
|
||||||
%User{} = user <- Repo.get(User, user_id),
|
|
||||||
false <- !!user.info.deactivated do
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
else
|
else
|
||||||
_ -> conn
|
_ -> conn
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Gets user by token
|
||||||
|
#
|
||||||
|
@spec fetch_user(String.t()) :: {:ok, User.t()} | nil
|
||||||
|
defp fetch_user(token) do
|
||||||
|
query = from(q in Token, where: q.token == ^token, preload: [:user])
|
||||||
|
|
||||||
|
with %Token{user: %{info: %{deactivated: false} = _} = user} <- Repo.one(query) do
|
||||||
|
{:ok, user}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Gets token from session by :oauth_token key
|
||||||
|
#
|
||||||
|
@spec fetch_token_from_session(Plug.Conn.t()) :: :no_token_found | {:ok, String.t()}
|
||||||
|
defp fetch_token_from_session(conn) do
|
||||||
|
case get_session(conn, :oauth_token) do
|
||||||
|
nil -> :no_token_found
|
||||||
|
token -> {:ok, token}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Gets token from headers
|
||||||
|
#
|
||||||
|
@spec fetch_token(Plug.Conn.t()) :: :no_token_found | {:ok, String.t()}
|
||||||
|
defp fetch_token(%Plug.Conn{} = conn) do
|
||||||
|
headers = get_req_header(conn, "authorization")
|
||||||
|
|
||||||
|
with :no_token_found <- fetch_token(headers),
|
||||||
|
do: fetch_token_from_session(conn)
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec fetch_token(Keyword.t()) :: :no_token_found | {:ok, String.t()}
|
||||||
|
defp fetch_token([]), do: :no_token_found
|
||||||
|
|
||||||
|
defp fetch_token([token | tail]) do
|
||||||
|
trimmed_token = String.trim(token)
|
||||||
|
|
||||||
|
case Regex.run(@realm_reg, trimmed_token) do
|
||||||
|
[_, match] -> {:ok, String.trim(match)}
|
||||||
|
_ -> fetch_token(tail)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,7 +20,7 @@ def put_file(upload) do
|
||||||
extension = String.split(upload.name, ".") |> List.last()
|
extension = String.split(upload.name, ".") |> List.last()
|
||||||
query = "#{cgi}?#{extension}"
|
query = "#{cgi}?#{extension}"
|
||||||
|
|
||||||
with {:ok, %{status_code: 200, body: body}} <- @httpoison.post(query, file_data) do
|
with {:ok, %{status: 200, body: body}} <- @httpoison.post(query, file_data) do
|
||||||
remote_file_name = String.split(body) |> List.first()
|
remote_file_name = String.split(body) |> List.first()
|
||||||
public_url = "#{files}/#{remote_file_name}.#{extension}"
|
public_url = "#{files}/#{remote_file_name}.#{extension}"
|
||||||
{:ok, {:url, public_url}}
|
{:ok, {:url, public_url}}
|
||||||
|
|
|
@ -25,10 +25,10 @@ def get_token() do
|
||||||
["Content-Type": "application/json"],
|
["Content-Type": "application/json"],
|
||||||
hackney: [:insecure]
|
hackney: [:insecure]
|
||||||
) do
|
) do
|
||||||
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
|
{:ok, %Tesla.Env{status: 200, body: body}} ->
|
||||||
body["access"]["token"]["id"]
|
body["access"]["token"]["id"]
|
||||||
|
|
||||||
{:ok, %HTTPoison.Response{status_code: _}} ->
|
{:ok, %Tesla.Env{status: _}} ->
|
||||||
""
|
""
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,10 +13,10 @@ def upload_file(filename, body, content_type) do
|
||||||
token = Pleroma.Uploaders.Swift.Keystone.get_token()
|
token = Pleroma.Uploaders.Swift.Keystone.get_token()
|
||||||
|
|
||||||
case put("#{filename}", body, "X-Auth-Token": token, "Content-Type": content_type) do
|
case put("#{filename}", body, "X-Auth-Token": token, "Content-Type": content_type) do
|
||||||
{:ok, %HTTPoison.Response{status_code: 201}} ->
|
{:ok, %Tesla.Env{status: 201}} ->
|
||||||
{:ok, {:file, filename}}
|
{:ok, {:file, filename}}
|
||||||
|
|
||||||
{:ok, %HTTPoison.Response{status_code: 401}} ->
|
{:ok, %Tesla.Env{status: 401}} ->
|
||||||
{:error, "Unauthorized, Bad Token"}
|
{:error, "Unauthorized, Bad Token"}
|
||||||
|
|
||||||
{:error, _} ->
|
{:error, _} ->
|
||||||
|
|
|
@ -4,6 +4,8 @@ defmodule Pleroma.User do
|
||||||
import Ecto.{Changeset, Query}
|
import Ecto.{Changeset, Query}
|
||||||
alias Pleroma.{Repo, User, Object, Web, Activity, Notification}
|
alias Pleroma.{Repo, User, Object, Web, Activity, Notification}
|
||||||
alias Comeonin.Pbkdf2
|
alias Comeonin.Pbkdf2
|
||||||
|
alias Pleroma.Formatter
|
||||||
|
alias Pleroma.Web.CommonAPI.Utils, as: CommonUtils
|
||||||
alias Pleroma.Web.{OStatus, Websub, OAuth}
|
alias Pleroma.Web.{OStatus, Websub, OAuth}
|
||||||
alias Pleroma.Web.ActivityPub.{Utils, ActivityPub}
|
alias Pleroma.Web.ActivityPub.{Utils, ActivityPub}
|
||||||
|
|
||||||
|
@ -175,6 +177,7 @@ def register_changeset(struct, params \\ %{}) do
|
||||||
|> validate_format(:email, @email_regex)
|
|> validate_format(:email, @email_regex)
|
||||||
|> validate_length(:bio, max: 1000)
|
|> validate_length(:bio, max: 1000)
|
||||||
|> validate_length(:name, min: 1, max: 100)
|
|> validate_length(:name, min: 1, max: 100)
|
||||||
|
|> put_change(:info, %Pleroma.User.Info{})
|
||||||
|
|
||||||
if changeset.valid? do
|
if changeset.valid? do
|
||||||
hashed = Pbkdf2.hashpwsalt(changeset.changes[:password])
|
hashed = Pbkdf2.hashpwsalt(changeset.changes[:password])
|
||||||
|
@ -802,4 +805,18 @@ def wait_and_refresh(timeout, %User{} = a, %User{} = b) do
|
||||||
:error
|
:error
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def parse_bio(bio, user \\ %User{info: %{source_data: %{}}}) do
|
||||||
|
mentions = Formatter.parse_mentions(bio)
|
||||||
|
tags = Formatter.parse_tags(bio)
|
||||||
|
|
||||||
|
emoji =
|
||||||
|
(user.info.source_data["tag"] || [])
|
||||||
|
|> Enum.filter(fn %{"type" => t} -> t == "Emoji" end)
|
||||||
|
|> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} ->
|
||||||
|
{String.trim(name, ":"), url}
|
||||||
|
end)
|
||||||
|
|
||||||
|
CommonUtils.format_input(bio, mentions, tags, "text/plain") |> Formatter.emojify(emoji)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@ defmodule Pleroma.User.Info do
|
||||||
|
|
||||||
embedded_schema do
|
embedded_schema do
|
||||||
field(:banner, :map, default: %{})
|
field(:banner, :map, default: %{})
|
||||||
field(:background, :string, default: nil)
|
field(:background, :map, default: %{})
|
||||||
field(:source_data, :map, default: %{})
|
field(:source_data, :map, default: %{})
|
||||||
field(:note_count, :integer, default: 0)
|
field(:note_count, :integer, default: 0)
|
||||||
field(:follower_count, :integer, default: 0)
|
field(:follower_count, :integer, default: 0)
|
||||||
|
@ -137,6 +137,7 @@ def profile_update(info, params) do
|
||||||
:default_scope,
|
:default_scope,
|
||||||
:banner,
|
:banner,
|
||||||
:hide_network
|
:hide_network
|
||||||
|
:background
|
||||||
])
|
])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -762,7 +762,7 @@ def fetch_and_contain_remote_object_from_id(id) do
|
||||||
Logger.info("Fetching #{id} via AP")
|
Logger.info("Fetching #{id} via AP")
|
||||||
|
|
||||||
with true <- String.starts_with?(id, "http"),
|
with true <- String.starts_with?(id, "http"),
|
||||||
{:ok, %{body: body, status_code: code}} when code in 200..299 <-
|
{:ok, %{body: body, status: code}} when code in 200..299 <-
|
||||||
@httpoison.get(
|
@httpoison.get(
|
||||||
id,
|
id,
|
||||||
[Accept: "application/activity+json"],
|
[Accept: "application/activity+json"],
|
||||||
|
|
|
@ -23,7 +23,7 @@ defp check_reject(%{host: actor_host} = _actor_info, object) do
|
||||||
|
|
||||||
defp check_media_removal(
|
defp check_media_removal(
|
||||||
%{host: actor_host} = _actor_info,
|
%{host: actor_host} = _actor_info,
|
||||||
%{"type" => "Create", "object" => %{"attachement" => child_attachment}} = object
|
%{"type" => "Create", "object" => %{"attachment" => child_attachment}} = object
|
||||||
)
|
)
|
||||||
when length(child_attachment) > 0 do
|
when length(child_attachment) > 0 do
|
||||||
object =
|
object =
|
||||||
|
|
|
@ -17,7 +17,15 @@ def init(args) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def start_link() do
|
def start_link() do
|
||||||
|
enabled = Pleroma.Config.get([:retry_queue, :enabled], false)
|
||||||
|
|
||||||
|
if enabled do
|
||||||
|
Logger.info("Starting retry queue")
|
||||||
GenServer.start_link(__MODULE__, %{delivered: 0, dropped: 0}, name: __MODULE__)
|
GenServer.start_link(__MODULE__, %{delivered: 0, dropped: 0}, name: __MODULE__)
|
||||||
|
else
|
||||||
|
Logger.info("Retry queue disabled")
|
||||||
|
:ignore
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def enqueue(data, transport, retries \\ 0) do
|
def enqueue(data, transport, retries \\ 0) do
|
||||||
|
|
|
@ -55,7 +55,7 @@ def update_credentials(%{assigns: %{user: user}} = conn, params) do
|
||||||
user_params =
|
user_params =
|
||||||
%{}
|
%{}
|
||||||
|> add_if_present(params, "display_name", :name)
|
|> add_if_present(params, "display_name", :name)
|
||||||
|> add_if_present(params, "note", :bio)
|
|> add_if_present(params, "note", :bio, fn value -> {:ok, User.parse_bio(value)} end)
|
||||||
|> add_if_present(params, "avatar", :avatar, fn value ->
|
|> add_if_present(params, "avatar", :avatar, fn value ->
|
||||||
with %Plug.Upload{} <- value,
|
with %Plug.Upload{} <- value,
|
||||||
{:ok, object} <- ActivityPub.upload(value, type: :avatar) do
|
{:ok, object} <- ActivityPub.upload(value, type: :avatar) do
|
||||||
|
@ -1181,7 +1181,7 @@ def suggestions(%{assigns: %{user: user}} = conn, _) do
|
||||||
user = user.nickname
|
user = user.nickname
|
||||||
url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user)
|
url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user)
|
||||||
|
|
||||||
with {:ok, %{status_code: 200, body: body}} <-
|
with {:ok, %{status: 200, body: body}} <-
|
||||||
@httpoison.get(url, [], timeout: timeout, recv_timeout: timeout),
|
@httpoison.get(url, [], timeout: timeout, recv_timeout: timeout),
|
||||||
{:ok, data} <- Jason.decode(body) do
|
{:ok, data} <- Jason.decode(body) do
|
||||||
data2 =
|
data2 =
|
||||||
|
|
|
@ -5,12 +5,12 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyController do
|
||||||
@default_proxy_opts [max_body_length: 25 * 1_048_576]
|
@default_proxy_opts [max_body_length: 25 * 1_048_576]
|
||||||
|
|
||||||
def remote(conn, params = %{"sig" => sig64, "url" => url64}) do
|
def remote(conn, params = %{"sig" => sig64, "url" => url64}) do
|
||||||
with config <- Pleroma.Config.get([:media_proxy]),
|
with config <- Pleroma.Config.get([:media_proxy], []),
|
||||||
true <- Keyword.get(config, :enabled, false),
|
true <- Keyword.get(config, :enabled, false),
|
||||||
{:ok, url} <- MediaProxy.decode_url(sig64, url64),
|
{:ok, url} <- MediaProxy.decode_url(sig64, url64),
|
||||||
filename <- Path.basename(URI.parse(url).path),
|
filename <- Path.basename(URI.parse(url).path),
|
||||||
:ok <- filename_matches(Map.has_key?(params, "filename"), conn.request_path, url) do
|
:ok <- filename_matches(Map.has_key?(params, "filename"), conn.request_path, url) do
|
||||||
ReverseProxy.call(conn, url, Keyword.get(config, :proxy_opts, @default_proxy_length))
|
ReverseProxy.call(conn, url, Keyword.get(config, :proxy_opts, @default_proxy_opts))
|
||||||
else
|
else
|
||||||
false ->
|
false ->
|
||||||
send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404))
|
send_resp(conn, 404, Plug.Conn.Status.reason_phrase(404))
|
||||||
|
|
|
@ -346,13 +346,15 @@ def get_atom_url(body) do
|
||||||
|
|
||||||
def fetch_activity_from_atom_url(url) do
|
def fetch_activity_from_atom_url(url) do
|
||||||
with true <- String.starts_with?(url, "http"),
|
with true <- String.starts_with?(url, "http"),
|
||||||
{:ok, %{body: body, status_code: code}} when code in 200..299 <-
|
{:ok, %{body: body, status: code}} when code in 200..299 <-
|
||||||
@httpoison.get(
|
@httpoison.get(
|
||||||
url,
|
url,
|
||||||
[Accept: "application/atom+xml"],
|
[Accept: "application/atom+xml"],
|
||||||
follow_redirect: true,
|
follow_redirect: true,
|
||||||
|
adapter: [
|
||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
recv_timeout: 20000
|
recv_timeout: 20000
|
||||||
|
]
|
||||||
) do
|
) do
|
||||||
Logger.debug("Got document from #{url}, handling...")
|
Logger.debug("Got document from #{url}, handling...")
|
||||||
handle_incoming(body)
|
handle_incoming(body)
|
||||||
|
|
|
@ -158,14 +158,16 @@ def remote_users(%{data: %{"to" => to} = data}) do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp send_to_user(%{info: %{salmon: salmon}}, feed, poster) do
|
defp send_to_user(%{info: %{salmon: salmon}}, feed, poster) do
|
||||||
with {:ok, %{status_code: code}} <-
|
with {:ok, %{status: code}} <-
|
||||||
poster.(
|
poster.(
|
||||||
salmon,
|
salmon,
|
||||||
feed,
|
feed,
|
||||||
[{"Content-Type", "application/magic-envelope+xml"}],
|
[{"Content-Type", "application/magic-envelope+xml"}],
|
||||||
|
adapter: [
|
||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
recv_timeout: 20000,
|
recv_timeout: 20000,
|
||||||
hackney: [pool: :default]
|
pool: :default
|
||||||
|
]
|
||||||
) do
|
) do
|
||||||
Logger.debug(fn -> "Pushed to #{salmon}, code #{code}" end)
|
Logger.debug(fn -> "Pushed to #{salmon}, code #{code}" end)
|
||||||
else
|
else
|
||||||
|
|
|
@ -132,7 +132,7 @@ def register_user(params) do
|
||||||
params = %{
|
params = %{
|
||||||
nickname: params["nickname"],
|
nickname: params["nickname"],
|
||||||
name: params["fullname"],
|
name: params["fullname"],
|
||||||
bio: params["bio"],
|
bio: User.parse_bio(params["bio"]),
|
||||||
email: params["email"],
|
email: params["email"],
|
||||||
password: params["password"],
|
password: params["password"],
|
||||||
password_confirmation: params["confirm"]
|
password_confirmation: params["confirm"]
|
||||||
|
|
|
@ -462,27 +462,16 @@ defp build_info_cng(user, params) do
|
||||||
User.Info.profile_update(user.info, info_params)
|
User.Info.profile_update(user.info, info_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp add_profile_emoji(user, params) do
|
defp parse_profile_bio(user, params) do
|
||||||
if bio = params["description"] do
|
if bio = params["description"] do
|
||||||
mentions = Formatter.parse_mentions(bio)
|
Map.put(params, "bio", User.parse_bio(bio, user))
|
||||||
tags = Formatter.parse_tags(bio)
|
|
||||||
|
|
||||||
emoji =
|
|
||||||
(user.info.source_data["tag"] || [])
|
|
||||||
|> Enum.filter(fn %{"type" => t} -> t == "Emoji" end)
|
|
||||||
|> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} ->
|
|
||||||
{String.trim(name, ":"), url}
|
|
||||||
end)
|
|
||||||
|
|
||||||
bio_html = CommonUtils.format_input(bio, mentions, tags, "text/plain")
|
|
||||||
Map.put(params, "bio", bio_html |> Formatter.emojify(emoji))
|
|
||||||
else
|
else
|
||||||
params
|
params
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_profile(%{assigns: %{user: user}} = conn, params) do
|
def update_profile(%{assigns: %{user: user}} = conn, params) do
|
||||||
params = add_profile_emoji(user, params)
|
params = parse_profile_bio(user, params)
|
||||||
info_cng = build_info_cng(user, params)
|
info_cng = build_info_cng(user, params)
|
||||||
|
|
||||||
with changeset <- User.update_changeset(user, params),
|
with changeset <- User.update_changeset(user, params),
|
||||||
|
|
|
@ -220,7 +220,7 @@ def get_template_from_xml(body) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_lrdd_template(domain) do
|
def find_lrdd_template(domain) do
|
||||||
with {:ok, %{status_code: status_code, body: body}} when status_code in 200..299 <-
|
with {:ok, %{status: status, body: body}} when status in 200..299 <-
|
||||||
@httpoison.get("http://#{domain}/.well-known/host-meta", [], follow_redirect: true) do
|
@httpoison.get("http://#{domain}/.well-known/host-meta", [], follow_redirect: true) do
|
||||||
get_template_from_xml(body)
|
get_template_from_xml(body)
|
||||||
else
|
else
|
||||||
|
@ -259,7 +259,7 @@ def finger(account) do
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
[Accept: "application/xrd+xml,application/jrd+json"],
|
||||||
follow_redirect: true
|
follow_redirect: true
|
||||||
),
|
),
|
||||||
{:ok, %{status_code: status_code, body: body}} when status_code in 200..299 <- response do
|
{:ok, %{status: status, body: body}} when status in 200..299 <- response do
|
||||||
doc = XML.parse_document(body)
|
doc = XML.parse_document(body)
|
||||||
|
|
||||||
if doc != :error do
|
if doc != :error do
|
||||||
|
|
|
@ -173,7 +173,7 @@ def subscribe(subscriber, subscribed, requester \\ &request_subscription/1) do
|
||||||
|
|
||||||
def gather_feed_data(topic, getter \\ &@httpoison.get/1) do
|
def gather_feed_data(topic, getter \\ &@httpoison.get/1) do
|
||||||
with {:ok, response} <- getter.(topic),
|
with {:ok, response} <- getter.(topic),
|
||||||
status_code when status_code in 200..299 <- response.status_code,
|
status when status in 200..299 <- response.status,
|
||||||
body <- response.body,
|
body <- response.body,
|
||||||
doc <- XML.parse_document(body),
|
doc <- XML.parse_document(body),
|
||||||
uri when not is_nil(uri) <- XML.string_from_xpath("/feed/author[1]/uri", doc),
|
uri when not is_nil(uri) <- XML.string_from_xpath("/feed/author[1]/uri", doc),
|
||||||
|
@ -221,7 +221,7 @@ def request_subscription(websub, poster \\ &@httpoison.post/3, timeout \\ 10_000
|
||||||
|
|
||||||
task = Task.async(websub_checker)
|
task = Task.async(websub_checker)
|
||||||
|
|
||||||
with {:ok, %{status_code: 202}} <-
|
with {:ok, %{status: 202}} <-
|
||||||
poster.(websub.hub, {:form, data}, "Content-type": "application/x-www-form-urlencoded"),
|
poster.(websub.hub, {:form, data}, "Content-type": "application/x-www-form-urlencoded"),
|
||||||
{:ok, websub} <- Task.yield(task, timeout) do
|
{:ok, websub} <- Task.yield(task, timeout) do
|
||||||
{:ok, websub}
|
{:ok, websub}
|
||||||
|
@ -257,7 +257,7 @@ def publish_one(%{xml: xml, topic: topic, callback: callback, secret: secret}) d
|
||||||
signature = sign(secret || "", xml)
|
signature = sign(secret || "", xml)
|
||||||
Logger.info(fn -> "Pushing #{topic} to #{callback}" end)
|
Logger.info(fn -> "Pushing #{topic} to #{callback}" end)
|
||||||
|
|
||||||
with {:ok, %{status_code: code}} <-
|
with {:ok, %{status: code}} <-
|
||||||
@httpoison.post(
|
@httpoison.post(
|
||||||
callback,
|
callback,
|
||||||
xml,
|
xml,
|
||||||
|
@ -265,9 +265,11 @@ def publish_one(%{xml: xml, topic: topic, callback: callback, secret: secret}) d
|
||||||
{"Content-Type", "application/atom+xml"},
|
{"Content-Type", "application/atom+xml"},
|
||||||
{"X-Hub-Signature", "sha1=#{signature}"}
|
{"X-Hub-Signature", "sha1=#{signature}"}
|
||||||
],
|
],
|
||||||
|
adapter: [
|
||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
recv_timeout: 20000,
|
recv_timeout: 20000,
|
||||||
hackney: [pool: :default]
|
pool: :default
|
||||||
|
]
|
||||||
) do
|
) do
|
||||||
Logger.info(fn -> "Pushed to #{callback}, code #{code}" end)
|
Logger.info(fn -> "Pushed to #{callback}, code #{code}" end)
|
||||||
{:ok, code}
|
{:ok, code}
|
||||||
|
|
1
mix.exs
1
mix.exs
|
@ -56,6 +56,7 @@ defp deps do
|
||||||
{:calendar, "~> 0.17.4"},
|
{:calendar, "~> 0.17.4"},
|
||||||
{:cachex, "~> 3.0.2"},
|
{:cachex, "~> 3.0.2"},
|
||||||
{:httpoison, "~> 1.2.0"},
|
{:httpoison, "~> 1.2.0"},
|
||||||
|
{:tesla, "~> 1.2"},
|
||||||
{:jason, "~> 1.0"},
|
{:jason, "~> 1.0"},
|
||||||
{:mogrify, "~> 0.6.1"},
|
{:mogrify, "~> 0.6.1"},
|
||||||
{:ex_aws, "~> 2.0"},
|
{:ex_aws, "~> 2.0"},
|
||||||
|
|
3
mix.lock
3
mix.lock
|
@ -17,6 +17,7 @@
|
||||||
"eternal": {:hex, :eternal, "1.2.0", "e2a6b6ce3b8c248f7dc31451aefca57e3bdf0e48d73ae5043229380a67614c41", [:mix], [], "hexpm"},
|
"eternal": {:hex, :eternal, "1.2.0", "e2a6b6ce3b8c248f7dc31451aefca57e3bdf0e48d73ae5043229380a67614c41", [:mix], [], "hexpm"},
|
||||||
"ex_aws": {:hex, :ex_aws, "2.1.0", "b92651527d6c09c479f9013caa9c7331f19cba38a650590d82ebf2c6c16a1d8a", [:mix], [{:configparser_ex, "~> 2.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:xml_builder, "~> 0.1.0", [hex: :xml_builder, repo: "hexpm", optional: true]}], "hexpm"},
|
"ex_aws": {:hex, :ex_aws, "2.1.0", "b92651527d6c09c479f9013caa9c7331f19cba38a650590d82ebf2c6c16a1d8a", [:mix], [{:configparser_ex, "~> 2.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:xml_builder, "~> 0.1.0", [hex: :xml_builder, repo: "hexpm", optional: true]}], "hexpm"},
|
||||||
"ex_aws_s3": {:hex, :ex_aws_s3, "2.0.1", "9e09366e77f25d3d88c5393824e613344631be8db0d1839faca49686e99b6704", [: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"},
|
"ex_aws_s3": {:hex, :ex_aws_s3, "2.0.1", "9e09366e77f25d3d88c5393824e613344631be8db0d1839faca49686e99b6704", [: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"},
|
||||||
|
"ex_doc": {:hex, :ex_doc, "0.19.1", "519bb9c19526ca51d326c060cb1778d4a9056b190086a8c6c115828eaccea6cf", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.7", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"ex_machina": {:hex, :ex_machina, "2.2.0", "fec496331e04fc2db2a1a24fe317c12c0c4a50d2beb8ebb3531ed1f0d84be0ed", [:mix], [{:ecto, "~> 2.1", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"},
|
"ex_machina": {:hex, :ex_machina, "2.2.0", "fec496331e04fc2db2a1a24fe317c12c0c4a50d2beb8ebb3531ed1f0d84be0ed", [:mix], [{:ecto, "~> 2.1", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"},
|
||||||
"gettext": {:hex, :gettext, "0.15.0", "40a2b8ce33a80ced7727e36768499fc9286881c43ebafccae6bab731e2b2b8ce", [:mix], [], "hexpm"},
|
"gettext": {:hex, :gettext, "0.15.0", "40a2b8ce33a80ced7727e36768499fc9286881c43ebafccae6bab731e2b2b8ce", [:mix], [], "hexpm"},
|
||||||
"hackney": {:hex, :hackney, "1.13.0", "24edc8cd2b28e1c652593833862435c80661834f6c9344e84b6a2255e7aeef03", [:rebar3], [{:certifi, "2.3.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.2", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
|
"hackney": {:hex, :hackney, "1.13.0", "24edc8cd2b28e1c652593833862435c80661834f6c9344e84b6a2255e7aeef03", [:rebar3], [{:certifi, "2.3.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.2", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
|
@ -25,6 +26,7 @@
|
||||||
"idna": {:hex, :idna, "5.1.2", "e21cb58a09f0228a9e0b95eaa1217f1bcfc31a1aaa6e1fdf2f53a33f7dbd9494", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"},
|
"idna": {:hex, :idna, "5.1.2", "e21cb58a09f0228a9e0b95eaa1217f1bcfc31a1aaa6e1fdf2f53a33f7dbd9494", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
|
"jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
|
||||||
"makeup": {:hex, :makeup, "0.5.5", "9e08dfc45280c5684d771ad58159f718a7b5788596099bdfb0284597d368a882", [:mix], [{:nimble_parsec, "~> 0.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"},
|
"makeup": {:hex, :makeup, "0.5.5", "9e08dfc45280c5684d771ad58159f718a7b5788596099bdfb0284597d368a882", [:mix], [{:nimble_parsec, "~> 0.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
|
"makeup_elixir": {:hex, :makeup_elixir, "0.10.0", "0f09c2ddf352887a956d84f8f7e702111122ca32fbbc84c2f0569b8b65cbf7fa", [:mix], [{:makeup, "~> 0.5.5", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"meck": {:hex, :meck, "0.8.9", "64c5c0bd8bcca3a180b44196265c8ed7594e16bcc845d0698ec6b4e577f48188", [:rebar3], [], "hexpm"},
|
"meck": {:hex, :meck, "0.8.9", "64c5c0bd8bcca3a180b44196265c8ed7594e16bcc845d0698ec6b4e577f48188", [:rebar3], [], "hexpm"},
|
||||||
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
|
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
|
||||||
"mime": {:hex, :mime, "1.3.0", "5e8d45a39e95c650900d03f897fbf99ae04f60ab1daa4a34c7a20a5151b7a5fe", [:mix], [], "hexpm"},
|
"mime": {:hex, :mime, "1.3.0", "5e8d45a39e95c650900d03f897fbf99ae04f60ab1daa4a34c7a20a5151b7a5fe", [:mix], [], "hexpm"},
|
||||||
|
@ -45,6 +47,7 @@
|
||||||
"postgrex": {:hex, :postgrex, "0.13.5", "3d931aba29363e1443da167a4b12f06dcd171103c424de15e5f3fc2ba3e6d9c5", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"},
|
"postgrex": {:hex, :postgrex, "0.13.5", "3d931aba29363e1443da167a4b12f06dcd171103c424de15e5f3fc2ba3e6d9c5", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm"},
|
"ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm"},
|
||||||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
|
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
|
||||||
|
"tesla": {:hex, :tesla, "1.2.1", "864783cc27f71dd8c8969163704752476cec0f3a51eb3b06393b3971dc9733ff", [:mix], [{:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm"},
|
||||||
"trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"},
|
"trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"tzdata": {:hex, :tzdata, "0.5.17", "50793e3d85af49736701da1a040c415c97dc1caf6464112fd9bd18f425d3053b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"},
|
"tzdata": {:hex, :tzdata, "0.5.17", "50793e3d85af49736701da1a040c415c97dc1caf6464112fd9bd18f425d3053b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"},
|
"unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"},
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>Pleroma</title><link rel=icon type=image/png href=/favicon.png><link rel=stylesheet href=/static/font/css/fontello.css><link rel=stylesheet href=/static/font/css/animation.css><link href=/static/css/app.0808aeafc6252b3050ea95b17dcaff1a.css rel=stylesheet></head><body style="display: none"><div id=app></div><script type=text/javascript src=/static/js/manifest.34667c2817916147413f.js></script><script type=text/javascript src=/static/js/vendor.32c621c7157f34c20923.js></script><script type=text/javascript src=/static/js/app.065638d22ade92dea420.js></script></body></html>
|
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>Pleroma</title><link rel=icon type=image/png href=/favicon.png><link rel=stylesheet href=/static/font/css/fontello.css><link rel=stylesheet href=/static/font/css/animation.css><link href=/static/css/app.0808aeafc6252b3050ea95b17dcaff1a.css rel=stylesheet></head><body style="display: none"><div id=app></div><script type=text/javascript src=/static/js/manifest.18df0da570d88ba76ec5.js></script><script type=text/javascript src=/static/js/vendor.0e895ca116d5ba12f2b6.js></script><script type=text/javascript src=/static/js/app.3f7c9aaedc6b87fa9653.js></script></body></html>
|
|
@ -11,6 +11,8 @@
|
||||||
"scopeOptionsEnabled": false,
|
"scopeOptionsEnabled": false,
|
||||||
"formattingOptionsEnabled": false,
|
"formattingOptionsEnabled": false,
|
||||||
"collapseMessageWithSubject": false,
|
"collapseMessageWithSubject": false,
|
||||||
|
"scopeCopy": false,
|
||||||
|
"subjectLineBehavior": "email",
|
||||||
"hidePostStats": false,
|
"hidePostStats": false,
|
||||||
"hideUserStats": false,
|
"hideUserStats": false,
|
||||||
"loginMethod": "password"
|
"loginMethod": "password"
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
11
priv/static/static/js/app.3f7c9aaedc6b87fa9653.js
Normal file
11
priv/static/static/js/app.3f7c9aaedc6b87fa9653.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/app.3f7c9aaedc6b87fa9653.js.map
Normal file
1
priv/static/static/js/app.3f7c9aaedc6b87fa9653.js.map
Normal file
File diff suppressed because one or more lines are too long
2
priv/static/static/js/manifest.18df0da570d88ba76ec5.js
Normal file
2
priv/static/static/js/manifest.18df0da570d88ba76ec5.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
!function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var a=window.webpackJsonp;window.webpackJsonp=function(c,o){for(var p,l,s=0,i=[];s<c.length;s++)l=c[s],n[l]&&i.push.apply(i,n[l]),n[l]=0;for(p in o)Object.prototype.hasOwnProperty.call(o,p)&&(e[p]=o[p]);for(a&&a(c,o);i.length;)i.shift().call(null,t);if(o[0])return r[0]=0,t(0)};var r={},n={0:0};t.e=function(e,a){if(0===n[e])return a.call(null,t);if(void 0!==n[e])n[e].push(a);else{n[e]=[a];var r=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.src=t.p+"static/js/"+e+"."+{1:"0e895ca116d5ba12f2b6",2:"3f7c9aaedc6b87fa9653"}[e]+".js",r.appendChild(c)}},t.m=e,t.c=r,t.p="/"}([]);
|
||||||
|
//# sourceMappingURL=manifest.18df0da570d88ba76ec5.js.map
|
File diff suppressed because one or more lines are too long
|
@ -1,2 +0,0 @@
|
||||||
!function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={exports:{},id:r,loaded:!1};return e[r].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var r=window.webpackJsonp;window.webpackJsonp=function(c,o){for(var p,l,s=0,i=[];s<c.length;s++)l=c[s],a[l]&&i.push.apply(i,a[l]),a[l]=0;for(p in o)Object.prototype.hasOwnProperty.call(o,p)&&(e[p]=o[p]);for(r&&r(c,o);i.length;)i.shift().call(null,t);if(o[0])return n[0]=0,t(0)};var n={},a={0:0};t.e=function(e,r){if(0===a[e])return r.call(null,t);if(void 0!==a[e])a[e].push(r);else{a[e]=[r];var n=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.src=t.p+"static/js/"+e+"."+{1:"32c621c7157f34c20923",2:"065638d22ade92dea420"}[e]+".js",n.appendChild(c)}},t.m=e,t.c=n,t.p="/"}([]);
|
|
||||||
//# sourceMappingURL=manifest.34667c2817916147413f.js.map
|
|
34
priv/static/static/js/vendor.0e895ca116d5ba12f2b6.js
Normal file
34
priv/static/static/js/vendor.0e895ca116d5ba12f2b6.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/vendor.0e895ca116d5ba12f2b6.js.map
Normal file
1
priv/static/static/js/vendor.0e895ca116d5ba12f2b6.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
test/fixtures/httpoison_mock/framatube.org_host_meta
vendored
Normal file
2
test/fixtures/httpoison_mock/framatube.org_host_meta
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><hm:Host xmlns:hm="http://host-meta.net/xrd/1.0">framatube.org</hm:Host><Link rel="lrdd" template="http://framatube.org/main/xrd?uri={uri}"><Title>Resource Descriptor</Title></Link></XRD>
|
10
test/fixtures/httpoison_mock/gerzilla.de_host_meta
vendored
Normal file
10
test/fixtures/httpoison_mock/gerzilla.de_host_meta
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version='1.0' encoding='UTF-8'?><XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'
|
||||||
|
xmlns:hm='http://host-meta.net/xrd/1.0'>
|
||||||
|
|
||||||
|
<hm:Host>gerzilla.de</hm:Host>
|
||||||
|
|
||||||
|
<Link rel='lrdd' type="application/xrd+xml" template='https://gerzilla.de/xrd/?uri={uri}' />
|
||||||
|
<Link rel="http://oexchange.org/spec/0.8/rel/resident-target" type="application/xrd+xml"
|
||||||
|
href="https://gerzilla.de/oexchange/xrd" />
|
||||||
|
|
||||||
|
</XRD>
|
2
test/fixtures/httpoison_mock/gnusocial.de_host_meta
vendored
Normal file
2
test/fixtures/httpoison_mock/gnusocial.de_host_meta
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"><hm:Host xmlns:hm="http://host-meta.net/xrd/1.0">gnusocial.de</hm:Host><Link rel="lrdd" template="http://gnusocial.de/main/xrd?uri={uri}"><Title>Resource Descriptor</Title></Link></XRD>
|
|
@ -5,6 +5,11 @@ defmodule Pleroma.FormatterTest do
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
describe ".add_hashtag_links" do
|
describe ".add_hashtag_links" do
|
||||||
test "turns hashtags into links" do
|
test "turns hashtags into links" do
|
||||||
text = "I love #cofe and #2hu"
|
text = "I love #cofe and #2hu"
|
||||||
|
|
55
test/http_test.exs
Normal file
55
test/http_test.exs
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
defmodule Pleroma.HTTPTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: "http://example.com/hello",
|
||||||
|
headers: [{"content-type", "application/json"}]
|
||||||
|
} ->
|
||||||
|
json(%{"my" => "data"})
|
||||||
|
|
||||||
|
%{method: :get, url: "http://example.com/hello"} ->
|
||||||
|
%Tesla.Env{status: 200, body: "hello"}
|
||||||
|
|
||||||
|
%{method: :post, url: "http://example.com/world"} ->
|
||||||
|
%Tesla.Env{status: 200, body: "world"}
|
||||||
|
end)
|
||||||
|
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "get/1" do
|
||||||
|
test "returns successfully result" do
|
||||||
|
assert Pleroma.HTTP.get("http://example.com/hello") == {
|
||||||
|
:ok,
|
||||||
|
%Tesla.Env{status: 200, body: "hello"}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "get/2 (with headers)" do
|
||||||
|
test "returns successfully result for json content-type" do
|
||||||
|
assert Pleroma.HTTP.get("http://example.com/hello", [{"content-type", "application/json"}]) ==
|
||||||
|
{
|
||||||
|
:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: "{\"my\":\"data\"}",
|
||||||
|
headers: [{"content-type", "application/json"}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "post/2" do
|
||||||
|
test "returns successfully result" do
|
||||||
|
assert Pleroma.HTTP.post("http://example.com/world", "") == {
|
||||||
|
:ok,
|
||||||
|
%Tesla.Env{status: 200, body: "world"}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
56
test/plugs/oauth_plug_test.exs
Normal file
56
test/plugs/oauth_plug_test.exs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
defmodule Pleroma.Plugs.OAuthPlugTest do
|
||||||
|
use Pleroma.Web.ConnCase, async: true
|
||||||
|
|
||||||
|
alias Pleroma.Plugs.OAuthPlug
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
@session_opts [
|
||||||
|
store: :cookie,
|
||||||
|
key: "_test",
|
||||||
|
signing_salt: "cooldude"
|
||||||
|
]
|
||||||
|
|
||||||
|
setup %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
{:ok, %{token: token}} = Pleroma.Web.OAuth.Token.create_token(insert(:oauth_app), user)
|
||||||
|
%{user: user, token: token, conn: conn}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "with valid token(uppercase), it assigns the user", %{conn: conn} = opts do
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> put_req_header("authorization", "BEARER #{opts[:token]}")
|
||||||
|
|> OAuthPlug.call(%{})
|
||||||
|
|
||||||
|
assert conn.assigns[:user] == opts[:user]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "with valid token(downcase), it assigns the user", %{conn: conn} = opts do
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> put_req_header("authorization", "bearer #{opts[:token]}")
|
||||||
|
|> OAuthPlug.call(%{})
|
||||||
|
|
||||||
|
assert conn.assigns[:user] == opts[:user]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "with invalid token, it not assigns the user", %{conn: conn} do
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> put_req_header("authorization", "bearer TTTTT")
|
||||||
|
|> OAuthPlug.call(%{})
|
||||||
|
|
||||||
|
refute conn.assigns[:user]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "when token is missed but token in session, it assigns the user", %{conn: conn} = opts do
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> Plug.Session.call(Plug.Session.init(@session_opts))
|
||||||
|
|> fetch_session()
|
||||||
|
|> put_session(:oauth_token, opts[:token])
|
||||||
|
|> OAuthPlug.call(%{})
|
||||||
|
|
||||||
|
assert conn.assigns[:user] == opts[:user]
|
||||||
|
end
|
||||||
|
end
|
675
test/support/http_request_mock.ex
Normal file
675
test/support/http_request_mock.ex
Normal file
|
@ -0,0 +1,675 @@
|
||||||
|
defmodule HttpRequestMock do
|
||||||
|
require Logger
|
||||||
|
|
||||||
|
def request(
|
||||||
|
%Tesla.Env{
|
||||||
|
url: url,
|
||||||
|
method: method,
|
||||||
|
headers: headers,
|
||||||
|
query: query,
|
||||||
|
body: body
|
||||||
|
} = _env
|
||||||
|
) do
|
||||||
|
with {:ok, res} <- apply(__MODULE__, method, [url, query, body, headers]) do
|
||||||
|
res
|
||||||
|
else
|
||||||
|
{_, r} = error ->
|
||||||
|
# Logger.warn(r)
|
||||||
|
error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET Requests
|
||||||
|
#
|
||||||
|
def get(url, query \\ [], body \\ [], headers \\ [])
|
||||||
|
|
||||||
|
def get("https://osada.macgirvin.com/channel/mike", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!("test/fixtures/httpoison_mock/https___osada.macgirvin.com_channel_mike.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://osada.macgirvin.com/.well-known/webfinger?resource=acct:mike@osada.macgirvin.com",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/mike@osada.macgirvin.com.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://social.heldscal.la/.well-known/webfinger?resource=https://social.heldscal.la/user/29191",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/https___social.heldscal.la_user_29191.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://pawoo.net/users/pekorino.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/https___pawoo.net_users_pekorino.atom")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://pawoo.net/.well-known/webfinger?resource=acct:https://pawoo.net/users/pekorino",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/https___pawoo.net_users_pekorino.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://social.stopwatchingus-heidelberg.de/api/statuses/user_timeline/18330.atom",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
_
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/atarifrosch_feed.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://social.stopwatchingus-heidelberg.de/.well-known/webfinger?resource=acct:https://social.stopwatchingus-heidelberg.de/user/18330",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/atarifrosch_webfinger.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://mamot.fr/users/Skruyb.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/https___mamot.fr_users_Skruyb.atom")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://mamot.fr/.well-known/webfinger?resource=acct:https://mamot.fr/users/Skruyb",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/skruyb@mamot.fr.atom")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://social.heldscal.la/.well-known/webfinger?resource=nonexistant@social.heldscal.la",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/nonexistant@social.heldscal.la.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://squeet.me/xrd/?uri=lain@squeet.me", _, _,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/lain_squeet.me_webfinger.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://mst3k.interlinked.me/users/luciferMysticus", _, _,
|
||||||
|
Accept: "application/activity+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/lucifermysticus.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://prismo.news/@mxb", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/https___prismo.news__mxb.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://hubzilla.example.org/channel/kaniini", _, _,
|
||||||
|
Accept: "application/activity+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/kaniini@hubzilla.example.org.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://niu.moe/users/rye", _, _, Accept: "application/activity+json") do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/rye.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://mastodon.example.org/users/admin/statuses/100787282858396771", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!(
|
||||||
|
"test/fixtures/httpoison_mock/http___mastodon.example.org_users_admin_status_1234.json"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://puckipedia.com/", _, _, Accept: "application/activity+json") do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/puckipedia.com.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://peertube.moe/accounts/7even", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/7even.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/peertube.moe-vid.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://baptiste.gelez.xyz/@/BaptisteGelez", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/baptiste.gelex.xyz-user.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://baptiste.gelez.xyz/~/PlumeDevelopment/this-month-in-plume-june-2018/", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/baptiste.gelex.xyz-article.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://mastodon.example.org/users/admin", _, _, Accept: "application/activity+json") do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/admin@mastdon.example.org.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://mastodon.example.org/@admin/99541947525187367", _, _,
|
||||||
|
Accept: "application/activity+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/mastodon-note-object.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://shitposter.club/notice/7369654", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/7369654.html")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://mstdn.io/users/mayuutann", _, _, Accept: "application/activity+json") do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/mayumayu.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://mstdn.io/users/mayuutann/statuses/99568293732299394", _, _,
|
||||||
|
Accept: "application/activity+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/mayumayupost.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://pleroma.soykaf.com/users/lain/feed.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!(
|
||||||
|
"test/fixtures/httpoison_mock/https___pleroma.soykaf.com_users_lain_feed.atom.xml"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(url, _, _, Accept: "application/xrd+xml,application/jrd+json")
|
||||||
|
when url in [
|
||||||
|
"https://pleroma.soykaf.com/.well-known/webfinger?resource=acct:https://pleroma.soykaf.com/users/lain",
|
||||||
|
"https://pleroma.soykaf.com/.well-known/webfinger?resource=https://pleroma.soykaf.com/users/lain"
|
||||||
|
] do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/https___pleroma.soykaf.com_users_lain.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://shitposter.club/api/statuses/user_timeline/1.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!(
|
||||||
|
"test/fixtures/httpoison_mock/https___shitposter.club_api_statuses_user_timeline_1.atom.xml"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://shitposter.club/.well-known/webfinger?resource=https://shitposter.club/user/1",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/https___shitposter.club_user_1.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://shitposter.club/notice/2827873", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!("test/fixtures/httpoison_mock/https___shitposter.club_notice_2827873.html")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://shitposter.club/api/statuses/show/2827873.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!(
|
||||||
|
"test/fixtures/httpoison_mock/https___shitposter.club_api_statuses_show_2827873.atom.xml"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://testing.pleroma.lol/objects/b319022a-4946-44c5-9de9-34801f95507b", _, _, _) do
|
||||||
|
{:ok, %Tesla.Env{status: 200}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://shitposter.club/api/statuses/user_timeline/5381.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/spc_5381.atom")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://shitposter.club/.well-known/webfinger?resource=https://shitposter.club/user/5381",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/spc_5381_xrd.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://shitposter.club/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/shitposter.club_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://shitposter.club/api/statuses/show/7369654.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/7369654.atom")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://shitposter.club/notice/4027863", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/7369654.html")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://social.sakamoto.gq/users/eal/feed.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/sakamoto_eal_feed.atom")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://social.sakamoto.gq/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/social.sakamoto.gq_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://social.sakamoto.gq/.well-known/webfinger?resource=https://social.sakamoto.gq/users/eal",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/eal_sakamoto.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://social.sakamoto.gq/objects/0ccc1a2c-66b0-4305-b23a-7f7f2b040056", _, _,
|
||||||
|
Accept: "application/atom+xml"
|
||||||
|
) do
|
||||||
|
{:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/httpoison_mock/sakamoto.atom")}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://mastodon.social/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/mastodon.social_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://mastodon.social/.well-known/webfinger?resource=https://mastodon.social/users/lambadalambda",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!(
|
||||||
|
"test/fixtures/httpoison_mock/https___mastodon.social_users_lambadalambda.xml"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://gs.example.org/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/gs.example.org_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"http://gs.example.org/.well-known/webfinger?resource=http://gs.example.org:4040/index.php/user/1",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!(
|
||||||
|
"test/fixtures/httpoison_mock/http___gs.example.org_4040_index.php_user_1.xml"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://gs.example.org/index.php/api/statuses/user_timeline/1.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!(
|
||||||
|
"test/fixtures/httpoison_mock/http__gs.example.org_index.php_api_statuses_user_timeline_1.atom.xml"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://social.heldscal.la/api/statuses/user_timeline/29191.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!(
|
||||||
|
"test/fixtures/httpoison_mock/https___social.heldscal.la_api_statuses_user_timeline_29191.atom.xml"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://squeet.me/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{status: 200, body: File.read!("test/fixtures/httpoison_mock/squeet.me_host_meta")}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://squeet.me/xrd?uri=lain@squeet.me", _, _,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/lain_squeet.me_webfinger.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://social.heldscal.la/.well-known/webfinger?resource=shp@social.heldscal.la",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/shp@social.heldscal.la.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://framatube.org/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/framatube.org_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://framatube.org/main/xrd?uri=framasoft@framatube.org", _, _,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
headers: [{"content-type", "application/json"}],
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/framasoft@framatube.org.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://gnusocial.de/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/gnusocial.de_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://gnusocial.de/main/xrd?uri=winterdienst@gnusocial.de", _, _,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/winterdienst_webfinger.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://status.alpicola.com/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/status.alpicola.com_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://macgirvin.com/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/macgirvin.com_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://gerzilla.de/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/gerzilla.de_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://gerzilla.de/xrd/?uri=kaniini@gerzilla.de", _, _,
|
||||||
|
Accept: "application/xrd+xml,application/jrd+json"
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
headers: [{"content-type", "application/json"}],
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/kaniini@gerzilla.de.json")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://social.heldscal.la/api/statuses/user_timeline/23211.atom", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body:
|
||||||
|
File.read!(
|
||||||
|
"test/fixtures/httpoison_mock/https___social.heldscal.la_api_statuses_user_timeline_23211.atom.xml"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://social.heldscal.la/.well-known/webfinger?resource=https://social.heldscal.la/user/23211",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
_
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/https___social.heldscal.la_user_23211.xml")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("http://social.heldscal.la/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/social.heldscal.la_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://social.heldscal.la/.well-known/host-meta", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: File.read!("test/fixtures/httpoison_mock/social.heldscal.la_host_meta")
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://mastodon.social/users/lambadalambda.atom", _, _, _) do
|
||||||
|
{:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/lambadalambda.atom")}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://social.heldscal.la/user/23211", _, _, Accept: "application/activity+json") do
|
||||||
|
{:ok, Tesla.Mock.json(%{"id" => "https://social.heldscal.la/user/23211"}, status: 200)}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(url, query, body, headers) do
|
||||||
|
{:error,
|
||||||
|
"Not implemented the mock response for get #{inspect(url)}, #{query}, #{inspect(body)}, #{
|
||||||
|
inspect(headers)
|
||||||
|
}"}
|
||||||
|
end
|
||||||
|
|
||||||
|
# POST Requests
|
||||||
|
#
|
||||||
|
|
||||||
|
def post(url, query \\ [], body \\ [], headers \\ [])
|
||||||
|
|
||||||
|
def post("http://example.org/needs_refresh", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: ""
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def post(url, _query, _body, _headers) do
|
||||||
|
{:error, "Not implemented the mock response for post #{inspect(url)}"}
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,883 +0,0 @@
|
||||||
defmodule HTTPoisonMock do
|
|
||||||
alias HTTPoison.Response
|
|
||||||
|
|
||||||
def process_request_options(options), do: options
|
|
||||||
|
|
||||||
def get(url, body \\ [], headers \\ [])
|
|
||||||
|
|
||||||
def get("https://prismo.news/@mxb", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___prismo.news__mxb.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://osada.macgirvin.com/channel/mike", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!("test/fixtures/httpoison_mock/https___osada.macgirvin.com_channel_mike.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://osada.macgirvin.com/.well-known/webfinger?resource=acct:mike@osada.macgirvin.com",
|
|
||||||
_,
|
|
||||||
_
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/mike@osada.macgirvin.com.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://info.pleroma.site/activity.json", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https__info.pleroma.site_activity.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://info.pleroma.site/activity2.json", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https__info.pleroma.site_activity2.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://info.pleroma.site/activity3.json", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https__info.pleroma.site_activity3.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://info.pleroma.site/activity4.json", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https__info.pleroma.site_activity4.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://info.pleroma.site/actor.json", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___info.pleroma.site_actor.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://puckipedia.com/", [Accept: "application/activity+json"], _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/puckipedia.com.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://gerzilla.de/.well-known/webfinger?resource=acct:kaniini@gerzilla.de",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/kaniini@gerzilla.de.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://framatube.org/.well-known/webfinger?resource=acct:framasoft@framatube.org",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/framasoft@framatube.org.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://gnusocial.de/.well-known/webfinger?resource=acct:winterdienst@gnusocial.de",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/winterdienst_webfinger.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.heldscal.la/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "nonexistant@social.heldscal.la"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 500,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/nonexistant@social.heldscal.la.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.heldscal.la/.well-known/webfinger?resource=shp@social.heldscal.la",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/shp@social.heldscal.la.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.heldscal.la/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "shp@social.heldscal.la"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/shp@social.heldscal.la.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.heldscal.la/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "https://social.heldscal.la/user/23211"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___social.heldscal.la_user_23211.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.heldscal.la/.well-known/webfinger?resource=https://social.heldscal.la/user/23211",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___social.heldscal.la_user_23211.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.heldscal.la/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "https://social.heldscal.la/user/29191"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___social.heldscal.la_user_29191.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.heldscal.la/.well-known/webfinger?resource=https://social.heldscal.la/user/29191",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___social.heldscal.la_user_29191.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://mastodon.social/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "https://mastodon.social/users/lambadalambda"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/https___mastodon.social_users_lambadalambda.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://mastodon.social/.well-known/webfinger?resource=https://mastodon.social/users/lambadalambda",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/https___mastodon.social_users_lambadalambda.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://shitposter.club/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "https://shitposter.club/user/1"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___shitposter.club_user_1.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://shitposter.club/.well-known/webfinger?resource=https://shitposter.club/user/1",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___shitposter.club_user_1.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://shitposter.club/.well-known/webfinger?resource=https://shitposter.club/user/5381",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/spc_5381_xrd.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"http://gs.example.org/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "http://gs.example.org:4040/index.php/user/1"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/http___gs.example.org_4040_index.php_user_1.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"http://gs.example.org/.well-known/webfinger?resource=http://gs.example.org:4040/index.php/user/1",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/http___gs.example.org_4040_index.php_user_1.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.stopwatchingus-heidelberg.de/.well-known/webfinger?resource=https://social.stopwatchingus-heidelberg.de/user/18330",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/atarifrosch_webfinger.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://pleroma.soykaf.com/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "https://pleroma.soykaf.com/users/lain"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___pleroma.soykaf.com_users_lain.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://pleroma.soykaf.com/.well-known/webfinger?resource=https://pleroma.soykaf.com/users/lain",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___pleroma.soykaf.com_users_lain.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://social.heldscal.la/api/statuses/user_timeline/29191.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/https___social.heldscal.la_api_statuses_user_timeline_29191.atom.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://shitposter.club/api/statuses/user_timeline/5381.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/spc_5381.atom")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://social.heldscal.la/api/statuses/user_timeline/23211.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/https___social.heldscal.la_api_statuses_user_timeline_23211.atom.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://mastodon.social/users/lambadalambda.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/https___mastodon.social_users_lambadalambda.atom"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.stopwatchingus-heidelberg.de/api/statuses/user_timeline/18330.atom",
|
|
||||||
_body,
|
|
||||||
_headers
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/atarifrosch_feed.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://pleroma.soykaf.com/users/lain/feed.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/https___pleroma.soykaf.com_users_lain_feed.atom.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://social.sakamoto.gq/users/eal/feed.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/sakamoto_eal_feed.atom")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://gs.example.org/index.php/api/statuses/user_timeline/1.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/http__gs.example.org_index.php_api_statuses_user_timeline_1.atom.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://shitposter.club/notice/2827873", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!("test/fixtures/httpoison_mock/https___shitposter.club_notice_2827873.html")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://shitposter.club/api/statuses/show/2827873.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/https___shitposter.club_api_statuses_show_2827873.atom.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://shitposter.club/api/statuses/user_timeline/1.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/https___shitposter.club_api_statuses_user_timeline_1.atom.xml"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def post(
|
|
||||||
"https://social.heldscal.la/main/push/hub",
|
|
||||||
{:form, _data},
|
|
||||||
"Content-type": "application/x-www-form-urlencoded"
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 202
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://mastodon.example.org/users/admin/statuses/100787282858396771", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!(
|
|
||||||
"test/fixtures/httpoison_mock/http___mastodon.example.org_users_admin_status_1234.json"
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://pawoo.net/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "https://pawoo.net/users/pekorino"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___pawoo.net_users_pekorino.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://pawoo.net/.well-known/webfinger?resource=https://pawoo.net/users/pekorino",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___pawoo.net_users_pekorino.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://pawoo.net/users/pekorino.atom", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___pawoo.net_users_pekorino.atom")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://mamot.fr/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "https://mamot.fr/users/Skruyb"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/skruyb@mamot.fr.atom")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://mamot.fr/.well-known/webfinger?resource=https://mamot.fr/users/Skruyb",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/skruyb@mamot.fr.atom")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.sakamoto.gq/.well-known/webfinger",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
params: [resource: "https://social.sakamoto.gq/users/eal"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/eal_sakamoto.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.sakamoto.gq/.well-known/webfinger?resource=https://social.sakamoto.gq/users/eal",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/eal_sakamoto.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://pleroma.soykaf.com/.well-known/webfinger?resource=https://pleroma.soykaf.com/users/shp",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/shp@pleroma.soykaf.com.webfigner")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://squeet.me/xrd/?uri=lain@squeet.me",
|
|
||||||
[Accept: "application/xrd+xml,application/jrd+json"],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/lain_squeet.me_webfinger.xml")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://mamot.fr/users/Skruyb.atom", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/https___mamot.fr_users_Skruyb.atom")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://social.sakamoto.gq/objects/0ccc1a2c-66b0-4305-b23a-7f7f2b040056",
|
|
||||||
[Accept: "application/atom+xml"],
|
|
||||||
_
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/sakamoto.atom")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://pleroma.soykaf.com/users/shp/feed.atom", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/shp@pleroma.soykaf.com.feed")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://social.heldscal.la/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/social.heldscal.la_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://status.alpicola.com/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/status.alpicola.com_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://macgirvin.com/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/macgirvin.com_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://mastodon.social/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/mastodon.social_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://shitposter.club/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/shitposter.club_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://pleroma.soykaf.com/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/pleroma.soykaf.com_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://social.sakamoto.gq/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/social.sakamoto.gq_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://gs.example.org/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/gs.example.org_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://pawoo.net/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/pawoo.net_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://mamot.fr/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/mamot.fr_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://mastodon.xyz/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/mastodon.xyz_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://social.wxcafe.net/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/social.wxcafe.net_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://squeet.me/.well-known/host-meta", [], follow_redirect: true) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/squeet.me_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"http://social.stopwatchingus-heidelberg.de/.well-known/host-meta",
|
|
||||||
[],
|
|
||||||
follow_redirect: true
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body:
|
|
||||||
File.read!("test/fixtures/httpoison_mock/social.stopwatchingus-heidelberg.de_host_meta")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("http://mastodon.example.org/users/admin", [Accept: "application/activity+json"], _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/admin@mastdon.example.org.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://hubzilla.example.org/channel/kaniini",
|
|
||||||
[Accept: "application/activity+json"],
|
|
||||||
_
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/kaniini@hubzilla.example.org.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://masto.quad.moe/users/_HellPie", [Accept: "application/activity+json"], _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/hellpie.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://niu.moe/users/rye", [Accept: "application/activity+json"], _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/rye.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://n1u.moe/users/rye", [Accept: "application/activity+json"], _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/rye.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://mst3k.interlinked.me/users/luciferMysticus",
|
|
||||||
[Accept: "application/activity+json"],
|
|
||||||
_
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/lucifermysticus.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://mstdn.io/users/mayuutann", [Accept: "application/activity+json"], _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/mayumayu.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"http://mastodon.example.org/@admin/99541947525187367",
|
|
||||||
[Accept: "application/activity+json"],
|
|
||||||
_
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/mastodon-note-object.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(
|
|
||||||
"https://mstdn.io/users/mayuutann/statuses/99568293732299394",
|
|
||||||
[Accept: "application/activity+json"],
|
|
||||||
_
|
|
||||||
) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/mayumayupost.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://shitposter.club/notice/7369654", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/7369654.html")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://shitposter.club/api/statuses/show/7369654.atom", _body, _headers) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/7369654.atom")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://baptiste.gelez.xyz/~/PlumeDevelopment/this-month-in-plume-june-2018/", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/baptiste.gelex.xyz-article.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://baptiste.gelez.xyz/@/BaptisteGelez", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/baptiste.gelex.xyz-user.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/peertube.moe-vid.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get("https://peertube.moe/accounts/7even", _, _) do
|
|
||||||
{:ok,
|
|
||||||
%Response{
|
|
||||||
status_code: 200,
|
|
||||||
body: File.read!("test/fixtures/httpoison_mock/7even.json")
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(url, body, headers) do
|
|
||||||
{:error,
|
|
||||||
"Not implemented the mock response for get #{inspect(url)}, #{inspect(body)}, #{
|
|
||||||
inspect(headers)
|
|
||||||
}"}
|
|
||||||
end
|
|
||||||
|
|
||||||
def post(url, _body, _headers) do
|
|
||||||
{:error, "Not implemented the mock response for post #{inspect(url)}"}
|
|
||||||
end
|
|
||||||
|
|
||||||
def post(url, _body, _headers, _options) do
|
|
||||||
{:error, "Not implemented the mock response for post #{inspect(url)}"}
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -9,6 +9,11 @@ defmodule Pleroma.UserTest do
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "ap_id returns the activity pub id for the user" do
|
test "ap_id returns the activity pub id for the user" do
|
||||||
user = UserBuilder.build()
|
user = UserBuilder.build()
|
||||||
|
|
||||||
|
@ -144,6 +149,18 @@ test "it sets the password_hash, ap_id and following fields" do
|
||||||
|
|
||||||
assert changeset.changes.follower_address == "#{changeset.changes.ap_id}/followers"
|
assert changeset.changes.follower_address == "#{changeset.changes.ap_id}/followers"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it ensures info is not nil" do
|
||||||
|
changeset = User.register_changeset(%User{}, @full_user_data)
|
||||||
|
|
||||||
|
assert changeset.valid?
|
||||||
|
|
||||||
|
{:ok, user} =
|
||||||
|
changeset
|
||||||
|
|> Repo.insert()
|
||||||
|
|
||||||
|
refute is_nil(user.info)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "fetching a user from nickname or trying to build one" do
|
describe "fetching a user from nickname or trying to build one" do
|
||||||
|
|
|
@ -5,6 +5,11 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
|
||||||
alias Pleroma.{Repo, User}
|
alias Pleroma.{Repo, User}
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
describe "/relay" do
|
describe "/relay" do
|
||||||
test "with the relay active, it returns the relay user", %{conn: conn} do
|
test "with the relay active, it returns the relay user", %{conn: conn} do
|
||||||
res =
|
res =
|
||||||
|
|
|
@ -7,6 +7,12 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
|
||||||
alias Pleroma.Builders.ActivityBuilder
|
alias Pleroma.Builders.ActivityBuilder
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
describe "building a user from his ap id" do
|
describe "building a user from his ap id" do
|
||||||
test "it returns a user" do
|
test "it returns a user" do
|
||||||
|
|
|
@ -12,6 +12,11 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
describe "handle_incoming" do
|
describe "handle_incoming" do
|
||||||
test "it ignores an incoming notice if we already have it" do
|
test "it ignores an incoming notice if we already have it" do
|
||||||
activity = insert(:note_activity)
|
activity = insert(:note_activity)
|
||||||
|
|
|
@ -5,6 +5,11 @@ defmodule Pleroma.Web.FederatorTest do
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
import Mock
|
import Mock
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "enqueues an element according to priority" do
|
test "enqueues an element according to priority" do
|
||||||
queue = [%{item: 1, priority: 2}]
|
queue = [%{item: 1, priority: 2}]
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,12 @@ defmodule Pleroma.Web.HTTPSignaturesTest do
|
||||||
use Pleroma.DataCase
|
use Pleroma.DataCase
|
||||||
alias Pleroma.Web.HTTPSignatures
|
alias Pleroma.Web.HTTPSignatures
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
@private_key hd(:public_key.pem_decode(File.read!("test/web/http_sigs/priv.key")))
|
@private_key hd(:public_key.pem_decode(File.read!("test/web/http_sigs/priv.key")))
|
||||||
|> :public_key.pem_entry_decode()
|
|> :public_key.pem_entry_decode()
|
||||||
|
|
|
@ -8,6 +8,12 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
import ExUnit.CaptureLog
|
import ExUnit.CaptureLog
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "the home timeline", %{conn: conn} do
|
test "the home timeline", %{conn: conn} do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
@ -1303,14 +1309,21 @@ test "returns the favorites of a user", %{conn: conn} do
|
||||||
describe "updating credentials" do
|
describe "updating credentials" do
|
||||||
test "updates the user's bio", %{conn: conn} do
|
test "updates the user's bio", %{conn: conn} do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
user2 = insert(:user)
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
|> assign(:user, user)
|
|> assign(:user, user)
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{"note" => "I drink #cofe"})
|
|> patch("/api/v1/accounts/update_credentials", %{
|
||||||
|
"note" => "I drink #cofe with @#{user2.nickname}"
|
||||||
|
})
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
assert user = json_response(conn, 200)
|
||||||
assert user["note"] == "I drink #cofe"
|
|
||||||
|
assert user["note"] ==
|
||||||
|
"I drink <a href=\"http://localhost:4001/tag/cofe\">#cofe</a> with <span><a href=\"#{
|
||||||
|
user2.ap_id
|
||||||
|
}\">@<span>#{user2.nickname}</span></a></span>"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "updates the user's locking status", %{conn: conn} do
|
test "updates the user's locking status", %{conn: conn} do
|
||||||
|
|
|
@ -6,6 +6,12 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
|
||||||
alias Pleroma.Web.OStatus
|
alias Pleroma.Web.OStatus
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "a note with null content" do
|
test "a note with null content" do
|
||||||
note = insert(:note_activity)
|
note = insert(:note_activity)
|
||||||
|
|
|
@ -7,6 +7,12 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do
|
||||||
alias Pleroma.Web.OStatus
|
alias Pleroma.Web.OStatus
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "an external note activity" do
|
test "an external note activity" do
|
||||||
incoming = File.read!("test/fixtures/mastodon-note-cw.xml")
|
incoming = File.read!("test/fixtures/mastodon-note-cw.xml")
|
||||||
|
|
|
@ -5,6 +5,11 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
alias Pleroma.Web.OStatus.ActivityRepresenter
|
alias Pleroma.Web.OStatus.ActivityRepresenter
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "decodes a salmon", %{conn: conn} do
|
test "decodes a salmon", %{conn: conn} do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
salmon = File.read!("test/fixtures/salmon.xml")
|
salmon = File.read!("test/fixtures/salmon.xml")
|
||||||
|
|
|
@ -6,6 +6,11 @@ defmodule Pleroma.Web.OStatusTest do
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
import ExUnit.CaptureLog
|
import ExUnit.CaptureLog
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "don't insert create notes twice" do
|
test "don't insert create notes twice" do
|
||||||
incoming = File.read!("test/fixtures/incoming_note_activity.xml")
|
incoming = File.read!("test/fixtures/incoming_note_activity.xml")
|
||||||
{:ok, [activity]} = OStatus.handle_incoming(incoming)
|
{:ok, [activity]} = OStatus.handle_incoming(incoming)
|
||||||
|
@ -337,7 +342,7 @@ test "find_or_make_user sets all the nessary input fields" do
|
||||||
%Pleroma.User.Info{
|
%Pleroma.User.Info{
|
||||||
id: user.info.id,
|
id: user.info.id,
|
||||||
ap_enabled: false,
|
ap_enabled: false,
|
||||||
background: nil,
|
background: %{},
|
||||||
banner: %{},
|
banner: %{},
|
||||||
blocks: [],
|
blocks: [],
|
||||||
deactivated: false,
|
deactivated: false,
|
||||||
|
|
|
@ -3,6 +3,7 @@ defmodule Pleroma.Web.Salmon.SalmonTest do
|
||||||
alias Pleroma.Web.Salmon
|
alias Pleroma.Web.Salmon
|
||||||
alias Pleroma.{Repo, Activity, User}
|
alias Pleroma.{Repo, Activity, User}
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
@magickey "RSA.pu0s-halox4tu7wmES1FVSx6u-4wc0YrUFXcqWXZG4-27UmbCOpMQftRCldNRfyA-qLbz-eqiwQhh-1EwUvjsD4cYbAHNGHwTvDOyx5AKthQUP44ykPv7kjKGh3DWKySJvcs9tlUG87hlo7AvnMo9pwRS_Zz2CacQ-MKaXyDepk=.AQAB"
|
@magickey "RSA.pu0s-halox4tu7wmES1FVSx6u-4wc0YrUFXcqWXZG4-27UmbCOpMQftRCldNRfyA-qLbz-eqiwQhh-1EwUvjsD4cYbAHNGHwTvDOyx5AKthQUP44ykPv7kjKGh3DWKySJvcs9tlUG87hlo7AvnMo9pwRS_Zz2CacQ-MKaXyDepk=.AQAB"
|
||||||
|
|
||||||
|
@ -10,6 +11,11 @@ defmodule Pleroma.Web.Salmon.SalmonTest do
|
||||||
|
|
||||||
@magickey_friendica "RSA.AMwa8FUs2fWEjX0xN7yRQgegQffhBpuKNC6fa5VNSVorFjGZhRrlPMn7TQOeihlc9lBz2OsHlIedbYn2uJ7yCs0.AQAB"
|
@magickey_friendica "RSA.AMwa8FUs2fWEjX0xN7yRQgegQffhBpuKNC6fa5VNSVorFjGZhRrlPMn7TQOeihlc9lBz2OsHlIedbYn2uJ7yCs0.AQAB"
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "decodes a salmon" do
|
test "decodes a salmon" do
|
||||||
{:ok, salmon} = File.read("test/fixtures/salmon.xml")
|
{:ok, salmon} = File.read("test/fixtures/salmon.xml")
|
||||||
{:ok, doc} = Salmon.decode_and_validate(@magickey, salmon)
|
{:ok, doc} = Salmon.decode_and_validate(@magickey, salmon)
|
||||||
|
|
|
@ -24,6 +24,9 @@ test "it updates the banner", %{conn: conn} do
|
||||||
|> assign(:user, user)
|
|> assign(:user, user)
|
||||||
|> post(authenticated_twitter_api__path(conn, :update_banner), %{"banner" => new_banner})
|
|> post(authenticated_twitter_api__path(conn, :update_banner), %{"banner" => new_banner})
|
||||||
|> json_response(200)
|
|> json_response(200)
|
||||||
|
|
||||||
|
user = Repo.get(User, user.id)
|
||||||
|
assert user.info.banner["type"] == "Image"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -39,6 +42,9 @@ test "it updates the background", %{conn: conn} do
|
||||||
|> assign(:user, user)
|
|> assign(:user, user)
|
||||||
|> post(authenticated_twitter_api__path(conn, :update_background), %{"img" => new_bg})
|
|> post(authenticated_twitter_api__path(conn, :update_background), %{"img" => new_bg})
|
||||||
|> json_response(200)
|
|> json_response(200)
|
||||||
|
|
||||||
|
user = Repo.get(User, user.id)
|
||||||
|
assert user.info.background["type"] == "Image"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1046,18 +1052,21 @@ test "it returns a user's friends", %{conn: conn} do
|
||||||
describe "POST /api/account/update_profile.json" do
|
describe "POST /api/account/update_profile.json" do
|
||||||
test "it updates a user's profile", %{conn: conn} do
|
test "it updates a user's profile", %{conn: conn} do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
user2 = insert(:user)
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
|> assign(:user, user)
|
|> assign(:user, user)
|
||||||
|> post("/api/account/update_profile.json", %{
|
|> post("/api/account/update_profile.json", %{
|
||||||
"name" => "new name",
|
"name" => "new name",
|
||||||
"description" => "new description"
|
"description" => "hi @#{user2.nickname}"
|
||||||
})
|
})
|
||||||
|
|
||||||
user = Repo.get!(User, user.id)
|
user = Repo.get!(User, user.id)
|
||||||
assert user.name == "new name"
|
assert user.name == "new name"
|
||||||
assert user.bio == "new description"
|
|
||||||
|
assert user.bio ==
|
||||||
|
"hi <span><a class='mention' href='#{user2.ap_id}'>@<span>#{user2.nickname}</span></a></span>"
|
||||||
|
|
||||||
assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user})
|
assert json_response(conn, 200) == UserView.render("user.json", %{user: user, for: user})
|
||||||
end
|
end
|
||||||
|
|
|
@ -257,6 +257,35 @@ test "it registers a new user and returns the user." do
|
||||||
UserView.render("show.json", %{user: fetched_user})
|
UserView.render("show.json", %{user: fetched_user})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it registers a new user and parses mentions in the bio" do
|
||||||
|
data1 = %{
|
||||||
|
"nickname" => "john",
|
||||||
|
"email" => "john@gmail.com",
|
||||||
|
"fullname" => "John Doe",
|
||||||
|
"bio" => "test",
|
||||||
|
"password" => "bear",
|
||||||
|
"confirm" => "bear"
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, user1} = TwitterAPI.register_user(data1)
|
||||||
|
|
||||||
|
data2 = %{
|
||||||
|
"nickname" => "lain",
|
||||||
|
"email" => "lain@wired.jp",
|
||||||
|
"fullname" => "lain iwakura",
|
||||||
|
"bio" => "@john test",
|
||||||
|
"password" => "bear",
|
||||||
|
"confirm" => "bear"
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, user2} = TwitterAPI.register_user(data2)
|
||||||
|
|
||||||
|
expected_text =
|
||||||
|
"<span><a class='mention' href='#{user1.ap_id}'>@<span>john</span></a></span> test"
|
||||||
|
|
||||||
|
assert user2.bio == expected_text
|
||||||
|
end
|
||||||
|
|
||||||
@moduletag skip: "needs 'registrations_open: false' in config"
|
@moduletag skip: "needs 'registrations_open: false' in config"
|
||||||
test "it registers a new user via invite token and returns the user." do
|
test "it registers a new user via invite token and returns the user." do
|
||||||
{:ok, token} = UserInviteToken.create_token()
|
{:ok, token} = UserInviteToken.create_token()
|
||||||
|
|
|
@ -2,6 +2,12 @@ defmodule Pleroma.Web.WebFingerTest do
|
||||||
use Pleroma.DataCase
|
use Pleroma.DataCase
|
||||||
alias Pleroma.Web.WebFinger
|
alias Pleroma.Web.WebFinger
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
describe "host meta" do
|
describe "host meta" do
|
||||||
test "returns a link to the xml lrdd" do
|
test "returns a link to the xml lrdd" do
|
||||||
|
|
|
@ -10,6 +10,12 @@ defmodule Pleroma.Web.WebsubTest do
|
||||||
alias Pleroma.Web.Websub.{WebsubServerSubscription, WebsubClientSubscription}
|
alias Pleroma.Web.Websub.{WebsubServerSubscription, WebsubClientSubscription}
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
alias Pleroma.Web.Router.Helpers
|
alias Pleroma.Web.Router.Helpers
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
test "a verification of a request that is accepted" do
|
test "a verification of a request that is accepted" do
|
||||||
sub = insert(:websub_subscription)
|
sub = insert(:websub_subscription)
|
||||||
|
@ -26,8 +32,8 @@ test "a verification of a request that is accepted" do
|
||||||
assert String.to_integer(seconds) > 0
|
assert String.to_integer(seconds) > 0
|
||||||
|
|
||||||
{:ok,
|
{:ok,
|
||||||
%HTTPoison.Response{
|
%Tesla.Env{
|
||||||
status_code: 200,
|
status: 200,
|
||||||
body: challenge
|
body: challenge
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
@ -41,8 +47,8 @@ test "a verification of a request that doesn't return 200" do
|
||||||
|
|
||||||
getter = fn _path, _headers, _options ->
|
getter = fn _path, _headers, _options ->
|
||||||
{:ok,
|
{:ok,
|
||||||
%HTTPoison.Response{
|
%Tesla.Env{
|
||||||
status_code: 500,
|
status: 500,
|
||||||
body: ""
|
body: ""
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
@ -113,12 +119,7 @@ test "initiate a subscription for a given user and topic" do
|
||||||
test "discovers the hub and canonical url" do
|
test "discovers the hub and canonical url" do
|
||||||
topic = "https://mastodon.social/users/lambadalambda.atom"
|
topic = "https://mastodon.social/users/lambadalambda.atom"
|
||||||
|
|
||||||
getter = fn ^topic ->
|
{:ok, discovered} = Websub.gather_feed_data(topic)
|
||||||
doc = File.read!("test/fixtures/lambadalambda.atom")
|
|
||||||
{:ok, %{status_code: 200, body: doc}}
|
|
||||||
end
|
|
||||||
|
|
||||||
{:ok, discovered} = Websub.gather_feed_data(topic, getter)
|
|
||||||
|
|
||||||
expected = %{
|
expected = %{
|
||||||
"hub" => "https://mastodon.social/api/push",
|
"hub" => "https://mastodon.social/api/push",
|
||||||
|
@ -158,7 +159,7 @@ test "calls the hub, requests topic" do
|
||||||
websub.id
|
websub.id
|
||||||
)
|
)
|
||||||
|
|
||||||
{:ok, %{status_code: 202}}
|
{:ok, %{status: 202}}
|
||||||
end
|
end
|
||||||
|
|
||||||
task = Task.async(fn -> Websub.request_subscription(websub, poster) end)
|
task = Task.async(fn -> Websub.request_subscription(websub, poster) end)
|
||||||
|
@ -177,7 +178,7 @@ test "rejects the subscription if it can't be accepted" do
|
||||||
websub = insert(:websub_client_subscription, %{hub: hub, topic: topic})
|
websub = insert(:websub_client_subscription, %{hub: hub, topic: topic})
|
||||||
|
|
||||||
poster = fn ^hub, {:form, _data}, _headers ->
|
poster = fn ^hub, {:form, _data}, _headers ->
|
||||||
{:ok, %{status_code: 202}}
|
{:ok, %{status: 202}}
|
||||||
end
|
end
|
||||||
|
|
||||||
{:error, websub} = Websub.request_subscription(websub, poster, 1000)
|
{:error, websub} = Websub.request_subscription(websub, poster, 1000)
|
||||||
|
@ -186,7 +187,7 @@ test "rejects the subscription if it can't be accepted" do
|
||||||
websub = insert(:websub_client_subscription, %{hub: hub, topic: topic})
|
websub = insert(:websub_client_subscription, %{hub: hub, topic: topic})
|
||||||
|
|
||||||
poster = fn ^hub, {:form, _data}, _headers ->
|
poster = fn ^hub, {:form, _data}, _headers ->
|
||||||
{:ok, %{status_code: 400}}
|
{:ok, %{status: 400}}
|
||||||
end
|
end
|
||||||
|
|
||||||
{:error, websub} = Websub.request_subscription(websub, poster, 1000)
|
{:error, websub} = Websub.request_subscription(websub, poster, 1000)
|
||||||
|
@ -209,6 +210,7 @@ test "it renews subscriptions that have less than a day of time left" do
|
||||||
insert(:websub_client_subscription, %{
|
insert(:websub_client_subscription, %{
|
||||||
valid_until: NaiveDateTime.add(now, 2 * day),
|
valid_until: NaiveDateTime.add(now, 2 * day),
|
||||||
topic: "http://example.org/still_good",
|
topic: "http://example.org/still_good",
|
||||||
|
hub: "http://example.org/still_good",
|
||||||
state: "accepted"
|
state: "accepted"
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -216,6 +218,7 @@ test "it renews subscriptions that have less than a day of time left" do
|
||||||
insert(:websub_client_subscription, %{
|
insert(:websub_client_subscription, %{
|
||||||
valid_until: NaiveDateTime.add(now, day - 100),
|
valid_until: NaiveDateTime.add(now, day - 100),
|
||||||
topic: "http://example.org/needs_refresh",
|
topic: "http://example.org/needs_refresh",
|
||||||
|
hub: "http://example.org/needs_refresh",
|
||||||
state: "accepted"
|
state: "accepted"
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue