zuora_connect 2.0.59 → 2.0.60a
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:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b422585e16ec26ecaf39bf40095d9067c162bf23e8d4d5ce12889e653d8da5f1
         | 
| 4 | 
            +
              data.tar.gz: bb96e31845214e4a77274ec8afbd6d5c0a95e11701e842d74616f95ba6fcdf3d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: '078c3ab13f7bb7ad02fa09ebee0b52608e8e40c361b0ca112a3f69cdb06a12e5e834aff0b618c990fe839dda4df8b305324cd6750f9a5a3ae9138c54fee63953'
         | 
| 7 | 
            +
              data.tar.gz: 92a9e8797ec7d3fa5e6da94309bacfa412cb20cab9a5f6be751f2ccdea5578155492a72e7aa47c58e8b92284a620f52d7fa92f4d6f5f6522cf72b0c4de0f67ea
         | 
| @@ -1,10 +1,11 @@ | |
| 1 1 | 
             
            module ZuoraConnect
         | 
| 2 2 | 
             
              class StaticController < ApplicationController
         | 
| 3 | 
            -
                before_action :authenticate_connect_app_request, :except => [:metrics, :health, :initialize_app]
         | 
| 4 | 
            -
                before_action :clear_connect_app_session,        :only =>   [:metrics, :health, :initialize_app]
         | 
| 5 | 
            -
                after_action :persist_connect_app_session,       :except => [:metrics, :health, :initialize_app]
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                skip_before_action :verify_authenticity_token, :only => [:initialize_app]
         | 
| 3 | 
            +
                before_action :authenticate_connect_app_request, :except => [:metrics, :health, :initialize_app, :provision]
         | 
| 4 | 
            +
                before_action :clear_connect_app_session,        :only =>   [:metrics, :health, :initialize_app, :provision]
         | 
| 5 | 
            +
                after_action :persist_connect_app_session,       :except => [:metrics, :health, :initialize_app, :provision]
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                skip_before_action :verify_authenticity_token, :only => [:initialize_app, :provision]
         | 
| 8 | 
            +
                http_basic_authenticate_with name: ENV['PROVISION_USER'], password: ENV['PROVISION_SECRET'], :only => [:provision]
         | 
| 8 9 |  | 
| 9 10 | 
             
                def metrics
         | 
| 10 11 | 
             
                  type = params[:type].present? ? params[:type] : "versions"
         | 
| @@ -34,11 +35,13 @@ module ZuoraConnect | |
| 34 35 | 
             
                def initialize_app
         | 
| 35 36 | 
             
                  begin
         | 
| 36 37 | 
             
                    authenticate_connect_app_request
         | 
| 37 | 
            -
                     | 
| 38 | 
            -
             | 
| 39 | 
            -
                       | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 38 | 
            +
                    unless performed?
         | 
| 39 | 
            +
                      @appinstance.new_session(:session => @appinstance.data_lookup(:session => session))
         | 
| 40 | 
            +
                      render json: {
         | 
| 41 | 
            +
                        message: 'Success',
         | 
| 42 | 
            +
                        status: 200
         | 
| 43 | 
            +
                      }, status: 200
         | 
| 44 | 
            +
                    end
         | 
| 42 45 | 
             
                  rescue => ex
         | 
| 43 46 | 
             
                    Rails.logger.error("Failed to Initialize application", ex)
         | 
| 44 47 | 
             
                    if performed?
         | 
| @@ -52,6 +55,28 @@ module ZuoraConnect | |
| 52 55 | 
             
                  end
         | 
| 53 56 | 
             
                end
         | 
| 54 57 |  | 
| 58 | 
            +
                def provision
         | 
| 59 | 
            +
                  create_new_instance
         | 
| 60 | 
            +
                  unless performed?
         | 
| 61 | 
            +
                    render json: {
         | 
| 62 | 
            +
                      status: 200,
         | 
| 63 | 
            +
                      message: 'Success',
         | 
| 64 | 
            +
                      app_instance_id: @appinstance.id
         | 
| 65 | 
            +
                    }, status: 200
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
                rescue StandardError => e
         | 
| 68 | 
            +
                  message = 'Failed to provision new instance'
         | 
| 69 | 
            +
                  if performed?
         | 
| 70 | 
            +
                    Rails.logger.error("#{message}: #{performed?}", e)
         | 
| 71 | 
            +
                  else
         | 
| 72 | 
            +
                    Rails.logger.error(message, e)
         | 
