zuora_connect 2.0.53 → 2.0.54

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: 2ec4985bc5f156a8a8c302664cd44cd5e3854caf6dc8a84f6d28f152becea312
4
- data.tar.gz: 2bff90b4661c0278040296378a9323d3b0c2129f02114a3d09c0d3b7ebcbabc8
3
+ metadata.gz: 5c87e671fc1c2afd2dc94cff3f210b5a4cf2b0c9b7b16108fb990d5c35b4e3e3
4
+ data.tar.gz: 522a063ceb5dd7cfcb453e69b823d8f6f3d0b2610269a0de51bf8d7888f83a0d
5
5
  SHA512:
6
- metadata.gz: 49acfbcaf17f0f0f718298ee7403f75a052dab6e2eb2b8ac5cd87a43e817a801fc04ff46716c1aba33f91449fd4b0aacb29c47d04571b7f4bcfad9acf4c794a0
7
- data.tar.gz: d9c275091253fb5ae6e5dea8ad59bdd49219879047d13f1bde0625d5fd2a5371e6c322446935be8b29d169d554134526d0eed7d7772f5d1684b27c151248b9ee
6
+ metadata.gz: dd9ecbbecfa364c8a4e38fbe3e4c613ab60b7bed6101929e83d6506d1fc2bfa1ad2e023619faf85c30541cfed4005233abe43e52df8fbdacbd32937739430f1b
7
+ data.tar.gz: 501b573a04de6d580ddc7fb6fad5d3c06e8a32c3899f2054606682c2669b0f981373f0232f50f0d71b37289659e8e09aa3b2b4780380b6495310fbf1e9ddeef5
@@ -1204,6 +1204,16 @@ module ZuoraConnect
1204
1204
  super
1205
1205
  end
1206
1206
 
1207
+ def self.read_master_db
1208
+ if self.connection.respond_to?(:stick_to_master!)
1209
+ self.connection.stick_to_master!(false)
1210
+ yield
1211
+ Makara::Context.release_all
1212
+ else
1213
+ yield
1214
+ end
1215
+ end
1216
+
1207
1217
  method_hook :updateOption, :update_logins, :before => :check_oauth_state
1208
1218
  method_hook :new_session, :refresh, :build_task, :after => :apartment_switch
1209
1219
  end
@@ -5,68 +5,70 @@ module ZuoraConnect
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  def authenticate_app_api_request
8
- #Skip session for api requests
9
- request.session_options[:skip] = true
10
-
11
- Thread.current[:appinstance] = nil
12
- if ZuoraConnect.logger.is_a?(Ougai::Logger); ZuoraConnect.logger.with_fields = {}; end
13
- if Rails.logger.is_a?(Ougai::Logger); Rails.logger.with_fields = {}; end
14
- if defined?(ElasticAPM) && ElasticAPM.running?
15
- if ElasticAPM.respond_to?(:set_label)
16
- ElasticAPM.set_label(:trace_id, request.uuid) if defined?(ElasticAPM) && ElasticAPM.running?
17
- else
18
- ElasticAPM.set_label(:trace_id, request.uuid) if defined?(ElasticAPM) && ElasticAPM.running?
19
- end
20
- end
21
- start_time = Time.now
22
- if request.headers["API-Token"].present?
23
- @appinstance = ZuoraConnect::AppInstance.find_by(:api_token => request.headers["API-Token"])
24
- ZuoraConnect.logger.debug("API REQUEST - API token") if @appinstance.present?
25
- check_instance
26
- elsif ZuoraConnect::AppInstance::INTERNAL_HOSTS.include?(request.headers.fetch("HOST", nil))
27
- zuora_host, zuora_entity_id, zuora_instance_id = [request.headers['zuora-host'], (request.headers['zuora-entity-ids'] || "").gsub('-',''), request.headers['zuora-instance-id']]
28
-
29
- #Validate host present
30
- if zuora_host.blank?
31
- render json: {"status": 401, "message": "zuora-host header was not supplied."}, status: :unauthorized
32
- return
33
- end
34
- #Validate entity-ids present
35
- if zuora_entity_id.blank?
36
- render json: {"status": 401, "message": "zuora-entity-ids header was not supplied."}, status: :unauthorized
37
- return
38
- end
39
- #Select with instance id if present. Used where mulitple deployments are done.
40
- if zuora_instance_id.present?
41
- appinstances = ZuoraConnect::AppInstance.where("zuora_entity_ids ?& array[:entities] = true AND zuora_domain = :host AND id = :id", entities: [zuora_entity_id], host: zuora_host, id: zuora_instance_id.to_i)
42
- else
43
- appinstances = ZuoraConnect::AppInstance.where("zuora_entity_ids ?& array[:entities] = true AND zuora_domain = :host", entities: [zuora_entity_id], host: zuora_host)
8
+ ZuoraConnect::AppInstance.read_master_db do
9
+ #Skip session for api requests
10
+ request.session_options[:skip] = true
11
+
12
+ Thread.current[:appinstance] = nil
13
+ if ZuoraConnect.logger.is_a?(Ougai::Logger); ZuoraConnect.logger.with_fields = {}; end
14
+ if Rails.logger.is_a?(Ougai::Logger); Rails.logger.with_fields = {}; end
15
+ if defined?(ElasticAPM) && ElasticAPM.running?
16
+ if ElasticAPM.respond_to?(:set_label)
17
+ ElasticAPM.set_label(:trace_id, request.uuid) if defined?(ElasticAPM) && ElasticAPM.running?
18
+ else
19
+ ElasticAPM.set_label(:trace_id, request.uuid) if defined?(ElasticAPM) && ElasticAPM.running?
20
+ end
44
21
  end
