Current section
Files
Jump to
Current section
Files
lib/oauth2/manager.ex
defmodule OAuth2Cli.Manager do
use GenServer
alias OAuth2Cli.Strategy
@name OAuth2Cli.Manager
def start_link, do:
GenServer.start_link(__MODULE__, [], name: @name)
def register({name, params}), do:
GenServer.call(@name, {:register, name, params})
def register({name, params, discovery}) when is_atom(name), do:
GenServer.call(@name, {:register, name, params, discovery})
def register(params), do:
register({:default, params})
def strategy_list(), do:
GenServer.call(@name, {:strategy_list})
def get_strategy(name) when is_atom(name), do:
GenServer.call(@name, {:get_strategy, name})
#
# GenServer Callbacks
#
def init([]), do: {:ok, %{strategies: HashDict.new}}
def handle_call({:register, name, params}, _from, state) do
case Strategy.Simple.new(params) do
{:ok, strategy} ->
{:reply, :ok, %{state | strategies: Dict.put(state.strategies, name, strategy)}}
_error ->
{:reply, :error, state}
end
end
def handle_call({:register, name, params, discovery}, _from, state) do
case Strategy.Verified.new(params, discovery) do
{:ok, strategy} ->
{:reply, :ok, %{state | strategies: Dict.put(state.strategies, name, strategy)}}
_error ->
{:reply, :error, state}
end
end
def handle_call({:get_strategy, name}, _from, state) do
try do
{:reply, {:ok, state.strategies[name]}, state}
rescue
_error -> {:reply, {:error, :strategy_not_found}, state}
end
end
def handle_call({:strategy_list}, _from, state) do
{:reply, Dict.keys(state.strategies), state}
end
end