| 73 | 
            +
                    render json: {
         | 
| 74 | 
            +
                      status: 500,
         | 
| 75 | 
            +
                      message: message
         | 
| 76 | 
            +
                    }, status: 500
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
             | 
| 55 80 | 
             
                private
         | 
| 56 81 |  | 
| 57 82 | 
             
                def clear_connect_app_session
         | 
    
        data/config/routes.rb
    CHANGED
    
    | @@ -3,6 +3,10 @@ ZuoraConnect::Engine.routes.draw do | |
| 3 3 | 
             
              get '/internal/data' => 'static#metrics'
         | 
| 4 4 | 
             
              post '/initialize_app' => 'static#initialize_app'
         | 
| 5 5 |  | 
| 6 | 
            +
              if ENV['PROVISION_USER'].present? && ENV['PROVISION_SECRET'].present?
         | 
| 7 | 
            +
                post '/provision' => 'static#provision'
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 6 10 | 
             
              namespace :api do
         | 
| 7 11 | 
             
                namespace :v1 do
         | 
| 8 12 | 
             
                  resources :app_instance, :only => [:index], defaults: {format: :json} do
         | 
| @@ -47,7 +47,7 @@ module Resque | |
| 47 47 | 
             
                        raise
         | 
| 48 48 | 
             
                      end
         | 
| 49 49 | 
             
                    rescue PG::ConnectionBad => exception
         | 
| 50 | 
            -
                      Rails.logger. | 
| 50 | 
            +
                      Rails.logger.warn("Bad Connection Restart", exception)
         | 
| 51 51 | 
             
                      Resque.enqueue_to(self.job.queue, self.job.payload['class'], args)
         | 
| 52 52 | 
             
                      return
         | 
| 53 53 | 
             
                    rescue ZuoraConnect::Exceptions::ConnectCommunicationError => exception
         | 
| @@ -219,6 +219,80 @@ module ZuoraConnect | |
| 219 219 | 
             
                    return (request.headers['ZuoraCurrentEntity'].present? || cookies['ZuoraCurrentEntity'].present?)
         | 
| 220 220 | 
             
                  end
         | 
| 221 221 |  | 
| 222 | 
            +
                  def create_new_instance
         | 
| 223 | 
            +
                    ZuoraConnect::AppInstance.read_master_db do
         | 
| 224 | 
            +
                      Thread.current[:appinstance] = nil
         | 
| 225 | 
            +
                      ZuoraConnect.logger.with_fields = {} if ZuoraConnect.logger.is_a?(Ougai::Logger)
         | 
| 226 | 
            +
                      Rails.logger.with_fields = {} if Rails.logger.is_a?(Ougai::Logger)
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                      if defined?(ElasticAPM) && ElasticAPM.running? && ElasticAPM.respond_to?(:set_label)
         | 
| 229 | 
            +
                        ElasticAPM.set_label(:trace_id, request.uuid)
         | 
| 230 | 
            +
                      end
         | 
| 231 | 
            +
             | 
| 232 | 
            +
                      zuora_host = request.headers['zuora-host']
         | 
| 233 | 
            +
                      zuora_entity_id = (request.headers['zuora-entity-ids'] || '').gsub(
         | 
| 234 | 
            +
                        '-',
         | 
| 235 | 
            +
                        ''
         | 
| 236 | 
            +
                      ).split(',').first
         | 
| 237 | 
            +
             | 
| 238 | 
            +
                      # Validate host present
         | 
| 239 | 
            +
                      if zuora_host.blank?
         | 
| 240 | 
            +
                        render json: {
         | 
| 241 | 
            +
                          status: 401,
         | 
| 242 | 
            +
                          message: 'zuora-host header was not supplied.'
         | 
| 243 | 
            +
                        }, status: :unauthorized
         | 
| 244 | 
            +
                        return
         | 
| 245 | 
            +
                      end
         | 
| 246 | 
            +
             | 
| 247 | 
            +
                      # Validate entity-ids present
         | 
| 248 | 
            +
                      if zuora_entity_id.blank?
         | 
| 249 | 
            +
                        render json: {
         | 
| 250 | 
            +
                          status: 401,
         | 
| 251 | 
            +
                          message: 'zuora-entity-ids header was not supplied.'
         | 
| 252 | 
            +
                        }, status: :unauthorized
         | 
| 253 | 
            +
                        return
         | 
