zuora_connect 2.0.60 → 3.0.0.pre.d

Sign up to get free protection for your applications and to get access to all the features.
@@ -92,7 +92,7 @@ module Resque
92
92
  log_with_severity :error, "Error reserving job: #{ex.inspect}"
93
93
  log_with_severity :error, ex.backtrace.join("\n")
94
94
  end
95
- raise e
95
+ raise ex
96
96
  end
97
97
 
98
98
  def create_job(queue, payload)
@@ -9,10 +9,12 @@ require 'resque/silence_done'
9
9
  require 'resque/self_lookup'
10
10
  require 'resque/plugins/custom_logger'
11
11
  require 'resque/plugins/app_instance_job'
12
- require 'logging/connect_formatter'
13
- require 'metrics/influx/point_value'
14
12
  require 'metrics/net'
15
13
  require 'mono_logger'
14
+ require 'zuora_connect/zuora_audit'
15
+ require 'active_record'
16
+ require 'zuora_observability'
17
+ ::ActiveRecord::Base.send :include, ZuoraConnect::ZuoraAudit
16
18
 
17
19
  module ZuoraConnect
18
20
  class << self
@@ -26,68 +28,9 @@ module ZuoraConnect
26
28
  when 'test'
27
29
  Rails.logger
28
30
  else
29
- @logger ||= custom_logger(name: "Connect", level: Rails.logger.level)
31
+ @logger ||= ZuoraObservability::Logger.custom_logger(name: "Connect", level: Rails.logger.level)
30
32
  end
31
33
  end
32
-
33
- def custom_logger(name: "", level: Rails.logger.present? ? Rails.logger.level : MonoLogger::INFO, type: :ougai)
34
- #puts name + ' - ' + {Logger::WARN => 'Logger::WARN', Logger::ERROR => 'Logger::ERROR', Logger::DEBUG => 'Logger::DEBUG', Logger::INFO => 'Logger::INFO' }[level] + ' - '
35
- if type == :ougai
36
- require 'ougai'
37
- require "ougai/formatters/customizable"
38
- #logger = Ougai::Logger.new(MonoLogger.new(STDOUT))
39
- logger = Ougai::Logger.new(STDOUT)
40
- logger.level = level
41
- if ZuoraConnect.configuration.json_logging
42
- logger.formatter = Ougai::Formatters::ConnectFormatter.new(name)
43
- logger.before_log = lambda do |data|
44
- data[:trace_id] = ZuoraConnect::RequestIdMiddleware.request_id if ZuoraConnect::RequestIdMiddleware.request_id.present?
45
- data[:zuora_trace_id] = ZuoraConnect::RequestIdMiddleware.zuora_request_id if ZuoraConnect::RequestIdMiddleware.zuora_request_id.present?
46
- #data[:traces] = {amazon_id: data[:trace_id], zuora_id: data[:zuora_trace_id]}
47
- end
48
- else
49
- logger.formatter = Ougai::Formatters::Customizable.new(
50
- format_err: proc do |data|
51
- next nil unless data.key?(:err)
52
- err = data.delete(:err)
53
- " #{err[:name]} (#{err[:message]})\n #{err[:stack]}"
54
- end,
55
- format_data: proc do |data|
56
- data.delete(:app_instance_id); data.delete(:tenant_ids); data.delete(:organization); data.delete(:environment)
57
- format('%s %s: %s', 'DATA'.ljust(6), Time.now.strftime('%FT%T.%6NZ'), "#{data.to_json}") if data.present?
58
- end,
59
- format_msg: proc do |severity, datetime, _progname, data|
60
- msg = data.delete(:msg)
61
- format('%s %s: %s', severity.ljust(6), datetime, msg)
62
- end
63
- )
64
- logger.formatter.datetime_format = '%FT%T.%6NZ'
65
- end
66
- else
67
- logger = MonoLogger.new(STDOUT)
68
- logger.level = level
69
- logger.formatter = proc do |serverity, datetime, progname, msg|
70
- begin
71
- msg = JSON.parse(msg)
72
- rescue JSON::ParserError => ex
73
- end
74
- if ZuoraConnect.configuration.json_logging
75
- require 'json'
76
- store = {
77
- name: name,
78
- level: serverity,
79
- timestamp: datetime.strftime('%FT%T.%6NZ'),
80
- pid: Process.pid,
81
- message: name == "ActionMailer" ? msg.strip : msg
82
- }
83
- JSON.dump(store) + "\n"
84
- else
85
- format('%s %s: %s', serverity.ljust(6), datetime, msg) + "\n"
86
- end
87
- end
88
- end
89
- return logger
90
- end
91
34
  end
