summaryrefslogtreecommitdiff
path: root/lib/mix/tasks/pleroma/app.ex
blob: 885d071bc75281ae70f2b844cc809f59917f251c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 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