hexsafe 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/hexsafe.rb +7 -0
  3. data/lib/hexsafe/api.rb +167 -0
  4. metadata +172 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 67c619cf134e56baf443d7ce5589e9b3aea49bd6b99761245a7935cd60ff4a41
4
+ data.tar.gz: 7046c524cb47ee23551bd5f99f0401963ed49d0de0b6776fe7be4122d3d94863
5
+ SHA512:
6
+ metadata.gz: e382ee7a548b1f77ae48d1ad229815cf7a88e79c22bcd82a5a9b97619edd3a48962d6db81f5470dfdd6494822668c794a0d2fc88b69385e4909ab40cf2ef6bdf
7
+ data.tar.gz: 509c7baaf43e422689b4b5d8255f519dbeb3efcc32ffe30f10c28360f60edcc98ee7d687125502a89bb9fea9fe3f27154d3977ecefd8ccebf214c251a048ea26
data/lib/hexsafe.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'faraday'
2
+ require 'openssl'
3
+ require 'uri'
4
+ require 'base64'
5
+ require 'hexsafe/api'
6
+ require 'time'
7
+ require "json"
@@ -0,0 +1,167 @@
1
+ module Hexsafe
2
+ class Api
3
+
4
+ class Error < RuntimeError; end
5
+
6
+ def initialize options = {}
7
+ @mode = options[:env].upcase rescue nil
8
+ @key = options[:key] rescue nil
9
+ @secret = options[:secret] rescue nil
10
+ end
11
+
12
+ def get_accounts
13
+ response = rest_api("GET", "account", {})
14
+ end
15
+
16
+ def get_account account_id
17
+ response = rest_api("GET", "account/#{account_id}", {})
18
+ end
19
+
20
+ def get_balance account_id
21
+ response = rest_api("GET", "balance/#{account_id}", {})
22
+ end
23
+
24
+ def get_txn ticker, tx_hash
25
+ response = rest_api("GET", "transaction/asset_ticker/#{ticker}/hash/#{tx_hash}", {})
26
+ end
27
+
28
+ def get_txn_ac account_id, start_time, end_time
29
+ response = rest_api("GET", "transaction/account_id/#{account_id}/start_time/#{start_time}/end_time/#{end_time}", {})
30
+ end
31
+
32
+ def create_deposit body
33
+ response = rest_api("post", "deposit", body)
34
+ end
35
+
36
+ def cancel_deposit request_id
37
+ response = rest_api("DELETE", "deposit/#{request_id}", {})
38
+ end
39
+
40
+ def get_deposit request_id
41
+ response = rest_api("GET", "deposit/#{request_id}", {})
42
+ end
43
+
44
+ def create_withdraw body
45
+ response = rest_api("post", "withdraw", body)
46
+ end
47
+
48
+ def cancel_withdraw request_id
49
+ response = rest_api("DELETE", "withdraw/#{request_id}", {})
50
+ end
51
+
52
+ def get_withdraw request_id
53
+ response = rest_api("GET", "withdraw/#{request_id}", {})
54
+ end
55
+
56
+ def subscribe_webhook
57
+ response = rest_api("post", "webhook", body)
58
+ end
59
+
60
+ def get_subscriptions account_id
61
+ response = rest_api("GET", "webhook/#{account_id}", {})
62
+ end
63
+
64
+ def delete_subscription uuid
65
+ response = rest_api("DELETE", "webhook/#{uuid}", {})
66
+ end
67
+
68
+ protected
69
+
70
+ def rest_api(verb, path, body = nil)
71
+ verb = verb.upcase
72
+ body_digest = nil
73
+ puts "\n\n\n#{new_timestamp}\n\n"
74
+ timestamp = new_timestamp.to_s + "0000"
75
+ request_line = verb + ' ' + base_url+path + ' HTTP/1.1'
76
+ if body
77
+ if non_get_verb? verb
78
+ body_digest = Base64.strict_encode64(digest(JSON.generate(body)))
79
+ end
80
+ end
81
+ signature = encode_hmac_512(timestamp, host, request_line, body_digest)
82
+ url = host+base_url+path
83
+
84
+ if ['POST', 'PUT', 'PATCH', 'DELETE'].include?(verb)
85
+ authorization = "hmac username=\"" + key + "\", algorithm=\"hmac-sha512\", headers=\"nonce host digest request-line\", signature=\"" + signature + "\""
86
+ else
87
+ authorization = "hmac username=\"" + key + "\", algorithm=\"hmac-sha512\", headers=\"nonce host request-line\", signature=\"" + signature + "\"";
88
+ end
89
+ if is_get? verb
90
+ response = Faraday.get(url) do |req|
91
+ req.headers['nonce'] = timestamp.to_s
92
+ req.headers['authorization'] = authorization
93
+ req.headers['Date'] = http_format_date
94
+ req.headers['Content-Type'] = 'application/json'
95
+ req.headers['Accept'] = 'application/json'
96
+ end
97
+ elsif non_get_verb? verb
98
+ response = Faraday.post(url) do |req|
99
+ req.body = body.compact.to_json
100
+ req.headers['nonce'] = timestamp.to_s
101
+ req.headers['digest'] = "SHA-256="+body_digest
102
+ req.headers['authorization'] = authorization
103
+ req.headers['Date'] = http_format_date
104
+ req.headers['Content-Type'] = 'application/json'
105
+ end
106
+ end
107
+ # Rails.logger { response.describe }
108
+ # response.assert_success!
109
+ JSON.parse(response.body)
110
+ end
111
+
112
+ private
113
+
114
+ def base_url
115
+ return "/hexsafe/api/v4/"
116
+ end
117
+
118
+ def host
119
+ return "Invalid Environment" unless %w(TEST MAIN).include?(@mode)
120
+ @mode == "TEST" ? "https://api-test.hexsafe.io" : "https://api.hexsafe.io"
121
+ end
122
+
123
+ def key
124
+ @key ||= @key
125
+ end
126
+
127
+ def secret
128
+ @secret ||= @secret
129
+ end
130
+
131
+ def digest(data)
132
+ sha256 = OpenSSL::Digest::SHA256.new()
133
+ sha256.digest(data.encode('utf-8'))
134
+ end
135
+
136
+ def hmac_512 (secret, data)
137
+ OpenSSL::HMAC.digest('sha512',secret, data)
138
+ end
139
+
140
+ def encode_hmac_512(timestamp, host, request_line, body_digest = nil)
141
+ data = ''
142
+ data << 'nonce: ' + timestamp.to_s + "\n"
143
+ data << 'host: ' + URI.parse(host).host + "\n"
144
+ if body_digest
145
+ data << 'digest: SHA-256=' + body_digest + "\n"
146
+ end
147
+ data << request_line
148
+ Base64.strict_encode64(hmac_512(secret,data))
149
+ end
150
+
151
+ def http_format_date
152
+ Time.now.httpdate
153
+ end
154
+
155
+ def new_timestamp
156
+ (Time.now.to_f*1000).to_i.to_s
157
+ end
158
+
159
+ def is_get? verb
160
+ return ['GET'].include?(verb)
161
+ end
162
+
163
+ def non_get_verb? verb
164
+ return ['POST', 'PUT', 'PATCH', 'DELETE'].include?(verb)
165
+ end
166
+ end
167
+ end
metadata ADDED
@@ -0,0 +1,172 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hexsafe
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - imrahulprajapat
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-02-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.14.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.14.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: openssl
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: uri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: base64
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.6'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.6'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: A Ruby library to help you to integrate Hexsafe Wallet Management into
140
+ your rails application
141
+ email: hashtagrahulprajapat@gmail.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - lib/hexsafe.rb
147
+ - lib/hexsafe/api.rb
148
+ homepage: http://www.hypertechblog.com
149
+ licenses:
150
+ - MIT
151
+ metadata: {}
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubygems_version: 3.0.6
168
+ signing_key:
169
+ specification_version: 4
170
+ summary: A Ruby library to help you to integrate Hexsafe Wallet Management into your
171
+ rails application
172
+ test_files: []