22
+ start_time = Time.now
23
+ if request.headers["API-Token"].present?
24
+ @appinstance = ZuoraConnect::AppInstance.find_by(:api_token => request.headers["API-Token"])
25
+ ZuoraConnect.logger.debug("API REQUEST - API token") if @appinstance.present?
26
+ check_instance
27
+ elsif ZuoraConnect::AppInstance::INTERNAL_HOSTS.include?(request.headers.fetch("HOST", nil))
28
+ zuora_host, zuora_entity_id, zuora_instance_id = [request.headers['zuora-host'], (request.headers['zuora-entity-ids'] || "").gsub('-',''), request.headers['zuora-instance-id']]
45
29
 
46
- if appinstances.size == 0
47
- render json: {"status": 401, "message": "Missing mapping or no deployment for '#{zuora_host}-#{zuora_entity_id}' ."}, status: :unauthorized
48
- return
49
- elsif appinstances.size > 1
50
- render json: {"status": 401, "message": "More than one app instance binded to host and entity ids. Please indicate correct instance via 'zuora-instance-id' header"}, status: :unauthorized
51
- return
30
+ #Validate host present
31
+ if zuora_host.blank?
32
+ render json: {"status": 401, "message": "zuora-host header was not supplied."}, status: :unauthorized
33
+ return
34
+ end
35
+ #Validate entity-ids present
36
+ if zuora_entity_id.blank?
37
+ render json: {"status": 401, "message": "zuora-entity-ids header was not supplied."}, status: :unauthorized
38
+ return
39
+ end
40
+ #Select with instance id if present. Used where mulitple deployments are done.
41
+ if zuora_instance_id.present?
42
+ appinstances = ZuoraConnect::AppInstance.where("zuora_entity_ids ?& array[:entities] = true AND zuora_domain = :host AND id = :id", entities: [zuora_entity_id], host: zuora_host, id: zuora_instance_id.to_i)
43
+ else
44
+ appinstances = ZuoraConnect::AppInstance.where("zuora_entity_ids ?& array[:entities] = true AND zuora_domain = :host", entities: [zuora_entity_id], host: zuora_host)
45
+ end
46
+
47
+ if appinstances.size == 0
48
+ render json: {"status": 401, "message": "Missing mapping or no deployment for '#{zuora_host}-#{zuora_entity_id}' ."}, status: :unauthorized
49
+ return
50
+ elsif appinstances.size > 1
51
+ render json: {"status": 401, "message": "More than one app instance binded to host and entity ids. Please indicate correct instance via 'zuora-instance-id' header"}, status: :unauthorized
52
+ return
53
+ else
54
+ @appinstance = appinstances.first
55
+ check_instance
56
+ end
57
+
58
+ elsif request.headers.fetch("Authorization", "").include?("Basic ")
59
+ authenticate_or_request_with_http_basic do |username, password|
60
+ @appinstance = ZuoraConnect::AppInstance.find_by(:token => password)
61
+ @appinstance ||= ZuoraConnect::AppInstance.find_by(:api_token => password)
62
+ ZuoraConnect.logger.debug("API REQUEST - Basic Auth") if @appinstance.present?
63
+ check_instance
64
+ end
52
65
  else
