diff options
author | Ivan Tashkinov <ivantashkinov@gmail.com> | 2020-04-30 18:19:51 +0300 |
---|---|---|
committer | Ivan Tashkinov <ivantashkinov@gmail.com> | 2020-04-30 18:19:51 +0300 |
commit | 2c4844237f294d27f58737f9694f77b1cfcb10e7 (patch) | |
tree | e6c3b4eef691c5559ed32676bc9e3a955649990d /lib/pleroma/web/web.ex | |
parent | 4c4344b7b17a2ddb1c597b059e0a7dcc043e02b2 (diff) | |
download | pleroma-2c4844237f294d27f58737f9694f77b1cfcb10e7.tar.gz |
Refactoring of :if_func / :unless_func plug options (general availability). Added tests for Pleroma.Web.Plug.
Diffstat (limited to 'lib/pleroma/web/web.ex')
-rw-r--r-- | lib/pleroma/web/web.ex | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index 08e42a7e5..4f9281851 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -200,11 +200,17 @@ defmodule Pleroma.Web do @impl Plug @doc """ - If marked as skipped, returns `conn`, otherwise calls `perform/2`. + Before-plug hook that + * ensures the plug is not skipped + * processes `:if_func` / `:unless_func` functional pre-run conditions + * adds plug to the list of called plugs and calls `perform/2` if checks are passed + Note: multiple invocations of the same plug (with different or same options) are allowed. """ def call(%Plug.Conn{} = conn, options) do - if PlugHelper.plug_skipped?(conn, __MODULE__) do + if PlugHelper.plug_skipped?(conn, __MODULE__) || + (options[:if_func] && !options[:if_func].(conn)) || + (options[:unless_func] && options[:unless_func].(conn)) do conn else conn = |