taproot 0.1.5 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1005aac4be1712e38c6abd61b3e5c5ba93e1688d
4
- data.tar.gz: ffca00b152ef5670528d37fa76b36f0628a4a2e2
3
+ metadata.gz: 79095cb633a355cf6539223cc590f73272f56a37
4
+ data.tar.gz: 46cb6db3f1822c9d827fe076b17b57b75af84437
5
5
  SHA512:
6
- metadata.gz: 35eefa0da9ea54a46bfc37d6a1d941ac02ee00ebef05036a8f81b9b21ffa6c0913d679327779f740645baf1213280836a5a990f6dc7f1bd13a494a01a06ccd54
7
- data.tar.gz: 418eeb5037329e5c58e2b764a62d651fb6f893a594560513a83f425eaa061151201359ae77465877af4dfb48256ae2c9bf2af23f37c12eec830a0059deb73157
6
+ metadata.gz: e57b9e7a12d6950b21ec3bc31335a3ed1ea4541bc1a3ff7c37ddef28dd4e1983c5014b7025bb0d38662dc96c50b4a8b422414d66140371fb6d6a8eee4e08cd27
7
+ data.tar.gz: 6f6a43d2e95c1d44617c61a943f8cc1dab7a6873a63a9bd3c179daca3bf539196b8f07ef1cb3ff15b615c62806e9a34b36ddae15fd5b130557f070dbcfef6b20
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  # A sample Gemfile
2
2
  source "https://rubygems.org"
3
-
4
3
  gemspec
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- taproot (0.1.4)
4
+ taproot (0.1.5)
5
5
  activesupport (~> 4.1.1)
6
6
  awesome_print (~> 1.2.0)
7
7
  braintree (~> 2.33.1)
@@ -28,7 +28,7 @@ GEM
28
28
  i18n (0.6.11)
29
29
  json (1.8.1)
30
30
  method_source (0.8.2)
31
- minitest (5.4.0)
31
+ minitest (5.4.1)
32
32
  multi_json (1.10.1)
33
33
  pry (0.9.12.6)
34
34
  coderay (~> 1.0)
@@ -55,7 +55,7 @@ GEM
55
55
  tins (~> 1.0)
56
56
  thread_safe (0.3.4)
57
57
  tilt (1.4.1)
58
- tins (1.3.0)
58
+ tins (1.3.2)
59
59
  tzinfo (1.2.2)
60
60
  thread_safe (~> 0.1)
61
61
 
@@ -24,8 +24,6 @@ class BraintreeAccount
24
24
  {
25
25
  :environment => @environment,
26
26
  :merchant_id => @merchant_id,
27
- :public_key => _display(@public_key),
28
- :private_key => _display(@private_key)
29
27
  }
30
28
  end
31
29
 
@@ -5,6 +5,7 @@ require "braintree"
5
5
  require "term/ansicolor"
6
6
  require "exception_handler"
7
7
  require "config_manager"
8
+ require "base64"
8
9
 
9
10
  class Taproot < Sinatra::Base
10
11
  use ExceptionHandling
@@ -33,7 +34,6 @@ class Taproot < Sinatra::Base
33
34
  end
34
35
 
35
36
  get "/client_token" do
36
- content_type :json
37
37
  begin
38
38
  if params["customer_id"]
39
39
  Braintree::Customer.create(
@@ -41,19 +41,17 @@ class Taproot < Sinatra::Base
41
41
  )
42
42
  end
43
43
 
44
- raw_client_token = Braintree::ClientToken.generate
45
- client_token = JSON.parse(Base64.decode64(raw_client_token))
46
-
47
- if params["touchDisabled"]
48
- client_token["paypal"]["touchDisabled"] = true if client_token["paypalEnabled"]
49
- end
44
+ decode = params.has_key?("decode")
45
+ params.delete("decode")
50
46
 
51
- if Braintree::Configuration.environment == :production
52
- client_token["venmo"] = "production"
47
+ status 201
48
+ if decode
49
+ JSON.pretty_generate(_client_token(:decoded => true))
50
+ else
51
+ JSON.pretty_generate(:client_token => _client_token)
53
52
  end