92
35
 
93
36
  module Controllers
@@ -144,7 +87,7 @@ module ZuoraConnect
144
87
  verify_server_cert: false,
145
88
  log_level: Logger::INFO,
146
89
  service_name: ENV['DEIS_APP'].present? ? ENV['DEIS_APP'] : Rails.application.class.parent_name,
147
- logger: ZuoraConnect.custom_logger(name: "ElasticAPM", level: MonoLogger::WARN)
90
+ logger: ZuoraObservability::Logger.custom_logger(name: "ElasticAPM", level: MonoLogger::WARN)
148
91
  })
149
92
  defaults.merge!({disable_send: true}) if defined?(Rails::Console)
150
93
 
@@ -124,16 +124,22 @@ module ZuoraConnect
124
124
  ElasticAPM.set_user(session["#{@appinstance.id}::user::email"]) if defined?(ElasticAPM) && ElasticAPM.running?
125
125
  PaperTrail.whodunnit = session["#{@appinstance.id}::user::email"] if defined?(PaperTrail)
126
126
  end
127
+
128
+ locale = (session["#{@appinstance.id}::user::locale"] || "").gsub("_", "-")
127
129
  begin
128
- locale = session["#{@appinstance.id}::user::locale"]
129
130
  I18n.locale = locale.present? ? locale : @appinstance.locale
130
131
  rescue I18n::InvalidLocale => ex
132
+ if locale.include?("-")
133
+ locale = locale.split("-").first
134
+ retry
135
+ elsif locale != session["#{@appinstance.id}::user::language"]
136
+ locale = session["#{@appinstance.id}::user::language"]
137
+ retry
138
+ end
131
139
  ZuoraConnect.logger.error(ex) if !ZuoraConnect::AppInstance::IGNORED_LOCALS.include?(ex.locale.to_s.downcase)
132
140
  end
133
- begin
134
- Time.zone = session["#{@appinstance.id}::user::timezone"] ? session["#{@appinstance.id}::user::timezone"] : @appinstance.timezone
135
- rescue
136
- ZuoraConnect.logger.error(ex)
141
+ if @appinstance.user_timezone.blank?
142
+ @appinstance.set_timezone(timezone: session["#{@appinstance.id}::user::timezone"], type: :default)
137
143
  end
138
144
  end
139
145
  rescue ZuoraConnect::Exceptions::InvalidCredentialSet => ex
@@ -219,6 +225,80 @@ module ZuoraConnect
219
225
  return (request.headers['ZuoraCurrentEntity'].present? || cookies['ZuoraCurrentEntity'].present?)
220
226
  end
221
227
 
228
+ def create_new_instance
229
+ ZuoraConnect::AppInstance.read_master_db do
230
+ Thread.current[:appinstance] = nil
231
+ ZuoraConnect.logger.with_fields = {} if ZuoraConnect.logger.is_a?(Ougai::Logger)
232
+ Rails.logger.with_fields = {} if Rails.logger.is_a?(Ougai::Logger)
233
+
234
+ if defined?(ElasticAPM) && ElasticAPM.running? && ElasticAPM.respond_to?(:set_label)
235
+ ElasticAPM.set_label(:trace_id, request.uuid)
236
+ end
237
+
238
+ zuora_host = request.headers['zuora-host']
239
+ zuora_entity_id = (request.headers['zuora-entity-ids'] || '').gsub(
240
+ '-',
241
+ ''
242
+ ).split(',').first
243
+
244
+ # Validate host present
245
+ if zuora_host.blank?
246
+ render json: {
247
+ status: 401,
248
+ message: 'zuora-host header was not supplied.'
249
+ }, status: :unauthorized
250
+ return
251
+ end
252
+
253
+ # Validate entity-ids present
254
+ if zuora_entity_id.blank?
255
+ render json: {
256
+ status: 401,
257
+ message: 'zuora-entity-ids header was not supplied.'
258
+ }, status: :unauthorized
259
+ return
260
+ end
261
+
262
+ rest_domain = ZuoraAPI::Login.new(url: "https://#{zuora_host}").rest_domain
263
+ app_instance_id = ZuoraConnect::AppInstance.where(
264
+ 'zuora_entity_ids ?& array[:entities] AND zuora_domain = :host',
265
+ entities: [zuora_entity_id],
266
+ host: rest_domain
267
+ ).pluck(:id).first
268
+
269
+ if app_instance_id.present?
270
+ render json: {
271
+ status: 409,
272
+ message: 'Instance already exists.',
273
+ app_instance_id: app_instance_id
274
+ }, status: 409
275
+ else
276
+ Apartment::Tenant.switch!("public")
277
+ retry_count = 3
278
+ begin
279
+ @appinstance = new_instance(
280
+ next_instance_id,
281
+ zuora_entity_id,
282
+ rest_domain,
283
+ retry_count: retry_count
284
+ )
285
+ rescue ActiveRecord::RecordNotUnique
286
+ retry if (retry_count -= 1).positive?
287
+ return
288
+ end
289
+
290
+ app_instance_id = @appinstance.id
291
+ end
292
+
293
+ begin
294
+ Apartment::Tenant.switch!('public')
295
+ Apartment::Tenant.create(app_instance_id.to_s)
296
+ rescue Apartment::TenantExists
297
+ ZuoraConnect.logger.debug('Tenant Already Exists')
298
+ end
299
+ end
300
+ end
301
+
222
302
  private