53
- @appinstance = appinstances.first
54
66
  check_instance
55
67
  end
56
-
57
- elsif request.headers.fetch("Authorization", "").include?("Basic ")
58
- authenticate_or_request_with_http_basic do |username, password|
59
- @appinstance = ZuoraConnect::AppInstance.find_by(:token => password)
60
- @appinstance ||= ZuoraConnect::AppInstance.find_by(:api_token => password)
61
- ZuoraConnect.logger.debug("API REQUEST - Basic Auth") if @appinstance.present?
62
- check_instance
68
+
69
+ if @appinstance.present?
70
+ ZuoraConnect.logger.debug("Authenticate App API Request Completed In - #{(Time.now - start_time).round(2)}s")
63
71
  end
64
- else
65
- check_instance
66
- end
67
-
68
- if @appinstance.present?
69
- ZuoraConnect.logger.debug("Authenticate App API Request Completed In - #{(Time.now - start_time).round(2)}s")
70
72
  end
71
73
  end
72
74
 
@@ -88,59 +90,60 @@ module ZuoraConnect
88
90
  end
89
91
 
90
92
  def authenticate_connect_app_request
91
- Thread.current[:appinstance] = nil
92
- if ZuoraConnect.logger.is_a?(Ougai::Logger); ZuoraConnect.logger.with_fields = {}; end
93
- if Rails.logger.is_a?(Ougai::Logger); Rails.logger.with_fields = {}; end
94
- if defined?(ElasticAPM) && ElasticAPM.running?
95
- if ElasticAPM.respond_to?(:set_label)
96
- ElasticAPM.set_label(:trace_id, request.uuid)
93
+ ZuoraConnect::AppInstance.read_master_db do
94
+ Thread.current[:appinstance] = nil
95
+ if ZuoraConnect.logger.is_a?(Ougai::Logger); ZuoraConnect.logger.with_fields = {}; end
96
+ if Rails.logger.is_a?(Ougai::Logger); Rails.logger.with_fields = {}; end
97
+ if defined?(ElasticAPM) && ElasticAPM.running?
98
+ if ElasticAPM.respond_to?(:set_label)
99
+ ElasticAPM.set_label(:trace_id, request.uuid)
100
+ else
101
+ ElasticAPM.set_label(:trace_id, request.uuid)
102
+ end
103
+ end
104
+ start_time = Time.now
105
+
106
+ if ZuoraConnect.configuration.mode == "Production"
107
+ setup_instance_via_prod_mode
97
108
  else
98
- ElasticAPM.set_label(:trace_id, request.uuid)
109
+ setup_instance_via_dev_mode
99
110
  end
100
- end
101
- start_time = Time.now
102
111
 
103
- if ZuoraConnect.configuration.mode == "Production"
104
- setup_instance_via_prod_mode
105
- else
106
- setup_instance_via_dev_mode
107
- end
112
+ return if performed?
108
113
 
