Gemfile 🔗
@@ -3,3 +3,6 @@ source 'https://rubygems.org'
 gem 'blather'
 gem 'activesupport', '<5.0.0'
 gem 'eventmachine', '1.0.0'
+
+gem 'hiredis', '~> 0.6.0'
+gem 'redis', '>= 3.2.0'
  Denver Gingerich created
Gemfile         |  3 +++
sgx-catapult.rb | 39 +++++++++++++++++++++++++++++++++++++--
2 files changed, 40 insertions(+), 2 deletions(-)
@@ -3,3 +3,6 @@ source 'https://rubygems.org'
 gem 'blather'
 gem 'activesupport', '<5.0.0'
 gem 'eventmachine', '1.0.0'
+
+gem 'hiredis', '~> 0.6.0'
+gem 'redis', '>= 3.2.0'
  @@ -20,11 +20,12 @@
 require 'blather/client/dsl'
 require 'json'
 require 'net/http'
+require 'redis/connection/hiredis'
 require 'uri'
 
-if ARGV.size != 4 then
+if ARGV.size != 6 then
 	puts "Usage: sgx-catapult.rb <component_jid> <component_password> " +
-		"<server_hostname> <server_port>"
+		"<server_hostname> <server_port> <redis_hostname> <redis_port>"
 	exit 0
 end
 
@@ -145,6 +146,40 @@ module SGXcatapult
 			if response.code == '200'
 				params = JSON.parse response.body
 				if params['numberState'] == 'enabled'
+					bare_jid = i.from.to_s.split('/')[0]
+					cred_key = "catapult_cred-" + bare_jid
+
+					# TODO: pre-validate ARGV[5] is integer
+					conn = Hiredis::Connection.new
+					conn.connect(ARGV[4], ARGV[5].to_i)
+
+					conn.write ["EXISTS", cred_key]
+					if conn.read == 1
+						# TODO: add txt re already exist
+						write_to_stream error_msg(
+							i.reply, qn, :cancel,
+							'conflict')
+						next
+					end
+
+					conn.write ["RPUSH",cred_key,user_id]
+					conn.write ["RPUSH",cred_key,api_token]
+					conn.write ["RPUSH",cred_key,api_secret]
+					conn.write ["RPUSH",cred_key,phone_num]
+
+					for n in 1..4 do
+						# TODO: catch/relay RuntimeError
+						result = conn.read
+						if result < 1
+							write_to_stream(
+							error_msg(
+							i.reply, qn, :cancel,
+							'internal-server-error')
+							)
+							next
+						end
+					end
+
 					write_to_stream i.reply
 				else
 					# TODO: add text re number disabled