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