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"
}
...
The name of the adapter object should follow os-name
:The-name-of-package-manager
, e.g: ubuntu:apt
, osx:brew
-
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.
###Config directory structure
.
|-- ejabberd.cfg
|-- includes
| |-- vhost1.cfg
| `-- vhost2.cfg
###Sample of included vhost config file
{host_config, "vhost1.example.com",[{acl, admin, {user, "admin", "vhost1.example.com"}}]}.
Install the module with: npm install ejabberd
-
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
var Ejabberd = require('ejabberd');
var e = new Ejabberd('ubuntu:apt', {
checkerInterval : 1000
});
// The address of virtual host
var host = 'example.lvh.me';
var config = {host: host};
function test_ejabber() {
// Add a virtual host to ejabberd's configuration then restart server
var p1 = e.addVhost(host, config);
p1.then( // This return a promise
// success
function() {
},
// error
function(err) {
}
);
var username = 'Lorem';
var password = 'secret';
// Register a new use
var p2 = e.register(username, host, password);
p2.then( // This is also a promise
// success
function() {
},
// error
function(err) {
}
);
}
e.once('status', function(status) {
test_ejabber();
});
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.
Copyright (c) 2012 wiredcraft Licensed under the MIT license.