49 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # 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/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
 |