netki 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83d574cc62d629d5731a490958428d5e8324b1b4
4
- data.tar.gz: 0f640e9c4f7d8ddc7faa31861c4cc3f34053f067
3
+ metadata.gz: 803a57aec11c14749fe4e612378cb0592af844f3
4
+ data.tar.gz: 6914fbc01f9d1a448651e29a588a6e505dc2af16
5
5
  SHA512:
6
- metadata.gz: 198e72c718bf8f3be1d029e384cb656980fd339ce6e193daa5f5153729a083763f141e952b981b009c66735ed6df563e8d39d915e73f29944102522929bf1f44
7
- data.tar.gz: b05e88a104f06aa1f173567fc2546439956f6a3be42782921d1dad2fab2f7a8381883a513f07c10122dabe21b8a921a0837ac5ebc58568e9df66e5d6d172a024
6
+ metadata.gz: a65eb7dea4aa9c7bf6a096f5eeb6eadd1d14c1c28331f41d6fec07b809db269b40c3783a4ffed41f844f41e1fc73c9c7f06550140dd6058c300ce505ca4bfd02
7
+ data.tar.gz: 35cd36fec85030406ac6890544cca6585585ac90c8eb3593fe96e57e138767ff945c26341ba4d5e7c3febf5e2945f8edf8e38cec50f0ba5e14327e3592b55117
data/lib/netki/netki.rb CHANGED
@@ -1,7 +1,8 @@
1
- require "rubygems"
2
- require "bundler/setup"
3
- require "httpclient"
4
- require "json"
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'httpclient'
4
+ require 'json'
5
+ require_relative 'utilities'
5
6
 
6
7
  module Netki
7
8
 
@@ -13,8 +14,8 @@ module Netki
13
14
  # Setup Headers
14
15
  headers = {}
15
16
  headers["Content-Type"] = "application/json"
16
- headers["Authorization"] = api_key
17
- headers["X-Partner-ID"] = partner_id
17
+ headers["Authorization"] = api_key if api_key
18
+ headers["X-Partner-ID"] = partner_id if partner_id
18
19
 
19
20
  # Setup Request Options
20
21
  opts = {}
@@ -57,36 +58,54 @@ module Netki
57
58
  return ret_data
58
59
  end
59
60
 
61
+ # Obtain a WalletName object by querying the Netki Open API.
62
+ def self.wallet_lookup(uri, currency, api_url='https://api.netki.com')
63
+ wallet_name = URI.parse(uri).host || uri.to_s
64
+
65
+ response = process_request(nil, nil,
66
+ "#{api_url}/api/wallet_lookup/#{wallet_name}/#{currency.downcase}", 'GET')
67
+
68
+ domain_parts = response['wallet_name'].split('.')
69
+ wallet_name = domain_parts.shift
70
+
71
+ parsed = begin
72
+ parse_bitcoin_uri(response['wallet_address']).merge(
73
+ {_raw: response['wallet_address']})
74
+ rescue InvalidURIError => e
75
+ response['wallet_address']
76
+ end
77
+ WalletName.new(
78
+ domain_parts.join('.'), wallet_name,
79
+ { response['currency'] => parsed }
80
+ )
81
+ end
82
+
60
83
  ##
61
84
  # The WalletName object represents a Netki Wallet Name object.
62
85
  #
63
86
  class WalletName
64
87
 
65
88
  ##
66
- # :args: domain_name, name, wallets, external_id, id
67
- def initialize(domain_name, name, wallets={}, external_id=nil, id=nil) #:nodoc:
68
- @id = id
89
+ # :args: domain_name, name, wallets, external_id, id,
90
+ def initialize(domain_name, name, wallets={}, external_id: nil, id: nil)
69
91
  @domain_name = domain_name
70
92
  @name = name
71
- @wallets = wallets
93
+
94
+ @wallets = wallets.inject({}) do |hsh, (currency, value)|
95
+ hsh[currency] = value.is_a?(Hash) ? value : { address: value }
96
+ hsh
97
+ end
72
98
  @external_id = external_id
99
+ @id = id
73
100
  end
74
101
 
75
- attr_reader :id
76
- attr_reader :domain_name
77
- attr_reader :name
78
- attr_reader :external_id
79
-
80
- attr_writer :id
81
- attr_writer :domain_name
82
- attr_writer :name
83
- attr_writer :external_id
102
+ attr_accessor :domain_name, :name, :id, :external_id
84
103
 
85
104
  # :section: Getters
86
105
 
87
106
  # Get Address for Existing Currency
88
107
  def get_address(currency)
89
- @wallets[currency]
108
+ @wallets[currency][:address]
90
109
  end
91
110
 
92
111
  # Get Wallet Name Array of Used Currencies
@@ -98,7 +117,7 @@ module Netki
98
117
 
99
118
  # Set the address or URI for the given currency for this wallet name
