defmodule Boruta.Oauth.TokenResponse do
@moduledoc """
Token response
"""
@enforce_keys [:access_token, :expires_in]
defstruct token_type: "bearer",
access_token: nil,
expires_in: nil,
refresh_token: nil,
id_token: nil
@type t :: %__MODULE__{
token_type: String.t(),
access_token: String.t() | nil,
id_token: String.t() | nil,
expires_in: integer() | nil,
refresh_token: String.t() | nil
}
alias Boruta.Oauth.Token
alias Boruta.Oauth.TokenResponse
@spec from_token(%{
(type :: :token | :id_token) => token :: Boruta.Oauth.Token.t() | String.t()
}) :: t()
def from_token(
%{
token: %Token{
value: value,
expires_at: expires_at,
refresh_token: refresh_token
}
} = params
) do
{:ok, expires_at} = DateTime.from_unix(expires_at)
expires_in = DateTime.diff(expires_at, DateTime.utc_now())
%TokenResponse{
access_token: value,
token_type: "bearer",
expires_in: expires_in,
refresh_token: refresh_token,
id_token: params[:id_token] && params[:id_token].value
}
end
end