通过节点js应用程序访问ejabberd ReST API

我有一个运行在Ubuntu 16.04上的ejabberd(16.01)服务器。 我有另一个NodeJs应用程序运行在不同的服务器上。 通过NodeJs应用程序,我希望通过使用https://docs.ejabberd.im/developer/ejabberd-api/中提供的 ReST API来添加用户,添加名单等。

我正在做简单的configuration,在https://docs.ejabberd.im/developer/ejabberd-api/simple-configuration/上给出这个练习。 该configuration表示添加下面的代码片段:

commands_admin_access: - allow: - user: "admin@localhost" commands: - add_commands: [user, admin, open] # Tokens are valid for a year as default: auth_expire: 31536000 oauth_access: all 

这里的问题是,文档没有指定在什么标题下需要添加这些configuration? 这个configuration的确切位置完全没有了!

我在文件末尾添加了上述configuration。 但是,ejabberd服务器不能识别这些选项。 日志说:

 validate_opts:792 unknown option 'auth_expire' will be likely ignored validate_opts:792 unknown option 'api_permissions' will be likely ignored validate_opts:784 ignoring option 'commands_admin_access' with invalid value: [[{allow,[[{user,<<"ankit@replica3377.cloudapp.net">>}]]}]] 

以下是我在ejabberd.yml文件中添加的额外configuration:

 commands_admin_access: - allow: - user: "ankit@replica3377.cloudapp.net" commands: - add_commands: - status - registered_users - register - unregister # Tokens are valid for a year as default: auth_expire: 31536000 oauth_access: all api_permissions: "API used from localhost allows all calls": - who: - ip: "168.63.209.95" - what: - "*" - "!stop" - "!start" 

我认为文件不是很清楚。 有人可以build议我在这里做错了吗? 还是有什么替代方法来实现我想要做的?

你正在使用Ejabberd的老版本。 最新的是17.04,从16.01开始,API权限框架发生了很多变化。

首先,让我澄清你所看到的警告的理由。

  1. 'auth_expire' – 实际参数名称是'oauth_expire'。 看起来像文档中有错误。 请参阅此链接的代码。
  2. 'api_permission' – 这个参数是在16.12版本中引入的。 请参考这个链接。
  3. 'commands_admin_access' – 在16.01版本中这个参数只用primefaces作为input。 在以后的版本中引入了ACL支持。 所以你可以创buildACL规则,并提供这样的规则名称。

现在回答添加此参数的位置的问题 – 只要您遵循yaml格式的指导原则,您可以在任何地方添加此参数。 由于这是独立的configuration,它不应该在任何其他configuration下。 你可以把它放在最后,它应该没有任何问题的工作。