Created
August 11, 2015 17:51
-
-
Save ijin/ef105e192a030571d83f to your computer and use it in GitHub Desktop.
aws lambda function to process github hook from sns, add user to team, and notify by slack.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var aws = require('aws-sdk'); | |
var kms = new aws.KMS({ region: 'us-east-1' }); | |
var lambda = new aws.Lambda({region: 'ap-northeast-1'}); | |
var encrypted_token = 'CiD0R0tv46w7LNpO0GlZpLfZk2O0Oy66IF83rG6olDY7yBKwAQEBAgB49EdL\nb+OsOyzaTtBpWaS32ZNjtDsuuiBfN6xuqJQ2O8gAAACHMIGEBgkqhkiG9w0B\nBwagdzB1AgEAMHAGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMsDOYHRzB\nN/5q/XCTAgEQgEOnHbGFykvpf06OQ1uQG9P5VjooLu8oSynMp9Cqt5SvaPUC\nKpHkPnnew8nKYhDIcxyLYd/A3vYsHZGWZ3FwN7kx0tIx\n'; | |
var team_id = 1234567; | |
var valid_comment = 'join'; | |
//console.log('Loading function'); | |
exports.handler = function(event, context) { | |
console.log('Received event:', JSON.stringify(event, null, 2)); | |
var message = JSON.parse(event.Records[0].Sns.Message); | |
//console.log('From SNS:', message); | |
var comment = message.comment.body; | |
var user = message.comment.user.login; | |
var icon = message.comment.user.avatar_url; | |
console.log('user: ' + user); | |
console.log('comment: ' + comment); | |
var p = {CiphertextBlob: new Buffer(encrypted_token, 'base64')}; | |
kms.decrypt(p, function(err, data) { | |
if (err) context.fail(err); | |
else { | |
var github_token = data.Plaintext.toString(); | |
//console.log('token: ' + github_token); | |
var http = require('https'); | |
var options = { | |
host: 'api.github.com', | |
port: 443, | |
path: '/teams/' + team_id + '/memberships/' + user, | |
headers: {'Authorization': 'token ' + github_token, 'User-Agent': 'ijin'}, | |
method: 'PUT' | |
}; | |
callback = function(response) { | |
var rsp = ''; | |
var msg = ''; | |
var status = response.statusCode; | |
console.log('status code: ' + status); | |
response.on('data', function (chunk) { rsp += chunk; }); | |
response.on('end', function () { | |
console.log('response: ' + rsp); | |
if (status == 200){ | |
msg = 'Added to the team'; | |
console.log(msg); | |
var payload = { username: user, icon_url: icon, text: msg } | |
lambda.invoke({FunctionName: 'slack', Payload: JSON.stringify(payload)}, function(err, data) { | |
if (err) console.log(err, err.stack); | |
else context.succeed(msg); | |
}); | |
} else { | |
msg = 'Failed to add user to the team'; | |
console.log(msg); | |
context.fail(msg); | |
} | |
}); | |
} | |
if (valid_comment.indexOf(comment) < 0) context.fail('invalid comment'); | |
else { | |
var req = http.request(options, callback); | |
req.end(); | |
} | |
} | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment