logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma

fallback_redirect_controller.ex (2568B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Fallback.RedirectController do
  5. use Pleroma.Web, :controller
  6. require Logger
  7. alias Pleroma.User
  8. alias Pleroma.Web.Metadata
  9. alias Pleroma.Web.Preload
  10. def api_not_implemented(conn, _params) do
  11. conn
  12. |> put_status(404)
  13. |> json(%{error: "Not implemented"})
  14. end
  15. def redirector(conn, _params, code \\ 200) do
  16. conn
  17. |> put_resp_content_type("text/html")
  18. |> send_file(code, index_file_path())
  19. end
  20. def redirector_with_meta(conn, %{"maybe_nickname_or_id" => maybe_nickname_or_id} = params) do
  21. with %User{} = user <- User.get_cached_by_nickname_or_id(maybe_nickname_or_id) do
  22. redirector_with_meta(conn, %{user: user})
  23. else
  24. nil ->
  25. redirector(conn, params)
  26. end
  27. end
  28. def redirector_with_meta(conn, params) do
  29. {:ok, index_content} = File.read(index_file_path())
  30. tags = build_tags(conn, params)
  31. preloads = preload_data(conn, params)
  32. response =
  33. index_content
  34. |> String.replace("<!--server-generated-meta-->", tags <> preloads)
  35. conn
  36. |> put_resp_content_type("text/html")
  37. |> send_resp(200, response)
  38. end
  39. def redirector_with_preload(conn, %{"path" => ["pleroma", "admin"]}) do
  40. redirect(conn, to: "/pleroma/admin/")
  41. end
  42. def redirector_with_preload(conn, params) do
  43. {:ok, index_content} = File.read(index_file_path())
  44. preloads = preload_data(conn, params)
  45. response =
  46. index_content
  47. |> String.replace("<!--server-generated-meta-->", preloads)
  48. conn
  49. |> put_resp_content_type("text/html")
  50. |> send_resp(200, response)
  51. end
  52. def registration_page(conn, params) do
  53. redirector(conn, params)
  54. end
  55. def empty(conn, _params) do
  56. conn
  57. |> put_status(204)
  58. |> text("")
  59. end
  60. defp index_file_path do
  61. Pleroma.Plugs.InstanceStatic.file_path("index.html")
  62. end
  63. defp build_tags(conn, params) do
  64. try do
  65. Metadata.build_tags(params)
  66. rescue
  67. e ->
  68. Logger.error(
  69. "Metadata rendering for #{conn.request_path} failed.\n" <>
  70. Exception.format(:error, e, __STACKTRACE__)
  71. )
  72. ""
  73. end
  74. end
  75. defp preload_data(conn, params) do
  76. try do
  77. Preload.build_tags(conn, params)
  78. rescue
  79. e ->
  80. Logger.error(
  81. "Preloading for #{conn.request_path} failed.\n" <>
  82. Exception.format(:error, e, __STACKTRACE__)
  83. )
  84. ""
  85. end
  86. end
  87. end