add test router generation
This commit is contained in:
parent
7bc915ff3c
commit
f25bc0210d
2 changed files with 218 additions and 0 deletions
150
lib/pleroma/web/pipelines.ex
Normal file
150
lib/pleroma/web/pipelines.ex
Normal file
|
@ -0,0 +1,150 @@
|
|||
defmodule Pleroma.Web.Pipelines do
|
||||
def common do
|
||||
quote do
|
||||
pipeline :accepts_html do
|
||||
plug(:accepts, ["html"])
|
||||
end
|
||||
|
||||
pipeline :accepts_html_xml do
|
||||
plug(:accepts, ["html", "xml", "rss", "atom"])
|
||||
end
|
||||
|
||||
pipeline :accepts_html_json do
|
||||
plug(:accepts, ["html", "activity+json", "json"])
|
||||
end
|
||||
|
||||
pipeline :accepts_html_xml_json do
|
||||
plug(:accepts, ["html", "xml", "rss", "atom", "activity+json", "json"])
|
||||
end
|
||||
|
||||
pipeline :accepts_xml_rss_atom do
|
||||
plug(:accepts, ["xml", "rss", "atom"])
|
||||
end
|
||||
|
||||
pipeline :browser do
|
||||
plug(:accepts, ["html"])
|
||||
plug(:fetch_session)
|
||||
end
|
||||
|
||||
pipeline :oauth do
|
||||
plug(:fetch_session)
|
||||
plug(Pleroma.Web.Plugs.OAuthPlug)
|
||||
plug(Pleroma.Web.Plugs.UserEnabledPlug)
|
||||
plug(Pleroma.Web.Plugs.EnsureUserTokenAssignsPlug)
|
||||
end
|
||||
|
||||
# Note: expects _user_ authentication (user-unbound app-bound tokens don't qualify)
|
||||
pipeline :expect_user_authentication do
|
||||
plug(Pleroma.Web.Plugs.ExpectAuthenticatedCheckPlug)
|
||||
end
|
||||
|
||||
# Note: expects public instance or _user_ authentication (user-unbound tok ens don't qualify)
|
||||
pipeline :expect_public_instance_or_user_authentication do
|
||||
plug(Pleroma.Web.Plugs.ExpectPublicOrAuthenticatedCheckPlug)
|
||||
end
|
||||
|
||||
pipeline :authenticate do
|
||||
plug(Pleroma.Web.Plugs.OAuthPlug)
|
||||
plug(Pleroma.Web.Plugs.BasicAuthDecoderPlug)
|
||||
plug(Pleroma.Web.Plugs.UserFetcherPlug)
|
||||
plug(Pleroma.Web.Plugs.AuthenticationPlug)
|
||||
end
|
||||
|
||||
pipeline :after_auth do
|
||||
plug(Pleroma.Web.Plugs.UserEnabledPlug)
|
||||
plug(Pleroma.Web.Plugs.SetUserSessionIdPlug)
|
||||
plug(Pleroma.Web.Plugs.EnsureUserTokenAssignsPlug)
|
||||
plug(Pleroma.Web.Plugs.UserTrackingPlug)
|
||||
end
|
||||
|
||||
pipeline :base_api do
|
||||
plug(:accepts, ["json"])
|
||||
plug(:fetch_session)
|
||||
plug(:authenticate)
|
||||
plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec)
|
||||
end
|
||||
|
||||
pipeline :no_auth_or_privacy_expectations_api do
|
||||
plug(:base_api)
|
||||
plug(:after_auth)
|
||||
plug(Pleroma.Web.Plugs.IdempotencyPlug)
|
||||
end
|
||||
|
||||
# Pipeline for app-related endpoints (no user auth checks — app-bound toke ns must be supported)
|
||||
pipeline :app_api do
|
||||
plug(:no_auth_or_privacy_expectations_api)
|
||||
end
|
||||
|
||||
pipeline :api do
|
||||
plug(:expect_public_instance_or_user_authentication)
|
||||
plug(:no_auth_or_privacy_expectations_api)
|
||||
end
|
||||
|
||||
pipeline :authenticated_api do
|
||||
plug(:expect_user_authentication)
|
||||
plug(:no_auth_or_privacy_expectations_api)
|
||||
plug(Pleroma.Web.Plugs.EnsureAuthenticatedPlug)
|
||||
end
|
||||
|
||||
pipeline :admin_api do
|
||||
plug(:expect_user_authentication)
|
||||
plug(:base_api)
|
||||
plug(Pleroma.Web.Plugs.AdminSecretAuthenticationPlug)
|
||||
plug(:after_auth)
|
||||
plug(Pleroma.Web.Plugs.EnsureAuthenticatedPlug)
|
||||
plug(Pleroma.Web.Plugs.UserIsStaffPlug)
|
||||
plug(Pleroma.Web.Plugs.IdempotencyPlug)
|
||||
end
|
||||
|
||||
pipeline :require_privileged_staff do
|
||||
plug(Pleroma.Web.Plugs.EnsureStaffPrivilegedPlug)
|
||||
end
|
||||
|
||||
pipeline :require_admin do
|
||||
plug(Pleroma.Web.Plugs.UserIsAdminPlug)
|
||||
end
|
||||
|
||||
pipeline :pleroma_html do
|
||||
plug(:browser)
|
||||
plug(:authenticate)
|
||||
plug(Pleroma.Web.Plugs.EnsureUserTokenAssignsPlug)
|
||||
end
|
||||
|
||||
pipeline :well_known do
|
||||
plug(:accepts, ["json", "jrd+json", "xml", "xrd+xml"])
|
||||
end
|
||||
|
||||
pipeline :config do
|
||||
plug(:accepts, ["json", "xml"])
|
||||
plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec)
|
||||
end
|
||||
|
||||
pipeline :pleroma_api do
|
||||
plug(:accepts, ["html", "json"])
|
||||
plug(OpenApiSpex.Plug.PutApiSpec, module: Pleroma.Web.ApiSpec)
|
||||
end
|
||||
|
||||
pipeline :mailbox_preview do
|
||||
plug(:accepts, ["html"])
|
||||
|
||||
plug(:put_secure_browser_headers, %{
|
||||
"content-security-policy" =>
|
||||
"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline' 'unsafe-eval'"
|
||||
})
|
||||
end
|
||||
|
||||
pipeline :http_signature do
|
||||
plug(Pleroma.Web.Plugs.HTTPSignaturePlug)
|
||||
plug(Pleroma.Web.Plugs.MappedSignatureToIdentityPlug)
|
||||
end
|
||||
|
||||
pipeline :static_fe do
|
||||
plug(Pleroma.Web.Plugs.StaticFEPlug)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
defmacro __using__(which) when is_atom(which) do
|
||||
apply(__MODULE__, which, [])
|
||||
end
|
||||
end
|
68
lib/pleroma/web/pluggable_frontend.ex
Normal file
68
lib/pleroma/web/pluggable_frontend.ex
Normal file
|
@ -0,0 +1,68 @@
|
|||
defmodule Pleroma.Web.PluggableFrontend do
|
||||
alias Pleroma.Config
|
||||
|
||||
def routers do
|
||||
conf =
|
||||
[:frontends, :enabled]
|
||||
|> Config.get()
|
||||
|
||||
unless is_nil(conf) do
|
||||
conf
|
||||
|> Keyword.to_list()
|
||||
|> Enum.map(&router/1)
|
||||
end
|
||||
end
|
||||
|
||||
def plugs do
|
||||
conf =
|
||||
[:frontends, :extra]
|
||||
|> Config.get()
|
||||
|
||||
unless is_nil(conf) do
|
||||
conf
|
||||
|> Keyword.to_list()
|
||||
|> Enum.map(&plug/1)
|
||||
end
|
||||
end
|
||||
|
||||
defp router({name, config}) do
|
||||
unless is_nil(Map.get(config, "router")) do
|
||||
forwarder({name, config})
|
||||
end
|
||||
end
|
||||
|
||||
defp plug({name, config}) do
|
||||
if is_nil(Map.get(config, "router")) do
|
||||
forwarder({name, config})
|
||||
end
|
||||
end
|
||||
|
||||
defp forwarder({frontend, %{"url_prefix" => prefixes} = config}) when is_list(prefixes) do
|
||||
prefixes
|
||||
|> Enum.map(fn prefix -> forwarder({frontend, Map.put(config, "url_prefix", prefix)}) end)
|
||||
end
|
||||
|
||||
defp forwarder({_frontend, %{"url_prefix" => prefix, "router" => router}}) do
|
||||
quote bind_quoted: [prefix: prefix, router: router] do
|
||||
match(:*, prefix, router, :any)
|
||||
end
|
||||
end
|
||||
|
||||
defp forwarder({frontend, %{"url_prefix" => prefix}}) do
|
||||
quote bind_quoted: [prefix: prefix, frontend: frontend] do
|
||||
plug(Pleroma.Web.Plugs.FrontendStatic,
|
||||
at: prefix,
|
||||
frontend_type: frontend,
|
||||
gzip: true,
|
||||
cache_control_for_etags: @static_cache_control,
|
||||
headers: %{
|
||||
"cache-control" => @static_cache_control
|
||||
}
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
defmacro __using__(which) when is_atom(which) do
|
||||
apply(__MODULE__, which, [])
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue