diff --git a/cloudron.js b/cloudron.js index d8e461c..a19ca35 100644 --- a/cloudron.js +++ b/cloudron.js @@ -11,6 +11,7 @@ var assert = require('assert'), once = require('once'), request = require('superagent-sync'), sleep = require('sleep').sleep, + tls = require('tls'), url = require('url'), util = require('util'); @@ -521,3 +522,47 @@ Cloudron.prototype.checkMail = function (owner, callback) { imap.connect(); }; + +Cloudron.prototype.saveSieveScript = function (owner, callback) { + var authString = 'AUTHENTICATE "PLAIN" "' + new Buffer('\0' + owner.username + '\0' + owner.password).toString('base64') + '"'; + + callback = once(callback); + + var socket = tls.connect(4190, this._adminFqdn, { rejectUnauthorized: false }, function (error) { + if (error) return callback(error); + + socket.write(authString + '\n'); + socket.write('PUTSCRIPT \"hutsefluts\" {6+}\nkeep;\nQUIT\n'); + + setTimeout(function () { socket.end(); callback(new Error('Could not auth with sieve')); }, 5000); // give it 5 seconds + }); + + socket.on('data', function (chunk) { + if (chunk.toString('utf8').indexOf('OK "Logged in."') !== -1) return callback(); + }); + + socket.on('end', function () { }); + socket.on('error', callback); +}; + +Cloudron.prototype.checSieveScript = function (owner, callback) { + var authString = 'AUTHENTICATE "PLAIN" "' + new Buffer('\0' + owner.username + '\0' + owner.password).toString('base64') + '"'; + + callback = once(callback); + + var socket = tls.connect(4190, this._adminFqdn, { rejectUnauthorized: false }, function (error) { + if (error) return callback(error); + + socket.write(authString + '\n'); + socket.write('LISTSCRIPTS\nQUIT\n'); + + setTimeout(function () { socket.end(); callback(new Error('Could not auth with sieve')); }, 5000); // give it 5 seconds + }); + + socket.on('data', function (chunk) { + if (chunk.toString('utf8').indexOf('"hutsefluts"') !== -1) return callback(); + }); + + socket.on('end', function () { }); + socket.on('error', callback); +}; diff --git a/test/cloudron-backup-test.js b/test/cloudron-backup-test.js index 4d8ad4f..f08e207 100644 --- a/test/cloudron-backup-test.js +++ b/test/cloudron-backup-test.js @@ -59,6 +59,10 @@ describe('Cloudron backup testing', function () { mailer.sendMailToCloudronUser(owner.username + '@' + box.domain, done); }); + it('can save a sieve script', function (done) { + cloudron.saveSieveScript(owner, done); + }); + var location = 'test' + (Math.random() * 10000).toFixed(); it('can install app', function () { var manifest = appStore.getManifest(common.TESTAPP_ID, common.TESTAPP_VERSION); @@ -114,6 +118,10 @@ describe('Cloudron backup testing', function () { cloudron.checkMail(owner, done); }); + it('can check sieve script', function (done) { + cloudron.checkSieveScript(owner, done); + }); + it('can delete the cloudron', function () { appStore.deleteCloudron(box); });