spackle-ruby 0.0.11 → 0.0.12

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
  SHA256:
3
- metadata.gz: d370af3cb13da25635dff5eaee17972e6f540b3ab3ad949097abc0279ca64f88
4
- data.tar.gz: 13fd6753a5dc9f8672cc5705cb13f8ebb8796b56ab685bed48921acc170f119d
3
+ metadata.gz: 18048e2400b535e381a4cf3130d671c5489df5453834133fb2a577ad0a175cb1
4
+ data.tar.gz: 7c98ce5a2d61102e20d079e000002b3f2faa4704efdb39638dedf6f61d491d48
5
5
  SHA512:
6
- metadata.gz: c1ddcc3b1d6b16e37d4a8374d057ef6c312b2a9cac1934740bc8d237f038b1b5613a637d290ceadcc057a4f6176c07e152810a7577a0996c788d7c1c04e1b7d9
7
- data.tar.gz: 1f4a29bddbb7c8d3ba73ebd5a760d424afa308b6f1c19819ef159d6a23dd32f4af329b8256561f067d0ee08df451762164dec8c5dc162aacbd30a6dbb1d7acbe
6
+ metadata.gz: fa08056244492c4697b5f36f43d2acd2c64c943a7597a36d2406115f6e0426ee9ebd3f823ddc75c4050f9bf671b56b4d8f17726fc0d9a1d60668ce20918ba2ba
7
+ data.tar.gz: 779445743a20139ac77fcc9e1b8022bd4ac2bf75350cb5feb7ada99c6d5d278459e507a9c27f51110b700e8d4b8844773ad9213fe770b20b6f1aa6a373d64216
@@ -6,30 +6,48 @@ require 'logger'
6
6
  module Spackle
7
7
  class DynamoDBStore < BaseStore
8
8
  @client = nil
9
- @store_config = {}
9
+ @credentials = nil
10
10
 
11
- def initialize(client = nil, store_config = nil)
12
- @store_config = store_config || {}
13
- @client = client || bootstrap_client
11
+ def initialize()
12
+ @client = bootstrap_client
14
13
  end
15
14
 
16
15
  def get_customer_data(id)
17
16
  result = get_item(id)
18
17
 
19
18
  if result.nil? or result.item.nil?
20
- raise SpackleError.new "Customer #{id} not found"
19
+ return fetch_state_from_api(id)
21
20
  end
22
21
 
23
22
  JSON.parse(result.item['State'])
24
23
  end
25
24
 
25
+ def fetch_state_from_api(id)
26
+ Util.log_warn("Customer #{id} not found in DynamoDB. Fetching from API...")
27
+ uri = URI(Spackle.api_base + '/customers/' + id + '/state')
28
+ https = Net::HTTP.new(uri.host, uri.port)
29
+ https.use_ssl = true
30
+
31
+ request = Net::HTTP::Get.new(uri.path)
32
+ request['Authorization'] = 'Bearer ' + Spackle.api_key
33
+
34
+ response = https.request(request)
35
+ if response.code != '200'
36
+ puts response.code
37
+ puts response.body
38
+ raise SpackleError.new "Customer #{id} not found"
39
+ end
40
+
41
+ JSON.parse(response.body)
42
+ end
43
+
26
44
  private
27
45
 
28
46
  def get_item(id)
29
47
  return @client.get_item({
30
- table_name: @store_config['table_name'],
48
+ table_name: @credentials.session['adapter']['table_name'],
31
49
  key: {
32
- AccountId: @store_config['identity_id'],
50
+ AccountId: @credentials.session['adapter']['identity_id'],
33
51
  CustomerId: "#{id}:#{Spackle.version}"
34
52
  }
35
53
  })
@@ -44,58 +62,56 @@ module Spackle
44
62
  raise SpackleError.new 'API key not set'
45
63
  end
46
64
 
