zuora_connect 2.0.5p → 2.0.5q

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
  SHA256:
3
- metadata.gz: 6fcd3261006fd6d36a06fe1528c53dc1eaeff482589943f82931f660a188bc59
4
- data.tar.gz: 877292f064f221c3c779e262050d3c77fcaa64f59d944a247e13aa68ac9218ed
3
+ metadata.gz: d533bc392f7e7b927a1cbcd99fb2e83efb1d84adf57378e114e62e9f1167d94c
4
+ data.tar.gz: c7182d8e36035223fe1db8711094772890e8dcb5ad3dbe77a00e2d63018f1e4e
5
5
  SHA512:
6
- metadata.gz: acc1460b1ff720d381660f4447a6931dfeead161e2b48005732b64b2422dd226926196f72ff226aa1c2d69852f8b2a59ae4df00538b32942893497309d7186f1
7
- data.tar.gz: 54b3ee18a7bc3f1f9f2f4fb3c27415a65b51b49c4cf908c98a2f56e85b04fdc03142f9364f8ee3030df50e474aadd8658654613e4d53c24779ab5257da391487
6
+ metadata.gz: 113fb44242e94367e01f08a0948f1181b254a4418a3da25dfc4a698758eab1dd5dd763a40ed747e580bd50645b36deb08291a0e60c48ef6c37972c59eb61b0f1
7
+ data.tar.gz: c02a67c7a5fb41c97e17ffbe3444a003d753ae1113678c5abfebdd4b37124f40572cc0744a50f7109fcbfd07da0d4dd2949082dfbbd15fd58beb76fd93190465
@@ -16,7 +16,7 @@ module ZuoraConnect
16
16
  BLANK_OBJECT_ID_LOOKUP = 'BlankValueSupplied'
17
17
  HOLDING_PATTERN_SLEEP = 5.seconds
18
18
  CONNECT_COMMUNICATION_SLEEP= 5.seconds
19
- IGNORED_LOCALS = ['fr', 'ja', 'sp']
19
+ IGNORED_LOCALS = ['fr', 'ja', 'es', 'zh']
20
20
  INTERNAL_HOSTS = []
21
21
  LOGIN_TENANT_DESTINATION = 'target_login'
22
22
 
@@ -0,0 +1,6 @@
1
+ class AddUniqueIndex < ActiveRecord::Migration[5.0]
2
+ def change
3
+ add_index :zuora_connect_app_instances, :api_token, unique: true
4
+ add_index :zuora_connect_app_instances, :token, unique: true
5
+ end
6
+ end
@@ -170,17 +170,18 @@ module ZuoraConnect
170
170
  @zuora_user.zuora_identity_response[zuora_entity_id] = session["ZuoraCurrentIdentity"]
171
171
  @zuora_user.save!
172
172
  end
173
-
174
- session["#{@appinstance.id}::user::email"] = session["username"]
175
173
  else
176
174
  ZuoraConnect.logger.debug("New zuora user object for #{zuora_user_id}")
177
175
  @zuora_user = ZuoraConnect::ZuoraUser.create!(:zuora_user_id => zuora_user_id, :zuora_identity_response => {zuora_entity_id => session["ZuoraCurrentIdentity"]})
178
176
  end
179
177
  @zuora_user.session = session
178
+ session["#{@appinstance.id}::user::email"] = session['ZuoraCurrentIdentity']["username"]
179
+ session["#{@appinstance.id}::user::timezone"] = session['ZuoraCurrentIdentity']["timeZone"]
180
+ session["#{@appinstance.id}::user::locale"] = session['ZuoraCurrentIdentity']["language"]
180
181
  session["appInstance"] = @appinstance.id
181
182
 
182
183
  #We have multiple, user must pick
183
- elsif appinstances.size > 1
184
+ elsif appinstances.size > 1
184
185
  ZuoraConnect.logger.debug("User must select instance. #{@names}")
185
186
  render "zuora_connect/static/launch", :locals => {:names => appinstances.to_h}
186
187
  return
@@ -199,15 +200,15 @@ module ZuoraConnect
199
200
 
200
201
  ActiveRecord::Base.transaction do
201
202
  ActiveRecord::Base.connection.execute('LOCK public.zuora_users IN ACCESS EXCLUSIVE MODE')
