Introduce authorizations with Rajska
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -12,6 +12,7 @@ defmodule Mobilizon.Applications do
|
||||
defenum(ApplicationDeviceActivationStatus, [
|
||||
"success",
|
||||
"pending",
|
||||
"confirmed",
|
||||
"incorrect_device_code",
|
||||
"access_denied"
|
||||
])
|
||||
@@ -144,12 +145,15 @@ defmodule Mobilizon.Applications do
|
||||
|
||||
"""
|
||||
def list_application_tokens do
|
||||
Repo.all(ApplicationToken)
|
||||
ApplicationToken
|
||||
|> Repo.all()
|
||||
|> Repo.preload(:application)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns the list of application tokens for a given user_id
|
||||
"""
|
||||
@spec list_application_tokens_for_user_id(number() | String.t()) :: list(ApplicationToken.t())
|
||||
def list_application_tokens_for_user_id(user_id) do
|
||||
ApplicationToken
|
||||
|> where(user_id: ^user_id)
|
||||
@@ -172,7 +176,11 @@ defmodule Mobilizon.Applications do
|
||||
** (Ecto.NoResultsError)
|
||||
|
||||
"""
|
||||
def get_application_token!(id), do: Repo.get!(ApplicationToken, id)
|
||||
def get_application_token!(id) do
|
||||
ApplicationToken
|
||||
|> Repo.get!(id)
|
||||
|> Repo.preload([:application])
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a single application_token.
|
||||
@@ -211,6 +219,13 @@ defmodule Mobilizon.Applications do
|
||||
%ApplicationToken{}
|
||||
|> ApplicationToken.changeset(attrs)
|
||||
|> Repo.insert(on_conflict: :replace_all, conflict_target: [:user_id, :application_id])
|
||||
|> case do
|
||||
{:ok, application_token} ->
|
||||
{:ok, Repo.preload(application_token, :application)}
|
||||
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -303,10 +318,14 @@ defmodule Mobilizon.Applications do
|
||||
|
||||
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_by_user_code(user_code) do
|
||||
ApplicationDeviceActivation
|
||||
|> where([ada], ada.user_code == ^user_code)
|
||||
|> preload(:application)
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
def get_application_device_activation(client_id, device_code) do
|
||||
def get_application_device_activation_by_device_code(client_id, device_code) do
|
||||
ApplicationDeviceActivation
|
||||
|> join(:left, [ada], a in assoc(ada, :application))
|
||||
|> where([_, a], a.client_id == ^client_id)
|
||||
|
||||
@@ -6,16 +6,16 @@ defmodule Mobilizon.Applications.Application do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@required_attrs [:name, :client_id, :client_secret, :redirect_uris]
|
||||
@optional_attrs [:scopes, :website, :owner_type, :owner_id]
|
||||
@required_attrs [:name, :client_id, :client_secret, :redirect_uris, :scope]
|
||||
@optional_attrs [:website, :owner_type, :owner_id]
|
||||
@attrs @required_attrs ++ @optional_attrs
|
||||
|
||||
schema "applications" do
|
||||
field(:name, :string)
|
||||
field(:client_id, :string)
|
||||
field(:client_secret, :string)
|
||||
field(:redirect_uris, :string)
|
||||
field(:scopes, :string)
|
||||
field(:redirect_uris, {:array, :string})
|
||||
field(:scope, :string)
|
||||
field(:website, :string)
|
||||
field(:owner_type, :string)
|
||||
field(:owner_id, :integer)
|
||||
|
||||
@@ -19,7 +19,7 @@ defmodule Mobilizon.Applications.ApplicationDeviceActivation do
|
||||
timestamps()
|
||||
end
|
||||
|
||||
@required_attrs [:user_code, :device_code, :expires_in, :application_id]
|
||||
@required_attrs [:user_code, :device_code, :expires_in, :application_id, :scope]
|
||||
@optional_attrs [:status, :user_id]
|
||||
@attrs @required_attrs ++ @optional_attrs
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ defmodule Mobilizon.Applications.ApplicationToken do
|
||||
belongs_to(:user, User)
|
||||
belongs_to(:application, Application)
|
||||
field(:authorization_code, :string)
|
||||
field(:status, ApplicationTokenStatus)
|
||||
field(:status, ApplicationTokenStatus, default: :pending)
|
||||
field(:scope, :string)
|
||||
|
||||
timestamps()
|
||||
|
||||
Reference in New Issue
Block a user