diff --git a/changelog.d/twitter-api.skip b/changelog.d/twitter-api.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/lib/pleroma/web/api_spec/operations/twitter_util_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_util_operation.ex
similarity index 84%
rename from lib/pleroma/web/api_spec/operations/twitter_util_operation.ex
rename to lib/pleroma/web/api_spec/operations/pleroma_util_operation.ex
index 724d873c0..4bb4f112c 100644
--- a/lib/pleroma/web/api_spec/operations/twitter_util_operation.ex
+++ b/lib/pleroma/web/api_spec/operations/pleroma_util_operation.ex
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
+defmodule Pleroma.Web.ApiSpec.PleromaUtilOperation do
alias OpenApiSpex.Operation
alias OpenApiSpex.Schema
alias Pleroma.Web.ApiSpec.Schemas.ApiError
@@ -19,7 +19,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
%Operation{
tags: ["Custom emojis"],
summary: "List all custom emojis",
- operationId: "UtilController.emoji",
+ operationId: "PleromaAPI.UtilController.emoji",
parameters: [],
responses: %{
200 =>
@@ -48,7 +48,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
%Operation{
tags: ["Others"],
summary: "Dump frontend configurations",
- operationId: "UtilController.frontend_configurations",
+ operationId: "PleromaAPI.UtilController.frontend_configurations",
parameters: [],
responses: %{
200 =>
@@ -70,7 +70,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Account credentials"],
summary: "Change account password",
security: [%{"oAuth" => ["write:accounts"]}],
- operationId: "UtilController.change_password",
+ operationId: "PleromaAPI.UtilController.change_password",
requestBody: request_body("Parameters", change_password_request(), required: true),
responses: %{
200 =>
@@ -106,7 +106,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Account credentials"],
summary: "Change account email",
security: [%{"oAuth" => ["write:accounts"]}],
- operationId: "UtilController.change_email",
+ operationId: "PleromaAPI.UtilController.change_email",
requestBody: request_body("Parameters", change_email_request(), required: true),
responses: %{
200 =>
@@ -141,7 +141,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Settings"],
summary: "Update Notification Settings",
security: [%{"oAuth" => ["write:accounts"]}],
- operationId: "UtilController.update_notification_settings",
+ operationId: "PleromaAPI.UtilController.update_notification_settings",
parameters: [
Operation.parameter(
:block_from_strangers,
@@ -173,7 +173,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Account credentials"],
summary: "Disable Account",
security: [%{"oAuth" => ["write:accounts"]}],
- operationId: "UtilController.disable_account",
+ operationId: "PleromaAPI.UtilController.disable_account",
parameters: [
Operation.parameter(:password, :query, :string, "Password")
],
@@ -193,7 +193,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Account credentials"],
summary: "Delete Account",
security: [%{"oAuth" => ["write:accounts"]}],
- operationId: "UtilController.delete_account",
+ operationId: "PleromaAPI.UtilController.delete_account",
parameters: [
Operation.parameter(:password, :query, :string, "Password")
],
@@ -212,7 +212,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
def captcha_operation do
%Operation{
summary: "Get a captcha",
- operationId: "UtilController.captcha",
+ operationId: "PleromaAPI.UtilController.captcha",
tags: ["Others"],
parameters: [],
responses: %{
@@ -226,7 +226,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Account credentials"],
summary: "Move account",
security: [%{"oAuth" => ["write:accounts"]}],
- operationId: "UtilController.move_account",
+ operationId: "PleromaAPI.UtilController.move_account",
requestBody: request_body("Parameters", move_account_request(), required: true),
responses: %{
200 =>
@@ -262,7 +262,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Account credentials"],
summary: "List account aliases",
security: [%{"oAuth" => ["read:accounts"]}],
- operationId: "UtilController.list_aliases",
+ operationId: "PleromaAPI.UtilController.list_aliases",
responses: %{
200 =>
Operation.response("Success", "application/json", %Schema{
@@ -286,7 +286,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Account credentials"],
summary: "Add an alias to this account",
security: [%{"oAuth" => ["write:accounts"]}],
- operationId: "UtilController.add_alias",
+ operationId: "PleromaAPI.UtilController.add_alias",
requestBody: request_body("Parameters", add_alias_request(), required: true),
responses: %{
200 =>
@@ -326,7 +326,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Account credentials"],
summary: "Delete an alias from this account",
security: [%{"oAuth" => ["write:accounts"]}],
- operationId: "UtilController.delete_alias",
+ operationId: "PleromaAPI.UtilController.delete_alias",
requestBody: request_body("Parameters", delete_alias_request(), required: true),
responses: %{
200 =>
@@ -366,7 +366,7 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
tags: ["Others"],
summary: "Quick status check on the instance",
security: [%{"oAuth" => ["write:accounts"]}],
- operationId: "UtilController.healthcheck",
+ operationId: "PleromaAPI.UtilController.healthcheck",
parameters: [],
responses: %{
200 => Operation.response("Healthy", "application/json", %Schema{type: :object}),
@@ -376,52 +376,6 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
}
end
- def remote_subscribe_operation do
- %Operation{
- tags: ["Remote interaction"],
- summary: "Remote Subscribe",
- operationId: "UtilController.remote_subscribe",
- parameters: [],
- responses: %{200 => Operation.response("Web Page", "test/html", %Schema{type: :string})}
- }
- end
-
- def remote_interaction_operation do
- %Operation{
- tags: ["Remote interaction"],
- summary: "Remote interaction",
- operationId: "UtilController.remote_interaction",
- requestBody: request_body("Parameters", remote_interaction_request(), required: true),
- responses: %{
- 200 =>
- Operation.response("Remote interaction URL", "application/json", %Schema{type: :object})
- }
- }
- end
-
- defp remote_interaction_request do
- %Schema{
- title: "RemoteInteractionRequest",
- description: "POST body for remote interaction",
- type: :object,
- required: [:ap_id, :profile],
- properties: %{
- ap_id: %Schema{type: :string, description: "Profile or status ActivityPub ID"},
- profile: %Schema{type: :string, description: "Remote profile webfinger"}
- }
- }
- end
-
- def show_subscribe_form_operation do
- %Operation{
- tags: ["Remote interaction"],
- summary: "Show remote subscribe form",
- operationId: "UtilController.show_subscribe_form",
- parameters: [],
- responses: %{200 => Operation.response("Web Page", "test/html", %Schema{type: :string})}
- }
- end
-
defp delete_account_request do
%Schema{
title: "AccountDeleteRequest",
diff --git a/lib/pleroma/web/api_spec/operations/remote_interaction_operation.ex b/lib/pleroma/web/api_spec/operations/remote_interaction_operation.ex
new file mode 100644
index 000000000..a490bd491
--- /dev/null
+++ b/lib/pleroma/web/api_spec/operations/remote_interaction_operation.ex
@@ -0,0 +1,61 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ApiSpec.RemoteInteractionOperation do
+ alias OpenApiSpex.Operation
+ alias OpenApiSpex.Schema
+
+ import Pleroma.Web.ApiSpec.Helpers
+
+ def open_api_operation(action) do
+ operation = String.to_existing_atom("#{action}_operation")
+ apply(__MODULE__, operation, [])
+ end
+
+ def remote_subscribe_operation do
+ %Operation{
+ tags: ["Remote interaction"],
+ summary: "Remote Subscribe",
+ operationId: "RemoteInteractionController.remote_subscribe",
+ parameters: [],
+ responses: %{200 => Operation.response("Web Page", "text/html", %Schema{type: :string})}
+ }
+ end
+
+ def remote_interaction_operation do
+ %Operation{
+ tags: ["Remote interaction"],
+ summary: "Remote interaction",
+ operationId: "RemoteInteractionController.remote_interaction",
+ requestBody: request_body("Parameters", remote_interaction_request(), required: true),
+ responses: %{
+ 200 =>
+ Operation.response("Remote interaction URL", "application/json", %Schema{type: :object})
+ }
+ }
+ end
+
+ defp remote_interaction_request do
+ %Schema{
+ title: "RemoteInteractionRequest",
+ description: "POST body for remote interaction",
+ type: :object,
+ required: [:ap_id, :profile],
+ properties: %{
+ ap_id: %Schema{type: :string, description: "Profile or status ActivityPub ID"},
+ profile: %Schema{type: :string, description: "Remote profile webfinger"}
+ }
+ }
+ end
+
+ def show_subscribe_form_operation do
+ %Operation{
+ tags: ["Remote interaction"],
+ summary: "Show remote subscribe form",
+ operationId: "RemoteInteractionController.show_subscribe_form",
+ parameters: [],
+ responses: %{200 => Operation.response("Web Page", "text/html", %Schema{type: :string})}
+ }
+ end
+end
diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
index 6dc731ed4..6d5851029 100644
--- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
+++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
@@ -26,7 +26,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
alias Pleroma.Web.OAuth.OAuthController
alias Pleroma.Web.Plugs.OAuthScopesPlug
alias Pleroma.Web.Plugs.RateLimiter
- alias Pleroma.Web.TwitterAPI.TwitterAPI
+ alias Pleroma.Web.Registration
alias Pleroma.Web.Utils.Params
plug(Pleroma.Web.ApiSpec.CastAndValidate, replace_params: false)
@@ -111,8 +111,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
_params
) do
with :ok <- validate_email_param(params),
- :ok <- TwitterAPI.validate_captcha(app, params),
- {:ok, user} <- TwitterAPI.register_user(params),
+ :ok <- Registration.validate_captcha(app, params),
+ {:ok, user} <- Registration.register_user(params),
{_, {:ok, token}} <-
{:login, OAuthController.login(user, app, app.scopes)} do
OAuthController.after_token_exchange(conn, %{user: user, token: token})
diff --git a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex
index fbb54a171..653b5fc29 100644
--- a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex
+++ b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex
@@ -7,7 +7,7 @@ defmodule Pleroma.Web.MastodonAPI.AuthController do
import Pleroma.Web.ControllerHelper, only: [json_response: 3]
- alias Pleroma.Web.TwitterAPI.TwitterAPI
+ alias Pleroma.Web.Registration
action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
@@ -17,7 +17,7 @@ defmodule Pleroma.Web.MastodonAPI.AuthController do
def password_reset(conn, params) do
nickname_or_email = params["email"] || params["nickname"]
- TwitterAPI.password_reset(nickname_or_email)
+ Registration.password_reset(nickname_or_email)
json_response(conn, :no_content, "")
end
diff --git a/lib/pleroma/web/twitter_api/controllers/password_controller.ex b/lib/pleroma/web/o_auth/password_controller.ex
similarity index 90%
rename from lib/pleroma/web/twitter_api/controllers/password_controller.ex
rename to lib/pleroma/web/o_auth/password_controller.ex
index e5482de9d..b209e7564 100644
--- a/lib/pleroma/web/twitter_api/controllers/password_controller.ex
+++ b/lib/pleroma/web/o_auth/password_controller.ex
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.PasswordController do
+defmodule Pleroma.Web.OAuth.PasswordController do
@moduledoc """
The module contains functions for password reset.
"""
@@ -16,7 +16,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordController do
alias Pleroma.PasswordResetToken
alias Pleroma.Repo
alias Pleroma.User
- alias Pleroma.Web.TwitterAPI.TwitterAPI
+ alias Pleroma.Web.Registration
plug(Pleroma.Web.Plugs.RateLimiter, [name: :request] when action == :request)
@@ -24,7 +24,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordController do
def request(conn, params) do
nickname_or_email = params["email"] || params["nickname"]
- TwitterAPI.password_reset(nickname_or_email)
+ Registration.password_reset(nickname_or_email)
json_response(conn, :no_content, "")
end
diff --git a/lib/pleroma/web/twitter_api/views/password_view.ex b/lib/pleroma/web/o_auth/password_view.ex
similarity index 83%
rename from lib/pleroma/web/twitter_api/views/password_view.ex
rename to lib/pleroma/web/o_auth/password_view.ex
index 55790941f..0b85c76e8 100644
--- a/lib/pleroma/web/twitter_api/views/password_view.ex
+++ b/lib/pleroma/web/o_auth/password_view.ex
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.PasswordView do
+defmodule Pleroma.Web.OAuth.PasswordView do
use Pleroma.Web, :view
import Phoenix.HTML.Form
alias Pleroma.Web.Gettext
diff --git a/lib/pleroma/web/twitter_api/controller.ex b/lib/pleroma/web/o_auth/token_controller.ex
similarity index 94%
rename from lib/pleroma/web/twitter_api/controller.ex
rename to lib/pleroma/web/o_auth/token_controller.ex
index 6db3d6067..37d08eea3 100644
--- a/lib/pleroma/web/twitter_api/controller.ex
+++ b/lib/pleroma/web/o_auth/token_controller.ex
@@ -2,13 +2,13 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.Controller do
+defmodule Pleroma.Web.OAuth.TokenController do
use Pleroma.Web, :controller
alias Pleroma.User
alias Pleroma.Web.OAuth.Token
alias Pleroma.Web.Plugs.OAuthScopesPlug
- alias Pleroma.Web.TwitterAPI.TokenView
+ alias Pleroma.Web.OAuth.TokenView
require Logger
diff --git a/lib/pleroma/web/twitter_api/views/token_view.ex b/lib/pleroma/web/o_auth/token_view.ex
similarity index 81%
rename from lib/pleroma/web/twitter_api/views/token_view.ex
rename to lib/pleroma/web/o_auth/token_view.ex
index 36776ce3b..f9894399a 100644
--- a/lib/pleroma/web/twitter_api/views/token_view.ex
+++ b/lib/pleroma/web/o_auth/token_view.ex
@@ -2,12 +2,12 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.TokenView do
+defmodule Pleroma.Web.OAuth.TokenView do
use Pleroma.Web, :view
def render("index.json", %{tokens: tokens}) do
tokens
- |> render_many(Pleroma.Web.TwitterAPI.TokenView, "show.json")
+ |> render_many(Pleroma.Web.OAuth.TokenView, "show.json")
|> Enum.filter(&Enum.any?/1)
end
diff --git a/lib/pleroma/web/pleroma_api/controllers/password_controller.ex b/lib/pleroma/web/pleroma_api/controllers/password_controller.ex
new file mode 100644
index 000000000..444477245
--- /dev/null
+++ b/lib/pleroma/web/pleroma_api/controllers/password_controller.ex
@@ -0,0 +1,52 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.PleromaAPI.PasswordController do
+ @moduledoc """
+ The module contains functions for password reset.
+ """
+
+ use Pleroma.Web, :controller
+
+ require Logger
+
+ import Pleroma.Web.ControllerHelper, only: [json_response: 3]
+
+ alias Pleroma.PasswordResetToken
+ alias Pleroma.Repo
+ alias Pleroma.User
+ alias Pleroma.Web.Registration
+
+ plug(Pleroma.Web.Plugs.RateLimiter, [name: :request] when action == :request)
+
+ @doc "POST /auth/password"
+ def request(conn, params) do
+ nickname_or_email = params["email"] || params["nickname"]
+
+ Registration.password_reset(nickname_or_email)
+
+ json_response(conn, :no_content, "")
+ end
+
+ def reset(conn, %{"token" => token}) do
+ with %{used: false} = token <- Repo.get_by(PasswordResetToken, %{token: token}),
+ false <- PasswordResetToken.expired?(token),
+ %User{} = user <- User.get_cached_by_id(token.user_id) do
+ render(conn, "reset.html", %{
+ token: token,
+ user: user
+ })
+ else
+ _e -> render(conn, "invalid_token.html")
+ end
+ end
+
+ def do_reset(conn, %{"data" => data}) do
+ with {:ok, _} <- PasswordResetToken.reset_password(data["token"], data) do
+ render(conn, "reset_success.html")
+ else
+ _e -> render(conn, "reset_failed.html")
+ end
+ end
+end
diff --git a/lib/pleroma/web/pleroma_api/controllers/token_controller.ex b/lib/pleroma/web/pleroma_api/controllers/token_controller.ex
new file mode 100644
index 000000000..581dd569a
--- /dev/null
+++ b/lib/pleroma/web/pleroma_api/controllers/token_controller.ex
@@ -0,0 +1,59 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.PleromaAPI.TokenController do
+ use Pleroma.Web, :controller
+
+ alias Pleroma.User
+ alias Pleroma.Web.OAuth.Token
+ alias Pleroma.Web.Plugs.OAuthScopesPlug
+ alias Pleroma.Web.PleromaAPI.TokenView
+
+ require Logger
+
+ plug(:skip_auth when action == :confirm_email)
+ plug(:skip_plug, OAuthScopesPlug when action in [:oauth_tokens, :revoke_token])
+
+ action_fallback(:errors)
+
+ def confirm_email(conn, %{"user_id" => uid, "token" => token}) do
+ with %User{} = user <- User.get_cached_by_id(uid),
+ true <- user.local and !user.is_confirmed and user.confirmation_token == token,
+ {:ok, _} <- User.confirm(user) do
+ redirect(conn, to: "/")
+ end
+ end
+
+ def oauth_tokens(%{assigns: %{user: user}} = conn, _params) do
+ with oauth_tokens <- Token.get_user_tokens(user) do
+ conn
+ |> put_view(TokenView)
+ |> render("index.json", %{tokens: oauth_tokens})
+ end
+ end
+
+ def revoke_token(%{assigns: %{user: user}} = conn, %{"id" => id} = _params) do
+ Token.delete_user_token(user, id)
+
+ json_reply(conn, 201, "")
+ end
+
+ defp errors(conn, {:param_cast, _}) do
+ conn
+ |> put_status(400)
+ |> json("Invalid parameters")
+ end
+
+ defp errors(conn, _) do
+ conn
+ |> put_status(500)
+ |> json("Something went wrong")
+ end
+
+ defp json_reply(conn, status, json) do
+ conn
+ |> put_resp_content_type("application/json")
+ |> send_resp(status, json)
+ end
+end
diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/pleroma_api/controllers/util_controller.ex
similarity index 65%
rename from lib/pleroma/web/twitter_api/controllers/util_controller.ex
rename to lib/pleroma/web/pleroma_api/controllers/util_controller.ex
index 1c072f98a..9528d5564 100644
--- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex
+++ b/lib/pleroma/web/pleroma_api/controllers/util_controller.ex
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.UtilController do
+defmodule Pleroma.Web.PleromaAPI.UtilController do
use Pleroma.Web, :controller
require Logger
@@ -17,19 +17,8 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do
alias Pleroma.Web.Auth.WrapperAuthenticator, as: Authenticator
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.Plugs.OAuthScopesPlug
- alias Pleroma.Web.WebFinger
- plug(
- Pleroma.Web.ApiSpec.CastAndValidate,
- [replace_params: false]
- when action != :remote_subscribe and action != :show_subscribe_form
- )
-
- plug(
- Pleroma.Web.Plugs.FederatingPlug
- when action == :remote_subscribe
- when action == :show_subscribe_form
- )
+ plug(Pleroma.Web.ApiSpec.CastAndValidate, [replace_params: false])
plug(
OAuthScopesPlug,
@@ -54,125 +43,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do
]
)
- defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.TwitterUtilOperation
-
- def show_subscribe_form(conn, %{"nickname" => nick}) do
- with %User{} = user <- User.get_cached_by_nickname(nick),
- avatar = User.avatar_url(user) do
- conn
- |> render("subscribe.html", %{nickname: nick, avatar: avatar, error: false})
- else
- _e ->
- render(conn, "subscribe.html", %{
- nickname: nick,
- avatar: nil,
- error:
- Pleroma.Web.Gettext.dpgettext(
- "static_pages",
- "remote follow error message - user not found",
- "Could not find user"
- )
- })
- end
- end
-
- def show_subscribe_form(conn, %{"status_id" => id}) do
- with %Activity{} = activity <- Activity.get_by_id(id),
- {:ok, ap_id} <- get_ap_id(activity),
- %User{} = user <- User.get_cached_by_ap_id(activity.actor),
- avatar = User.avatar_url(user) do
- conn
- |> render("status_interact.html", %{
- status_link: ap_id,
- status_id: id,
- nickname: user.nickname,
- avatar: avatar,
- error: false
- })
- else
- _e ->
- render(conn, "status_interact.html", %{
- status_id: id,
- avatar: nil,
- error:
- Pleroma.Web.Gettext.dpgettext(
- "static_pages",
- "status interact error message - status not found",
- "Could not find status"
- )
- })
- end
- end
-
- def remote_subscribe(conn, %{"nickname" => nick, "profile" => _}) do
- show_subscribe_form(conn, %{"nickname" => nick})
- end
-
- def remote_subscribe(conn, %{"status_id" => id, "profile" => _}) do
- show_subscribe_form(conn, %{"status_id" => id})
- end
-
- def remote_subscribe(conn, %{"user" => %{"nickname" => nick, "profile" => profile}}) do
- with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile),
- %User{ap_id: ap_id} <- User.get_cached_by_nickname(nick) do
- conn
- |> Phoenix.Controller.redirect(external: String.replace(template, "{uri}", ap_id))
- else
- _e ->
- render(conn, "subscribe.html", %{
- nickname: nick,
- avatar: nil,
- error:
- Pleroma.Web.Gettext.dpgettext(
- "static_pages",
- "remote follow error message - unknown error",
- "Something went wrong."
- )
- })
- end
- end
-
- def remote_subscribe(conn, %{"status" => %{"status_id" => id, "profile" => profile}}) do
- with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile),
- %Activity{} = activity <- Activity.get_by_id(id),
- {:ok, ap_id} <- get_ap_id(activity) do
- conn
- |> Phoenix.Controller.redirect(external: String.replace(template, "{uri}", ap_id))
- else
- _e ->
- render(conn, "status_interact.html", %{
- status_id: id,
- avatar: nil,
- error:
- Pleroma.Web.Gettext.dpgettext(
- "static_pages",
- "status interact error message - unknown error",
- "Something went wrong."
- )
- })
- end
- end
-
- def remote_interaction(
- %{private: %{open_api_spex: %{body_params: %{ap_id: ap_id, profile: profile}}}} = conn,
- _params
- ) do
- with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile) do
- conn
- |> json(%{url: String.replace(template, "{uri}", ap_id)})
- else
- _e -> json(conn, %{error: "Couldn't find user"})
- end
- end
-
- defp get_ap_id(activity) do
- object = Pleroma.Object.normalize(activity, fetch: false)
-
- case object do
- %{data: %{"id" => ap_id}} -> {:ok, ap_id}
- _ -> {:no_ap_id, nil}
- end
- end
+ defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaUtilOperation
def frontend_configurations(conn, _params) do
render(conn, "frontend_configurations.json")
diff --git a/lib/pleroma/web/pleroma_api/views/util_view.ex b/lib/pleroma/web/pleroma_api/views/util_view.ex
new file mode 100644
index 000000000..b5e07c006
--- /dev/null
+++ b/lib/pleroma/web/pleroma_api/views/util_view.ex
@@ -0,0 +1,13 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.PleromaAPI.UtilView do
+ use Pleroma.Web, :view
+ alias Pleroma.Config
+
+ def render("frontend_configurations.json", _) do
+ Config.get(:frontend_configurations, %{})
+ |> Enum.into(%{})
+ end
+end
diff --git a/lib/pleroma/web/preload/providers/instance.ex b/lib/pleroma/web/preload/providers/instance.ex
index 6183f7b70..d5417af30 100644
--- a/lib/pleroma/web/preload/providers/instance.ex
+++ b/lib/pleroma/web/preload/providers/instance.ex
@@ -7,7 +7,7 @@ defmodule Pleroma.Web.Preload.Providers.Instance do
alias Pleroma.Web.Nodeinfo.Nodeinfo
alias Pleroma.Web.Plugs.InstanceStatic
alias Pleroma.Web.Preload.Providers.Provider
- alias Pleroma.Web.TwitterAPI.UtilView
+ alias Pleroma.Web.PleromaAPI.UtilView
@behaviour Provider
@instance_url "/api/v1/instance"
diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/registration.ex
similarity index 98%
rename from lib/pleroma/web/twitter_api/twitter_api.ex
rename to lib/pleroma/web/registration.ex
index ef2eb75f4..df71300ce 100644
--- a/lib/pleroma/web/twitter_api/twitter_api.ex
+++ b/lib/pleroma/web/registration.ex
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
+defmodule Pleroma.Web.Registration do
import Pleroma.Web.Gettext
alias Pleroma.Emails.Mailer
diff --git a/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex b/lib/pleroma/web/remote_interaction/remote_interaction_controller.ex
similarity index 57%
rename from lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex
rename to lib/pleroma/web/remote_interaction/remote_interaction_controller.ex
index 38ebc8c5d..8592fc990 100644
--- a/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex
+++ b/lib/pleroma/web/remote_interaction/remote_interaction_controller.ex
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do
+defmodule Pleroma.Web.RemoteInteraction.RemoteInteractionController do
use Pleroma.Web, :controller
require Logger
@@ -14,9 +14,16 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do
alias Pleroma.Web.Auth.TOTPAuthenticator
alias Pleroma.Web.Auth.WrapperAuthenticator
alias Pleroma.Web.CommonAPI
+ alias Pleroma.Web.WebFinger
@status_types ["Article", "Event", "Note", "Video", "Page", "Question"]
+ plug(
+ Pleroma.Web.ApiSpec.CastAndValidate,
+ [replace_params: false]
+ when action == :remote_interaction
+ )
+
plug(Pleroma.Web.Plugs.FederatingPlug)
# Note: follower can submit the form (with password auth) not being signed in (having no token)
@@ -26,6 +33,8 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do
when action in [:do_follow]
)
+ defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.RemoteInteractionOperation
+
# GET /ostatus_subscribe
#
def follow(%{assigns: %{user: user}} = conn, %{"acct" => acct}) do
@@ -125,7 +134,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do
#
def authorize_interaction(conn, %{"uri" => uri}) do
conn
- |> redirect(to: Routes.remote_follow_path(conn, :follow, %{acct: uri}))
+ |> redirect(to: Routes.remote_interaction_path(conn, :follow, %{acct: uri}))
end
defp handle_follow_error(conn, {:mfa_token, followee, _} = _) do
@@ -162,4 +171,122 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do
Logger.debug("Remote follow failed with error #{inspect(error)}")
render(conn, "followed.html", %{error: "Something went wrong."})
end
+
+ def show_subscribe_form(conn, %{"nickname" => nick}) do
+ with %User{} = user <- User.get_cached_by_nickname(nick),
+ avatar = User.avatar_url(user) do
+ conn
+ |> render("subscribe.html", %{nickname: nick, avatar: avatar, error: false})
+ else
+ _e ->
+ render(conn, "subscribe.html", %{
+ nickname: nick,
+ avatar: nil,
+ error:
+ Pleroma.Web.Gettext.dpgettext(
+ "static_pages",
+ "remote follow error message - user not found",
+ "Could not find user"
+ )
+ })
+ end
+ end
+
+ def show_subscribe_form(conn, %{"status_id" => id}) do
+ with %Activity{} = activity <- Activity.get_by_id(id),
+ {:ok, ap_id} <- get_ap_id(activity),
+ %User{} = user <- User.get_cached_by_ap_id(activity.actor),
+ avatar = User.avatar_url(user) do
+ conn
+ |> render("status_interact.html", %{
+ status_link: ap_id,
+ status_id: id,
+ nickname: user.nickname,
+ avatar: avatar,
+ error: false
+ })
+ else
+ _e ->
+ render(conn, "status_interact.html", %{
+ status_id: id,
+ avatar: nil,
+ error:
+ Pleroma.Web.Gettext.dpgettext(
+ "static_pages",
+ "status interact error message - status not found",
+ "Could not find status"
+ )
+ })
+ end
+ end
+
+ def remote_subscribe(conn, %{"nickname" => nick, "profile" => _}) do
+ show_subscribe_form(conn, %{"nickname" => nick})
+ end
+
+ def remote_subscribe(conn, %{"status_id" => id, "profile" => _}) do
+ show_subscribe_form(conn, %{"status_id" => id})
+ end
+
+ def remote_subscribe(conn, %{"user" => %{"nickname" => nick, "profile" => profile}}) do
+ with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile),
+ %User{ap_id: ap_id} <- User.get_cached_by_nickname(nick) do
+ conn
+ |> Phoenix.Controller.redirect(external: String.replace(template, "{uri}", ap_id))
+ else
+ _e ->
+ render(conn, "subscribe.html", %{
+ nickname: nick,
+ avatar: nil,
+ error:
+ Pleroma.Web.Gettext.dpgettext(
+ "static_pages",
+ "remote follow error message - unknown error",
+ "Something went wrong."
+ )
+ })
+ end
+ end
+
+ def remote_subscribe(conn, %{"status" => %{"status_id" => id, "profile" => profile}}) do
+ with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile),
+ %Activity{} = activity <- Activity.get_by_id(id),
+ {:ok, ap_id} <- get_ap_id(activity) do
+ conn
+ |> Phoenix.Controller.redirect(external: String.replace(template, "{uri}", ap_id))
+ else
+ _e ->
+ render(conn, "status_interact.html", %{
+ status_id: id,
+ avatar: nil,
+ error:
+ Pleroma.Web.Gettext.dpgettext(
+ "static_pages",
+ "status interact error message - unknown error",
+ "Something went wrong."
+ )
+ })
+ end
+ end
+
+ def remote_interaction(
+ %{private: %{open_api_spex: %{body_params: %{ap_id: ap_id, profile: profile}}}} = conn,
+ _params
+ ) do
+ with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile) do
+ conn
+ |> json(%{url: String.replace(template, "{uri}", ap_id)})
+ else
+ _e -> json(conn, %{error: "Couldn't find user"})
+ end
+ end
+
+ defp get_ap_id(activity) do
+ object = Pleroma.Object.normalize(activity, fetch: false)
+
+ case object do
+ %{data: %{"id" => ap_id}} -> {:ok, ap_id}
+ _ -> {:no_ap_id, nil}
+ end
+ end
end
diff --git a/lib/pleroma/web/twitter_api/views/remote_follow_view.ex b/lib/pleroma/web/remote_interaction/remote_interaction_view.ex
similarity index 75%
rename from lib/pleroma/web/twitter_api/views/remote_follow_view.ex
rename to lib/pleroma/web/remote_interaction/remote_interaction_view.ex
index 8902261b0..6e7f40749 100644
--- a/lib/pleroma/web/twitter_api/views/remote_follow_view.ex
+++ b/lib/pleroma/web/remote_interaction/remote_interaction_view.ex
@@ -2,9 +2,11 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.RemoteFollowView do
+defmodule Pleroma.Web.RemoteInteraction.RemoteInteractionView do
use Pleroma.Web, :view
+ import Phoenix.HTML
import Phoenix.HTML.Form
+ import Phoenix.HTML.Link
alias Pleroma.Web.Gettext
def avatar_url(user) do
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index 20ac1c67b..22e82568a 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -226,23 +226,27 @@ defmodule Pleroma.Web.Router do
plug(Pleroma.Web.Plugs.StaticFEPlug)
end
- scope "/api/v1/pleroma", Pleroma.Web.TwitterAPI do
+ scope "/api/v1/pleroma", Pleroma.Web.OAuth do
pipe_through(:pleroma_api)
get("/password_reset/:token", PasswordController, :reset, as: :reset_password)
post("/password_reset", PasswordController, :do_reset, as: :reset_password)
- get("/emoji", UtilController, :emoji)
- get("/captcha", UtilController, :captcha)
- get("/healthcheck", UtilController, :healthcheck)
- post("/remote_interaction", UtilController, :remote_interaction)
end
scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do
- pipe_through(:pleroma_api)
+ get("/emoji", UtilController, :emoji)
+ get("/captcha", UtilController, :captcha)
+ get("/healthcheck", UtilController, :healthcheck)
get("/federation_status", InstancesController, :show)
end
+ scope "/api/v1/pleroma", Pleroma.Web.RemoteInteraction do
+ pipe_through(:pleroma_api)
+
+ post("/remote_interaction", RemoteInteractionController, :remote_interaction)
+ end
+
scope "/api/v1/pleroma", Pleroma.Web do
pipe_through(:pleroma_api)
post("/uploader_callback/:upload_path", UploaderController, :callback)
@@ -484,18 +488,18 @@ defmodule Pleroma.Web.Router do
end
end
- scope "/", Pleroma.Web.TwitterAPI do
+ scope "/", Pleroma.Web.RemoteInteraction do
pipe_through(:pleroma_html)
- post("/main/ostatus", UtilController, :remote_subscribe)
- get("/main/ostatus", UtilController, :show_subscribe_form)
- get("/ostatus_subscribe", RemoteFollowController, :follow)
- post("/ostatus_subscribe", RemoteFollowController, :do_follow)
+ post("/main/ostatus", RemoteInteractionController, :remote_subscribe)
+ get("/main/ostatus", RemoteInteractionController, :show_subscribe_form)
+ get("/ostatus_subscribe", RemoteInteractionController, :follow)
+ post("/ostatus_subscribe", RemoteInteractionController, :do_follow)
- get("/authorize_interaction", RemoteFollowController, :authorize_interaction)
+ get("/authorize_interaction", RemoteInteractionController, :authorize_interaction)
end
- scope "/api/pleroma", Pleroma.Web.TwitterAPI do
+ scope "/api/pleroma", Pleroma.Web.PleromaAPI do
pipe_through(:authenticated_api)
post("/change_email", UtilController, :change_email)
@@ -853,7 +857,7 @@ defmodule Pleroma.Web.Router do
scope "/api", Pleroma.Web do
pipe_through(:config)
- get("/pleroma/frontend_configurations", TwitterAPI.UtilController, :frontend_configurations)
+ get("/pleroma/frontend_configurations", PleromaAPI.UtilController, :frontend_configurations)
end
scope "/api", Pleroma.Web do
@@ -861,7 +865,7 @@ defmodule Pleroma.Web.Router do
get(
"/account/confirm_email/:user_id/:token",
- TwitterAPI.Controller,
+ OAuth.TokenController,
:confirm_email,
as: :confirm_email
)
@@ -873,11 +877,11 @@ defmodule Pleroma.Web.Router do
get("/openapi", OpenApiSpex.Plug.RenderSpec, [])
end
- scope "/api", Pleroma.Web, as: :authenticated_twitter_api do
+ scope "/api", Pleroma.Web, as: :authenticated_pleroma_api do
pipe_through(:authenticated_api)
- get("/oauth_tokens", TwitterAPI.Controller, :oauth_tokens)
- delete("/oauth_tokens/:id", TwitterAPI.Controller, :revoke_token)
+ get("/oauth_tokens", OAuth.TokenController, :oauth_tokens)
+ delete("/oauth_tokens/:id", OAuth.TokenController, :revoke_token)
end
scope "/", Pleroma.Web do
@@ -1026,7 +1030,7 @@ defmodule Pleroma.Web.Router do
scope "/", Pleroma.Web do
pipe_through(:pleroma_html)
- post("/auth/password", TwitterAPI.PasswordController, :request)
+ post("/auth/password", OAuth.PasswordController, :request)
end
scope "/proxy/", Pleroma.Web do
diff --git a/lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex b/lib/pleroma/web/templates/o_auth/password/invalid_token.html.eex
similarity index 100%
rename from lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex
rename to lib/pleroma/web/templates/o_auth/password/invalid_token.html.eex
diff --git a/lib/pleroma/web/templates/twitter_api/password/reset.html.eex b/lib/pleroma/web/templates/o_auth/password/reset.html.eex
similarity index 100%
rename from lib/pleroma/web/templates/twitter_api/password/reset.html.eex
rename to lib/pleroma/web/templates/o_auth/password/reset.html.eex
diff --git a/lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex b/lib/pleroma/web/templates/o_auth/password/reset_failed.html.eex
similarity index 100%
rename from lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex
rename to lib/pleroma/web/templates/o_auth/password/reset_failed.html.eex
diff --git a/lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex b/lib/pleroma/web/templates/o_auth/password/reset_success.html.eex
similarity index 100%
rename from lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex
rename to lib/pleroma/web/templates/o_auth/password/reset_success.html.eex
diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex b/lib/pleroma/web/templates/remote_interaction/remote_interaction/follow.html.eex
similarity index 83%
rename from lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex
rename to lib/pleroma/web/templates/remote_interaction/remote_interaction/follow.html.eex
index e2d251fac..00cc7d383 100644
--- a/lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex
+++ b/lib/pleroma/web/templates/remote_interaction/remote_interaction/follow.html.eex
@@ -4,7 +4,7 @@
<%= Gettext.dpgettext("static_pages", "remote follow header", "Remote follow") %>
<%= @followee.nickname %>
- <%= form_for @conn, Routes.remote_follow_path(@conn, :do_follow), [as: "user"], fn f -> %>
+ <%= form_for @conn, Routes.remote_interaction_path(@conn, :do_follow), [as: "user"], fn f -> %>
<%= hidden_input f, :id, value: @followee.id %>
<%= submit Gettext.dpgettext("static_pages", "remote follow authorization button", "Authorize") %>
<% end %>
diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex b/lib/pleroma/web/templates/remote_interaction/remote_interaction/follow_login.html.eex
similarity index 88%
rename from lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex
rename to lib/pleroma/web/templates/remote_interaction/remote_interaction/follow_login.html.eex
index 26340a906..e5fe720e8 100644
--- a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex
+++ b/lib/pleroma/web/templates/remote_interaction/remote_interaction/follow_login.html.eex
@@ -4,7 +4,7 @@
<%= Gettext.dpgettext("static_pages", "remote follow header, need login", "Log in to follow") %>
<%= @followee.nickname %>
-<%= form_for @conn, Routes.remote_follow_path(@conn, :do_follow), [as: "authorization"], fn f -> %>
+<%= form_for @conn, Routes.remote_interaction_path(@conn, :do_follow), [as: "authorization"], fn f -> %>
<%= text_input f, :name, placeholder: Gettext.dpgettext("static_pages", "placeholder text for username entry", "Username"), required: true, autocomplete: "username" %>
<%= password_input f, :password, placeholder: Gettext.dpgettext("static_pages", "placeholder text for password entry", "Password"), required: true, autocomplete: "password" %>
diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex b/lib/pleroma/web/templates/remote_interaction/remote_interaction/follow_mfa.html.eex
similarity index 86%
rename from lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex
rename to lib/pleroma/web/templates/remote_interaction/remote_interaction/follow_mfa.html.eex
index 638212c1e..e5f26f104 100644
--- a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex
+++ b/lib/pleroma/web/templates/remote_interaction/remote_interaction/follow_mfa.html.eex
@@ -4,7 +4,7 @@
<%= Gettext.dpgettext("static_pages", "remote follow mfa header", "Two-factor authentication") %>
<%= @followee.nickname %>
-<%= form_for @conn, Routes.remote_follow_path(@conn, :do_follow), [as: "mfa"], fn f -> %>
+<%= form_for @conn, Routes.remote_interaction_path(@conn, :do_follow), [as: "mfa"], fn f -> %>
<%= text_input f, :code, placeholder: Gettext.dpgettext("static_pages", "placeholder text for auth code entry", "Authentication code"), required: true %>
<%= hidden_input f, :id, value: @followee.id %>
diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex b/lib/pleroma/web/templates/remote_interaction/remote_interaction/followed.html.eex
similarity index 100%
rename from lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex
rename to lib/pleroma/web/templates/remote_interaction/remote_interaction/followed.html.eex
diff --git a/lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex b/lib/pleroma/web/templates/remote_interaction/remote_interaction/status_interact.html.eex
similarity index 88%
rename from lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex
rename to lib/pleroma/web/templates/remote_interaction/remote_interaction/status_interact.html.eex
index d77174967..b3d590186 100644
--- a/lib/pleroma/web/templates/twitter_api/util/status_interact.html.eex
+++ b/lib/pleroma/web/templates/remote_interaction/remote_interaction/status_interact.html.eex
@@ -2,7 +2,7 @@
<%= Gettext.dpgettext("static_pages", "status interact error", "Error: %{error}", error: @error) %>
<% else %>
<%= raw Gettext.dpgettext("static_pages", "status interact header", "Interacting with %{nickname}'s %{status_link}", nickname: safe_to_string(html_escape(@nickname)), status_link: safe_to_string(link(Gettext.dpgettext("static_pages", "status interact header - status link text", "status"), to: @status_link))) %>
- <%= form_for @conn, Routes.util_path(@conn, :remote_subscribe), [as: "status"], fn f -> %>
+ <%= form_for @conn, Routes.remote_interaction_path(@conn, :remote_subscribe), [as: "status"], fn f -> %>
<%= hidden_input f, :status_id, value: @status_id %>
<%= text_input f, :profile, placeholder: Gettext.dpgettext("static_pages", "placeholder text for account id", "Your account ID, e.g. lain@quitter.se") %>
<%= submit Gettext.dpgettext("static_pages", "status interact authorization button", "Interact") %>
diff --git a/lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex b/lib/pleroma/web/templates/remote_interaction/remote_interaction/subscribe.html.eex
similarity index 85%
rename from lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex
rename to lib/pleroma/web/templates/remote_interaction/remote_interaction/subscribe.html.eex
index 848660f26..7e1dd723c 100644
--- a/lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex
+++ b/lib/pleroma/web/templates/remote_interaction/remote_interaction/subscribe.html.eex
@@ -2,7 +2,7 @@
<%= Gettext.dpgettext("static_pages", "remote follow error", "Error: %{error}", error: @error) %>
<% else %>
<%= Gettext.dpgettext("static_pages", "remote follow header", "Remotely follow %{nickname}", nickname: @nickname) %>
- <%= form_for @conn, Routes.util_path(@conn, :remote_subscribe), [as: "user"], fn f -> %>
+ <%= form_for @conn, Routes.remote_interaction_path(@conn, :remote_subscribe), [as: "user"], fn f -> %>
<%= hidden_input f, :nickname, value: @nickname %>
<%= text_input f, :profile, placeholder: Gettext.dpgettext("static_pages", "placeholder text for account id", "Your account ID, e.g. lain@quitter.se") %>
<%= submit Gettext.dpgettext("static_pages", "remote follow authorization button for following with a remote account", "Follow") %>
diff --git a/lib/pleroma/web/twitter_api/views/util_view.ex b/lib/pleroma/web/twitter_api/views/util_view.ex
deleted file mode 100644
index 31b7c0c0c..000000000
--- a/lib/pleroma/web/twitter_api/views/util_view.ex
+++ /dev/null
@@ -1,31 +0,0 @@
-# Pleroma: A lightweight social networking server
-# Copyright © 2017-2022 Pleroma Authors
-# SPDX-License-Identifier: AGPL-3.0-only
-
-defmodule Pleroma.Web.TwitterAPI.UtilView do
- use Pleroma.Web, :view
- import Phoenix.HTML
- import Phoenix.HTML.Form
- import Phoenix.HTML.Link
- alias Pleroma.Config
- alias Pleroma.Web.Endpoint
- alias Pleroma.Web.Gettext
-
- def status_net_config(instance) do
- """
-
-
- #{Keyword.get(instance, :name)}
- #{Endpoint.url()}
- #{Keyword.get(instance, :limit)}
- #{!Keyword.get(instance, :registrations_open)}
-
-
- """
- end
-
- def render("frontend_configurations.json", _) do
- Config.get(:frontend_configurations, %{})
- |> Enum.into(%{})
- end
-end
diff --git a/test/pleroma/web/twitter_api/password_controller_test.exs b/test/pleroma/web/o_auth/password_controller_test.exs
similarity index 99%
rename from test/pleroma/web/twitter_api/password_controller_test.exs
rename to test/pleroma/web/o_auth/password_controller_test.exs
index 26cca1345..bb61b24fd 100644
--- a/test/pleroma/web/twitter_api/password_controller_test.exs
+++ b/test/pleroma/web/o_auth/password_controller_test.exs
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do
+defmodule Pleroma.Web.OAuth.PasswordControllerTest do
use Pleroma.Web.ConnCase
alias Pleroma.Config
diff --git a/test/pleroma/web/twitter_api/controller_test.exs b/test/pleroma/web/o_auth/token_controller_test.exs
similarity index 97%
rename from test/pleroma/web/twitter_api/controller_test.exs
rename to test/pleroma/web/o_auth/token_controller_test.exs
index 494be9ec7..5c64cb394 100644
--- a/test/pleroma/web/twitter_api/controller_test.exs
+++ b/test/pleroma/web/o_auth/token_controller_test.exs
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.ControllerTest do
+defmodule Pleroma.Web.OAuth.TokenControllerTest do
use Pleroma.Web.ConnCase, async: true
alias Pleroma.Repo
diff --git a/test/pleroma/web/twitter_api/util_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/util_controller_test.exs
similarity index 85%
rename from test/pleroma/web/twitter_api/util_controller_test.exs
rename to test/pleroma/web/pleroma_api/controllers/util_controller_test.exs
index d06ae71aa..6e817df56 100644
--- a/test/pleroma/web/twitter_api/util_controller_test.exs
+++ b/test/pleroma/web/pleroma_api/controllers/util_controller_test.exs
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
+defmodule Pleroma.Web.PleromaAPI.UtilControllerTest do
use Pleroma.Web.ConnCase
use Oban.Testing, repo: Pleroma.Repo
@@ -182,153 +182,6 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
end
end
- describe "POST /main/ostatus - remote_subscribe/2" do
- setup do: clear_config([:instance, :federating], true)
-
- test "renders subscribe form", %{conn: conn} do
- user = insert(:user)
-
- response =
- conn
- |> post("/main/ostatus", %{"nickname" => user.nickname, "profile" => ""})
- |> response(:ok)
-
- refute response =~ "Could not find user"
- assert response =~ "Remotely follow #{user.nickname}"
- end
-
- test "renders subscribe form with error when user not found", %{conn: conn} do
- response =
- conn
- |> post("/main/ostatus", %{"nickname" => "nickname", "profile" => ""})
- |> response(:ok)
-
- assert response =~ "Could not find user"
- refute response =~ "Remotely follow"
- end
-
- test "it redirect to webfinger url", %{conn: conn} do
- user = insert(:user)
- user2 = insert(:user, ap_id: "shp@social.heldscal.la")
-
- conn =
- conn
- |> post("/main/ostatus", %{
- "user" => %{"nickname" => user.nickname, "profile" => user2.ap_id}
- })
-
- assert redirected_to(conn) ==
- "https://social.heldscal.la/main/ostatussub?profile=#{user.ap_id}"
- end
-
- test "it renders form with error when user not found", %{conn: conn} do
- user2 = insert(:user, ap_id: "shp@social.heldscal.la")
-
- response =
- conn
- |> post("/main/ostatus", %{"user" => %{"nickname" => "jimm", "profile" => user2.ap_id}})
- |> response(:ok)
-
- assert response =~ "Something went wrong."
- end
- end
-
- describe "POST /main/ostatus - remote_subscribe/2 - with statuses" do
- setup do: clear_config([:instance, :federating], true)
-
- test "renders subscribe form", %{conn: conn} do
- user = insert(:user)
- status = insert(:note_activity, %{user: user})
- status_id = status.id
-
- assert is_binary(status_id)
-
- response =
- conn
- |> post("/main/ostatus", %{"status_id" => status_id, "profile" => ""})
- |> response(:ok)
-
- refute response =~ "Could not find status"
- assert response =~ "Interacting with"
- end
-
- test "renders subscribe form with error when status not found", %{conn: conn} do
- response =
- conn
- |> post("/main/ostatus", %{"status_id" => "somerandomid", "profile" => ""})
- |> response(:ok)
-
- assert response =~ "Could not find status"
- refute response =~ "Interacting with"
- end
-
- test "it redirect to webfinger url", %{conn: conn} do
- user = insert(:user)
- status = insert(:note_activity, %{user: user})
- status_id = status.id
- status_ap_id = status.data["object"]
-
- assert is_binary(status_id)
- assert is_binary(status_ap_id)
-
- user2 = insert(:user, ap_id: "shp@social.heldscal.la")
-
- conn =
- conn
- |> post("/main/ostatus", %{
- "status" => %{"status_id" => status_id, "profile" => user2.ap_id}
- })
-
- assert redirected_to(conn) ==
- "https://social.heldscal.la/main/ostatussub?profile=#{status_ap_id}"
- end
-
- test "it renders form with error when status not found", %{conn: conn} do
- user2 = insert(:user, ap_id: "shp@social.heldscal.la")
-
- response =
- conn
- |> post("/main/ostatus", %{
- "status" => %{"status_id" => "somerandomid", "profile" => user2.ap_id}
- })
- |> response(:ok)
-
- assert response =~ "Something went wrong."
- end
- end
-
- describe "GET /main/ostatus - show_subscribe_form/2" do
- setup do: clear_config([:instance, :federating], true)
-
- test "it works with users", %{conn: conn} do
- user = insert(:user)
-
- response =
- conn
- |> get("/main/ostatus", %{"nickname" => user.nickname})
- |> response(:ok)
-
- refute response =~ "Could not find user"
- assert response =~ "Remotely follow #{user.nickname}"
- end
-
- test "it works with statuses", %{conn: conn} do
- user = insert(:user)
- status = insert(:note_activity, %{user: user})
- status_id = status.id
-
- assert is_binary(status_id)
-
- response =
- conn
- |> get("/main/ostatus", %{"status_id" => status_id})
- |> response(:ok)
-
- refute response =~ "Could not find status"
- assert response =~ "Interacting with"
- end
- end
-
test "it returns new captcha", %{conn: conn} do
with_mock Pleroma.Captcha,
new: fn -> "test_captcha" end do
diff --git a/test/pleroma/web/twitter_api/twitter_api_test.exs b/test/pleroma/web/registration_test.exs
similarity index 90%
rename from test/pleroma/web/twitter_api/twitter_api_test.exs
rename to test/pleroma/web/registration_test.exs
index b3cd80146..896e1a600 100644
--- a/test/pleroma/web/twitter_api/twitter_api_test.exs
+++ b/test/pleroma/web/registration_test.exs
@@ -2,14 +2,14 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
+defmodule Pleroma.Web.RegistrationTest do
use Pleroma.DataCase
import Pleroma.Factory
alias Pleroma.Repo
alias Pleroma.Tests.ObanHelpers
alias Pleroma.User
alias Pleroma.UserInviteToken
- alias Pleroma.Web.TwitterAPI.TwitterAPI
+ alias Pleroma.Web.Registration
setup_all do
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
@@ -25,7 +25,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:confirm => "bear"
}
- {:ok, user} = TwitterAPI.register_user(data)
+ {:ok, user} = Registration.register_user(data)
assert user == User.get_cached_by_nickname("lain")
end
@@ -40,7 +40,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:confirm => "bear"
}
- {:ok, user} = TwitterAPI.register_user(data)
+ {:ok, user} = Registration.register_user(data)
assert user == User.get_cached_by_nickname("lain")
end
@@ -57,7 +57,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:confirm => "bear"
}
- {:ok, user} = TwitterAPI.register_user(data)
+ {:ok, user} = Registration.register_user(data)
ObanHelpers.perform_all()
refute user.is_confirmed
@@ -89,7 +89,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:reason => "I love anime"
}
- {:ok, user} = TwitterAPI.register_user(data)
+ {:ok, user} = Registration.register_user(data)
ObanHelpers.perform_all()
refute user.is_approved
@@ -125,7 +125,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:confirm => "bear"
}
- {:ok, user1} = TwitterAPI.register_user(data1)
+ {:ok, user1} = Registration.register_user(data1)
data2 = %{
:username => "lain",
@@ -136,7 +136,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:confirm => "bear"
}
- {:ok, user2} = TwitterAPI.register_user(data2)
+ {:ok, user2} = Registration.register_user(data2)
expected_text =
~s(@john test)
@@ -160,7 +160,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => invite.token
}
- {:ok, user} = TwitterAPI.register_user(data)
+ {:ok, user} = Registration.register_user(data)
assert user == User.get_cached_by_nickname("vinny")
@@ -179,7 +179,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => "DudeLetMeInImAFairy"
}
- {:error, msg} = TwitterAPI.register_user(data)
+ {:error, msg} = Registration.register_user(data)
assert msg == "Invalid token"
refute User.get_cached_by_nickname("GrimReaper")
@@ -199,7 +199,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => invite.token
}
- {:error, msg} = TwitterAPI.register_user(data)
+ {:error, msg} = Registration.register_user(data)
assert msg == "Expired token"
refute User.get_cached_by_nickname("GrimReaper")
@@ -221,7 +221,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
check_fn = fn invite ->
data = Map.put(data, :token, invite.token)
- {:ok, user} = TwitterAPI.register_user(data)
+ {:ok, user} = Registration.register_user(data)
assert user == User.get_cached_by_nickname("vinny")
end
@@ -254,7 +254,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
data = Map.put(data, "token", invite.token)
- {:error, msg} = TwitterAPI.register_user(data)
+ {:error, msg} = Registration.register_user(data)
assert msg == "Expired token"
refute User.get_cached_by_nickname("vinny")
@@ -282,7 +282,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => invite.token
}
- {:ok, user} = TwitterAPI.register_user(data)
+ {:ok, user} = Registration.register_user(data)
assert user == User.get_cached_by_nickname("vinny")
invite = Repo.get_by(UserInviteToken, token: invite.token)
@@ -298,7 +298,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => invite.token
}
- {:error, msg} = TwitterAPI.register_user(data)
+ {:error, msg} = Registration.register_user(data)
assert msg == "Expired token"
refute User.get_cached_by_nickname("GrimReaper")
@@ -321,7 +321,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => invite.token
}
- {:ok, user} = TwitterAPI.register_user(data)
+ {:ok, user} = Registration.register_user(data)
assert user == User.get_cached_by_nickname("vinny")
invite = Repo.get_by(UserInviteToken, token: invite.token)
@@ -343,7 +343,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => invite.token
}
- {:ok, user} = TwitterAPI.register_user(data)
+ {:ok, user} = Registration.register_user(data)
assert user == User.get_cached_by_nickname("vinny")
invite = Repo.get_by(UserInviteToken, token: invite.token)
@@ -359,7 +359,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => invite.token
}
- {:error, msg} = TwitterAPI.register_user(data)
+ {:error, msg} = Registration.register_user(data)
assert msg == "Expired token"
refute User.get_cached_by_nickname("GrimReaper")
@@ -379,7 +379,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => invite.token
}
- {:error, msg} = TwitterAPI.register_user(data)
+ {:error, msg} = Registration.register_user(data)
assert msg == "Expired token"
refute User.get_cached_by_nickname("GrimReaper")
@@ -401,7 +401,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:token => invite.token
}
- {:error, msg} = TwitterAPI.register_user(data)
+ {:error, msg} = Registration.register_user(data)
assert msg == "Expired token"
refute User.get_cached_by_nickname("GrimReaper")
@@ -416,7 +416,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
:bio => "close the world."
}
- {:error, error} = TwitterAPI.register_user(data)
+ {:error, error} = Registration.register_user(data)
assert is_binary(error)
refute User.get_cached_by_nickname("lain")
diff --git a/test/pleroma/web/twitter_api/remote_follow_controller_test.exs b/test/pleroma/web/remote_interaction/remote_interaction_controller_test.exs
similarity index 68%
rename from test/pleroma/web/twitter_api/remote_follow_controller_test.exs
rename to test/pleroma/web/remote_interaction/remote_interaction_controller_test.exs
index f762b1356..116609013 100644
--- a/test/pleroma/web/twitter_api/remote_follow_controller_test.exs
+++ b/test/pleroma/web/remote_interaction/remote_interaction_controller_test.exs
@@ -2,7 +2,7 @@
# Copyright © 2017-2022 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
+defmodule Pleroma.Web.RemoteInteraction.RemoteInteractionControllerTest do
use Pleroma.Web.ConnCase
alias Pleroma.MFA
@@ -16,6 +16,11 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
import Mox
import Pleroma.Factory
+ setup do
+ Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
+ :ok
+ end
+
setup_all do: clear_config([:instance, :federating], true)
setup do: clear_config([:user, :deny_follow_blocked])
@@ -49,7 +54,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
assert conn
|> get(
- remote_follow_path(conn, :follow, %{
+ remote_interaction_path(conn, :follow, %{
acct: "https://mastodon.social/users/emelie/statuses/101849165031453009"
})
)
@@ -78,7 +83,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
- |> get(remote_follow_path(conn, :follow, %{acct: "https://mastodon.social/users/emelie"}))
+ |> get(remote_interaction_path(conn, :follow, %{acct: "https://mastodon.social/users/emelie"}))
|> html_response(200)
assert response =~ "Log in to follow"
@@ -109,7 +114,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
|> assign(:user, user)
- |> get(remote_follow_path(conn, :follow, %{acct: "https://mastodon.social/users/emelie"}))
+ |> get(remote_interaction_path(conn, :follow, %{acct: "https://mastodon.social/users/emelie"}))
|> html_response(200)
assert response =~ "Remote follow"
@@ -130,7 +135,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
conn
|> assign(:user, user)
|> get(
- remote_follow_path(conn, :follow, %{
+ remote_interaction_path(conn, :follow, %{
acct: "https://mastodon.social/users/not_found"
})
)
@@ -152,7 +157,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
conn
|> assign(:user, user)
|> assign(:token, read_token)
- |> post(remote_follow_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
+ |> post(remote_interaction_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
|> response(200)
assert response =~ "Error following account"
@@ -167,7 +172,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
conn
|> assign(:user, user)
|> assign(:token, insert(:oauth_token, user: user, scopes: ["write:follows"]))
- |> post(remote_follow_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
+ |> post(remote_interaction_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
assert redirected_to(conn) == "/users/#{user2.id}"
end
@@ -179,7 +184,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
|> assign(:user, user)
- |> post(remote_follow_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
+ |> post(remote_interaction_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
|> response(200)
assert response =~ "Error following account"
@@ -195,7 +200,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
|> assign(:user, user)
- |> post(remote_follow_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
+ |> post(remote_interaction_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
|> response(200)
assert response =~ "Error following account"
@@ -207,7 +212,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
|> assign(:user, user)
- |> post(remote_follow_path(conn, :do_follow), %{"user" => %{"id" => "jimm"}})
+ |> post(remote_interaction_path(conn, :do_follow), %{"user" => %{"id" => "jimm"}})
|> response(200)
assert response =~ "Error following account"
@@ -222,7 +227,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
conn
|> assign(:user, refresh_record(user))
|> assign(:token, insert(:oauth_token, user: user, scopes: ["write:follows"]))
- |> post(remote_follow_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
+ |> post(remote_interaction_path(conn, :do_follow), %{"user" => %{"id" => user2.id}})
assert redirected_to(conn) == "/users/#{user2.id}"
end
@@ -244,7 +249,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
- |> post(remote_follow_path(conn, :do_follow), %{
+ |> post(remote_interaction_path(conn, :do_follow), %{
"authorization" => %{"name" => user.nickname, "password" => "test", "id" => user2.id}
})
|> response(200)
@@ -272,7 +277,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
- |> post(remote_follow_path(conn, :do_follow), %{
+ |> post(remote_interaction_path(conn, :do_follow), %{
"authorization" => %{"name" => user.nickname, "password" => "test1", "id" => user2.id}
})
|> response(200)
@@ -300,7 +305,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
conn =
conn
|> post(
- remote_follow_path(conn, :do_follow),
+ remote_interaction_path(conn, :do_follow),
%{
"mfa" => %{"code" => otp_token, "token" => token, "id" => user2.id}
}
@@ -329,7 +334,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
|> post(
- remote_follow_path(conn, :do_follow),
+ remote_interaction_path(conn, :do_follow),
%{
"mfa" => %{"code" => otp_token, "token" => token, "id" => user2.id}
}
@@ -348,7 +353,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
conn =
conn
- |> post(remote_follow_path(conn, :do_follow), %{
+ |> post(remote_interaction_path(conn, :do_follow), %{
"authorization" => %{"name" => user.nickname, "password" => "test", "id" => user2.id}
})
@@ -361,7 +366,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
- |> post(remote_follow_path(conn, :do_follow), %{
+ |> post(remote_interaction_path(conn, :do_follow), %{
"authorization" => %{"name" => user.nickname, "password" => "test", "id" => "jimm"}
})
|> response(200)
@@ -374,7 +379,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
- |> post(remote_follow_path(conn, :do_follow), %{
+ |> post(remote_interaction_path(conn, :do_follow), %{
"authorization" => %{"name" => "jimm", "password" => "test", "id" => user.id}
})
|> response(200)
@@ -388,7 +393,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
- |> post(remote_follow_path(conn, :do_follow), %{
+ |> post(remote_interaction_path(conn, :do_follow), %{
"authorization" => %{"name" => user.nickname, "password" => "42", "id" => user2.id}
})
|> response(200)
@@ -404,7 +409,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
response =
conn
- |> post(remote_follow_path(conn, :do_follow), %{
+ |> post(remote_interaction_path(conn, :do_follow), %{
"authorization" => %{"name" => user.nickname, "password" => "test", "id" => user2.id}
})
|> response(200)
@@ -423,7 +428,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
avatar: %{"url" => [%{"href" => "https://remote.org/avatar.png"}]}
})
- avatar_url = Pleroma.Web.TwitterAPI.RemoteFollowView.avatar_url(user)
+ avatar_url = Pleroma.Web.PleromaAPI.RemoteFollowView.avatar_url(user)
assert avatar_url == "https://remote.org/avatar.png"
end
@@ -440,7 +445,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
avatar: %{"url" => [%{"href" => "https://remote.org/avatar.png"}]}
})
- avatar_url = Pleroma.Web.TwitterAPI.RemoteFollowView.avatar_url(user)
+ avatar_url = Pleroma.Web.PleromaAPI.RemoteFollowView.avatar_url(user)
url = Pleroma.Web.Endpoint.url()
assert String.starts_with?(avatar_url, url)
@@ -455,7 +460,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
avatar: %{"url" => [%{"href" => "#{Pleroma.Web.Endpoint.url()}/localuser/avatar.png"}]}
})
- avatar_url = Pleroma.Web.TwitterAPI.RemoteFollowView.avatar_url(user)
+ avatar_url = Pleroma.Web.PleromaAPI.RemoteFollowView.avatar_url(user)
assert avatar_url == "#{Pleroma.Web.Endpoint.url()}/localuser/avatar.png"
end
@@ -485,13 +490,160 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
conn =
conn
|> get(
- remote_follow_path(conn, :authorize_interaction, %{
+ remote_interaction_path(conn, :authorize_interaction, %{
uri: "https://mastodon.social/users/emelie"
})
)
assert redirected_to(conn) ==
- remote_follow_path(conn, :follow, %{acct: "https://mastodon.social/users/emelie"})
+ remote_interaction_path(conn, :follow, %{acct: "https://mastodon.social/users/emelie"})
+ end
+ end
+
+ describe "POST /main/ostatus - remote_subscribe/2" do
+ setup do: clear_config([:instance, :federating], true)
+
+ test "renders subscribe form", %{conn: conn} do
+ user = insert(:user)
+
+ response =
+ conn
+ |> post("/main/ostatus", %{"nickname" => user.nickname, "profile" => ""})
+ |> response(:ok)
+
+ refute response =~ "Could not find user"
+ assert response =~ "Remotely follow #{user.nickname}"
+ end
+
+ test "renders subscribe form with error when user not found", %{conn: conn} do
+ response =
+ conn
+ |> post("/main/ostatus", %{"nickname" => "nickname", "profile" => ""})
+ |> response(:ok)
+
+ assert response =~ "Could not find user"
+ refute response =~ "Remotely follow"
+ end
+
+ test "it redirect to webfinger url", %{conn: conn} do
+ user = insert(:user)
+ user2 = insert(:user, ap_id: "shp@social.heldscal.la")
+
+ conn =
+ conn
+ |> post("/main/ostatus", %{
+ "user" => %{"nickname" => user.nickname, "profile" => user2.ap_id}
+ })
+
+ assert redirected_to(conn) ==
+ "https://social.heldscal.la/main/ostatussub?profile=#{user.ap_id}"
+ end
+
+ test "it renders form with error when user not found", %{conn: conn} do
+ user2 = insert(:user, ap_id: "shp@social.heldscal.la")
+
+ response =
+ conn
+ |> post("/main/ostatus", %{"user" => %{"nickname" => "jimm", "profile" => user2.ap_id}})
+ |> response(:ok)
+
+ assert response =~ "Something went wrong."
+ end
+ end
+
+ describe "POST /main/ostatus - remote_subscribe/2 - with statuses" do
+ setup do: clear_config([:instance, :federating], true)
+
+ test "renders subscribe form", %{conn: conn} do
+ user = insert(:user)
+ status = insert(:note_activity, %{user: user})
+ status_id = status.id
+
+ assert is_binary(status_id)
+
+ response =
+ conn
+ |> post("/main/ostatus", %{"status_id" => status_id, "profile" => ""})
+ |> response(:ok)
+
+ refute response =~ "Could not find status"
+ assert response =~ "Interacting with"
+ end
+
+ test "renders subscribe form with error when status not found", %{conn: conn} do
+ response =
+ conn
+ |> post("/main/ostatus", %{"status_id" => "somerandomid", "profile" => ""})
+ |> response(:ok)
+
+ assert response =~ "Could not find status"
+ refute response =~ "Interacting with"
+ end
+
+ test "it redirect to webfinger url", %{conn: conn} do
+ user = insert(:user)
+ status = insert(:note_activity, %{user: user})
+ status_id = status.id
+ status_ap_id = status.data["object"]
+
+ assert is_binary(status_id)
+ assert is_binary(status_ap_id)
+
+ user2 = insert(:user, ap_id: "shp@social.heldscal.la")
+
+ conn =
+ conn
+ |> post("/main/ostatus", %{
+ "status" => %{"status_id" => status_id, "profile" => user2.ap_id}
+ })
+
+ assert redirected_to(conn) ==
+ "https://social.heldscal.la/main/ostatussub?profile=#{status_ap_id}"
+ end
+
+ test "it renders form with error when status not found", %{conn: conn} do
+ user2 = insert(:user, ap_id: "shp@social.heldscal.la")
+
+ response =
+ conn
+ |> post("/main/ostatus", %{
+ "status" => %{"status_id" => "somerandomid", "profile" => user2.ap_id}
+ })
+ |> response(:ok)
+
+ assert response =~ "Something went wrong."
+ end
+ end
+
+ describe "GET /main/ostatus - show_subscribe_form/2" do
+ setup do: clear_config([:instance, :federating], true)
+
+ test "it works with users", %{conn: conn} do
+ user = insert(:user)
+
+ response =
+ conn
+ |> get("/main/ostatus", %{"nickname" => user.nickname})
+ |> response(:ok)
+
+ refute response =~ "Could not find user"
+ assert response =~ "Remotely follow #{user.nickname}"
+ end
+
+ test "it works with statuses", %{conn: conn} do
+ user = insert(:user)
+ status = insert(:note_activity, %{user: user})
+ status_id = status.id
+
+ assert is_binary(status_id)
+
+ response =
+ conn
+ |> get("/main/ostatus", %{"status_id" => status_id})
+ |> response(:ok)
+
+ refute response =~ "Could not find status"
+ assert response =~ "Interacting with"
end
end
end