50 lines
1.3 KiB
Elixir
50 lines
1.3 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
defmodule Mix.Tasks.Pleroma.App do
|
|
@moduledoc File.read!("docs/administration/CLI_tasks/oauth_app.md")
|
|
use Mix.Task
|
|
|
|
import Mix.Pleroma
|
|
|
|
@shortdoc "Creates trusted OAuth App"
|
|
|
|
def run(["create" | options]) do
|
|
start_pleroma()
|
|
|
|
{opts, _} =
|
|
OptionParser.parse!(options,
|
|
strict: [name: :string, redirect_uri: :string, scopes: :string],
|
|
aliases: [n: :name, r: :redirect_uri, s: :scopes]
|
|
)
|
|
|
|
scopes =
|
|
if opts[:scopes] do
|
|
String.split(opts[:scopes], ",")
|
|
else
|
|
["read", "write", "follow", "push"]
|
|
end
|
|
|
|
params = %{
|
|
client_name: opts[:name],
|
|
redirect_uris: opts[:redirect_uri],
|
|
trusted: true,
|
|
scopes: scopes
|
|
}
|
|
|
|
with {:ok, app} <- Pleroma.Web.OAuth.App.create(params) do
|
|
shell_info("#{app.client_name} successfully created:")
|
|
shell_info("App client_id: " <> app.client_id)
|
|
shell_info("App client_secret: " <> app.client_secret)
|
|
else
|
|
{:error, changeset} ->
|
|
shell_error("Creating failed:")
|
|
|
|
Enum.each(Pleroma.Web.OAuth.App.errors(changeset), fn {key, error} ->
|
|
shell_error("#{key}: #{error}")
|
|
end)
|
|
end
|
|
end
|
|
end
|