47
- uri = URI(Spackle.api_base + '/sessions')
48
- https = Net::HTTP.new(uri.host, uri.port)
49
- https.use_ssl = true
50
-
51
- request = Net::HTTP::Post.new(uri.path)
52
- request['Authorization'] = 'Bearer ' + Spackle.api_key
53
-
54
- response = https.request(request)
55
- data = JSON.parse(response.body)
56
- Util.log_debug("Created session: #{data}")
57
-
58
- @store_config = data['adapter']
59
- credentials = SpackleCredentials.new(
60
- @store_config['role_arn'],
61
- @store_config['token'],
62
- @store_config['region'],
63
- )
64
-
65
+ @credentials = SpackleAWSCredentials.new
65
66
  Aws::DynamoDB::Client.new(
66
- region: @store_config['region'],
67
- credentials: credentials,
67
+ region: @credentials.session['adapter']['region'],
68
+ credentials: @credentials,
68
69
  )
69
70
  end
70
71
  end
71
72
 
72
- class SpackleCredentials
73
+ class SpackleAWSCredentials
73
74
  include Aws::CredentialProvider
74
75
  include Aws::RefreshingCredentials
75
76
 
76
- @region = nil
77
- @role_arn = nil
78
- @token = nil
77
+ @client = nil
78
+ @session = {}
79
79
 
80
- def initialize(role_arn, token, region)
81
- @region = region
82
- @role_arn = role_arn
83
- @token = token
80
+ def initialize()
81
+ @session = create_session
84
82
  @client = Aws::STS::Client.new(
85
- region: @region,
83
+ region: @session['adapter']['region'],
86
84
  credentials: false,
87
85
  )
88
86
  super()
89
87
  end
90
88
 
89
+ def session
90
+ @session
91
+ end
92
+
91
93
  private
92
94
 
95
+ def create_session
96
+ uri = URI(Spackle.api_base + '/sessions')
97
+ https = Net::HTTP.new(uri.host, uri.port)
98
+ https.use_ssl = true
99
+
100
+ request = Net::HTTP::Post.new(uri.path)
101
+ request['Authorization'] = 'Bearer ' + Spackle.api_key
102
+
103
+ response = https.request(request)
104
+ data = JSON.parse(response.body)
105
+ Util.log_debug("Created session: #{data}")
106
+ data
107
+ end
108
+
93
109
  def refresh
94
110
  Util.log_debug('Refreshing DynamoDB credentials...')
95
111
  c = @client.assume_role_with_web_identity({
96
- role_arn: @role_arn,
112
+ role_arn: @session['adapter']['role_arn'],
97
113
  role_session_name: Base64.strict_encode64(SecureRandom.uuid),
98
- web_identity_token: @token
114
+ web_identity_token: @session['adapter']['token'],
99
115
  }).credentials
100
116
  @credentials = Aws::Credentials.new(
101
117
  c.access_key_id,
data/spackle.gemspec CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH.unshift(::File.join(::File.dirname(__FILE__), "lib"))
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "spackle-ruby"
5
- s.version = "0.0.11"
5
+ s.version = "0.0.12"
6
6
  s.summary = "Spackle Ruby gem"
7
7
  s.description = "Spackle is the easiest way to integrate your Ruby app with Stripe Billing. " \
8
8
  "See https://www.spackle.so for details."
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spackle-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spackle
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-02 00:00:00.000000000 Z
11
+ date: 2023-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -112,7 +112,7 @@ metadata:
112
112
  github_repo: ssh://github.com/spackleso/spackle-ruby
113
113
  homepage_uri: https://docs.spackle.so/ruby
114
114
  source_code_uri: https://github.com/spackleso/spackle-ruby
115
- post_install_message:
115
+ post_install_message:
116
116
  rdoc_options: []
117
117
  require_paths:
118
118
  - lib
@@ -127,8 +127,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  - !ruby/object:Gem::Version
128
128
  version: '0'
129
129
  requirements: []
130
- rubygems_version: 3.0.3.1
131
- signing_key:
130
+ rubygems_version: 3.4.10
131
+ signing_key:
132
132
  specification_version: 4
133
133
  summary: Spackle Ruby gem
134
134
  test_files: []