@@ -4,10 +4,24 @@ defmodule Mobilizon.Applications do
|
||||
"""
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
import EctoEnum
|
||||
alias Ecto.Multi
|
||||
alias Mobilizon.Applications.Application
|
||||
alias Mobilizon.Storage.Repo
|
||||
|
||||
defenum(ApplicationDeviceActivationStatus, [
|
||||
"success",
|
||||
"pending",
|
||||
"incorrect_device_code",
|
||||
"access_denied"
|
||||
])
|
||||
|
||||
defenum(ApplicationTokenStatus, [
|
||||
"success",
|
||||
"pending",
|
||||
"access_denied"
|
||||
])
|
||||
|
||||
@doc """
|
||||
Returns the list of applications.
|
||||
|
||||
@@ -255,4 +269,129 @@ defmodule Mobilizon.Applications do
|
||||
def change_application_token(%ApplicationToken{} = application_token, attrs \\ %{}) do
|
||||
ApplicationToken.changeset(application_token, attrs)
|
||||
end
|
||||
|
||||
alias Mobilizon.Applications.ApplicationDeviceActivation
|
||||
|
||||
@doc """
|
||||
Returns the list of application_device_activation.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> list_application_device_activation()
|
||||
[%ApplicationDeviceActivation{}, ...]
|
||||
|
||||
"""
|
||||
def list_application_device_activation do
|
||||
Repo.all(ApplicationDeviceActivation)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a single application_device_activation.
|
||||
|
||||
Raises `Ecto.NoResultsError` if the Application device activation does not exist.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> get_application_device_activation!(123)
|
||||
%ApplicationDeviceActivation{}
|
||||
|
||||
iex> get_application_device_activation!(456)
|
||||
** (Ecto.NoResultsError)
|
||||
|
||||
"""
|
||||
def get_application_device_activation!(id), do: Repo.get!(ApplicationDeviceActivation, id)
|
||||
|
||||
def get_application_device_activation(id), do: Repo.get(ApplicationDeviceActivation, id)
|
||||
|
||||
def get_application_device_activation_by_user_code(user_code),
|
||||
do: Repo.get_by(ApplicationDeviceActivation, user_code: user_code)
|
||||
|
||||
def get_application_device_activation(client_id, device_code) do
|
||||
ApplicationDeviceActivation
|
||||
|> join(:left, [ada], a in assoc(ada, :application))
|
||||
|> where([_, a], a.client_id == ^client_id)
|
||||
|> where([ada], ada.device_code == ^device_code)
|
||||
|> select([ada], ada)
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates a application_device_activation.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> create_application_device_activation(%{field: value})
|
||||
{:ok, %ApplicationDeviceActivation{}}
|
||||
|
||||
iex> create_application_device_activation(%{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def create_application_device_activation(attrs \\ %{}) do
|
||||
%ApplicationDeviceActivation{}
|
||||
|> ApplicationDeviceActivation.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Updates a application_device_activation.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> update_application_device_activation(application_device_activation, %{field: new_value})
|
||||
{:ok, %ApplicationDeviceActivation{}}
|
||||
|
||||
iex> update_application_device_activation(application_device_activation, %{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def update_application_device_activation(
|
||||
%ApplicationDeviceActivation{} = application_device_activation,
|
||||
attrs
|
||||
) do
|
||||
application_device_activation
|
||||
|> ApplicationDeviceActivation.changeset(attrs)
|
||||
|> Repo.update()
|
||||
|> case do
|
||||
{:ok, application_device_activation} ->
|
||||
{:ok, Repo.preload(application_device_activation, :application)}
|
||||
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deletes a application_device_activation.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> delete_application_device_activation(application_device_activation)
|
||||
{:ok, %ApplicationDeviceActivation{}}
|
||||
|
||||
iex> delete_application_device_activation(application_device_activation)
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def delete_application_device_activation(
|
||||
%ApplicationDeviceActivation{} = application_device_activation
|
||||
) do
|
||||
Repo.delete(application_device_activation)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns an `%Ecto.Changeset{}` for tracking application_device_activation changes.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> change_application_device_activation(application_device_activation)
|
||||
%Ecto.Changeset{data: %ApplicationDeviceActivation{}}
|
||||
|
||||
"""
|
||||
def change_application_device_activation(
|
||||
%ApplicationDeviceActivation{} = application_device_activation,
|
||||
attrs \\ %{}
|
||||
) do
|
||||
ApplicationDeviceActivation.changeset(application_device_activation, attrs)
|
||||
end
|
||||
end
|
||||
|
||||
32
lib/mobilizon/applications/application_device_activation.ex
Normal file
32
lib/mobilizon/applications/application_device_activation.ex
Normal file
@@ -0,0 +1,32 @@
|
||||
defmodule Mobilizon.Applications.ApplicationDeviceActivation do
|
||||
@moduledoc """
|
||||
Module representing a application device activation
|
||||
"""
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Mobilizon.Applications.{Application, ApplicationDeviceActivationStatus}
|
||||
alias Mobilizon.Users.User
|
||||
|
||||
schema "application_device_activation" do
|
||||
field(:user_code, :string)
|
||||
field(:device_code, :string)
|
||||
field(:scope, :string)
|
||||
field(:expires_in, :integer)
|
||||
field(:status, ApplicationDeviceActivationStatus, default: :pending)
|
||||
belongs_to(:user, User)
|
||||
belongs_to(:application, Application)
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
@required_attrs [:user_code, :device_code, :expires_in, :application_id]
|
||||
@optional_attrs [:status, :user_id]
|
||||
@attrs @required_attrs ++ @optional_attrs
|
||||
|
||||
@doc false
|
||||
def changeset(application_device_activation, attrs) do
|
||||
application_device_activation
|
||||
|> cast(attrs, @attrs)
|
||||
|> validate_required(@required_attrs)
|
||||
end
|
||||
end
|
||||
@@ -4,16 +4,20 @@ defmodule Mobilizon.Applications.ApplicationToken do
|
||||
"""
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Mobilizon.Applications.{Application, ApplicationTokenStatus}
|
||||
alias Mobilizon.Users.User
|
||||
|
||||
schema "application_tokens" do
|
||||
belongs_to(:user, Mobilizon.Users.User)
|
||||
belongs_to(:application, Mobilizon.Applications.Application)
|
||||
belongs_to(:user, User)
|
||||
belongs_to(:application, Application)
|
||||
field(:authorization_code, :string)
|
||||
field(:status, ApplicationTokenStatus)
|
||||
field(:scope, :string)
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
@required_attrs [:user_id, :application_id]
|
||||
@required_attrs [:user_id, :application_id, :scope]
|
||||
@optional_attrs [:authorization_code]
|
||||
@attrs @required_attrs ++ @optional_attrs
|
||||
|
||||
|
||||
Reference in New Issue
Block a user