202
- next_id = (ZuoraConnect::AppInstance.all.where(:access_token => nil).order(id: :desc).limit(1).pluck(:id).first || 24999999) + 1
203
-
203
+ sleep(2) #Sleep needed to wait for instance insertion
204
204
  appinstances = ZuoraConnect::AppInstance.where("zuora_entity_ids ?& array[:entities] = true AND zuora_domain = :host", entities: [zuora_entity_id], host: zuora_client.rest_domain).pluck(:id, :name)
205
205
  if appinstances.size > 0
206
- ZuoraConnect.logger.warn("Double tenant create for '#{zuora_client.rest_domain}' - '#{zuora_entity_id}'")
206
+ ZuoraConnect.logger.warn("Double tenant create for '#{zuora_client.rest_domain}' - '#{zuora_entity_id}' - '#{session["ZuoraCurrentIdentity"]["username"]}'")
207
207
  redirect_to "https://#{zuora_host}/apps/newlogin.do?retURL=#{CGI.escape(request.fullpath)}"
208
208
  return
209
209
  end
210
210
 
211
+ next_id = (ZuoraConnect::AppInstance.all.where('id > 24999999').order(id: :desc).limit(1).pluck(:id).first || 24999999) + 1
211
212
  user = (ENV['DEIS_APP'] || "Application").split('-').map(&:capitalize).join(' ')
212
213
  body = {
213
214
  'userId' => zuora_user_id,
@@ -215,7 +216,7 @@ module ZuoraConnect
215
216
  'customAuthorities' => [],
216
217
  'additionalInformation' => {
217
218
  'description' => "This user is for #{user} application.",
218
- 'name' => "#{user} API User"
219
+ 'name' => "#{user} API User #{next_id}"
219
220
  }
220
221
  }
221
222
 
@@ -228,12 +229,6 @@ module ZuoraConnect
228
229
  client_describe = session["ZuoraCurrentUserInfo"]
229
230
  end
230
231
 
231
- Apartment::Tenant.switch!("public")
232
- begin
233
- Apartment::Tenant.create(next_id.to_s)
234
- rescue Apartment::TenantExists => ex
235
- ZuoraConnect.logger.debug("Tenant Already Exists")
236
- end
237
232
  available_entities = client_describe["accessibleEntities"].select {|entity| entity['id'] == client_describe['defaultEntityId']}
238
233
  task_data = {
239
234
  "id": next_id,
@@ -252,12 +247,36 @@ module ZuoraConnect
252
247
  },
253
248
  "tenant_ids": available_entities.map{|e| e['entityId'] }.push(client_describe["tenantId"]).uniq,
254
249
  }
250
+ mapped_values = {:id => next_id, :api_token => rand(36**64).to_s(36), :token => rand(36**64).to_s(36), :zuora_logins => task_data, :oauth_expires_at => Time.now + 1000.years}
251
+ @appinstance = ZuoraConnect::AppInstance.new(mapped_values)
252
+ retry_count = 0
253
+ begin
254
+ @appinstance.save(:validate => false)
255
+ rescue ActiveRecord::RecordNotUnique => ex
256
+ if (retry_count += 1) < 3
257
+ @appinstance.assign_attributes({:api_token => rand(36**64).to_s(36), :token => rand(36**64).to_s(36)})
258
+ retry
259
+ else
260
+ Thread.current[:appinstance] = nil
261
+ session["appInstance"] = nil
262
+ render "zuora_connect/static/error_handled", :locals => {
263
+ :title => "Application could not create unique tokens.",
264
+ :message => "Please contact support or retry launching application."
265
+ }
266
+ return
267
+ end
268
+ end
269
+ end
255
270
 
256
- @appinstance = ZuoraConnect::AppInstance.new(:id => next_id, :zuora_logins => task_data, :oauth_expires_at => Time.now + 1000.years)
257
- @appinstance.save(:validate => false)
258
- @appinstance.refresh
259
- session["appInstance"] = @appinstance.id
271
+ Apartment::Tenant.switch!("public")
272
+ begin
273
+ Apartment::Tenant.create(@appinstance.id.to_s)
274
+ rescue Apartment::TenantExists => ex
275
+ ZuoraConnect.logger.debug("Tenant Already Exists")
260
276
  end
277
+ @appinstance.refresh
278
+ session["appInstance"] = @appinstance.id
279
+
261
280
  rescue => ex
262
281
  ZuoraConnect.logger.error(ex)
263
282
  render "zuora_connect/static/error_unhandled", :locals => {:exception => ex}
@@ -301,11 +320,17 @@ module ZuoraConnect
301
320
  PaperTrail.whodunnit = session["#{@appinstance.id}::user::email"] if defined?(PaperTrail)
