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 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
@@ -0,0 +1,2 @@
1
+ # fadada-ruby-sdk
2
+ Ruby SDK for FaDaDa's agreement and signature services
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
@@ -0,0 +1,3 @@
1
+ require_relative 'client'
2
+ require_relative 'signer'
3
+
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: []