diff --git a/index.js b/index.js
index 4a708f9..f178e84 100644
--- a/index.js
+++ b/index.js
@@ -4,6 +4,7 @@ var config = require('./config.json');
var parse = require('diff-parse');
var nodemailer = require('nodemailer');
var escape = require('escape-html');
+var async = require('async');
exports.handler = (event, context, callback) => {
@@ -15,79 +16,89 @@ exports.handler = (event, context, callback) => {
} else {
var commits = event['body-json'].commits;
+ var email = '
';
+ email += 'Branch: ' + event['body-json'].ref + '
';
+ email += 'Home: ' + event['body-json'].repository.html_url + '
';
+ email += 'Compare: ' + event['body-json'].compare + '
';
- commits.forEach(function(e,i,a){
+ async.forEach(commits, function(e, callback){
getDiffFromGitHub(e.url)
.then((diff)=>{
var files = parse(diff);
- var email = '';
- email += 'Branch: ' + event['body-json'].ref + '
';
- email += 'Home: ' + event['body-json'].repository.html_url + '
';
- email += 'Commit: ' + e.id + '
';
- email += 'Author: ' + e.author.name + '
';
- email += 'Compare: ' + event['body-json'].compare + '
';
+ var commit_msg = '
';
+ commit_msg += 'Author: ' + e.author.name + '
';
+ commit_msg += 'Commit: ' + e.id + '
';
+ commit_msg += 'Message: ' + e.message + '
';
+ commit_msg += 'Date: ' + e.timestamp + '
';
+
+ for(var k=0; k < files.length; k++){
+ var file = files[k];
-
- files.forEach(function(file){
-
- email += '
' + file.to + ''; //file modified name
- email += '';
+ commit_msg += '
' + file.to; //file modified name
+ commit_msg += '';
for(var i = 0; i < file.lines.length; i++){
//Build HTML EMAIL
var change = file.lines[i];
if(change.add){
- email += '';
+ commit_msg += '
';
} else if (change.del){
- email += '
';
+ commit_msg += '
';
} else if (change.normal){
- email += '
';
+ commit_msg += '
';
}
if(change.add || change.del || change.normal){
- email += '';
- email += (change.normal) ? change.ln2 : change.ln;
- email += ' | ';
+ commit_msg += '';
+ commit_msg += (change.normal) ? change.ln2 : change.ln;
+ commit_msg += ' | ';
//Deal with tabs and spaces for emails
var content = escape(change.content);
content = content.replace(/\t/g,'\u00a0 \u00a0');
content = content.replace(/ /g, '\u00a0');
if(change.add === true){
- email += '+' + content + ' | ';
+ commit_msg += '+' + content + ' | ';
} else if (change.del){
- email += '-' + content + ' | ';
+ commit_msg += '-' + content + ' | ';
} else {
- email += '' + content + ' | ';
+ commit_msg += '' + content + ' | ';
}
- email += '
';
+ commit_msg += '';
}
-
};
- email+='
';
- });
+ commit_msg+='
';
- email+='';
- return Promise.resolve({email:email,commit:e});
+ };
+ email += commit_msg;
+ callback();
})
- .then((c)=>{
- var subject = '[' + event['body-json'].repository.full_name + '] ' + c.commit.id.substring(0,6) + ': ' + c.commit.message;
- var from = c.commit.author.name + '<' + c.commit.author.email + '>';
- sendMail(c.email, subject, from);
+ .catch((err)=>{
+ console.log("Create message error:" + err);
+ callback(err);
+ });
+ }, function(err) {
+ if (err) return next(err);
+
+ getSenderNameFromGitHub(event['body-json'].sender.url)
+ .then((name)=>{
+ var subject = '[' + event['body-json'].repository.full_name + '] ' + name + ' has pushed changes - ' + event['body-json'].head_commit.message.substring(0,60) + '...';
+ var from = name + '<' + event['body-json'].pusher.email + '>';
+ email += '';
+ sendMail(email, subject, from);
})
.catch((err)=>{
+ console.log("Get sender info error:" + err);
callback(err);
});
- });
-
+ })
}
};
-
function getDiffFromGitHub(url){
var promise = new Promise((resolve,reject)=>{
https.get(url + '.diff',(res)=>{
@@ -113,6 +124,31 @@ function getDiffFromGitHub(url){
return promise;
};
+function getSenderNameFromGitHub(url){
+ var promise = new Promise((resolve,reject)=>{
+ https.get(url,(res)=>{
+ var data='';
+ res.on('data',(chunk)=>{
+ data+=chunk;
+ });
+ res.on('end',()=>{
+ resolve(JSON.parse(data).name);
+ });
+
+ res.on('err',(err)=>{
+ console.log("HTTP GET ERROR GITHUB URL:" + err);
+ reject(err);
+ })
+ .on('error',(err)=>{
+ console.log(err);
+ reject(err);
+ });
+ });
+ });
+
+ return promise;
+};
+
function sendMail(email, subject, from){
var auth = {
diff --git a/package.json b/package.json
index 63c776f..59726a4 100644
--- a/package.json
+++ b/package.json
@@ -9,8 +9,10 @@
"author": "Tony Truong",
"license": "MIT",
"dependencies": {
+ "async": "^2.0.1",
"diff-parse": "0.0.13",
"escape-html": "^1.0.3",
- "nodemailer": "^2.5.0"
+ "nodemailer": "^2.5.0",
+ "smtp-connection": "^2.10.0"
}
}