302
321
  end
303
322
  begin
304
- I18n.locale = session["#{@appinstance.id}::user::locale"] ? session["#{@appinstance.id}::user::locale"] : @appinstance.locale
323
+ locale = session["#{@appinstance.id}::user::locale"]
324
+ I18n.locale = locale.present? ? locale : @appinstance.locale
305
325
  rescue I18n::InvalidLocale => ex
306
326
  ZuoraConnect.logger.error(ex) if !ZuoraConnect::AppInstance::IGNORED_LOCALS.include?(ex.locale.to_s.downcase)
307
327
  end
308
- Time.zone = session["#{@appinstance.id}::user::timezone"] ? session["#{@appinstance.id}::user::timezone"] : @appinstance.timezone
328
+ begin
329
+ Time.zone = session["#{@appinstance.id}::user::timezone"] ? session["#{@appinstance.id}::user::timezone"] : @appinstance.timezone
330
+ rescue
331
+ ZuoraConnect.logger.error(ex)
332
+ end
333
+
309
334
  ZuoraConnect.logger.debug("[#{@appinstance.blank? ? "N/A" : @appinstance.id}] Authenticate App Request Completed In - #{(Time.now - start_time).round(2)}s")
310
335
  end
311
336
 
@@ -356,6 +381,8 @@ module ZuoraConnect
356
381
  ZuoraConnect.logger.debug({msg: 'Setup values', connect: values}) if Rails.env != "production"
357
382
 
358
383
  @appinstance = ZuoraConnect::AppInstance.where(:id => values["appInstance"].to_i).first
384
+
385
+ mapped_values = {:api_token => values['api_token'], :token => values['api_token'], :access_token => values["access_token"], :refresh_token => values["refresh_token"], :oauth_expires_at => values["expires"]}
359
386
  if @appinstance.blank?
360
387
  Apartment::Tenant.switch!("public")
361
388
  begin
@@ -363,13 +390,12 @@ module ZuoraConnect
363
390
  rescue Apartment::TenantExists => ex
364
391
  ZuoraConnect.logger.debug("Tenant Already Exists")
365
392
  end
366
- @appinstance = ZuoraConnect::AppInstance.new(:api_token => values[:api_token],:id => values["appInstance"].to_i, :access_token => values["access_token"].blank? ? values["user"] : values["access_token"], :token => values["refresh_token"] , :refresh_token => values["refresh_token"].blank? ? values["key"] : values["refresh_token"], :oauth_expires_at => values["expires"])
393
+
394
+ @appinstance = ZuoraConnect::AppInstance.new(mapped_values.merge({:id => values["appInstance"].to_i}))
367
395
  @appinstance.save(:validate => false)
368
396
  else
369
- @appinstance.access_token = values["access_token"] if !values["access_token"].blank? && @appinstance.access_token != values["access_token"]
370
- @appinstance.refresh_token = values["refresh_token"] if !values["refresh_token"].blank? && @appinstance.refresh_token != values["refresh_token"]
371
- @appinstance.oauth_expires_at = values["expires"] if !values["expires"].blank?
372
- @appinstance.api_token = values["api_token"] if !values["api_token"].blank? && @appinstance.api_token != values["api_token"]
397
+ mapped_values.reject! {|key,value| [:api_token,:token].include?(key) && @appinstance[key].blank? }
398
+ @appinstance.assign_attributes(mapped_values)
373
399
  if @appinstance.access_token_changed? && @appinstance.refresh_token_changed?
374
400
  @appinstance.save(:validate => false)
375
401
  else
@@ -1,3 +1,3 @@
1
1
  module ZuoraConnect
2
- VERSION = "2.0.5p"
2
+ VERSION = "2.0.5q"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zuora_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5p
4
+ version: 2.0.5q
5
5
  platform: ruby
6
6
  authors:
7
7
  - Connect Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-18 00:00:00.000000000 Z
11
+ date: 2019-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apartment
@@ -333,6 +333,7 @@ files:
333
333
  - db/migrate/20180301052853_add_catalog_attempted_at.rb
334
334
  - db/migrate/20181206162339_add_fields_to_instance.rb
335
335
  - db/migrate/20190520232221_add_zuora_user_table_and_alter_app_instance_id_table.rb
336
+ - db/migrate/20190520232222_add_unique_index.rb
336
337
  - lib/logging/connect_formatter.rb
337
338
  - lib/metrics/influx/point_value.rb
338
339
  - lib/metrics/net.rb