mirror of
https://github.com/teslamate-org/teslamate.git
synced 2026-01-24 21:06:08 +08:00
32 lines
1.1 KiB
Elixir
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
|