54
-
55
- JSON.pretty_generate(client_token)
56
53
  rescue Exception => e
54
+ content_type :json
57
55
  status 422
58
56
  JSON.pretty_generate(:message => e.message)
59
57
  end
@@ -80,7 +78,7 @@ class Taproot < Sinatra::Base
80
78
 
81
79
  content_type :json
82
80
  if nonce
83
- JSON.pretty_generate(sale(nonce, params.fetch(:amount, 10)))
81
+ JSON.pretty_generate(sale(nonce, params.fetch(:amount, 1)))
84
82
  else
85
83
  JSON.pretty_generate(
86
84
  :message => "Required params: #{server_config[:nonce_param_names].join(", or ")}"
@@ -93,7 +91,28 @@ class Taproot < Sinatra::Base
93
91
 
94
92
  content_type :json
95
93
  if nonce
96
- JSON.pretty_generate(sale(nonce, params.fetch(:amount, 10)))
94
+ JSON.pretty_generate(sale(nonce, params.fetch(:amount, 1)))
95
+ else
96
+ JSON.pretty_generate(
97
+ :message => "Required params: #{server_config[:nonce_param_names].join(", or ")}"
98
+ )
99
+ end
100
+ end
101
+
102
+ post "/customers/:customer_id/vault" do
103
+ content_type :json
104
+
105
+ nonce = nonce_from_params
106
+ customer_id = params[:customer_id]
107
+
108
+ unless customer_id.present?
109
+ status 422
110
+ JSON.pretty_generate(:message => "Required param: customer_id")
111
+ return
112
+ end
113
+
114
+ if nonce
115
+ JSON.pretty_generate(vault(nonce, customer_id))
97
116
  else
98
117
  JSON.pretty_generate(
99
118
  :message => "Required params: #{server_config[:nonce_param_names].join(", or ")}"
@@ -224,15 +243,51 @@ class Taproot < Sinatra::Base
224
243
 
225
244
  result = Braintree::Transaction.sale(transaction_params)
226
245
 
227
- if result.success?
246
+ if result.transaction.present?
247
+ void_result = Braintree::Transaction.void(result.transaction.id)
248
+ end
249
+
250
+ if result.success? and void_result.present? and void_result.success?
228
251
  {:message => "created #{result.transaction.id} #{result.transaction.status}"}
229
252
  else
230
- {:message => result.message}
253
+ {:message => result.message || void_result.message}
231
254
  end
255
+
232
256
  rescue Exception => e
233
257
  {:message => e.message}
234
258
  end
235
259
 
260
+ def vault(nonce, customer_id)
261
+ log("Vaulting payment method #{nonce} for customer #{customer_id}")
262
+
263
+ result = Braintree::PaymentMethod.create({
264
+ :customer_id => customer_id,
265
+ :payment_method_nonce => nonce
266
+ })
267
+
268
+ if result.success?
269
+ {:message => "Vaulted payment method #{result.payment_method.token}"}
270
+ else
271
+ {:message => result.message}
272
+ end
273
+ end
274
+
275
+ def _client_token(options = {})
276
+ content_type :json
277
+
278
+ raw_client_token = Braintree::ClientToken.generate(params)
279
+ client_token = JSON.parse(Base64.decode64(raw_client_token))
280
+ if Braintree::Configuration.environment == :production
281
+ client_token["venmo"] = "production"
282
+ end
283
+
284
+ if options[:decoded]
285
+ client_token
286
+ else
287
+ Base64.strict_encode64(JSON.dump(client_token))
288
+ end
289
+ end
290
+
236
291
  def _color_status(status)
237
292
  if status >= 400
238
293
  yellow status.to_s
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
12
12
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
13
13
  gem.name = "taproot"
14
14
  gem.require_paths = ["lib"]
15
- gem.version = "0.1.5"
15
+ gem.version = "0.1.6"
16
16
 
17
17
  gem.add_dependency "sinatra", "~> 1.4.5"
18
18
  gem.add_dependency "braintree", "~> 2.33.1"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taproot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Mills