From aa59d58ba7ff07a6a665ea69122bf8c7a9461912 Mon Sep 17 00:00:00 2001 From: Riku Rouvila Date: Thu, 26 Nov 2015 17:03:26 +0200 Subject: [PATCH] send invite to github organization after slack invitation is created and user can be found from github --- routes/invite.js | 25 +++++++++++++++++++------ services/github.js | 20 ++++++++++++++++++++ 2 files changed, 39 insertions(+), 6 deletions(-) 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); }); }); }