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 +4 -4
- data/lib/pingpp/util.rb +32 -1
- data/lib/pingpp/version.rb +1 -1
- data/lib/pingpp/webhook.rb +34 -0
- data/lib/pingpp.rb +6 -1
- metadata +5 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4901e3a0163e5b216c8cce33945c13402861e950
|
4
|
+
data.tar.gz: fcc83f40b5a5e3339aba2aec78ad293c86a49bc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/pingpp/version.rb
CHANGED
@@ -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.
|
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-
|
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: '
|
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: '
|
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:
|