mirror of
https://github.com/teslamate-org/teslamate.git
synced 2026-01-24 21:06:08 +08:00
64 lines
1.2 KiB
Elixir
64 lines
1.2 KiB
Elixir
defmodule TeslaMate.Auth do
|
|
@moduledoc """
|
|
The Auth context.
|
|
"""
|
|
|
|
import Ecto.Query, warn: false
|
|
alias TeslaMate.Repo
|
|
|
|
### Credentials
|
|
|
|
alias TeslaMate.Auth.Credentials
|
|
|
|
def change_credentials(attrs \\ %{}) do
|
|
%Credentials{} |> Credentials.changeset(attrs)
|
|
end
|
|
|
|
### Tokens
|
|
|
|
alias TeslaMate.Auth.Tokens
|
|
|
|
def get_tokens do
|
|
case Repo.all(Tokens) do
|
|
[tokens] ->
|
|
tokens
|
|
|
|
[_ | _] = tokens ->
|
|
raise """
|
|
Found #{length(tokens)} token pairs!
|
|
|
|
Make sure that there is no more than ONE token pair in the table 'tokens'.
|
|
"""
|
|
|
|
[] ->
|
|
nil
|
|
end
|
|
end
|
|
|
|
def save(%{token: access, refresh_token: refresh}) do
|
|
attrs = %{access: access, refresh: refresh}
|
|
|
|
maybe_created_or_updated =
|
|
case get_tokens() do
|
|
nil -> create_tokens(attrs)
|
|
tokens -> update_tokens(tokens, attrs)
|
|
end
|
|
|
|
with {:ok, _tokens} <- maybe_created_or_updated do
|
|
:ok
|
|
end
|
|
end
|
|
|
|
defp create_tokens(attrs) do
|
|
%Tokens{}
|
|
|> Tokens.changeset(attrs)
|
|
|> Repo.insert()
|
|
end
|
|
|
|
defp update_tokens(%Tokens{} = tokens, attrs) do
|
|
tokens
|
|
|> Tokens.changeset(attrs)
|
|
|> Repo.update()
|
|
end
|
|
end
|