Packages
pow
1.0.39
1.0.39
1.0.38
1.0.37
1.0.36
1.0.35
1.0.34
1.0.33
1.0.32
1.0.31
1.0.30
1.0.29
1.0.28
1.0.27
1.0.26
1.0.25
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.1.0-rc.1
0.1.0-alpha.8
0.1.0-alpha.7
retired
0.1.0-alpha.6
0.1.0-alpha.5
0.1.0-alpha.4
0.1.0-alpha.3
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha
Robust user authentication solution
Current section
Files
Jump to
Current section
Files
lib/mix/pow/phoenix.ex
defmodule Mix.Pow.Phoenix do
@moduledoc """
Utilities module for mix phoenix tasks.
"""
alias Mix.Generator
alias Mix.Pow
@doc """
Builds a map containing context and web module information.
"""
@spec parse_structure(map()) :: map()
def parse_structure(config) do
otp_app = Pow.otp_app()
context_app = Map.get(config, :context_app) || context_app(otp_app)
context_base = Pow.app_base(context_app)
web_base = web_base(context_app, otp_app, context_base)
web_prefix = web_prefix(context_app, otp_app)
%{
context_app: context_app,
context_base: context_base,
web_app: otp_app,
web_module: web_base,
web_prefix: web_prefix
}
end
defp context_app(otp_app) do
otp_app
|> Application.get_env(:generators, [])
|> Keyword.get(:context_app)
|> case do
nil -> otp_app
false -> Mix.raise("No context_app configured for current application")
{app, _path} -> app
app -> app
end
end
defp web_base(this_app, this_app, context_base), do: Module.concat(["#{context_base}Web"])
defp web_base(_this_app, web_app, _context_base), do: Pow.app_base(web_app)
defp web_prefix(this_app, this_app), do: Path.join("lib", "#{this_app}_web")
defp web_prefix(_context_app, this_app), do: Path.join("lib", "#{this_app}")
@doc """
Creates a HTML template file for the web module.
"""
@spec create_template_module(atom(), binary(), atom(), binary()) :: :ok
def create_template_module(module, name, web_mod, web_prefix) do
path = Path.join([web_prefix, "controllers", Macro.underscore(module), "#{name}_html.ex"])
content = """
defmodule #{inspect(web_mod)}.#{inspect(module)}.#{Macro.camelize(name)}HTML do
use #{inspect(web_mod)}, :html
embed_templates "#{name}_html/*"
end
"""
Generator.create_file(path, content)
:ok
end
@doc """
Creates templates for the web module.
"""
@spec create_templates(atom(), binary(), binary(), [binary()]) :: :ok
def create_templates(module, name, web_prefix, actions) do
template_module = Module.concat([module, Phoenix, "#{Macro.camelize(name)}HTML"])
path = Path.join([web_prefix, "controllers", Macro.underscore(module), "#{name}_html"])
actions
|> Enum.map(&String.to_atom/1)
|> Enum.each(fn action ->
content = template_module.html(action)
file_path = Path.join(path, "#{action}.html.heex")
Generator.create_file(file_path, content)
end)
end
end