-
-
Notifications
You must be signed in to change notification settings - Fork 152
/
controller_callbacks.ex
33 lines (28 loc) · 1 KB
/
controller_callbacks.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
defmodule Pow.Extension.Phoenix.ControllerCallbacks do
@moduledoc """
Module that adds controller callbacks for extensions.
It'll automatically trigger all extension callbacks.
## Usage
use Pow.Plug.Session,
controller_callbacks: Pow.Extension.Phoenix.ControllerCallbacks,
extensions: [PowExtensionA, PowExtensionB]
"""
alias Pow.{Config, Extension}
for hook <- [:before_process, :before_respond] do
@doc false
@spec unquote(hook)(atom(), atom(), any(), Config.t()) :: any()
def unquote(hook)(controller, action, results, config) do
config
|> controller_callbacks_modules()
|> Enum.reduce(results, fn
_extension, {:halt, conn} -> {:halt, conn}
extension, results -> extension.unquote(hook)(controller, action, results, config)
end)
end
end
defp controller_callbacks_modules(config) do
config
|> Extension.Config.extensions()
|> Extension.Config.extension_modules(["Phoenix", "ControllerCallbacks"])
end
end