defmodule Eli.Admin do @moduledoc """ Documentation for `Eli`. """ @doc """ Sign in. ## Examples iex> Eli.Admin.sign_in("user.email@domain.com", "seCr#t.passw0rd") 200 %{ "data" => %{ "token" => "JWT session token" } } 400 %{"errors" => %{"detail" => "invalid credentials"}}, """ def sign_in(email, password) do url = Eli.Config.base_url() <> "/rest/admin/sessions" options = %{ params: %{ email: email, password: password } } RESTApi.post(url, options) end @doc """ Checks whether the admin user is signed in or not. ## Examples iex> Eli.signed_in("JWT session token") :signed_in true false """ def signed_in(session_token) do url = Eli.Config.base_url() <> "/rest/admin/sessions/signed_in" options = %{ headers: [{"authorization", "Bearer #{session_token}"}] } resp = RESTApi.head(url, options) resp.status == 200 end @doc """ Returns the current user data. ## Examples iex> Eli.signed_in("JWT session token") :signed_in 200 %{ "data" => %{ "active" => true, "email" => "user@mail.com", "id" => "732cf1c2-6299-41fa-8784-e458765743b7", "language" => "en", "name" => "User Name", "timezone" => "Europe/London" } } 404 %{"errors" => %{"detail" => "Not Found"}}, """ def current_user(session_token) do url = Eli.Config.base_url() <> "/rest/admin/sessions" options = %{ headers: [{"authorization", "Bearer #{session_token}"}] } RESTApi.get(url, options) end @doc """ Refresh your token session returning a new session token. ## Examples iex> Eli.refresh("JWT session token") 200 %{ "data" => %{ "token" => "JWT session token" } } 404 %{"errors" => %{"detail" => "Not Found"}}, """ def refresh(session_token) do url = Eli.Config.base_url() <> "/rest/admin/sessions" options = %{ headers: [{"authorization", "Bearer #{session_token}"}] } RESTApi.put(url, options) end @doc """ Signs user out closing and deleting session. ## Examples iex> Eli.sign_out("JWT session token") 200 %{"data" => %{"message" => "signed out successfully"}} 404 %{"errors" => %{"detail" => "Not Found"}} """ def sign_out(session_token) do url = Eli.Config.base_url() <> "/rest/admin/sessions" options = %{ headers: [{"authorization", "Bearer #{session_token}"}] } RESTApi.delete(url, options) end @doc """ Unlocks user for making the he/she able to sign in again. ## Examples iex> Eli.unlock("Unlock token") 202 %{"data" => %{"message" => "account was successfully unlocked"}} 404 %{"errors" => %{"detail" => "Not Found"}} """ def unlock(unlock_token) do url = Eli.Config.base_url() <> "/rest/accounts/unlock" options = %{ params: %{token: unlock_token} } RESTApi.put(url, options) end @doc """ Confirms user's email. ## Examples iex> Eli.confirm("Confirmation token")` 202 %{"data" => %{"message" => "account was successfully confirmed"}} 404 %{"errors" => %{"detail" => "Not Found"}} """ def confirm(confirmation_token) do url = Eli.Config.base_url() <> "/rest/accounts/confirm" options = %{ params: %{token: confirmation_token} } RESTApi.put(url, options) end @doc """ Requests password recovery. ## Examples iex> Eli.request_password_recovery("Confirmation token") 200 %{"data" => %{"message" => "password recovery was successfully requested"}} 404 %{"errors" => %{"detail" => "Not Found"}} """ def request_password_recovery(app_token, email) do url = Eli.Config.base_url() <> "/rest/accounts/password/recover" options = %{ headers: [{"app-token", app_token}], params: %{email: email} } RESTApi.post(url, options) end @doc """ Recover password updating it. ## Examples iex> Eli.request_password_recovery("Confirmation token") 200 %{"data" => %{"message" => "password was successfully recovered"}} 400 %{"errors" => %{"detail" => "token is invalid"}} 400 %{"errors" => %{"detail" => "password has an invalid format"}} 400 %{"errors" => %{"detail" => "password and confirmation password are different"}} """ def recover_password(token, password, password_confirmation) do url = Eli.Config.base_url() <> "/rest/accounts/password/recover" options = %{ params: %{token: token, password: password, password_confirmation: password_confirmation} } RESTApi.put(url, options) end @doc """ Admin signs in any user without password. ## Examples iex> Eli.Admin.signs_in(session_token, %{email: "user.email@domain.com", name: "User Name"}, app_id) 200 %{ "data" => %{ "user" => %{ "active" => true, "email" => " ... } } 400 %{"errors" => %{"detail" => "invalid credentials"}}, """ def signs_in(session_token, user_data, app_id) do url = Eli.Config.base_url() <> "/rest/admin/sessions/signs_in" options = %{ headers: [{"authorization", "Bearer #{session_token}"}], params: %{ user_data: user_data, app_id: app_id } } RESTApi.post(url, options) end end