update
This commit is contained in:
parent
e2967f68b2
commit
ef2a6c41b4
39 changed files with 2349 additions and 30 deletions
132
lib/zoeyscomputer/api_keys.ex
Normal file
132
lib/zoeyscomputer/api_keys.ex
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
defmodule Zoeyscomputer.ApiKeys do
|
||||
@moduledoc """
|
||||
The ApiKeys context.
|
||||
"""
|
||||
require Logger
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
alias Hex.API.User
|
||||
alias Zoeyscomputer.ApiKeys.ApiKey
|
||||
alias Zoeyscomputer.Repo
|
||||
alias Zoeyscomputer.Users.User
|
||||
|
||||
alias Zoeyscomputer.ApiKeys.ApiKey
|
||||
|
||||
@doc """
|
||||
Returns the list of api_keys.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> list_api_keys()
|
||||
[%ApiKey{}, ...]
|
||||
|
||||
"""
|
||||
def list_api_keys do
|
||||
Repo.all(ApiKey)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a single api_key.
|
||||
|
||||
Raises `Ecto.NoResultsError` if the Api key does not exist.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> get_api_key!(123)
|
||||
%ApiKey{}
|
||||
|
||||
iex> get_api_key!(456)
|
||||
** (Ecto.NoResultsError)
|
||||
|
||||
"""
|
||||
def get_api_key!(id), do: Repo.get!(ApiKey, id)
|
||||
|
||||
@doc """
|
||||
Gets an API key by its token
|
||||
"""
|
||||
def get_api_key_by_token(token) do
|
||||
Repo.get_by(ApiKey, token: token)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates an API key for a user.
|
||||
"""
|
||||
def create_api_key(user, attrs \\ %{}) do
|
||||
# Convert attrs to string keys and add user_id with string key
|
||||
attrs = Map.put(attrs, "user_id", user.id)
|
||||
|
||||
result =
|
||||
%ApiKey{}
|
||||
|> ApiKey.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
@doc """
|
||||
Updates a api_key.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> update_api_key(api_key, %{field: new_value})
|
||||
{:ok, %ApiKey{}}
|
||||
|
||||
iex> update_api_key(api_key, %{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def update_api_key(%ApiKey{} = api_key, attrs) do
|
||||
api_key
|
||||
|> ApiKey.changeset(attrs)
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
@doc """
|
||||
List all API Keys for a given user
|
||||
"""
|
||||
def list_api_keys(%User{} = user) do
|
||||
ApiKey
|
||||
|> where([a], a.user_id == ^user.id)
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deletes a api_key.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> delete_api_key(api_key)
|
||||
{:ok, %ApiKey{}}
|
||||
|
||||
iex> delete_api_key(api_key)
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def delete_api_key(%ApiKey{} = api_key) do
|
||||
Repo.delete(api_key)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns an `%Ecto.Changeset{}` for tracking api_key changes.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> change_api_key(api_key)
|
||||
%Ecto.Changeset{data: %ApiKey{}}
|
||||
|
||||
"""
|
||||
def change_api_key(%ApiKey{} = api_key, attrs \\ %{}) do
|
||||
ApiKey.changeset(api_key, attrs)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Validates an API key token and returns associated user.
|
||||
Returns nil if token is invalid
|
||||
"""
|
||||
def authenticate_api_key(token) when is_binary(token) do
|
||||
case get_api_key_by_token(token) do
|
||||
%ApiKey{} = key -> Repo.preload(key, :user).user
|
||||
nil -> nil
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue