diff --git a/routes/invite.js b/routes/invite.js index 22082f2..af6a6a4 100644 --- a/routes/invite.js +++ b/routes/invite.js @@ -2,6 +2,7 @@ var validator = require('validator'); var slack = require('../services/slack'); +var github = require('../services/github'); module.exports = function (app) { /* @@ -21,16 +22,28 @@ module.exports = function (app) { slack .createInvite(req.body.email) - .then(success) - .catch(function(err) { - var message = 'Creating automatic invitation failed for: ' + req.body.email + ' reason: ' + err; - return slack.createMessage(message); + .then(function() { + github + .findUserByEmail(req.body.email) + .then(github.inviteToOrg) + .then(function(user) { + var message = 'User ' + user.login + ' invited to GitHub organization.' + slack.createMessage(message); + }) + .catch(function(err) { + var message = 'Creating GitHub invitation failed for: ' + req.body.email + ' reason: ' + err; + slack.createMessage(message); + }); }) .then(success) .catch(function(err) { + var message = 'Creating automatic invitation failed for: ' + req.body.email + ' reason: ' + err; + slack.createMessage(message); + console.error(err); - var err = new Error('Creating slack invitation failed'); - return next(err); + + var error = new Error('Creating slack invitation failed'); + return next(error); }); }); diff --git a/services/github.js b/services/github.js index 7fab587..1c7b0b9 100644 --- a/services/github.js +++ b/services/github.js @@ -53,6 +53,26 @@ module.exports = { reject(error); } resolve(response.body); + /** + * Invite user to organization + */ + inviteToOrg: function(user) { + return new Promise(function(resolve, reject) { + request + .put('https://api.github.com/orgs/koodiklinikka/memberships/' + user.login) + .set('Authorization', 'token ' + config.github.token) + .send({role: 'member'}) + .end(function(error, response){ + + if(error) { + return reject(error); + } + + if(response.statusCode !== 200) { + return reject(response.error); + } + + resolve(response.body.user); }); }); }