| 254 | 
            +
                      end
         | 
| 255 | 
            +
             | 
| 256 | 
            +
                      rest_domain = ZuoraAPI::Login.new(url: "https://#{zuora_host}").rest_domain
         | 
| 257 | 
            +
                      app_instance_id = ZuoraConnect::AppInstance.where(
         | 
| 258 | 
            +
                        'zuora_entity_ids ?& array[:entities] AND zuora_domain = :host',
         | 
| 259 | 
            +
                        entities: [zuora_entity_id],
         | 
| 260 | 
            +
                        host: rest_domain
         | 
| 261 | 
            +
                      ).pluck(:id).first
         | 
| 262 | 
            +
             | 
| 263 | 
            +
                      if app_instance_id.present?
         | 
| 264 | 
            +
                        render json: {
         | 
| 265 | 
            +
                          status: 409,
         | 
| 266 | 
            +
                          message: 'Instance already exists.',
         | 
| 267 | 
            +
                          app_instance_id: app_instance_id
         | 
| 268 | 
            +
                        }, status: 409
         | 
| 269 | 
            +
                      else
         | 
| 270 | 
            +
                        Apartment::Tenant.switch!("public")
         | 
| 271 | 
            +
                        retry_count = 3
         | 
| 272 | 
            +
                        begin
         | 
| 273 | 
            +
                          @appinstance = new_instance(
         | 
| 274 | 
            +
                            next_instance_id,
         | 
| 275 | 
            +
                            zuora_entity_id,
         | 
| 276 | 
            +
                            rest_domain,
         | 
| 277 | 
            +
                            retry_count: retry_count
         | 
| 278 | 
            +
                          )
         | 
| 279 | 
            +
                        rescue ActiveRecord::RecordNotUnique
         | 
| 280 | 
            +
                          retry if (retry_count -= 1).positive?
         | 
| 281 | 
            +
                          return
         | 
| 282 | 
            +
                        end
         | 
| 283 | 
            +
             | 
| 284 | 
            +
                        app_instance_id = @appinstance.id
         | 
| 285 | 
            +
                      end
         | 
| 286 | 
            +
             | 
| 287 | 
            +
                      begin
         | 
| 288 | 
            +
                        Apartment::Tenant.switch!('public')
         | 
| 289 | 
            +
                        Apartment::Tenant.create(app_instance_id.to_s)
         | 
| 290 | 
            +
                      rescue Apartment::TenantExists
         | 
| 291 | 
            +
                        ZuoraConnect.logger.debug('Tenant Already Exists')
         | 
| 292 | 
            +
                      end
         | 
| 293 | 
            +
                    end
         | 
| 294 | 
            +
                  end
         | 
| 295 | 
            +
             | 
| 222 296 | 
             
                private
         | 
| 223 297 | 
             
                  def setup_instance_via_prod_mode
         | 
| 224 298 | 
             
                    zuora_entity_id = request.headers['ZuoraCurrentEntity'] || cookies['ZuoraCurrentEntity']
         | 
| @@ -226,7 +300,7 @@ module ZuoraConnect | |
| 226 300 | 
             
                    if zuora_entity_id.present?
         | 
| 227 301 | 
             
                      zuora_tenant_id = cookies['Zuora-Tenant-Id']
         | 
| 228 302 | 
             
                      zuora_user_id = cookies['Zuora-User-Id']
         | 
| 229 | 
            -
                      zuora_host = request.headers[ | 
| 303 | 
            +
                      zuora_host = request.headers['HTTP_X_FORWARDED_HOST'] || request.headers['Zuora-Host'] || 'apisandbox.zuora.com'
         | 
| 230 304 |  | 
| 231 305 | 
             
                      zuora_details = {'host' => zuora_host, 'user_id' => zuora_user_id, 'tenant_id' => zuora_tenant_id, 'entity_id' => zuora_entity_id}
         | 
| 232 306 | 
             
                      auth_headers = {}
         | 
| @@ -328,11 +402,13 @@ module ZuoraConnect | |
| 328 402 |  | 
| 329 403 | 
             
                        zuora_user_id = cookies['Zuora-User-Id'] || session["ZuoraCurrentIdentity"]['userId']
         | 
| 330 404 |  | 
| 331 | 
            -
                        #One deployed instance
         | 
| 332 405 | 
             
                        if appinstances.size == 1
         | 
| 333 406 | 
             
                          ZuoraConnect.logger.debug("Instance is #{appinstances.to_h.keys.first}")
         | 
| 334 407 | 
             
                          @appinstance = ZuoraConnect::AppInstance.find(appinstances.to_h.keys.first)
         | 
| 408 | 
            +
                        end
         | 
| 335 409 |  | 
| 410 | 
            +
                        # One deployed instance with credentials
         | 
| 411 | 
            +
                        if defined?(@appinstance) && !@appinstance['zuora_logins'].nil?
         | 
| 336 412 | 
             
                          #Add user/update
         | 
| 337 413 | 
             
                          begin
         | 
| 338 414 | 
             
                            @zuora_user = ZuoraConnect::ZuoraUser.where(:zuora_user_id => zuora_user_id).first
         | 
| @@ -380,79 +456,85 @@ module ZuoraConnect | |
| 380 456 | 
             
                            return
         | 
| 381 457 | 
             
                          end
         | 
| 382 458 | 
             
                          Apartment::Tenant.switch!("public")
         | 
| 383 | 
            -
                           | 
| 384 | 
            -
             | 
| 385 | 
            -
             | 
| 459 | 
            +
                          retry_count = 3
         | 
| 460 | 
            +
                          task_data = {}
         | 
| 461 | 
            +
                          begin
         | 
| 462 | 
            +
                            ActiveRecord::Base.transaction do
         | 
| 463 | 
            +
                              ActiveRecord::Base.connection.execute('LOCK public.zuora_users IN ACCESS EXCLUSIVE MODE')
         | 
| 386 464 |  | 
| 387 | 
            -
             | 
| 388 | 
            -
             | 
| 389 | 
            -
                              return
         | 
| 390 | 
            -
                            end
         | 
| 465 | 
            +
                              unless defined?(@appinstance)
         | 
| 466 | 
            +
                                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 467 |  | 
| 392 | 
            -
             | 
| 393 | 
            -
             | 
| 394 | 
            -
             | 
| 395 | 
            -
             | 
| 396 | 
            -
                               | 
| 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 | 
            -
                            )
         | 
| 468 | 
            +
                                if appinstances.size > 0
         | 
| 469 | 
            +
                                  redirect_to "https://#{zuora_host}/apps/newlogin.do?retURL=#{request.fullpath}"
         | 
| 470 | 
            +
                                  return
         | 
| 471 | 
            +
                                end
         | 
| 472 | 
            +
                              end
         | 
| 411 473 |  | 
| 412 | 
            -
             | 
| 413 | 
            -
             | 
| 414 | 
            -
             | 
| 415 | 
            -
             | 
| 416 | 
            -
             | 
| 417 | 
            -
             | 
| 474 | 
            +
                              next_id = defined?(@appinstance) ? @appinstance.id : next_instance_id
         | 
| 475 | 
            +
                              if task_data.blank?
         | 
| 476 | 
            +
                                user = (ENV['DEIS_APP'] || "Application").split('-').map(&:capitalize).join(' ')
         | 
| 477 | 
            +
                                body = {
         | 
| 478 | 
            +
                                  'userId' => zuora_user_id,
         | 
| 479 | 
            +
                                  'entityIds' => [zuora_entity_id.unpack("a8a4a4a4a12").join('-')],
         | 
| 480 | 
            +
                                  'customAuthorities' => [],
         | 
| 481 | 
            +
                                  'additionalInformation' => {
         | 
| 482 | 
            +
                                    'description' => "This user is for #{user} application.",
         | 
| 483 | 
            +
                                    'name' => "#{user} API User #{next_id}"
         | 
| 484 | 
            +
                                  }
         | 
| 485 | 
            +
                                }
         | 
| 486 | 
            +
             | 
| 487 | 
            +
                                oauth_response, response = zuora_client.rest_call(
         | 
| 488 | 
            +
                                  method: :post,
         | 
| 489 | 
            +
                                  body: body.to_json,
         | 
| 490 | 
            +
                                  url: zuora_client.rest_endpoint("genesis/clients").gsub('v1/', ''),
         | 
| 491 | 
            +
                                  session_type: zuora_client.class == ZuoraAPI::Oauth ? :bearer : :basic,
         | 
| 492 | 
            +
                                  headers: auth_headers
         | 
| 493 | 
            +
                                )
         | 
| 494 | 
            +
             | 
| 495 | 
            +
                                new_zuora_client = ZuoraAPI::Oauth.new(url: "https://#{zuora_host}", oauth_client_id: oauth_response["clientId"], oauth_secret: oauth_response["clientSecret"] )
         | 
| 496 | 
            +
                                if session["ZuoraCurrentUserInfo"].blank?
         | 
| 497 | 
            +
                                  client_describe, response = new_zuora_client.rest_call(url: zuora_client.rest_endpoint("genesis/user/info").gsub('v1/', ''), session_type: :bearer)
         | 
| 498 | 
            +
                                else
         | 
| 499 | 
            +
                                  client_describe = session["ZuoraCurrentUserInfo"]
         | 
| 500 | 
            +
                                end
         | 
| 418 501 |  | 
| 419 | 
            -
             | 
| 420 | 
            -
             | 
| 421 | 
            -
             | 
| 422 | 
            -
             | 
| 423 | 
            -
             | 
| 424 | 
            -
             | 
| 425 | 
            -
             | 
| 426 | 
            -
             | 
| 427 | 
            -
             | 
| 428 | 
            -
             | 
| 429 | 
            -
             | 
| 430 | 
            -
             | 
| 431 | 
            -
             | 
| 432 | 
            -
             | 
| 433 | 
            -
             | 
| 434 | 
            -
             | 
| 435 | 
            -
             | 
| 436 | 
            -
             | 
| 437 | 
            -
             | 
| 438 | 
            -
             | 
| 439 | 
            -
             | 
| 440 | 
            -
             | 
| 441 | 
            -
             | 
| 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
         | 
| 502 | 
            +
                                available_entities = client_describe["accessibleEntities"].select {|entity| entity['id'] == zuora_entity_id}
         | 
| 503 | 
            +
                                task_data = {
         | 
| 504 | 
            +
                                  "id": next_id,
         | 
| 505 | 
            +
                                  "name": client_describe["tenantName"],
         | 
| 506 | 
            +
                                  "mode": "Collections",
         | 
| 507 | 
            +
                                  "status": "Running",
         | 
| 508 | 
            +
                                  ZuoraConnect::AppInstance::LOGIN_TENANT_DESTINATION => {
         | 
| 509 | 
            +
                                    "tenant_type": "Zuora",
         | 
| 510 | 
            +
                                    "username": session["ZuoraCurrentIdentity"]["username"],
         | 
| 511 | 
            +
                                    "url": new_zuora_client.url,
         | 
| 512 | 
            +
                                    "status": "Active",
         | 
| 513 | 
            +
                                    "oauth_client_id": oauth_response['clientId'],
         | 
| 514 | 
            +
                                    "oauth_secret": oauth_response['clientSecret'],
         | 
| 515 | 
            +
                                    "authentication_type": "OAUTH",
         | 
| 516 | 
            +
                                    "entities": available_entities.map {|e| e.merge({'displayName' => client_describe["tenantName"]})}
         | 
| 517 | 
            +
                                  },
         | 
| 518 | 
            +
                                  "tenant_ids": available_entities.map{|e| e['entityId']}.uniq,
         | 
| 519 | 
            +
                                }
         | 
| 520 | 
            +
                              end
         | 
| 521 | 
            +
             | 
| 522 | 
            +
                              if defined?(@appinstance)
         | 
| 523 | 
            +
                                @appinstance.zuora_logins = task_data
         | 
| 524 | 
            +
                                @appinstance.save(:validate => false)
         | 
| 446 525 | 
             
                              else
         | 
| 447 | 
            -
                                 | 
| 448 | 
            -
             | 
| 449 | 
            -
             | 
| 450 | 
            -
                                   | 
| 451 | 
            -
                                  : | 
| 452 | 
            -
             | 
| 453 | 
            -
                                 | 
| 526 | 
            +
                                @appinstance = new_instance(
         | 
| 527 | 
            +
                                  next_id,
         | 
| 528 | 
            +
                                  zuora_entity_id,
         | 
| 529 | 
            +
                                  zuora_client.rest_domain,
         | 
| 530 | 
            +
                                  task_data: task_data,
         | 
| 531 | 
            +
                                  retry_count: retry_count
         | 
| 532 | 
            +
                                )
         | 
| 454 533 | 
             
                              end
         | 
| 455 534 | 
             
                            end
         | 
| 535 | 
            +
                          rescue ActiveRecord::RecordNotUnique
         | 
| 536 | 
            +
                            retry if (retry_count -= 1).positive?
         | 
| 537 | 
            +
                            return
         | 
| 456 538 | 
             
                          end
         | 
| 457 539 |  | 
| 458 540 | 
             
                          Apartment::Tenant.switch!("public")
         | 
| @@ -540,6 +622,50 @@ module ZuoraConnect | |
| 540 622 | 
             
                    end
         | 
| 541 623 | 
             
                  end
         | 
| 542 624 |  | 
| 625 | 
            +
                  def next_instance_id
         | 
| 626 | 
            +
                    min_instance_id = 24_999_999
         | 
| 627 | 
            +
                    (ZuoraConnect::AppInstance.all.where("id > #{min_instance_id}").order(id: :desc).limit(1).pluck(:id).first || min_instance_id) + 1
         | 
| 628 | 
            +
                  end
         | 
| 629 | 
            +
             | 
| 630 | 
            +
                  def new_instance(id, zuora_entity_id, rest_domain, task_data: nil, retry_count: 0)
         | 
| 631 | 
            +
                    app_instance = ZuoraConnect::AppInstance.new(
         | 
| 632 | 
            +
                      :id => id,
         | 
| 633 | 
            +
                      :api_token => generate_token,
         | 
| 634 | 
            +
                      :token => generate_token,
         | 
| 635 | 
            +
                      :oauth_expires_at => Time.now + 1000.years,
         | 
| 636 | 
            +
                      :zuora_domain => rest_domain,
         | 
| 637 | 
            +
                      :zuora_entity_ids => [zuora_entity_id]
         | 
| 638 | 
            +
                    )
         | 
| 639 | 
            +
             | 
| 640 | 
            +
                    if task_data.nil?
         | 
| 641 | 
            +
                      # no encryption
         | 
| 642 | 
            +
                      app_instance['zuora_logins'] = task_data
         | 
| 643 | 
            +
                    else
         | 
| 644 | 
            +
                      # kms encrypt
         | 
| 645 | 
            +
                      app_instance.zuora_logins = task_data
         | 
| 646 | 
            +
                    end
         | 
| 647 | 
            +
             | 
| 648 | 
            +
                    begin
         | 
| 649 | 
            +
                      app_instance.save(:validate => false)
         | 
| 650 | 
            +
                    rescue ActiveRecord::RecordNotUnique
         | 
| 651 | 
            +
                      raise if retry_count > 1
         | 
| 652 | 
            +
             | 
| 653 | 
            +
                      Thread.current[:appinstance] = nil
         | 
| 654 | 
            +
                      session['appInstance'] = nil
         | 
| 655 | 
            +
                      render 'zuora_connect/static/error_handled', :locals => {
         | 
| 656 | 
            +
                        :title => 'Application could not create unique tokens.',
         | 
| 657 | 
            +
                        :message => 'Please contact support or retry launching application.'
         | 
| 658 | 
            +
                      }, :layout => false
         | 
| 659 | 
            +
                      return
         | 
| 660 | 
            +
                    end
         | 
| 661 | 
            +
             | 
| 662 | 
            +
                    app_instance
         | 
| 663 | 
            +
                  end
         | 
| 664 | 
            +
             | 
| 665 | 
            +
                  def generate_token
         | 
| 666 | 
            +
                    rand(36**64).to_s(36)
         | 
| 667 | 
            +
                  end
         | 
| 668 | 
            +
             | 
| 543 669 | 
             
                  def setup_instance_via_dev_mode
         | 
| 544 670 | 
             
                    session["appInstance"] = ZuoraConnect.configuration.dev_mode_appinstance
         | 
| 545 671 | 
             
                    user = ZuoraConnect.configuration.dev_mode_user
         | 
    
        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. | 
| 4 | 
            +
              version: 2.0.60a
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Connect Team
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020- | 
| 11 | 
            +
            date: 2020-07-08 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: apartment
         | 
| @@ -429,9 +429,9 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 429 429 | 
             
                  version: '0'
         | 
| 430 430 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 431 431 | 
             
              requirements:
         | 
| 432 | 
            -
              - - " | 
| 432 | 
            +
              - - ">"
         | 
| 433 433 | 
             
                - !ruby/object:Gem::Version
         | 
| 434 | 
            -
                  version:  | 
| 434 | 
            +
                  version: 1.3.1
         | 
| 435 435 | 
             
            requirements: []
         | 
| 436 436 | 
             
            rubygems_version: 3.0.3
         | 
| 437 437 | 
             
            signing_key: 
         |