so_paid 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,6 +31,10 @@ module SoPaid
31
31
 
32
32
  :signed_field_names =>
33
33
  [
34
+ # used for determining if live, or test mode was used
35
+ # AFTER the response form cybersource has been made
36
+ # and we are verifying the request signature
37
+ :merchant_defined_data100,
34
38
  :profile_id,
35
39
  :access_key,
36
40
  :transaction_uuid,
@@ -74,6 +78,20 @@ module SoPaid
74
78
  end
75
79
 
76
80
 
81
+ def self.verify_transaction_signature(message)
82
+ if message[:req_merchant_defined_data100].present? and message[:req_merchant_defined_data] == "test"
83
+ secret_key = get_secret_key_for(:test)
84
+ else
85
+ secret_key = get_secret_key_for(:live)
86
+ end
87
+
88
+ verify_signature(message[:signed_field_names], message[:signature], secret_key)
89
+ end
90
+
91
+ def self.get_secret_key_for(targ_env)
92
+ (@@pv_defaults[targ_env] and @@pv_defaults[targ_env][:secret_key]) || @@pv_defaults[:secret_key]
93
+ end
94
+
77
95
  private
78
96
 
79
97
  def set_pv_fields
@@ -90,6 +108,7 @@ module SoPaid
90
108
  # merge pv_order_params on top of pv_options which is
91
109
  # the combination of the class defaults and the configuration file defaults
92
110
  @merged_pv_opts = merge_defaults(pv_opts, @pv_options)
111
+ @merged_pv_opts[:merchant_defined_data100] = live? ? "live" : "test"
93
112
  order_keys = @merged_pv_opts[:signed_field_names] + @merged_pv_opts[:unsigned_field_names]
94
113
 
95
114
  order_keys.each do |o_key|
@@ -138,5 +157,6 @@ module SoPaid
138
157
  def live?
139
158
  !test?
140
159
  end
160
+
141
161
  end
142
162
  end
data/lib/so_paid/hop.rb CHANGED
@@ -40,17 +40,15 @@ module SoPaid
40
40
  Base64.encode64(mac.digest).gsub "\n", ''
41
41
  end
42
42
 
43
- def self.verify_signature(data,signature)
43
+ def self.verify_signature(data, signature, secret_key)
44
44
  pub_digest = encode_hop(data, secret_key)
45
45
  pub_digest.eql?(signature)
46
46
  end
47
47
 
48
48
  def self.verify_transaction_signature(message)
49
- verify_signature(message[:signed_field_names], message[:signature])
49
+ raise "verify_transaction_signature needs to be defined in child class"
50
50
  end
51
51
 
52
-
53
-
54
52
 
55
53
  def initialize(order, pv_options={}, config_options={})
56
54
  @pv_order_params = {}.with_indifferent_access
@@ -1,3 +1,3 @@
1
1
  module SoPaid
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: so_paid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: