diff --git a/Gemfile b/Gemfile index d8b51648259f53702a94064f2af5a9b6aec6d4c9..f3d8dac6244d28942ce4e4f75be34efcc282c96a 100644 --- a/Gemfile +++ b/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' diff --git a/sgx-catapult.rb b/sgx-catapult.rb index 4ca6c80c263e4b2d35634eef67b445219ee12e08..f3a9474c047fe7d0b0d4580d3fd7a92e4a44630d 100755 --- a/sgx-catapult.rb +++ b/sgx-catapult.rb @@ -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 " + - " " + " " 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