fadada-ruby-sdk 0.1.0
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 +7 -0
- data/README.md +2 -0
- data/lib/client.rb +32 -0
- data/lib/fadada-ruby-sdk.rb +3 -0
- data/lib/signer.rb +62 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: db9e024b25996f63dbe1339092d8576addf19abb55097dd64ae2b48b2373e576
|
4
|
+
data.tar.gz: 8f08dbe3966c43f09192c2fcb58c45dc465483f8c7f48c26fc7c95cf51c68108
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 514a86bf1ddc25445d70a3023177d03a144756c7b44f2e5768dc779aaf40c72ab2b0858c9657b04068542c0024176f6461405222bb819fbb062c835ef4d6d0af
|
7
|
+
data.tar.gz: 3274a9758f6d2b0f3f355985ab62ca19490480c7517910c4149c5051833cd3b846d1fbd225f2818f353ddd7028f285fd769ae1cc66af58f1eb43c065ece55735
|
data/README.md
ADDED
data/lib/client.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module FadadaRubySdk
|
4
|
+
# Client class to handle request and responses to and from Tonglian gateway
|
5
|
+
class Client
|
6
|
+
def initialize(api_end_point, app_id, app_secret)
|
7
|
+
@api_end_point = api_end_point
|
8
|
+
@signer = Signer.new(app_id, app_secret)
|
9
|
+
end
|
10
|
+
|
11
|
+
# the url is relative to the api_end_point
|
12
|
+
def request(url, access_token, params)
|
13
|
+
headers, params = @signer.sign(access_token, params)
|
14
|
+
|
15
|
+
url = URI.join(@app_end_point, url)
|
16
|
+
url = URI(url)
|
17
|
+
http = Net::HTTP.new(url.host, url.port)
|
18
|
+
http.use_ssl = true if @api_end_point.downcase.starts_with?('https') # Enable SSL for HTTPS
|
19
|
+
|
20
|
+
request = Net::HTTP::Post.new(url.request_uri)
|
21
|
+
request['Content-Type'] = 'application/x-www-form-urlencoded'
|
22
|
+
headers.each do |key, value|
|
23
|
+
request[key] = value
|
24
|
+
end
|
25
|
+
|
26
|
+
request.body = URI.encode_www_form(params)
|
27
|
+
response = http.request(request)
|
28
|
+
|
29
|
+
JSON.parse(response.body)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/signer.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'securerandom'
|
3
|
+
require 'digest'
|
4
|
+
require 'openssl'
|
5
|
+
|
6
|
+
module FadadaRubySdk
|
7
|
+
# To sign client request message and verify tonglian's response message
|
8
|
+
class Signer
|
9
|
+
HEADER_STUB = {
|
10
|
+
'X-FASC-Api-SubVersion' => 5.1,
|
11
|
+
'X-FASC-Sign-Type' => 'HMAC-SHA256'
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
def initialize(app_id, app_secret)
|
15
|
+
@app_id = app_id
|
16
|
+
@app_secret = app_secret
|
17
|
+
end
|
18
|
+
|
19
|
+
def sign(access_token = nil, data={})
|
20
|
+
headers, params = generate_headers_params(access_token, data)
|
21
|
+
sign_string = make_sign_string(headers.merge(params))
|
22
|
+
|
23
|
+
timestamp = headers['X-FASC-Timestamp']
|
24
|
+
signature = generate_signature(sign_string, timestamp, @app_secret)
|
25
|
+
headers['X-FASC-Sign'] = signature
|
26
|
+
return headers, params
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def generate_headers_params(access_token, data)
|
32
|
+
headers = HEADER_STUB.dup
|
33
|
+
params = {}
|
34
|
+
|
35
|
+
headers['X-FASC-Request-Id'] = @app_id
|
36
|
+
headers['X-FASC-Timestamp'] = (Time.now.to_f * 1000).to_i.to_s
|
37
|
+
headers['X-FASC-Nonce'] = SecureRandom.uuid.gsub('-', '')
|
38
|
+
if access_token.nil? || access_token.empty?
|
39
|
+
headers['X-FASC-Grant-Type'] = 'client_credential'
|
40
|
+
else
|
41
|
+
headers['X-FASC-AccessToken'] = access_token
|
42
|
+
end
|
43
|
+
|
44
|
+
params['bizContent'] = (data.is_a? String)? data : data.to_json
|
45
|
+
return headers, params
|
46
|
+
end
|
47
|
+
|
48
|
+
def make_sign_string(params)
|
49
|
+
sorted_params = []
|
50
|
+
params.keys.sort.map do |k|
|
51
|
+
sorted_params.push("#{k}=#{params[k]}")
|
52
|
+
end
|
53
|
+
sorted_params.join('&')
|
54
|
+
end
|
55
|
+
|
56
|
+
def generate_signature(sorted_params_str, timestamp, secret)
|
57
|
+
sorted_str_digest = Digest::SHA256.hexdigest(sortd_params_str)
|
58
|
+
hmac = OpenSSL::HMAC.digest('sha256', secret, timestamp)
|
59
|
+
OpenSSL::HMAC.hexdigest('sha256', hmac, sorted_str_digest)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fadada-ruby-sdk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Yi Zhang
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-05-17 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: fadada-ruby-sdk is a light and easy to use gem. It could help developers
|
14
|
+
quickly make use of FaDaDa's agreement and signature services.
|
15
|
+
email: yzhang.wa@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- README.md
|
21
|
+
- lib/client.rb
|
22
|
+
- lib/fadada-ruby-sdk.rb
|
23
|
+
- lib/signer.rb
|
24
|
+
homepage: http://github.com/yzhanginwa/fadada-ruby-sdk
|
25
|
+
licenses:
|
26
|
+
- MIT
|
27
|
+
metadata: {}
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.7.0
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubygems_version: 3.3.26
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: A ruby SDK for developers to use FaDaDa agreement and signature services
|
47
|
+
test_files: []
|