lib/smess/outputs/global_mouth.rb in smess-1.0.0 vs lib/smess/outputs/global_mouth.rb in smess-1.0.1
- old
+ new
@@ -3,85 +3,113 @@
module Smess
class GlobalMouth
include Smess::Logging
+ def deliver_sms(sms_arg)
+ return false unless sms_arg.kind_of? Sms
+ @sms = sms_arg
- def compute_hash(values = [])
- hash = "#{username}#{values.join}"
- auth_hash = Digest::MD5.hexdigest "#{username}:#{password}"
- Digest::MD5.hexdigest "#{hash}#{auth_hash}"
- end
-
-
- def deliver_sms(sms)
- return false unless sms.kind_of? Sms
-
- url = "https://mcm.globalmouth.com:8443/api/mcm"
- from = sms.originator || sender_id
- message_id = Digest::MD5.hexdigest "#{Time.now.strftime('%Y%m%d%H%M%S')}#{sms.to}-#{SecureRandom.hex(6)}"
-
- params = {
- username: username,
- msisdn: "+#{sms.to}",
- body: sms.message.strip_nongsm_chars.encode("ISO-8859-1"),
- originator: from,
- ref: message_id,
- dlr: "true"
- }
- params[:hash] = compute_hash(
- [sms.message.strip_nongsm_chars.encode("ISO-8859-1"), params[:originator], params[:msisdn]]
- )
- request = HTTPI::Request.new
+ generate_mac_hash
request.url = "#{url}?#{params.to_query}"
begin
HTTPI.log_level = :debug
response = HTTPI.get request
-
+ result = normal_result(response)
rescue Exception => e
logger.warn response
# connection problem or some error
- result = {
- response_code: '-1',
- response: {
- temporaryError: 'true',
- responseCode: e.code,
- responseText: e.message
- },
- data: {
- to: sms.to,
- text: sms.message.strip_nongsm_chars,
- from: from
- }
- }
- else
- response_code = response.body.split(/\n/).first
- response_code = "0" if response_code == "200"
- # Successful response
- result = {
- message_id: message_id,
- response_code: response_code.to_s,
- response: {body: response.body},
- destination_address: sms.to,
- data: {
- to: sms.to,
- text: sms.message.strip_nongsm_chars,
- from: from
- }
- }
+ result = result_for_error(e)
end
result
end
+ private
+
+ attr_reader :sms
+
def username
ENV["SMESS_GLOBAL_MOUTH_USER"].dup # paranoid safeguard
end
def password
ENV["SMESS_GLOBAL_MOUTH_PASS"]
end
def sender_id
ENV["SMESS_GLOBAL_MOUTH_SENDER_ID"]
+ end
+
+ def url
+ "https://mcm.globalmouth.com:8443/api/mcm"
+ end
+
+ def from
+ sms.originator || sender_id
+ end
+
+ def message_id
+ @message_id ||= Digest::MD5.hexdigest "#{Time.now.strftime('%Y%m%d%H%M%S')}#{sms.to}-#{SecureRandom.hex(6)}"
+ end
+
+ def params
+ @params ||= {
+ username: username,
+ msisdn: "+#{sms.to}",
+ body: sms.message.strip_nongsm_chars.encode("ISO-8859-1"),
+ originator: from,
+ ref: message_id,
+ dlr: "true"
+ }
+ end
+
+ def compute_hash(values = [])
+ hash = "#{username}#{values.join}"
+ auth_hash = Digest::MD5.hexdigest "#{username}:#{password}"
+ Digest::MD5.hexdigest "#{hash}#{auth_hash}"
+ end
+
+ def generate_mac_hash
+ params[:hash] = compute_hash(
+ [sms.message.strip_nongsm_chars.encode("ISO-8859-1"), params[:originator], params[:msisdn]]
+ )
+ end
+
+ def request
+ @request ||= HTTPI::Request.new
+ end
+
+ def result_for_error(e)
+ code = e.code rescue "-1"
+ {
+ response_code: '-1',
+ response: {
+ temporaryError: 'true',
+ responseCode: e.code,
+ responseText: e.message
+ },
+ data: result_data
+ }
+ end
+
+ def normal_result(response)
+ response_code = response.body.split(/\n/).first
+ response_code = "0" if response_code == "200"
+ # Successful response
+ {
+ message_id: message_id,
+ response_code: response_code.to_s,
+ response: {body: response.body},
+ destination_address: sms.to,
+ data: result_data
+ }
+ end
+
+ def result_data
+ {
+ to: sms.to,
+ text: sms.message.strip_nongsm_chars,
+ from: from
+ }
end
end
end
\ No newline at end of file