pingpp 2.0.12 → 2.0.13

Sign up to get free protection for your applications and to get access to all the features.
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: