diff --git a/routes/invite.js b/routes/invite.js index 149cc33..1e046b8 100644 --- a/routes/invite.js +++ b/routes/invite.js @@ -1,9 +1,7 @@ 'use strict'; var validator = require('validator'); -var config = require('../lib/config'); -var request = require('superagent'); - +var slack = require('../services/slack'); module.exports = function (app) { /* @@ -17,25 +15,22 @@ module.exports = function (app) { res.status(400).send('Invalid email'); } - request - .post('https://koodiklinikka.slack.com/api/chat.postMessage') - .field('text', 'Invitation request for: ' + req.body.email) - .field('channel', config.slack.channels) - .field('token', config.slack.token) - .end(function(error, response){ - if(error) { - return next(error); - } - - if(!response.body.ok) { - console.error(response.body.error); - var err = new Error('Creating slack invitation failed:'); - return next(err); - } - + function success() { res.status(200).end(); - }); + } + slack + .createInvite(req.body.email) + .then(success) + .catch(function() { + return slack.createMessage('Invitation request for: ' + req.body.email); + }) + .then(success) + .catch(function(err) { + console.error(err); + var err = new Error('Creating slack invitation failed'); + return next(err); + }); }); }; diff --git a/services/slack.js b/services/slack.js new file mode 100644 index 0000000..6b0027a --- /dev/null +++ b/services/slack.js @@ -0,0 +1,55 @@ +'use strict'; + +var request = require('superagent'); +var config = require('../lib/config'); +var Promise = require('bluebird'); + +module.exports = { + + /** + * Create a new Slack - invite + */ + + createInvite: function(email) { + return new Promise(function(resolve, reject) { + request + .post('https://koodiklinikka.slack.com/api/users.admin.invite') + .field('email', email) + .field('channels', config.slack.channels) + .field('token', config.slack.token) + .field('set_active', 'true') + .end(function(error, response){ + + if(!response.body.ok) { + return reject(response.body.error); + } + + if(error) { + return reject(error); + } + + resolve(response.body); + }); + }); + }, + + /** + * Send a message to configured channel + */ + + createMessage: function(message) { + return new Promise(function(resolve, reject) { + request + .post('https://koodiklinikka.slack.com/api/chat.postMessage') + .field('text', message) + .field('channel', config.slack.channels) + .field('token', config.slack.token) + .end(function(error, response){ + if(error) { + reject(error); + } + resolve(response.body); + }); + }); + } +};