pingpp 2.0.12 → 2.0.13

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 26b7444660ab3e97df833ae4fc0766ed14324d5d
4
- data.tar.gz: b3b63f1b2ee7da4fa8b9a7d651f7b7dcfdbd814f
3
+ metadata.gz: 4901e3a0163e5b216c8cce33945c13402861e950
4
+ data.tar.gz: fcc83f40b5a5e3339aba2aec78ad293c86a49bc4
5
5
  SHA512:
6
- metadata.gz: 06a3cd154b77c56de7bdd802458b2de575b3709f73f2d798b61ca6fdc5aaf1498b05ee7dfc13c13ea56b3af4aca460c2663f575c206e3fea86c3fb3da60d583d
7
- data.tar.gz: 48e2fab5eddb99e0e29560cd2d664cb3dae836e4b79fa45e6c6fa84eb4edc46110ac4d0ab34317771f4592e2b4173bab334c791991defc40e50a21fc3f47780a
6
+ metadata.gz: 192646866f5dd099cf788da0a679d6fe1dede640464435b6f28f2da6331525405a61d44eba5166bb233982f4a273dd4cd40a5a05b1617572f7f557efc7c45190
7
+ data.tar.gz: 19a5b627b6f985528febad6634cb9a7092c3df9ea9ab7ba2096c8db1413bf5844b4e6c5fe35ff91fde55c4f29e52e0e0309f506ed4d33a454f30ff29f249b46c
data/lib/pingpp/util.rb CHANGED
@@ -19,7 +19,10 @@ module Pingpp
19
19
  @object_classes ||= {
20
20
  'charge' => Charge,
21
21
  'list' => ListObject,
22
- 'refund' => Refund
22
+ 'refund' => Refund,
23
+ 'red_envelope' => RedEnvelope,
24
+ 'transfer' => Transfer,
25
+ 'event' => Event
23
26
  }
24
27
  end
25
28
 
@@ -96,5 +99,33 @@ module Pingpp
96
99
  end
97
100
  result
98
101
  end
102
+
103
+ def self.format_headers(original_headers)
104
+ new_headers = {}
105
+ if !original_headers.respond_to?("each")
106
+ return nil
107
+ end
108
+
109
+ original_headers.each do |k, h|
110
+ if k.is_a?(Symbol)
111
+ k = k.to_s
112
+ end
113
+ k = k[0, 5] == 'HTTP_' ? k[5..-1] : k
114
+ new_k = k.gsub(/-/, '_').downcase.to_sym
115
+
116
+ header = nil
117
+ if h.is_a?(Array) && h.length > 0
118
+ header = h[0]
119
+ elsif h.is_a?(String)
120
+ header = h
121
+ end
122
+
123
+ if header
124
+ new_headers[new_k] = header
125
+ end
126
+ end
127
+
128
+ return new_headers
129
+ end
99
130
  end
100
131
  end
@@ -1,3 +1,3 @@
1
1
  module Pingpp
2
- VERSION = '2.0.12'
2
+ VERSION = '2.0.13'
3
3
  end
@@ -0,0 +1,34 @@
1
+ module Pingpp
2
+ module Webhook
3
+ def self.verify?(request)
4
+ if !Pingpp.pub_key
5
+ return false
6
+ end
7
+
8
+ raw_data = nil
9
+ if request.respond_to?('raw_post')
10
+ raw_data = request.raw_post
11
+ elsif request.respond_to?('body')
12
+ raw_data = request.body
13
+ else
14
+ return false
15
+ end
16
+
17
+ headers = nil
18
+ if request.respond_to?('headers')
19
+ headers = request.headers
20
+ elsif request.respond_to?('header')
21
+ headers = request.header
22
+ else
23
+ return false
24
+ end
25
+
26
+ formated_headers = Util.format_headers(headers)
27
+ return false if !formated_headers.has_key?(:x_pingplusplus_signature)
28
+
29
+ signature = formated_headers[:x_pingplusplus_signature]
30
+ rsa_public_key = OpenSSL::PKey.read(Pingpp.pub_key)
31
+ return rsa_public_key.verify(OpenSSL::Digest::SHA256.new, Base64.decode64(signature), raw_data)
32
+ end
33
+ end
34
+ end
data/lib/pingpp.rb CHANGED
@@ -27,6 +27,7 @@ require 'pingpp/refund'
27
27
  require 'pingpp/red_envelope'
28
28
  require 'pingpp/event'
29
29
  require 'pingpp/transfer'
30
+ require 'pingpp/webhook'
30
31
 
31
32
  # Errors
32
33
  require 'pingpp/errors/pingpp_error'
@@ -51,7 +52,7 @@ module Pingpp
51
52
  HEADERS_TO_PARSE = [:pingpp_one_version, :pingpp_sdk_version]
52
53
 
53
54
  class << self
54
- attr_accessor :api_key, :api_base, :verify_ssl_certs, :api_version, :parsed_headers, :private_key
55
+ attr_accessor :api_key, :api_base, :verify_ssl_certs, :api_version, :parsed_headers, :private_key, :pub_key
55
56
  end
56
57
 
57
58
  def self.api_url(url='')
@@ -218,6 +219,10 @@ module Pingpp
218
219
  @private_key = File.read(private_key_path)
219
220
  end
220
221
 
222
+ def self.pub_key_path=(pub_key_path)
223
+ @pub_key = File.read(pub_key_path)
224
+ end
225
+
221
226
  def self.sign_request(data, pri_key)
222
227
  pkey = OpenSSL::PKey.read(pri_key)
223
228
  return Base64.strict_encode64(pkey.sign(OpenSSL::Digest::SHA256.new, data))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pingpp
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.12
4
+ version: 2.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xufeng Weng
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-24 00:00:00.000000000 Z
11
+ date: 2016-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: '1.25'
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
- version: '3.0'
36
+ version: '4.0'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '1.25'
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
- version: '3.0'
46
+ version: '4.0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: json
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -98,34 +98,6 @@ dependencies:
98
98
  - - ">="
99
99
  - !ruby/object:Gem::Version
100
100
  version: 3.4.0
101
- - !ruby/object:Gem::Dependency
102
- name: test-unit
103
- requirement: !ruby/object:Gem::Requirement
104
- requirements:
105
- - - ">="
106
- - !ruby/object:Gem::Version
107
- version: '0'
108
- type: :development
109
- prerelease: false
110
- version_requirements: !ruby/object:Gem::Requirement
111
- requirements:
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- version: '0'
115
- - !ruby/object:Gem::Dependency
116
- name: rake
117
- requirement: !ruby/object:Gem::Requirement
118
- requirements:
119
- - - ">="
120
- - !ruby/object:Gem::Version
121
- version: '0'
122
- type: :development
123
- prerelease: false
124
- version_requirements: !ruby/object:Gem::Requirement
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- version: '0'
129
101
  description: PingPlusPlus is the easiest way to accept payments online. See https://pingxx.com
130
102
  for details.
131
103
  email:
@@ -157,6 +129,7 @@ files:
157
129
  - lib/pingpp/transfer.rb
158
130
  - lib/pingpp/util.rb
159
131
  - lib/pingpp/version.rb
132
+ - lib/pingpp/webhook.rb
160
133
  - lib/pingpp/wx_pub_oauth.rb
161
134
  homepage: https://pingxx.com/document/api
162
135
  licenses: