defmodule SimpleOAuth do
@supported_provider_adapters %{
# %{provider => {adapter, module}}
"google" => {:google, SimpleOAuth.Google},
"wechat_app" => {:wechat_app, SimpleOAuth.Wechat},
"wechat_web" => {:wechat_web, SimpleOAuth.Wechat},
"qq" => {:qq, SimpleOAuth.QQ},
"sgm" => {:sgm, SimpleOAuth.SGM}
}
@supported_providers Map.keys(@supported_provider_adapters)
def config!(adapter_name) when is_atom(adapter_name) do
Application.fetch_env!(:simple_oauth, adapter_name)
end
def get_user_info(provider, code, config \\ nil)
when provider in @supported_providers and is_binary(code) do
{adapter, module} = @supported_provider_adapters[provider]
config = config || config!(adapter)
module.get_user_info(code, config)
end
end