Gemfile 🔗
@@ -6,3 +6,6 @@ gem 'eventmachine', '1.0.0'
 
 gem 'hiredis', '~> 0.6.0'
 gem 'redis', '>= 3.2.0'
+
+gem 'goliath'
+gem 'log4r'
  Stephen Paul Weber created
Demonstrates how to integrate Goliath into your EM reactor alongside
Blather.  And also how to send an XMPP stanza in response to a webhook.
  
  
  
Gemfile         |  3 +++
sgx-catapult.rb | 29 +++++++++++++++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
@@ -6,3 +6,6 @@ gem 'eventmachine', '1.0.0'
 
 gem 'hiredis', '~> 0.6.0'
 gem 'redis', '>= 3.2.0'
+
+gem 'goliath'
+gem 'log4r'
  @@ -22,10 +22,14 @@ require 'json'
 require 'net/http'
 require 'redis/connection/hiredis'
 require 'uri'
+require 'goliath/api'
+require 'goliath/server'
+require 'log4r'
 
-if ARGV.size != 7 then
+if ARGV.size != 8 then
 	puts "Usage: sgx-catapult.rb <component_jid> <component_password> " +
 		"<server_hostname> <server_port> " +
+		"<http_port> " +
 		"<redis_hostname> <redis_port> <delivery_receipt_url>"
 	exit 0
 end
@@ -37,6 +41,10 @@ module SGXcatapult
 		client.run
 	end
 
+	def self.write(stanza)
+		client.write(stanza)
+	end
+
 	def self.error_msg(orig, query_node, type, name, text = nil)
 		orig.add_child(query_node)
 		orig.type = :error
@@ -70,7 +78,7 @@ module SGXcatapult
 		cred_key = "catapult_cred-" + bare_jid
 
 		conn = Hiredis::Connection.new
-		conn.connect(ARGV[4], ARGV[5].to_i)
+		conn.connect(ARGV[5], ARGV[6].to_i)
 
 		conn.write ["EXISTS", cred_key]
 		if conn.read == 0
@@ -365,6 +373,23 @@ end
 	}
 end
 
+class WebhookHandler < Goliath::API
+	def response(env)
+		msg = Blather::Stanza::Message.new('test@localhost', 'hi')
+		SGXcatapult.write(msg)
+
+		[200, {}, "OK"]
+	end
+end
+
 EM.run do
 	SGXcatapult.run
+
+	server = Goliath::Server.new('127.0.0.1', ARGV[4].to_i)
+	server.api = WebhookHandler.new
+	server.app = Goliath::Rack::Builder.build(server.api.class, server.api)
+	server.logger = Log4r::Logger.new('goliath')
+	server.logger.add(Log4r::StdoutOutputter.new('console'))
+	server.logger.level = Log4r::INFO
+	server.start
 end