100
119
  def set_currency_address(currency, address)
101
- @wallets[currency] = address
120
+ @wallets[currency][:address] = address
102
121
  end
103
122
 
104
123
  # Remove a used currency from this wallet name
@@ -119,18 +138,21 @@ module Netki
119
138
  # Save the currency WalletName object to the remote service
120
139
  def save
121
140
  wallet_data = []
122
- @wallets.each do |currency, wallet_address|
123
- wallet_data.push({
124
- currency: currency,
125
- wallet_address: wallet_address
126
- })
141
+ @wallets.each do |currency, wallet|
142
+ # NOTE: Unsure if remote service supports storing metadata (params/bip70 req)?
143
+ wallet_data.push(
144
+ {
145
+ currency: currency,
146
+ wallet_address: wallet[:_raw] ? wallet[:_raw] : wallet[:address]
147
+ }
148
+ )
127
149
  end
128
150
 
129
151
  wn_data = {
130
- domain_name: @domain_name,
131
- name: @name,
132
- wallets: wallet_data,
133
- external_id: @external_id
152
+ domain_name: @domain_name,
153
+ name: @name,
154
+ wallets: wallet_data,
155
+ external_id: @external_id || 'null'
134
156
  }
135
157
 
136
158
  wn_api_data = {}
@@ -286,7 +308,10 @@ module Netki
286
308
  # Create a new Wallet Name object using this factory method.
287
309
  # * domain_name -> The pre-configured domain name you would like to add this new wallet name to
288
310
  # * name -> The DNS name that you would like this new wallet name to have (ie.. name.domain_name)
289
- # * wallets -> This is a hash where the key is the currency (ie.. btc, ltc, dgc, tusd) and the value is the wallet address or URL of the BIP32 / BIP70 address server
311
+ # * wallets -> This is a hash where the key is the currency (ie.. btc, ltc, dgc, tusd) and the value is:
312
+ # the wallet address OR
313
+ # URL of the BIP32 / BIP70 address server OR
314
+ # a hash containing an :address and other metadata
290
315
  # * external_id -> Any unique external ID that you may want to use to track this specific wallet name
291
316
  #
292
317
  def create_new_walletname(domain_name, name, wallets={}, external_id=nil)
@@ -323,4 +348,4 @@ module Netki
323
348
  wn_list
324
349
  end
325
350
  end
326
- end
351
+ end
@@ -0,0 +1,51 @@
1
+ module Netki
2
+
3
+ KNOWN_PREFIXES = [ 'bitcoin', 'litecoin', 'dogecoin' ]
4
+
5
+ class InvalidURIError < StandardError; end
6
+
7
+ def self.parse_bitcoin_uri(uri, tolerate_errors: false)
8
+ parts = uri.split(':', 2)
9
+
10
+ unless KNOWN_PREFIXES.include?(parts.shift)
11
+ raise InvalidURIError.new("unknown URI prefix")
12
+ end
13
+
14
+ # parts => [base58][?[bitcoinparam, [&bitcoinparam, ...]]
15
+ base58address, query = parts.first.split('?', 2)
16
+ response = { address: base58address }
17
+
18
+ begin
19
+ response.merge!(_parse_bip_72(query))
20
+ rescue InvalidURIError => e
21
+ raise e unless tolerate_errors
22
+ end
23
+
24
+ response
25
+ end
26
+
27
+ # https://github.com/bitcoin/bips/blob/master/bip-0072.mediawiki
28
+ def self._parse_bip_72(querystring)
29
+ params = _parse_bip_21(querystring)
30
+ { r: params['r'], params: params }
31
+ end
32
+
33
+ # https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki
34
+ def self._parse_bip_21(querystring)
35
+
36
+ param_pairs = querystring.split('&') # '&' reserved as separator in bip21
37
+
38
+ param_pairs.inject({}) do |hsh, pair|
39
+ parts = pair.split('=') # '=' reserved as separator in bip21
40
+
41
+ raise InvalidURIError.new("unbalanced parameter #{pair}") unless (
42
+ parts.size == 2 &&
43
+ parts[0].size > 0 &&
44
+ parts[1].size > 0)
45
+ raise InvalidURIError.new("duplicate parameter #{parts[0]}") unless hsh[parts[0]].nil?
46
+
47
+ hsh[parts[0]] = parts[1]
48
+ hsh
49
+ end
50
+ end
51
+ end
data/lib/netki/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Netki
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt David
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-08 00:00:00.000000000 Z
11
+ date: 2015-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -125,6 +125,7 @@ files:
125
125
  - bin/setup
126
126
  - lib/netki.rb
127
127
  - lib/netki/netki.rb
128
+ - lib/netki/utilities.rb
128
129
  - lib/netki/version.rb
129
130
  - netki.gemspec
130
131
  homepage: https://github.com/netkicorp/ruby-partner-client