node-ejabberd
nodejs bridge to ejabberd
Limitations
Essentially, what this module can do is just talk to ejabberdclt
command, edit ejabberd.cfg
file.
So if you don't have the permission to run ejabberdclt
and to read/write in /etc/ejabberd
config directoty, this module wont works for you.
On unix-like sytems, this means, you must have the root
permission to use this module or to run the application that required this moduel.
In the simple words, you are fully reponsed to make sure this module can tale to ejabberd.
Adpaters
Since node-ejabberd is highly depending on the os setup, in order to make it working properly with different OSes, here comes the concept of adaper
.
An adaper is simpely a bunch of info about the ejabberd setups on an OS that defined in adapers.json, like:
...
"ubuntu:apt": {
"cfgDir" : "/etc/ejabberd/",
"dbDir" : "/var/lib/ejabberd",
"pidFile" : "/var/run/ejabberd/ejabberd.pid",
"ctl" : "/usr/sbin/ejabberdctl",
"daemon" : "/usr/sbin/ejabberd",
"script" : "/etc/init.d/ejabberd",
"restart" : "/etc/init.d/ejabberd restart"
}
...
Explanation
name
The name of the adapter object should follow os-name
:The-name-of-package-manager
, e.g: ubuntu:apt
, osx:brew
member
-
cfgDir
: The absolute path of ejabberd config directory. -
dbDir
: The absolute path of ejbberd database directory. -
pidFile
: The absolute path of ejabberd process id file. -
ctl
: The absolute path of ejabberdctl binary. -
daemon
: The absolute path of ejabberd daemon binary. -
script
: The os level daemon script, optional. -
restart
: The full ejabberd restart command.
Fork please
If you found that there are not adaper fro your favorite os, please fork this repo, adding it, then fire a pull request.
Directory and files
Config directory structure
.
|-- ejabberd.cfg
|-- includes
| |-- vhost1.cfg
| `-- vhost2.cfg
Sample of included vhost config file
.
Getting Started
Install the module with: npm install ejabberd
Documentation
Before use this module, You need those knowledge.
-
Promise based API
Any value return from a public api is a
promise
object.More precie, it is follow the Promise/A+ specification, and implemented in a nodejs module called Q.
I highly recommened to read the speicification and documents of aboves, if you are new to promise.
-
Basic knowledge about
ejabberd
and its configuration is also required
API
See API
Examples
var Ejabberd = ;var e = 'ubuntu:apt' checkerInterval : 1000; // The address of virtual hostvar host = 'example.lvh.me';var config = host: host; { // Add a virtual host to ejabberd's configuration then restart server var p1 = e; p1; var username = 'Lorem'; var password = 'secret'; // Register a new use var p2 = e; p2;} e;
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using grunt.
License
Copyright (c) 2012 wiredcraft Licensed under the MIT license.