223
303
  def setup_instance_via_prod_mode
224
304
  zuora_entity_id = request.headers['ZuoraCurrentEntity'] || cookies['ZuoraCurrentEntity']
@@ -226,7 +306,7 @@ module ZuoraConnect
226
306
  if zuora_entity_id.present?
227
307
  zuora_tenant_id = cookies['Zuora-Tenant-Id']
228
308
  zuora_user_id = cookies['Zuora-User-Id']
229
- zuora_host = request.headers["HTTP_X_FORWARDED_HOST"] || "apisandbox.zuora.com"
309
+ zuora_host = request.headers['HTTP_X_FORWARDED_HOST'] || request.headers['Zuora-Host'] || 'apisandbox.zuora.com'
230
310
 
231
311
  zuora_details = {'host' => zuora_host, 'user_id' => zuora_user_id, 'tenant_id' => zuora_tenant_id, 'entity_id' => zuora_entity_id}
232
312
  auth_headers = {}
@@ -328,13 +408,16 @@ module ZuoraConnect
328
408
 
329
409
  zuora_user_id = cookies['Zuora-User-Id'] || session["ZuoraCurrentIdentity"]['userId']
330
410
 
331
- #One deployed instance
332
411
  if appinstances.size == 1
333
412
  ZuoraConnect.logger.debug("Instance is #{appinstances.to_h.keys.first}")
334
413
  @appinstance = ZuoraConnect::AppInstance.find(appinstances.to_h.keys.first)
414
+ end
335
415
 
416
+ # One deployed instance with credentials
417
+ if defined?(@appinstance) && !@appinstance['zuora_logins'].nil?
336
418
  #Add user/update
337
419
  begin
420
+ ZuoraConnect::ZuoraUser.reset_table_name
338
421
  @zuora_user = ZuoraConnect::ZuoraUser.where(:zuora_user_id => zuora_user_id).first
339
422
  rescue ActiveRecord::StatementInvalid => ex
340
423
  if ex.message.include?("PG::UndefinedTable") && ex.message.include?("zuora_users")
@@ -355,10 +438,12 @@ module ZuoraConnect
355
438
  @zuora_user = ZuoraConnect::ZuoraUser.create!(:zuora_user_id => zuora_user_id, :zuora_identity_response => {zuora_entity_id => session["ZuoraCurrentIdentity"]})
356
439
  end
357
440
  @zuora_user.session = session
441
+ ZuoraConnect::ZuoraUser.current_user_id = zuora_user_id
358
442
  session["#{@appinstance.id}::user::localUserId"] = @zuora_user.id
359
443
  session["#{@appinstance.id}::user::email"] = session['ZuoraCurrentIdentity']["username"]
360
444
  session["#{@appinstance.id}::user::timezone"] = session['ZuoraCurrentIdentity']["timeZone"]
361
- session["#{@appinstance.id}::user::locale"] = session['ZuoraCurrentIdentity']["language"]
445
+ session["#{@appinstance.id}::user::language"] = session['ZuoraCurrentIdentity']["language"]
446
+ session["#{@appinstance.id}::user::locale"] = session['ZuoraCurrentIdentity']["locale"]
362
447
  session["appInstance"] = @appinstance.id
363
448
 
364
449
  #We have multiple, user must pick
@@ -380,79 +465,85 @@ module ZuoraConnect
380
465
  return
381
466
  end
382
467
  Apartment::Tenant.switch!("public")
383
- ActiveRecord::Base.transaction do
384
- ActiveRecord::Base.connection.execute('LOCK public.zuora_users IN ACCESS EXCLUSIVE MODE')
385
- 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)
468
+ retry_count = 3
469
+ task_data = {}
470
+ begin
471
+ ActiveRecord::Base.transaction do
472
+ ActiveRecord::Base.connection.execute('LOCK public.zuora_users IN ACCESS EXCLUSIVE MODE')
386
473
 
387
- if appinstances.size > 0
388
- redirect_to "https://#{zuora_host}/apps/newlogin.do?retURL=#{request.fullpath}"
389
- return
390
- end
474
+ unless defined?(@appinstance)
475
+ 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)
391
476
 
392
- next_id = (ZuoraConnect::AppInstance.all.where('id > 24999999').order(id: :desc).limit(1).pluck(:id).first || 24999999) + 1
393
- user = (ENV['DEIS_APP'] || "Application").split('-').map(&:capitalize).join(' ')
394
- body = {
395
- 'userId' => zuora_user_id,
396
- 'entityIds' => [zuora_entity_id.unpack("a8a4a4a4a12").join('-')],
397
- 'customAuthorities' => [],
398
- 'additionalInformation' => {
399
- 'description' => "This user is for #{user} application.",
400
- 'name' => "#{user} API User #{next_id}"
401
- }
402
- }
403
-
404
- oauth_response, response = zuora_client.rest_call(
405
- method: :post,
406
- body: body.to_json,
407
- url: zuora_client.rest_endpoint("genesis/clients").gsub('v1/', ''),
408
- session_type: zuora_client.class == ZuoraAPI::Oauth ? :bearer : :basic,
409
- headers: auth_headers
410
- )
477
+ if appinstances.size > 0
478
+ redirect_to "https://#{zuora_host}/apps/newlogin.do?retURL=#{request.fullpath}"
479
+ return
480
+ end
481
+ end
411
482
 
412
- new_zuora_client = ZuoraAPI::Oauth.new(url: "https://#{zuora_host}", oauth_client_id: oauth_response["clientId"], oauth_secret: oauth_response["clientSecret"] )
413
- if session["ZuoraCurrentUserInfo"].blank?
414
- client_describe, response = new_zuora_client.rest_call(url: zuora_client.rest_endpoint("genesis/user/info").gsub('v1/', ''), session_type: :bearer)
415
- else
416
- client_describe = session["ZuoraCurrentUserInfo"]
417
- end
483
+ next_id = defined?(@appinstance) ? @appinstance.id : next_instance_id
484
+ if task_data.blank?
485
+ user = (ENV['DEIS_APP'] || "Application").split('-').map(&:capitalize).join(' ')
486
+ body = {
487
+ 'userId' => zuora_user_id,
488
+ 'entityIds' => [zuora_entity_id.unpack("a8a4a4a4a12").join('-')],
489
+ 'customAuthorities' => [],
490
+ 'additionalInformation' => {
491
+ 'description' => "This user is for #{user} application.",
492
+ 'name' => "#{user} API User #{next_id}"
493
+ }
494
+ }
495
+
496
+ oauth_response, response = zuora_client.rest_call(
497
+ method: :post,
498
+ body: body.to_json,
499
+ url: zuora_client.rest_endpoint("genesis/clients").gsub('v1/', ''),
500
+ session_type: zuora_client.class == ZuoraAPI::Oauth ? :bearer : :basic,
501
+ headers: auth_headers
502
+ )
503
+
504
+ new_zuora_client = ZuoraAPI::Oauth.new(url: "https://#{zuora_host}", oauth_client_id: oauth_response["clientId"], oauth_secret: oauth_response["clientSecret"] )
505
+ if session["ZuoraCurrentUserInfo"].blank?
506
+ client_describe, response = new_zuora_client.rest_call(url: zuora_client.rest_endpoint("genesis/user/info").gsub('v1/', ''), session_type: :bearer)
507
+ else
508
+ client_describe = session["ZuoraCurrentUserInfo"]
509
+ end
418
510
 
419
- available_entities = client_describe["accessibleEntities"].select {|entity| entity['id'] == zuora_entity_id}
420
- task_data = {
421
- "id": next_id,
422
- "name": client_describe["tenantName"],
423
- "mode": "Collections",
424
- "status": "Running",
425
- ZuoraConnect::AppInstance::LOGIN_TENANT_DESTINATION => {
426
- "tenant_type": "Zuora",
427
- "username": session["ZuoraCurrentIdentity"]["username"],
428
- "url": new_zuora_client.url,
429
- "status": "Active",
430
- "oauth_client_id": oauth_response['clientId'],
431
- "oauth_secret": oauth_response['clientSecret'],
432
- "authentication_type": "OAUTH",
433
- "entities": available_entities.map {|e| e.merge({'displayName' => client_describe["tenantName"]})}
434
- },
435
- "tenant_ids": available_entities.map{|e| e['entityId']}.uniq,
436
- }
437
- 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, :zuora_domain => zuora_client.rest_domain, :zuora_entity_ids => [zuora_entity_id]}
438
- @appinstance = ZuoraConnect::AppInstance.new(mapped_values)
439
- retry_count = 0
440
- begin
441
- @appinstance.save(:validate => false)
442
- rescue ActiveRecord::RecordNotUnique => ex
443
- if (retry_count += 1) < 3
444
- @appinstance.assign_attributes({:api_token => rand(36**64).to_s(36), :token => rand(36**64).to_s(36)})
445
- retry
511
+ available_entities = client_describe["accessibleEntities"].select {|entity| entity['id'] == zuora_entity_id}
512
+ task_data = {
513
+ "id": next_id,
514
+ "name": client_describe["tenantName"],
515
+ "mode": "Collections",
516
+ "status": "Running",
517
+ ZuoraConnect::AppInstance::LOGIN_TENANT_DESTINATION => {
518
+ "tenant_type": "Zuora",
519
+ "username": session["ZuoraCurrentIdentity"]["username"],
520
+ "url": new_zuora_client.url,
521
+ "status": "Active",
522
+ "oauth_client_id": oauth_response['clientId'],
523
+ "oauth_secret": oauth_response['clientSecret'],
524
+ "authentication_type": "OAUTH",
525
+ "entities": available_entities.map {|e| e.merge({'displayName' => client_describe["tenantName"]})}
526
+ },
527
+ "tenant_ids": available_entities.map{|e| e['entityId']}.uniq,
528
+ }
529
+ end
530
+
531
+ if defined?(@appinstance)
532
+ @appinstance.zuora_logins = task_data
533
+ @appinstance.save(:validate => false)
446
534
  else
447
- Thread.current[:appinstance] = nil
448
- session["appInstance"] = nil
449
- render "zuora_connect/static/error_handled", :locals => {
450
- :title => "Application could not create unique tokens.",
451
- :message => "Please contact support or retry launching application."
452
- }, :layout => false
453
- return
535
+ @appinstance = new_instance(
536
+ next_id,
537
+ zuora_entity_id,
538
+ zuora_client.rest_domain,
539
+ task_data: task_data,
540
+ retry_count: retry_count
541
+ )
454
542
  end
455
543
  end
544
+ rescue ActiveRecord::RecordNotUnique
545
+ retry if (retry_count -= 1).positive?
546
+ return
456
547
  end
457
548
 
458
549
  Apartment::Tenant.switch!("public")
@@ -483,8 +574,8 @@ module ZuoraConnect
483
574
 
484
575
  rescue ZuoraAPI::Exceptions::ZuoraAPIError, Exception => ex
485
576
  if ex.message.include?("Referenced User resource(s) not found") && ex.class == ZuoraAPI::Exceptions::ZuoraAPIError
486
- locals = {title: "Provisioning Error", message: "New tenats need to be provisioned by API Gateway('#{ex.message}'). Please contact support."}
487
- render "zuora_connect/static/error_handled", locals: locals, status: 400, layout: false
577
+ locals = {title: "Provisioning Error", message: "New tenants need to be provisioned by API Gateway('#{ex.message}'). Please contact support."}
578
+ render "zuora_connect/static/error_handled", locals: locals, status: 200, layout: false
488
579
  else
489
580
  session.clear
490
581
  if defined?(ex.response) && ex.response.present? && defined?(ex.response.body)
@@ -540,28 +631,76 @@ module ZuoraConnect
540
631
  end
541
632
  end
542
633
 
