Команды нужно запускать с правами администратора Ejabberd Rest Api? - PullRequest
0 голосов
/ 24 мая 2018

Я настраиваю Ejabberd Rest API на ejabberd 16.09.Чтобы настроить его, я просто следую документу ejabberd (https://docs.ejabberd.im/developer/ejabberd-api/simple-configuration/). Поэтому, когда я собираюсь нажать http://localhost:5280/api/change_password url от почтальона с body:

{
      "user": "123",
      "host": "TT_CPU_076",
      "newpass": "blank"
    }

и header: Content-Type: application/json. Я получаю сообщение об ошибке:

{
    "status": "error",
    "code": 31,
    "message": "Command need to be run with admin priviledge."
}

моя конфигурация файла ejabberd.yml, например:

port: 5280
    module: ejabberd_http
    ip: "127.0.0.1"
    request_handlers:
      "/websocket": ejabberd_http_ws
      "/api": mod_http_api
    ##  "/pub/archive": mod_http_fileserver
    web_admin: true
    http_bind: true
    ## register: true
    captcha: false
api_permissions:
  "API used from localhost allows all calls":
    - who:
      - ip: "127.0.0.1/8"
    - what:
      - "*"
      - "!stop"
      - "!start"

Любое решение для достижения конфигурации Rest Api с помощью ejabberd будет оценено.

1 Ответ

0 голосов
/ 25 мая 2018

Я не могу воспроизвести эту проблему с недавним ejabberd 18.04.Я устанавливаю в ejabberd.yml:

hosts:
  - "localhost"
  - "TT_CPU_076"

api_permissions:
  "public commands":
    who:
      - ip: "127.0.0.1/8"
    what:
      - "*"
      - "status"
      - "connected_users_number"

Затем я регистрирую эту учетную запись:

$ ejabberdctl register 123 TT_CPU_076 pass11
User 123@TT_CPU_076 successfully registered

Я пишу простой клиент API:

<?php
$url='localhost:5280/api/change_password/';
$info=array("user"=>"123",
            "host"=>"TT_CPU_076",
            "newpass"=>"mypass22"
           );
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($info));
$output=curl_exec($ch);
curl_close($ch);
print_r($output);
?>

Затем я выполняюэто:

$ php test.php 
0

Это вошел в ejabberd:

11:39:18.646 [info] API call change_password 
  [{<<"user">>,<<"123">>},
   {<<"host">>,<<"TT_CPU_076">>},
   {<<"newpass">>,<<"mypass22">>}]
  from ::ffff:127.0.0.1:46778

И, наконец, я проверяю базу данных, и пароль изменился

...