Current section

Files

Jump to
yodlee lib yodlee.ex
Raw

lib/yodlee.ex

defmodule Yodlee do
use Application
require Logger
@request_handler Application.get_env(:yodlee, :request_handler) || Yodlee.Handler
@default_cobrand_name Application.get_env(:yodlee, :default_cobrand_name) || "restserver"
def start do
@request_handler.start
Yodlee.Supervisor.start_link
end
def start(_type, _process) do
start
end
def default_cobrand_name do
@default_cobrand_name
end
def throw_on_fail(x) do
case x.() do
{:ok, result} -> result
{:error, err} -> raise "Error! - #{Poison.encode!(err)}"
end
end
def as_cob(cob_username, cob_password, x) do
%{"session" => %{
"cobSession" => tok}
} = case Yodlee.Cobrand.login(cob_username, cob_password) do
{:ok, resp} -> resp
err ->
IO.inspect err
err
end
try do
case x.(tok) do
{:ok, res} -> {:ok, res}
{:error, e} -> {:error, e}
y -> {:ok, y}
end
rescue e ->
{:error, e}
end
end
def as_cob!(cob_username, cob_password, x) do
throw_on_fail fn ->
as_cob(cob_username, cob_password, x)
end
end
def as_cob_and_user(cob_username, cob_password, username, password, x) do
%{"session" => %{ "cobSession" => tok}}
= Yodlee.Cobrand.login! cob_username, cob_password
%{"user" => %{
"session" => %{ "userSession" => user_tok }
}} = Yodlee.User.login! tok, username, password
try do
case x.({tok, user_tok}) do
{:ok, res} -> {:ok, res}
{:error, e} -> {:error, e}
y -> {:ok, y}
end
rescue e ->
{:error, e}
end
end
def as_cob_and_user!(cob_username, cob_password, username, password, x) do
throw_on_fail fn ->
as_cob_and_user(cob_username, cob_password, username, password, x)
end
end
def make_request(method, endpoint, body \\ [], headers \\ [], options \\ [], request_mode \\ :form) do
case method do
"get" ->
complete_endpoint = "#{endpoint}?#{URI.encode_query(body)}"
@request_handler.make_request(method, complete_endpoint, %{}, headers, options, request_mode)
_ ->
@request_handler.make_request(method, endpoint, body, headers, options, request_mode)
end
end
def make_authenticated_request(creds, method, endpoint, body \\ [], headers \\ [], options \\ [], request_mode \\ :form) do
auth_token = case creds do
{cob, usr} -> "{cobSession=#{cob}, userSession=#{usr}}"
cob -> "{cobSession=#{cob}}"
end
complete_headers = List.flatten(headers, [
"Authorization": auth_token
])
make_request(method, endpoint, body, complete_headers, options, request_mode)
end
end
Yodlee.start