Support OAuth App updating the website URL
This commit is contained in:
parent
e3a7c1d906
commit
751d63d4bb
4 changed files with 49 additions and 23 deletions
|
|
@ -33,9 +33,10 @@ defmodule Pleroma.Web.MastodonAPI.AppController do
|
|||
app_attrs =
|
||||
params
|
||||
|> Map.take([:client_name, :redirect_uris, :website])
|
||||
|> Map.put(:scopes, scopes)
|
||||
|> Maps.put_if_present(:user_id, user_id)
|
||||
|
||||
with {:ok, app} <- App.get_or_make(app_attrs, scopes) do
|
||||
with {:ok, app} <- App.get_or_make(app_attrs) do
|
||||
render(conn, "show.json", app: app)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -67,35 +67,27 @@ defmodule Pleroma.Web.OAuth.App do
|
|||
with %__MODULE__{} = app <- Repo.get(__MODULE__, id) do
|
||||
app
|
||||
|> changeset(params)
|
||||
|> validate_required([:scopes])
|
||||
|> Repo.update()
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets app by attrs or create new with attrs.
|
||||
And updates the scopes if need.
|
||||
Gets app by attrs or create new with attrs.
|
||||
Updates the attrs if needed.
|
||||
"""
|
||||
@spec get_or_make(map(), list(String.t())) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
|
||||
def get_or_make(attrs, scopes) do
|
||||
with %__MODULE__{} = app <- Repo.get_by(__MODULE__, attrs) do
|
||||
update_scopes(app, scopes)
|
||||
@spec get_or_make(map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
|
||||
def get_or_make(attrs) do
|
||||
with %__MODULE__{} = app <- Repo.get_by(__MODULE__, client_name: attrs.client_name) do
|
||||
__MODULE__.update(app.id, Map.take(attrs, [:scopes, :website]))
|
||||
else
|
||||
_e ->
|
||||
%__MODULE__{}
|
||||
|> register_changeset(Map.put(attrs, :scopes, scopes))
|
||||
|> register_changeset(attrs)
|
||||
|> Repo.insert()
|
||||
end
|
||||
end
|
||||
|
||||
defp update_scopes(%__MODULE__{} = app, []), do: {:ok, app}
|
||||
defp update_scopes(%__MODULE__{scopes: scopes} = app, scopes), do: {:ok, app}
|
||||
|
||||
defp update_scopes(%__MODULE__{} = app, scopes) do
|
||||
app
|
||||
|> change(%{scopes: scopes})
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
@spec search(map()) :: {:ok, [t()], non_neg_integer()}
|
||||
def search(params) do
|
||||
query = from(a in __MODULE__)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue