Current section

Files

Jump to
oauth2ex lib oauth2ex token.ex
Raw

lib/oauth2ex/token.ex

defmodule OAuth2Ex.Token do
@moduledoc """
Provides token stucture and operational methods.
"""
defstruct access_token: nil, expires_in: nil, refresh_token: nil, token_type: nil, expires_at: nil,
auth_header: "Bearer", storage: nil, config: nil
@doc """
Set storage information to the Token struct.
"""
def storage(token, storage) do
%{token | storage: storage}
end
@doc """
Save token to the location specified by the module defined as :storage key.
"""
def save(token) do
if storage = token.storage do
token = storage.module.save(token, storage)
OAuth2Ex.Token.Cache.set(token)
{:ok, token}
else
{:error, token}
end
end
@doc """
Save token to the location specified by the module defined as :storage key.
"""
def save!(token) do
case save(token) do
{:ok, token} ->
token
{:error, token} ->
raise %OAuth2Ex.Error{message: "Failed to save token. Token.storage = #{inspect token.stoage}"}
end
end
@doc """
Load token from the location specified by the module defined as :storage key.
"""
def load(storage) do
if token = OAuth2Ex.Token.Cache.get do
token
else
token = storage.module.load(storage)
OAuth2Ex.Token.Cache.set(token)
token
end
end
@doc """
Initiate OAuth 2.0 token retrieval processing.
"""
def browse_and_retrieve(config, options \\ []) do
if config.client_options do
options = Keyword.merge(config.client_options, options)
end
OAuth2Ex.Token.Retriever.run(config, options)
end
@doc """
Initiate OAuth 2.0 token retrieval processing.
"""
def browse_and_retrieve!(config, options \\ []) do
case browse_and_retrieve(config, options) do
{:error, message} ->
raise %OAuth2Ex.Error{message: message}
{:ok, token} ->
token
end
end
@doc """
Merge json objects into struct.
"""
def merge_into_struct(json, struct) do
keys = Map.keys(struct)
Enum.reduce(keys, struct, fn(key, acc) ->
atom_key = Atom.to_string(key)
if atom_key != "__struct__" and Map.has_key?(json, atom_key) do
Map.put(acc, key, Map.fetch!(json, atom_key))
else
acc
end
end)
end
end