Reroute /api/pleroma to /api/v1/pleroma
authoreugenijm <eugenijm@protonmail.com>
Thu, 18 Feb 2021 21:59:06 +0000 (00:59 +0300)
committereugenijm <eugenijm@protonmail.com>
Sun, 21 Feb 2021 10:26:23 +0000 (13:26 +0300)
CHANGELOG.md
lib/pleroma/web/fallback/legacy_pleroma_api_rerouter_plug.ex [new file with mode: 0644]
lib/pleroma/web/router.ex

index 74473b3d080b32b887983e0c7ff41ab701c18e1a..9a972770ff816e7606cc95849dce0ff6121bc7a7 100644 (file)
@@ -37,6 +37,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - **Breaking:** AdminAPI `GET /api/pleroma/admin/instances/:instance/statuses` changed response format and added the number of total users posts.
 - Admin API: Reports now ordered by newest
 - Pleroma API: `GET /api/v1/pleroma/chats` is deprecated in favor of `GET /api/v2/pleroma/chats`.
+- Pleroma API: Reroute `/api/pleroma/*` to `/api/v1/pleroma/*`
 
 </details>
 
diff --git a/lib/pleroma/web/fallback/legacy_pleroma_api_rerouter_plug.ex b/lib/pleroma/web/fallback/legacy_pleroma_api_rerouter_plug.ex
new file mode 100644 (file)
index 0000000..f86d6b5
--- /dev/null
@@ -0,0 +1,26 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.Fallback.LegacyPleromaApiRerouterPlug do
+  alias Pleroma.Web.Endpoint
+  alias Pleroma.Web.Fallback.RedirectController
+
+  def init(opts), do: opts
+
+  def call(%{path_info: ["api", "pleroma" | path_info_rest]} = conn, _opts) do
+    new_path_info = ["api", "v1", "pleroma" | path_info_rest]
+    new_request_path = Enum.join(new_path_info, "/")
+
+    conn
+    |> Map.merge(%{
+      path_info: new_path_info,
+      request_path: new_request_path
+    })
+    |> Endpoint.call(conn.params)
+  end
+
+  def call(conn, _opts) do
+    RedirectController.api_not_implemented(conn, %{})
+  end
+end
index d71011033cbf8b6e0f6616fc12d4d2c571f1cc47..de24d31f4a64579addbc123cf374a2c81551bb0f 100644 (file)
@@ -140,7 +140,7 @@ defmodule Pleroma.Web.Router do
     plug(Pleroma.Web.Plugs.MappedSignatureToIdentityPlug)
   end
 
-  scope "/api/pleroma", Pleroma.Web.TwitterAPI do
+  scope "/api/v1/pleroma", Pleroma.Web.TwitterAPI do
     pipe_through(:pleroma_api)
 
     get("/password_reset/:token", PasswordController, :reset, as: :reset_password)
@@ -150,12 +150,12 @@ defmodule Pleroma.Web.Router do
     get("/healthcheck", UtilController, :healthcheck)
   end
 
-  scope "/api/pleroma", Pleroma.Web do
+  scope "/api/v1/pleroma", Pleroma.Web do
     pipe_through(:pleroma_api)
     post("/uploader_callback/:upload_path", UploaderController, :callback)
   end
 
-  scope "/api/pleroma/admin", Pleroma.Web.AdminAPI do
+  scope "/api/v1/pleroma/admin", Pleroma.Web.AdminAPI do
     pipe_through(:admin_api)
 
     put("/users/disable_mfa", AdminAPIController, :disable_mfa)
@@ -259,7 +259,7 @@ defmodule Pleroma.Web.Router do
     post("/backups", AdminAPIController, :create_backup)
   end
 
-  scope "/api/pleroma/emoji", Pleroma.Web.PleromaAPI do
+  scope "/api/v1/pleroma/emoji", Pleroma.Web.PleromaAPI do
     scope "/pack" do
       pipe_through(:admin_api)
 
@@ -809,6 +809,7 @@ defmodule Pleroma.Web.Router do
   scope "/", Pleroma.Web.Fallback do
     get("/registration/:token", RedirectController, :registration_page)
     get("/:maybe_nickname_or_id", RedirectController, :redirector_with_meta)
+    match(:*, "/api/pleroma*path", LegacyPleromaApiRerouterPlug, [])
     get("/api*path", RedirectController, :api_not_implemented)
     get("/*path", RedirectController, :redirector_with_preload)