From f2669825604a1bd00c4fce68c8167d60276968f6 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Wed, 2 Dec 2015 10:46:24 +0100 Subject: [PATCH] Use node-xmpp-client for the transport protocol --- .../xo-server-transport-xmpp/package.json | 3 +- .../xo-server-transport-xmpp/src/index.js | 49 +++++++++++-------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/packages/xo-server-transport-xmpp/package.json b/packages/xo-server-transport-xmpp/package.json index f9392672c..4e93083db 100644 --- a/packages/xo-server-transport-xmpp/package.json +++ b/packages/xo-server-transport-xmpp/package.json @@ -25,7 +25,8 @@ "node": ">=0.12" }, "dependencies": { - "babel-runtime": "^5.8.34" + "babel-runtime": "^5.8.34", + "node-xmpp-client": "^3.0.0" }, "devDependencies": { "babel": "^5.8.34", diff --git a/packages/xo-server-transport-xmpp/src/index.js b/packages/xo-server-transport-xmpp/src/index.js index 114cc8280..55c20d798 100644 --- a/packages/xo-server-transport-xmpp/src/index.js +++ b/packages/xo-server-transport-xmpp/src/index.js @@ -1,3 +1,7 @@ +import XmppClient from 'node-xmpp-client' + +// =================================================================== + export const configurationSchema = { type: 'object', @@ -11,27 +15,18 @@ export const configurationSchema = { description: 'host where the XMPP server is located' }, port: { - type: 'number', - description: 'port of the XMPP server (default to 5222)' + type: 'integer', + description: 'port of the XMPP server (default to 5222)', + default: 5222 }, - user: { + jid: { type: 'string', - description: 'name to use to authenticate' + description: 'Xmpp address to use to authenticate' }, - pass: { + password: { type: 'string', description: 'password to use to authenticate' - } - }, - - additionalProperties: false, - required: ['user', 'pass'] - }, - - accountOptions: { - type: 'object', - - properties: { + }, register: { type: 'boolean', description: 'create a new account if necessary', @@ -40,31 +35,45 @@ export const configurationSchema = { }, additionalProperties: false, - required: ['register'] + required: ['jid', 'password', 'register'] } }, additionalProperties: false, - required: ['transport', 'accountOptions'] + required: ['transport'] } // =================================================================== class TransportXmppPlugin { constructor (xo) { + this._set = ::xo.defineProperty + this._unset = null + // Defined in configure(). + this._client = null } - configure (conf) { + configure ({ transport: conf }) { + conf.reconnect = true + this._client = new XmppClient(conf) + this._client.on('error', () => {}) } load () { - + this._unset = this._set('sendToXmppClient', this._sendToXmppClient) } unload () { + this._client.end() + this._unset() + } + async _sendToXmppClient ({to, message}) { + const stanza = new XmppClient.Stanza('message', { to: to, type: 'chat' }) + .c('body').t(message) + this._client.send(stanza) } }