109
- return if performed?
114
+ if !defined?(@appinstance) || @appinstance.blank?
115
+ render "zuora_connect/static/error_handled", :locals => {
116
+ :title => "Application state could not be found.",
117
+ :message => "Please relaunch application."
118
+ }, :layout => false
119
+ return
120
+ end
121
+ #Call .data_lookup with the current session to retrieve session. In some cases session may be stored/cache in redis
122
+ #so data lookup provides a model method that can be overriden per app.
123
+ if params[:controller] != 'zuora_connect/api/v1/app_instance' && params[:action] != 'drop'
124
+ if @appinstance.new_session_for_ui_requests(:params => params)
125
+ @appinstance.new_session(:session => @appinstance.data_lookup(:session => session))
126
+ end
127
+ end
110
128
 
111
- if !defined?(@appinstance) || @appinstance.blank?
112
- render "zuora_connect/static/error_handled", :locals => {
113
- :title => "Application state could not be found.",
114
- :message => "Please relaunch application."
115
- }, :layout => false
116
- return
117
- end
118
- #Call .data_lookup with the current session to retrieve session. In some cases session may be stored/cache in redis
119
- #so data lookup provides a model method that can be overriden per app.
120
- if params[:controller] != 'zuora_connect/api/v1/app_instance' && params[:action] != 'drop'
121
- if @appinstance.new_session_for_ui_requests(:params => params)
122
- @appinstance.new_session(:session => @appinstance.data_lookup(:session => session))
129
+ if session["#{@appinstance.id}::user::email"].present?
130
+ ElasticAPM.set_user(session["#{@appinstance.id}::user::email"]) if defined?(ElasticAPM) && ElasticAPM.running?
131
+ PaperTrail.whodunnit = session["#{@appinstance.id}::user::email"] if defined?(PaperTrail)
132
+ end
133
+ begin
134
+ locale = session["#{@appinstance.id}::user::locale"]
135
+ I18n.locale = locale.present? ? locale : @appinstance.locale
136
+ rescue I18n::InvalidLocale => ex
137
+ ZuoraConnect.logger.error(ex) if !ZuoraConnect::AppInstance::IGNORED_LOCALS.include?(ex.locale.to_s.downcase)
138
+ end
139
+ begin
140
+ Time.zone = session["#{@appinstance.id}::user::timezone"] ? session["#{@appinstance.id}::user::timezone"] : @appinstance.timezone
141
+ rescue
142
+ ZuoraConnect.logger.error(ex)
123
143
  end
124
- end
125
144
 
126
- if session["#{@appinstance.id}::user::email"].present?
127
- ElasticAPM.set_user(session["#{@appinstance.id}::user::email"]) if defined?(ElasticAPM) && ElasticAPM.running?
128
- PaperTrail.whodunnit = session["#{@appinstance.id}::user::email"] if defined?(PaperTrail)
129
- end
130
- begin
131
- locale = session["#{@appinstance.id}::user::locale"]
132
- I18n.locale = locale.present? ? locale : @appinstance.locale
133
- rescue I18n::InvalidLocale => ex
134
- ZuoraConnect.logger.error(ex) if !ZuoraConnect::AppInstance::IGNORED_LOCALS.include?(ex.locale.to_s.downcase)
145
+ ZuoraConnect.logger.debug("Authenticate App Request Completed In - #{(Time.now - start_time).round(2)}s")
135
146
  end
136
- begin
137
- Time.zone = session["#{@appinstance.id}::user::timezone"] ? session["#{@appinstance.id}::user::timezone"] : @appinstance.timezone
138
- rescue
139
- ZuoraConnect.logger.error(ex)
140
- end
141
-
142
- ZuoraConnect.logger.debug("Authenticate App Request Completed In - #{(Time.now - start_time).round(2)}s")
143
-
144
147
  rescue ZuoraConnect::Exceptions::InvalidCredentialSet => ex
145
148
  id = @appinstance.id
146
149
  ZuoraConnect::AppInstance.destroy(id)
@@ -1,3 +1,3 @@
1
1
  module ZuoraConnect
2
- VERSION = "2.0.53"
2
+ VERSION = "2.0.54"
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.53
4
+ version: 2.0.54
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-04-03 00:00:00.000000000 Z
11
+ date: 2020-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apartment