summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2015-01-22 20:57:38 -0800
committerJesse Morgan <jesse@jesterpm.net>2015-01-22 20:57:38 -0800
commit2d273e3841ef4f1b874fe82b8883f62f8f412044 (patch)
tree8d287b63c79fb011d5dacf3384d18fc43bfc5461 /lib
Initial commit of insomniaircd_webhookHEADmaster
Diffstat (limited to 'lib')
-rw-r--r--lib/insomniaircd_webhook.rb50
-rw-r--r--lib/insomniaircd_webhook/util.rb13
2 files changed, 63 insertions, 0 deletions
diff --git a/lib/insomniaircd_webhook.rb b/lib/insomniaircd_webhook.rb
new file mode 100644
index 0000000..1007607
--- /dev/null
+++ b/lib/insomniaircd_webhook.rb
@@ -0,0 +1,50 @@
+require 'json'
+require 'rack/utils'
+require 'sinatra'
+
+FileUtils.mkdir_p 'repos'
+
+post '/webhook' do
+ payload = request.body.read
+ verify_signature(payload)
+ data = JSON.parse(payload)
+
+ event = request.env['HTTP_X_GITHUB_EVENT']
+ if event == "ping"
+ ping data
+
+ elsif event == "push"
+ push data
+
+ else
+ 404
+ end
+end
+
+def ping(data)
+ "pong"
+end
+
+def push(data)
+ ref = data["ref"]
+ who = data["sender"]["login"]
+ repo = data["repository"]["name"]
+ url = data["repository"]["clone_url"]
+
+ puts "#{who} pushed to #{ref} on repository #{repo}"
+
+ if ref == 'refs/heads/master'
+ if generate_config repo, url
+ 200
+ else
+ 500
+ end
+ end
+end
+
+def verify_signature(payload_body)
+ if ENV['SECRET_TOKEN']
+ signature = 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), ENV['SECRET_TOKEN'], payload_body)
+ return halt 500, "Signatures didn't match!" unless Rack::Utils.secure_compare(signature, request.env['HTTP_X_HUB_SIGNATURE'])
+ end
+end
diff --git a/lib/insomniaircd_webhook/util.rb b/lib/insomniaircd_webhook/util.rb
new file mode 100644
index 0000000..9b647b7
--- /dev/null
+++ b/lib/insomniaircd_webhook/util.rb
@@ -0,0 +1,13 @@
+
+def generate_config(repo, url)
+ if File.directory? "repos/#{repo}"
+ clone_success = system "cd repos/#{repo} && git pull"
+ else
+ clone_success = system "git clone #{url} repos/#{repo}"
+ end
+
+ if clone_success
+ system "cd repos/#{repo} && rake"
+ end
+end
+