-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnode_server.js
More file actions
91 lines (83 loc) · 2.94 KB
/
node_server.js
File metadata and controls
91 lines (83 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
var http = require("http");
var querystring = require('querystring');
var fs = require('fs')
var mailObject = {"sender": { "service": "Gmail", "email" : "<email>", "password" : "<pass>", "from" : "Username <someone@gmail.com>" }, "to" : "<email>" };
var pullRequestRefObject = { "branchesToWatch" : ["some_branch", "some_other_branch"], "actions" : ["reopened", "opened", "closed"] };
var port = 8888;
http.createServer(function(request, response) {
if (request.method == 'POST') {
var body = ''
request.on('data', function(data) {
logMessage('POST request');
body += data;
});
request.on('end', function() {
response.writeHead(200, {'Content-Type': 'text/json'});
var decodedBody = querystring.parse(body);
logMessage('Payload received and decoded');
payloadToJson(decodedBody, mailBody);
response.end('post received');
});
}
else
{
response.writeHead(200, {"Content-Type": "text/html"});
response.write("<h3>Hello World!</h3>");
response.end();
}
}).listen(port);
function payloadToJson(decodedBody, callback) {
var dataJson = JSON.parse(decodedBody.payload);
if (pullRequestRefObject.actions.contains(dataJson.action) && pullRequestRefObject.branchesToWatch.contains(dataJson.pull_request.head.ref)) {
logMessage('Valid pull request');
callback(dataJson);
}else {
logMessage('Nothing to do with current payload')
}
}
var mailBody = function(dataJson) {
var url = dataJson.pull_request.html_url;
var pullRequestNumber = dataJson.number;
var branch = dataJson.pull_request.head.ref;
logMessage('Pull request number: ' + pullRequestNumber);
var mergeCommit = dataJson.pull_request.merge_commit_sha;
var marked = require('marked');
var htmlDescription = marked(dataJson.pull_request.body);
var htmlBody = '<h3>Url: </h3>'+url+'<br><br>'
+'<h3>Merge Commit: </h3>'+mergeCommit+'<br><br>'
+ htmlDescription;
logMessage('Payload parsed into html');
mailer(branch, pullRequestNumber, htmlBody);
};
function mailer(branch, pullRequestNumber, htmlString) {
var nodemailer = require("nodemailer");
var smtpTransport = nodemailer.createTransport("SMTP",{
service: mailObject.sender.service,
auth: {
user: mailObject.sender.email,
pass: mailObject.sender.password
}
});
var mailOptions = {
from: mailObject.sender.from,
to: mailObject.to,
replyTo: mailObject.to,
subject: "Pull request from "+ branch +" # " + pullRequestNumber,
html: htmlString
}
smtpTransport.sendMail(mailOptions, function(error, response){
if(error){
logMessage('Error in sending mail: '+ error);
}else{
logMessage("Message sent: " + response.message);
}
smtpTransport.close();
});
}
function logMessage(message){
var log = new Date() + ' : ' + message;
console.log(log);
}
Array.prototype.contains = function(val) {
return this.indexOf(val) > -1;
}