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 +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:
|