634
+ def next_instance_id
635
+ min_instance_id = 24_999_999
636
+ (ZuoraConnect::AppInstance.all.where("id > #{min_instance_id}").order(id: :desc).limit(1).pluck(:id).first || min_instance_id) + 1
637
+ end
638
+
639
+ def new_instance(id, zuora_entity_id, rest_domain, task_data: nil, retry_count: 0)
640
+ app_instance = ZuoraConnect::AppInstance.new(
641
+ :id => id,
642
+ :api_token => generate_token,
643
+ :token => generate_token,
644
+ :oauth_expires_at => Time.now + 1000.years,
645
+ :zuora_domain => rest_domain,
646
+ :zuora_entity_ids => [zuora_entity_id]
647
+ )
648
+
649
+ if task_data.nil?
650
+ # no encryption
651
+ app_instance['zuora_logins'] = task_data
652
+ else
653
+ # kms encrypt
654
+ app_instance.zuora_logins = task_data
655
+ end
656
+
657
+ begin
658
+ app_instance.save(:validate => false)
659
+ rescue ActiveRecord::RecordNotUnique
660
+ raise if retry_count > 1
661
+
662
+ Thread.current[:appinstance] = nil
663
+ session['appInstance'] = nil
664
+ render 'zuora_connect/static/error_handled', :locals => {
665
+ :title => 'Application could not create unique tokens.',
666
+ :message => 'Please contact support or retry launching application.'
667
+ }, :layout => false
668
+ return
669
+ end
670
+
671
+ app_instance
672
+ end
673
+
674
+ def generate_token
675
+ rand(36**64).to_s(36)
676
+ end
677
+
543
678
  def setup_instance_via_dev_mode
544
679
  session["appInstance"] = ZuoraConnect.configuration.dev_mode_appinstance
545
- user = ZuoraConnect.configuration.dev_mode_user
546
- key = ZuoraConnect.configuration.dev_mode_pass
547
- values = {:user => user , :key => key, :appinstance => session["appInstance"]}
548
- @appinstance = ZuoraConnect::AppInstance.find_by(:id => values[:appinstance].to_i)
680
+ session["#{ZuoraConnect.configuration.dev_mode_appinstance}::admin"] = ZuoraConnect.configuration.dev_mode_admin
681
+
682
+ values = {
683
+ id: ZuoraConnect.configuration.dev_mode_appinstance,
684
+ access_token: ZuoraConnect.configuration.dev_mode_user,
685
+ refresh_token: ZuoraConnect.configuration.dev_mode_pass,
686
+ token: ZuoraConnect.configuration.dev_mode_pass+ZuoraConnect.configuration.dev_mode_pass,
687
+ api_token: ZuoraConnect.configuration.dev_mode_pass+ZuoraConnect.configuration.dev_mode_pass
688
+ }
689
+
690
+ @appinstance = ZuoraConnect::AppInstance.find_by(:id => ZuoraConnect.configuration.dev_mode_appinstance.to_i)
691
+ ZuoraConnect::ZuoraUser.current_user_id = 0
549
692
  if @appinstance.blank?
550
693
  Apartment::Tenant.switch!("public")
551
694
  begin
552
- Apartment::Tenant.create(values[:appinstance].to_s)
695
+ Apartment::Tenant.create(ZuoraConnect.configuration.dev_mode_appinstance.to_s)
553
696
  rescue Apartment::TenantExists => ex
554
- Apartment::Tenant.drop(values[:appinstance].to_s)
697
+ Apartment::Tenant.drop(ZuoraConnect.configuration.dev_mode_appinstance.to_s)
555
698
  retry
556
699
  end
557
-
558
- @appinstance = ZuoraConnect::AppInstance.new(:id => values[:appinstance].to_i, :access_token => values[:user], :refresh_token => values[:key], :token => "#{values[:key]}#{values[:key]}", :api_token => "#{values[:key]}#{values[:key]}")
559
- @appinstance.save(:validate => false)
560
- end
561
- if @appinstance.access_token.blank? || @appinstance.refresh_token.blank? || @appinstance.token.blank? || @appinstance.api_token.blank?
562
- @appinstance.update_attributes!(:access_token => values["user"], :refresh_token => values["key"], :token => "#{values[:key]}#{values[:key]}", :api_token => "#{values[:key]}#{values[:key]}")
700
+ @appinstance = ZuoraConnect::AppInstance.new()
563
701
  end
564
- session["#{@appinstance.id}::admin"] = ZuoraConnect.configuration.dev_mode_admin
702
+ @appinstance.assign_attributes(values)
703
+ @appinstance.save(:validate => false)
565
704
  end
566
705
  end
567
706
  end