# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 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