Files
archived-teslamate/lib/tesla_api/auth.ex
2021-08-30 16:16:21 +02:00

32 lines
1.1 KiB
Elixir

defmodule TeslaApi.Auth do
use Tesla
@web_client_id "ownerapi"
@redirect_uri "https://auth.tesla.com/void/callback"
def web_client_id, do: @web_client_id
def redirect_uri, do: @redirect_uri
@default_headers [
{"user-agent", "TeslaMate/#{Mix.Project.config()[:version]}"},
{"Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"},
{"Accept-Language", "en-US,de-DE;q=0.5"}
]
adapter Tesla.Adapter.Finch, name: TeslaMate.HTTP, receive_timeout: 60_000
plug TeslaApi.Middleware.FollowRedirects, except: [@redirect_uri]
plug Tesla.Middleware.BaseUrl, "https://auth.tesla.com"
plug Tesla.Middleware.Headers, @default_headers
plug Tesla.Middleware.JSON
plug Tesla.Middleware.Logger, debug: true, log_level: &log_level/1
defstruct [:token, :type, :expires_in, :refresh_token, :created_at]
defdelegate login(email, password), to: __MODULE__.Login
defdelegate refresh(auth), to: __MODULE__.Refresh
defp log_level(%Tesla.Env{} = env) when env.status >= 400, do: :error
defp log_level(%Tesla.Env{}), do: :info
end