2008-10-12 13:53:25 +02:00
|
|
|
%%%----------------------------------------------------------------------
|
|
|
|
%%%
|
2024-01-22 16:40:01 +01:00
|
|
|
%%% ejabberd, Copyright (C) 2002-2024 ProcessOne
|
2008-10-12 13:53:25 +02:00
|
|
|
%%%
|
|
|
|
%%% This program is free software; you can redistribute it and/or
|
|
|
|
%%% modify it under the terms of the GNU General Public License as
|
|
|
|
%%% published by the Free Software Foundation; either version 2 of the
|
|
|
|
%%% License, or (at your option) any later version.
|
|
|
|
%%%
|
|
|
|
%%% This program is distributed in the hope that it will be useful,
|
|
|
|
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
%%% General Public License for more details.
|
|
|
|
%%%
|
2014-02-22 11:27:40 +01:00
|
|
|
%%% You should have received a copy of the GNU General Public License along
|
|
|
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
2008-10-12 13:53:25 +02:00
|
|
|
%%%
|
|
|
|
%%%----------------------------------------------------------------------
|
|
|
|
|
2013-03-14 10:33:02 +01:00
|
|
|
-type aterm() :: {atom(), atype()}.
|
2024-05-28 18:36:01 +02:00
|
|
|
-type atype() :: integer | string | binary | any | atom |
|
2013-03-14 10:33:02 +01:00
|
|
|
{tuple, [aterm()]} | {list, aterm()}.
|
|
|
|
-type rterm() :: {atom(), rtype()}.
|
2024-05-28 18:36:01 +02:00
|
|
|
-type rtype() :: integer | string | atom | any |
|
2013-03-14 10:33:02 +01:00
|
|
|
{tuple, [rterm()]} | {list, rterm()} |
|
|
|
|
rescode | restuple.
|
|
|
|
|
2024-05-28 18:36:01 +02:00
|
|
|
%% The 'any' and 'atom' argument types and 'any' result type
|
|
|
|
%% should only be used %% by commands with tag 'internal',
|
|
|
|
%% which are meant to be used only internally in ejabberd,
|
|
|
|
%% and not called using external frontends.
|
|
|
|
|
2024-05-10 17:21:43 +02:00
|
|
|
%% The purpose of a command can either be:
|
|
|
|
%% - informative: its purpose is to obtain information
|
|
|
|
%% - modifier: its purpose is to produce some change in the server
|
|
|
|
%%
|
|
|
|
%% A modifier command should be designed just to produce its desired side-effect,
|
|
|
|
%% and its result term should just be success or failure: rescode or restuple.
|
|
|
|
%%
|
|
|
|
%% ejabberd_web_admin:make_command/2 considers that commands
|
|
|
|
%% with result type different than rescode or restuple
|
|
|
|
%% are commands that can be safely executed automatically
|
|
|
|
%% to get information and build the web page.
|
|
|
|
|
2016-07-19 04:27:49 +02:00
|
|
|
-type oauth_scope() :: atom().
|
|
|
|
|
2016-07-25 11:43:49 +02:00
|
|
|
%% ejabberd_commands OAuth ReST ACL definition:
|
|
|
|
%% Two fields exist that are used to control access on a command from ReST API:
|
|
|
|
%% 1. Policy
|
|
|
|
%% If policy is:
|
|
|
|
%% - restricted: command is not exposed as OAuth Rest API.
|
|
|
|
%% - admin: Command is allowed for user that have Admin Rest command enabled by access rule: commands_admin_access
|
|
|
|
%% - user: Command might be called by any server user.
|
|
|
|
%% - open: Command can be called by anyone.
|
|
|
|
%%
|
|
|
|
%% Policy is just used to control who can call the command. A specific additional access rules can be performed, as
|
|
|
|
%% defined by access option.
|
|
|
|
%% Access option can be a list of:
|
|
|
|
%% - {Module, accessName, DefaultValue}: Reference and existing module access to limit who can use the command.
|
|
|
|
%% - AccessRule name: direct name of the access rule to check in config file.
|
|
|
|
%% TODO: Access option could be atom command (not a list). In the case, User performing the command, will be added as first parameter
|
|
|
|
%% to command, so that the command can perform additional check.
|
|
|
|
|
2013-03-14 10:33:02 +01:00
|
|
|
-record(ejabberd_commands,
|
2016-11-15 14:18:34 +01:00
|
|
|
{name :: atom(),
|
2013-03-14 10:33:02 +01:00
|
|
|
tags = [] :: [atom()] | '_' | '$2',
|
|
|
|
desc = "" :: string() | '_' | '$3',
|
|
|
|
longdesc = "" :: string() | '_',
|
2016-11-15 14:18:34 +01:00
|
|
|
version = 0 :: integer(),
|
2021-05-05 11:41:06 +02:00
|
|
|
note = "" :: string(),
|
2016-11-15 14:18:34 +01:00
|
|
|
weight = 1 :: integer(),
|
|
|
|
module :: atom() | '_',
|
2016-03-31 13:53:31 +02:00
|
|
|
function :: atom() | '_',
|
2013-03-14 10:33:02 +01:00
|
|
|
args = [] :: [aterm()] | '_' | '$1' | '$2',
|
2015-09-25 14:53:25 +02:00
|
|
|
policy = restricted :: open | restricted | admin | user,
|
2016-07-25 11:43:49 +02:00
|
|
|
%% access is: [accessRuleName] or [{Module, AccessOption, DefaultAccessRuleName}]
|
|
|
|
access = [] :: [{atom(),atom(),atom()}|atom()],
|
2021-07-29 23:13:17 +02:00
|
|
|
definer = unknown :: atom(),
|
2015-12-28 12:19:49 +01:00
|
|
|
result = {res, rescode} :: rterm() | '_' | '$2',
|
2019-06-18 11:09:35 +02:00
|
|
|
args_rename = [] :: [{atom(),atom()}],
|
2015-12-28 12:19:49 +01:00
|
|
|
args_desc = none :: none | [string()] | '_',
|
|
|
|
result_desc = none :: none | string() | '_',
|
|
|
|
args_example = none :: none | [any()] | '_',
|
|
|
|
result_example = none :: any()}).
|
2013-03-14 10:33:02 +01:00
|
|
|
|
2023-11-28 19:35:27 +01:00
|
|
|
-type ejabberd_commands() :: #ejabberd_commands{name :: atom(),
|
|
|
|
tags :: [atom()],
|
|
|
|
desc :: string(),
|
|
|
|
longdesc :: string(),
|
|
|
|
version :: integer(),
|
|
|
|
note :: string(),
|
|
|
|
weight :: integer(),
|
|
|
|
module :: atom(),
|
|
|
|
function :: atom(),
|
|
|
|
args :: [aterm()],
|
|
|
|
policy :: open | restricted | admin | user,
|
|
|
|
access :: [{atom(),atom(),atom()}|atom()],
|
|
|
|
definer :: atom(),
|
|
|
|
result :: rterm(),
|
|
|
|
args_rename :: [{atom(),atom()}],
|
|
|
|
args_desc :: none | [string()] | '_',
|
|
|
|
result_desc :: none | string() | '_',
|
|
|
|
args_example :: none | [any()] | '_',
|
|
|
|
result_example :: any()
|
|
|
|
}.
|
2008-10-12 13:53:25 +02:00
|
|
|
|