parent
d74405fc1a
commit
a6ee6784bc
@ -0,0 +1,16 @@
|
|||||||
|
# Creating trusted OAuth App
|
||||||
|
|
||||||
|
{! backend/administration/CLI_tasks/general_cli_task_info.include !}
|
||||||
|
|
||||||
|
## Create trusted OAuth App.
|
||||||
|
|
||||||
|
Optional params:
|
||||||
|
* `-s SCOPES` - scopes for app, e.g. `read,write,follow,push`.
|
||||||
|
|
||||||
|
```sh tab="OTP"
|
||||||
|
./bin/pleroma_ctl app create -n APP_NAME -r REDIRECT_URI
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh tab="From Source"
|
||||||
|
mix pleroma.app create -n APP_NAME -r REDIRECT_URI
|
||||||
|
```
|
@ -0,0 +1,49 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2020 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
|
@ -0,0 +1,9 @@
|
|||||||
|
defmodule Pleroma.Repo.Migrations.AddTrustedToApps do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
alter table(:apps) do
|
||||||
|
add(:trusted, :boolean, default: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,65 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Mix.Tasks.Pleroma.AppTest do
|
||||||
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
|
setup_all do
|
||||||
|
Mix.shell(Mix.Shell.Process)
|
||||||
|
|
||||||
|
on_exit(fn ->
|
||||||
|
Mix.shell(Mix.Shell.IO)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "creates new app" do
|
||||||
|
test "with default scopes" do
|
||||||
|
name = "Some name"
|
||||||
|
redirect = "https://example.com"
|
||||||
|
Mix.Tasks.Pleroma.App.run(["create", "-n", name, "-r", redirect])
|
||||||
|
|
||||||
|
assert_app(name, redirect, ["read", "write", "follow", "push"])
|
||||||
|
end
|
||||||
|
|
||||||
|
test "with custom scopes" do
|
||||||
|
name = "Another name"
|
||||||
|
redirect = "https://example.com"
|
||||||
|
|
||||||
|
Mix.Tasks.Pleroma.App.run([
|
||||||
|
"create",
|
||||||
|
"-n",
|
||||||
|
name,
|
||||||
|
"-r",
|
||||||
|
redirect,
|
||||||
|
"-s",
|
||||||
|
"read,write,follow,push,admin"
|
||||||
|
])
|
||||||
|
|
||||||
|
assert_app(name, redirect, ["read", "write", "follow", "push", "admin"])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "with errors" do
|
||||||
|
Mix.Tasks.Pleroma.App.run(["create"])
|
||||||
|
{:mix_shell, :error, ["Creating failed:"]}
|
||||||
|
{:mix_shell, :error, ["name: can't be blank"]}
|
||||||
|
{:mix_shell, :error, ["redirect_uris: can't be blank"]}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp assert_app(name, redirect, scopes) do
|
||||||
|
app = Repo.get_by(Pleroma.Web.OAuth.App, client_name: name)
|
||||||
|
|
||||||
|
assert_received {:mix_shell, :info, [message]}
|
||||||
|
assert message == "#{name} successfully created:"
|
||||||
|
|
||||||
|
assert_received {:mix_shell, :info, [message]}
|
||||||
|
assert message == "App client_id: #{app.client_id}"
|
||||||
|
|
||||||
|
assert_received {:mix_shell, :info, [message]}
|
||||||
|
assert message == "App client_secret: #{app.client_secret}"
|
||||||
|
|
||||||
|
assert app.scopes == scopes
|
||||||
|
assert app.redirect_uris == redirect
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in new issue