zuora_connect 2.0.5zz → 2.0.5
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 +4 -4
- data/app/controllers/zuora_connect/static_controller.rb +17 -4
- data/app/helpers/zuora_connect/application_helper.rb +0 -10
- data/app/models/zuora_connect/app_instance_base.rb +40 -75
- data/app/models/zuora_connect/zuora_user.rb +0 -1
- data/app/views/zuora_connect/static/invalid_app_instance_error.html.erb +65 -0
- data/app/views/zuora_connect/static/invalid_launch_request.html.erb +81 -0
- data/app/views/zuora_connect/static/launch.html.erb +75 -74
- data/app/views/zuora_connect/static/permission_error.html.erb +80 -0
- data/app/views/zuora_connect/static/session_error.html.erb +63 -0
- data/config/routes.rb +2 -0
- data/lib/resque/plugins/custom_logger.rb +1 -1
- data/lib/zuora_connect/configuration.rb +3 -3
- data/lib/zuora_connect/controllers/helpers.rb +180 -234
- data/lib/zuora_connect/engine.rb +1 -2
- data/lib/zuora_connect/railtie.rb +6 -10
- data/lib/zuora_connect/version.rb +1 -1
- data/lib/zuora_connect/views/helpers.rb +9 -0
- data/lib/zuora_connect.rb +42 -59
- metadata +54 -54
- data/app/views/zuora_connect/static/error_handled.html.erb +0 -77
- data/app/views/zuora_connect/static/error_unhandled.erb +0 -76
- data/config/initializers/patches.rb +0 -9
- data/db/migrate/20190520232222_add_unique_index.rb +0 -6
- data/lib/middleware/json_parse_errors.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5143516252b30663cce6eff40b07c9364cdcbe566b5a17fea4b55a6d86d23dbd
|
4
|
+
data.tar.gz: e967de5bf2ec2a7ba2c6160472e7ca222ca5102827257c69abc96638f15a40f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bab2c1ec88ec22ab427921e538aeb1133fef59016fa8b019970a421e0909c94ede7ed51888915e0856a276b4113cfdac703e1062c379a621f07d919695d66628
|
7
|
+
data.tar.gz: 1334c2fbe71031f57d182f5a2e5364491189f9ce475c4b271be364f78be78c2bb47b098ec95b6ab57292b6d2557bbdcfcc89053711be77976afe0725a6f8cd33
|
@@ -1,11 +1,25 @@
|
|
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]
|
3
|
+
before_action :authenticate_connect_app_request, :except => [:metrics, :health, :session_error, :invalid_app_instance_error, :initialize_app]
|
4
|
+
before_action :clear_connect_app_session, :only => [:metrics, :health, :session_error, :invalid_app_instance_error, :initialize_app]
|
5
|
+
after_action :persist_connect_app_session, :except => [:metrics, :health, :session_error, :invalid_app_instance_error, :initialize_app]
|
6
6
|
|
7
7
|
skip_before_action :verify_authenticity_token, :only => [:initialize_app]
|
8
8
|
|
9
|
+
def session_error
|
10
|
+
respond_to do |format|
|
11
|
+
format.html
|
12
|
+
format.json { render json: { message: "Session Error", status: 500 }, status: 500 }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def invalid_app_instance_error
|
17
|
+
respond_to do |format|
|
18
|
+
format.html
|
19
|
+
format.json {render json: { message: "Invalid App Instance", status: 500 }, status: 500 }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
9
23
|
def metrics
|
10
24
|
type = params[:type].present? ? params[:type] : "versions"
|
11
25
|
render json: ZuoraConnect::AppInstance.get_metrics(type).to_json, status: 200
|
@@ -34,7 +48,6 @@ module ZuoraConnect
|
|
34
48
|
def initialize_app
|
35
49
|
begin
|
36
50
|
authenticate_connect_app_request
|
37
|
-
@appinstance.new_session(:session => @appinstance.data_lookup(:session => session))
|
38
51
|
render json: {
|
39
52
|
message: "Success",
|
40
53
|
status: 200
|
@@ -1,15 +1,5 @@
|
|
1
1
|
module ZuoraConnect
|
2
2
|
module ApplicationHelper
|
3
|
-
def is_app_admin?
|
4
|
-
return @appinstance.blank? ? false : session["#{@appinstance.id}::admin"]
|
5
|
-
end
|
6
3
|
|
7
|
-
def zuora_user
|
8
|
-
return @zuora_user
|
9
|
-
end
|
10
|
-
|
11
|
-
def connect_meta_tags
|
12
|
-
"<meta name=\"z-hallway-prefix\" content=\"#{ Thread.current[:isHallway] }\">".html_safe
|
13
|
-
end
|
14
4
|
end
|
15
5
|
end
|
@@ -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', '
|
19
|
+
IGNORED_LOCALS = ['fr', 'ja', 'sp']
|
20
20
|
INTERNAL_HOSTS = []
|
21
21
|
LOGIN_TENANT_DESTINATION = 'target_login'
|
22
22
|
|
@@ -89,11 +89,7 @@ module ZuoraConnect
|
|
89
89
|
Thread.current[:appinstance] = self
|
90
90
|
end
|
91
91
|
|
92
|
-
def
|
93
|
-
return {app_instance_id: self.id}
|
94
|
-
end
|
95
|
-
|
96
|
-
def new_session(session: self.data_lookup, username: self.access_token, password: self.refresh_token, holding_pattern: false, **args)
|
92
|
+
def new_session(session: self.data_lookup, username: self.access_token, password: self.refresh_token, holding_pattern: false, log_level: Logger::DEBUG)
|
97
93
|
self.api_version = "v2"
|
98
94
|
self.username = username
|
99
95
|
self.password = password
|
@@ -127,26 +123,26 @@ module ZuoraConnect
|
|
127
123
|
|
128
124
|
if session.empty?
|
129
125
|
self.new_session_message = "REFRESHING - Session Empty"
|
130
|
-
ZuoraConnect.logger.
|
126
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
131
127
|
raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
|
132
128
|
self.refresh(session: session)
|
133
129
|
|
134
130
|
elsif (self.id != session["appInstance"].to_i)
|
135
131
|
self.new_session_message = "REFRESHING - AppInstance ID(#{self.id}) does not match session id(#{session["appInstance"].to_i})"
|
136
|
-
ZuoraConnect.logger.
|
132
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
137
133
|
raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
|
138
134
|
self.refresh(session: session)
|
139
135
|
|
140
136
|
elsif session["#{self.id}::task_data"].blank?
|
141
137
|
self.new_session_message = "REFRESHING - Task Data Blank"
|
142
|
-
ZuoraConnect.logger.
|
138
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
143
139
|
raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
|
144
140
|
self.refresh(session: session)
|
145
141
|
|
146
142
|
elsif session["#{self.id}::last_refresh"].blank?
|
147
143
|
self.new_session_message = "REFRESHING - No Time on Cookie"
|
148
144
|
recoverable_session = true
|
149
|
-
ZuoraConnect.logger.
|
145
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
150
146
|
raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
|
151
147
|
self.refresh(session: session)
|
152
148
|
|
@@ -154,7 +150,7 @@ module ZuoraConnect
|
|
154
150
|
elsif (session["#{self.id}::last_refresh"].to_i < INSTANCE_REFRESH_WINDOW.ago.to_i) && self.mark_for_refresh
|
155
151
|
self.new_session_message = "REFRESHING - Session Old by #{time_expire.abs} second"
|
156
152
|
recoverable_session = true
|
157
|
-
ZuoraConnect.logger.
|
153
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
158
154
|
self.refresh(session: session)
|
159
155
|
|
160
156
|
else
|
@@ -163,14 +159,14 @@ module ZuoraConnect
|
|
163
159
|
else
|
164
160
|
self.new_session_message = "REBUILDING - Expires in #{time_expire} seconds"
|
165
161
|
end
|
166
|
-
ZuoraConnect.logger.
|
162
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
167
163
|
self.build_task(task_data: session["#{self.id}::task_data"], session: session)
|
168
164
|
end
|
169
165
|
end
|
170
166
|
return self
|
171
167
|
rescue ZuoraConnect::Exceptions::HoldingPattern => ex
|
172
168
|
while self.marked_for_refresh?
|
173
|
-
ZuoraConnect.logger.info("Holding - Expires in #{self.reset_mark_expires_at}. '#{self.new_session_message}'"
|
169
|
+
ZuoraConnect.logger.info("Holding - Expires in #{self.reset_mark_expires_at}. '#{self.new_session_message}'")
|
174
170
|
sleep(HOLDING_PATTERN_SLEEP)
|
175
171
|
end
|
176
172
|
self.reload_attributes([:refresh_token, :oauth_expires_at, :access_token])
|
@@ -178,7 +174,7 @@ module ZuoraConnect
|
|
178
174
|
retry
|
179
175
|
rescue => ex
|
180
176
|
if recoverable_session
|
181
|
-
ZuoraConnect.logger.warn("REBUILDING - Using backup expired cache"
|
177
|
+
ZuoraConnect.logger.warn("REBUILDING - Using backup expired cache")
|
182
178
|
self.build_task(task_data: session["#{self.id}::task_data"], session: session)
|
183
179
|
return self
|
184
180
|
else
|
@@ -200,10 +196,10 @@ module ZuoraConnect
|
|
200
196
|
self.logitem(item: {tenant_ids: tenants, organization: organizations})
|
201
197
|
params = {
|
202
198
|
:name => self.task_data.dig('name'),
|
203
|
-
:
|
204
|
-
:
|
199
|
+
:zuora_domain => self.target_login.client.rest_domain,
|
200
|
+
:zuora_entity_ids => self.task_data.dig(LOGIN_TENANT_DESTINATION,'entities').map{|e| e['id']},
|
201
|
+
:zuora_tenant_ids => self.task_data['tenant_ids'],
|
205
202
|
}
|
206
|
-
params.merge!({:zuora_domain => self.send(LOGIN_TENANT_DESTINATION).client.rest_domain })
|
207
203
|
params = params.reject{|k,v| !self.attributes.keys.member?(k.to_s) || self[k] == v}
|
208
204
|
self.update_columns(params) if params.present?
|
209
205
|
end
|
@@ -211,12 +207,12 @@ module ZuoraConnect
|
|
211
207
|
def refresh(session: {}, session_fallback: false)
|
212
208
|
refresh_count ||= 0
|
213
209
|
#Check how app was deployed
|
214
|
-
if !self
|
210
|
+
if !self.zuora_logins.present?
|
215
211
|
start = Time.now
|
216
212
|
response = HTTParty.get(ZuoraConnect.configuration.url + "/api/#{self.api_version}/tools/tasks/#{self.id}.json",:body => {:access_token => self.access_token})
|
217
213
|
response_time = Time.now - start
|
218
214
|
|
219
|
-
ZuoraConnect.logger.debug("REFRESH TASK - Connect Task Info Request Time #{response_time.round(2).to_s}"
|
215
|
+
ZuoraConnect.logger.debug("[#{self.id}] REFRESH TASK - Connect Task Info Request Time #{response_time.round(2).to_s}")
|
220
216
|
if response.code == 200
|
221
217
|
self.build_task(task_data: JSON.parse(response.body), session: session)
|
222
218
|
self.last_refresh = Time.now.to_i
|
@@ -226,68 +222,35 @@ module ZuoraConnect
|
|
226
222
|
raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Communicating with Connect", response.body, response.code)
|
227
223
|
end
|
228
224
|
else
|
229
|
-
self.build_task(task_data: self.zuora_logins, session: session)
|
225
|
+
self.build_task(task_data: JSON.parse(self.zuora_logins), session: session)
|
230
226
|
self.last_refresh = Time.now.to_i
|
231
227
|
self.cache_app_instance
|
232
228
|
self.reset_mark_for_refresh
|
233
229
|
end
|
234
230
|
rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS).concat(ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
|
235
231
|
if (refresh_count += 1) < 3
|
236
|
-
|
237
|
-
ZuoraConnect.logger.info("REFRESH TASK - #{ex.class} Retrying(#{refresh_count})", self.default_ougai_items)
|
232
|
+
ZuoraConnect.logger.info("[#{self.id}] REFRESH TASK - #{ex.class} Retrying(#{refresh_count})")
|
238
233
|
retry
|
239
234
|
else
|
240
|
-
ZuoraConnect.logger.fatal("REFRESH TASK - #{ex.class} Failed #{refresh_count}x"
|
235
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH TASK - #{ex.class} Failed #{refresh_count}x")
|
241
236
|
raise
|
242
237
|
end
|
243
238
|
rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
|
244
239
|
if (refresh_count += 1) < 3
|
245
240
|
if ex.code == 401
|
246
|
-
ZuoraConnect.logger.info("REFRESH TASK - Failed #{ex.code} - Retrying(#{refresh_count})"
|
241
|
+
ZuoraConnect.logger.info("[#{self.id}] REFRESH TASK - Failed #{ex.code} - Retrying(#{refresh_count})")
|
247
242
|
self.refresh_oauth
|
248
243
|
else
|
249
|
-
ZuoraConnect.logger.warn("REFRESH TASK - Failed #{ex.code} - Retrying(#{refresh_count})"
|
244
|
+
ZuoraConnect.logger.warn("[#{self.id}] REFRESH TASK - Failed #{ex.code} - Retrying(#{refresh_count})")
|
250
245
|
end
|
251
246
|
retry
|
252
247
|
else
|
253
|
-
ZuoraConnect.logger.fatal("REFRESH TASK - Failed #{ex.code} - #{refresh_count}x"
|
248
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH TASK - Failed #{ex.code} - #{refresh_count}x")
|
254
249
|
raise
|
255
250
|
end
|
256
251
|
end
|
257
252
|
|
258
|
-
#### START
|
259
|
-
def zuora_logins=(val)
|
260
|
-
write_attribute(:zuora_logins, kms_encrypt(val.to_json))
|
261
|
-
end
|
262
|
-
|
263
|
-
def zuora_logins
|
264
|
-
return JSON.parse(kms_decrypt(super))
|
265
|
-
end
|
266
|
-
|
267
|
-
def kms_decrypt(value)
|
268
|
-
kms_client = Aws::KMS::Client.new({region: Rails.application.secrets.aws['AWS_REGION'], credentials: self.aws_auth_client}.delete_if { |k, v| v.blank? })
|
269
|
-
resp = kms_client.decrypt({ciphertext_blob: [value].pack("H*") })
|
270
|
-
return resp.plaintext
|
271
|
-
end
|
272
|
-
|
273
|
-
def kms_encrypt(value)
|
274
|
-
kms_client = Aws::KMS::Client.new({region: Rails.application.secrets.aws['AWS_REGION'], credentials: self.aws_auth_client}.delete_if {|k,v| v.blank? })
|
275
|
-
kms_key = ENV['AWS_KMS_ARN'] || Rails.application.secrets.aws['AWS_KMS_ARN']
|
276
|
-
|
277
|
-
resp = kms_client.encrypt({key_id: kms_key, plaintext: value})
|
278
|
-
return resp.ciphertext_blob.unpack('H*').first
|
279
|
-
end
|
280
|
-
|
281
|
-
def aws_auth_client
|
282
|
-
if Rails.env.to_s == 'development'
|
283
|
-
return Aws::Credentials.new(Rails.application.secrets.aws['AWS_ACCESS_KEY_ID'], Rails.application.secrets.aws['AWS_SECRET_ACCESS_KEY'])
|
284
|
-
else
|
285
|
-
return nil
|
286
|
-
end
|
287
|
-
end
|
288
|
-
#### END KMS ENCRYPTION Methods ####
|
289
|
-
|
290
|
-
#### START Metrics Methods ####
|
253
|
+
#### START Metrics Mathods ####
|
291
254
|
def logitem(item: {}, reset: false)
|
292
255
|
self.logitems = {} if self.logitems.class != Hash
|
293
256
|
if item.class == Hash
|
@@ -371,9 +334,9 @@ module ZuoraConnect
|
|
371
334
|
end
|
372
335
|
return @data
|
373
336
|
end
|
374
|
-
#### END Task
|
337
|
+
#### END Task Mathods ####
|
375
338
|
|
376
|
-
#### START Task
|
339
|
+
#### START Task Mathods ####
|
377
340
|
def build_task(task_data: {}, session: {})
|
378
341
|
session = {} if session.blank?
|
379
342
|
self.task_data = task_data
|
@@ -482,13 +445,13 @@ module ZuoraConnect
|
|
482
445
|
raise
|
483
446
|
end
|
484
447
|
end
|
485
|
-
#### END Task
|
448
|
+
#### END Task Mathods ####
|
486
449
|
|
487
|
-
#### START Connect OAUTH
|
450
|
+
#### START Connect OAUTH methods ####
|
488
451
|
def check_oauth_state(method)
|
489
452
|
#Refresh token if already expired
|
490
453
|
if self.oauth_expired?
|
491
|
-
ZuoraConnect.logger.debug("Before '#{method}' method, Oauth expired"
|
454
|
+
ZuoraConnect.logger.debug("[#{self.id}] Before '#{method}' method, Oauth expired")
|
492
455
|
self.refresh_oauth
|
493
456
|
end
|
494
457
|
end
|
@@ -507,7 +470,7 @@ module ZuoraConnect
|
|
507
470
|
}
|
508
471
|
response = HTTParty.post("#{ZuoraConnect.configuration.url}/oauth/token",:body => params)
|
509
472
|
response_time = Time.now - start
|
510
|
-
ZuoraConnect.logger.debug("REFRESH OAUTH - In #{response_time.round(2).to_s}"
|
473
|
+
ZuoraConnect.logger.debug("[#{self.id}] REFRESH OAUTH - In #{response_time.round(2).to_s}")
|
511
474
|
|
512
475
|
if response.code == 200
|
513
476
|
response_body = JSON.parse(response.body)
|
@@ -521,10 +484,10 @@ module ZuoraConnect
|
|
521
484
|
end
|
522
485
|
rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS).concat(ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
|
523
486
|
if (refresh_oauth_count += 1) < 3
|
524
|
-
ZuoraConnect.logger.info("REFRESH OAUTH - #{ex.class} Retrying(#{refresh_oauth_count})"
|
487
|
+
ZuoraConnect.logger.info("[#{self.id}] REFRESH OAUTH - #{ex.class} Retrying(#{refresh_oauth_count})")
|
525
488
|
retry
|
526
489
|
else
|
527
|
-
ZuoraConnect.logger.fatal("REFRESH OAUTH - #{ex.class} Failed #{refresh_oauth_count}x"
|
490
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH OAUTH - #{ex.class} Failed #{refresh_oauth_count}x")
|
528
491
|
raise
|
529
492
|
end
|
530
493
|
rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
|
@@ -535,14 +498,14 @@ module ZuoraConnect
|
|
535
498
|
return if !self.oauth_expired?
|
536
499
|
|
537
500
|
if (refresh_oauth_count += 1) < 3
|
538
|
-
ZuoraConnect.logger.info("REFRESH OAUTH - Failed #{ex.code} - Retrying(#{refresh_oauth_count})"
|
501
|
+
ZuoraConnect.logger.info("[#{self.id}] REFRESH OAUTH - Failed #{ex.code} - Retrying(#{refresh_oauth_count})")
|
539
502
|
retry
|
540
503
|
else
|
541
|
-
ZuoraConnect.logger.fatal("REFRESH OAUTH - Failed #{ex.code} - #{refresh_oauth_count}x"
|
504
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH OAUTH - Failed #{ex.code} - #{refresh_oauth_count}x")
|
542
505
|
raise
|
543
506
|
end
|
544
507
|
end
|
545
|
-
#### END Connect OAUTH
|
508
|
+
#### END Connect OAUTH methods ####
|
546
509
|
|
547
510
|
#### START AppInstance Temporary Persistance Methods ####
|
548
511
|
def marked_for_refresh?
|
@@ -588,10 +551,10 @@ module ZuoraConnect
|
|
588
551
|
end
|
589
552
|
end
|
590
553
|
if cached_instance.blank?
|
591
|
-
ZuoraConnect.logger.debug("Cached AppInstance Missing"
|
554
|
+
ZuoraConnect.logger.debug("[#{self.id}] Cached AppInstance Missing")
|
592
555
|
return session
|
593
556
|
else
|
594
|
-
ZuoraConnect.logger.debug("Cached AppInstance Found"
|
557
|
+
ZuoraConnect.logger.debug("[#{self.id}] Cached AppInstance Found")
|
595
558
|
return decrypt_data(data: cached_instance, rescue_return: session).merge(session)
|
596
559
|
end
|
597
560
|
else
|
@@ -603,7 +566,7 @@ module ZuoraConnect
|
|
603
566
|
if defined?(Redis.current)
|
604
567
|
#Task data must be present and the last refresh cannot be old. We dont want to overwite new cache data with old
|
605
568
|
if self.task_data.present? && (self.last_refresh.to_i > INSTANCE_REFRESH_WINDOW.ago.to_i)
|
606
|
-
ZuoraConnect.logger.debug("Caching AppInstance"
|
569
|
+
ZuoraConnect.logger.debug("[#{self.id}] Caching AppInstance")
|
607
570
|
Redis.current.setex("AppInstance:#{self.id}", INSTANCE_REDIS_CACHE_PERIOD.to_i, self.encrypt_data(data: self.save_data))
|
608
571
|
end
|
609
572
|
end
|
@@ -664,7 +627,7 @@ module ZuoraConnect
|
|
664
627
|
begin
|
665
628
|
return JSON.parse(encryptor.decrypt_and_verify(CGI::unescape(data)))
|
666
629
|
rescue ActiveSupport::MessageVerifier::InvalidSignature => ex
|
667
|
-
ZuoraConnect.logger.
|
630
|
+
ZuoraConnect.logger.add(Logger::ERROR, "Error Decrypting for #{self.id}") if log_fatal
|
668
631
|
return rescue_return
|
669
632
|
rescue JSON::ParserError => ex
|
670
633
|
return encryptor.decrypt_and_verify(CGI::unescape(data))
|
@@ -1033,7 +996,9 @@ module ZuoraConnect
|
|
1033
996
|
|
1034
997
|
def method_missing(method_sym, *arguments, &block)
|
1035
998
|
if method_sym.to_s.include?("login")
|
1036
|
-
ZuoraConnect.logger.fatal("Method Missing #{method_sym}
|
999
|
+
ZuoraConnect.logger.fatal("Method Missing #{method_sym}")
|
1000
|
+
ZuoraConnect.logger.fatal("Instance Data: #{self.task_data}")
|
1001
|
+
ZuoraConnect.logger.fatal("Instance Logins: #{self.logins}")
|
1037
1002
|
end
|
1038
1003
|
super
|
1039
1004
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
<html><head>
|
2
|
+
<title>We're sorry, but something went wrong</title>
|
3
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
4
|
+
<style>
|
5
|
+
body {
|
6
|
+
background-color: #EFEFEF;
|
7
|
+
color: #2E2F30;
|
8
|
+
text-align: center;
|
9
|
+
font-family: arial, sans-serif;
|
10
|
+
margin: 0;
|
11
|
+
}
|
12
|
+
|
13
|
+
div.dialog {
|
14
|
+
width: 95%;
|
15
|
+
max-width: 33em;
|
16
|
+
margin: 4em auto 0;
|
17
|
+
}
|
18
|
+
|
19
|
+
div.dialog > div {
|
20
|
+
border: 1px solid #CCC;
|
21
|
+
border-right-color: #999;
|
22
|
+
border-left-color: #999;
|
23
|
+
border-bottom-color: #BBB;
|
24
|
+
border-top: #B00100 solid 4px;
|
25
|
+
border-top-left-radius: 9px;
|
26
|
+
border-top-right-radius: 9px;
|
27
|
+
background-color: white;
|
28
|
+
padding: 7px 12% 0;
|
29
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
30
|
+
}
|
31
|
+
|
32
|
+
h1 {
|
33
|
+
font-size: 100%;
|
34
|
+
color: #730E15;
|
35
|
+
line-height: 1.5em;
|
36
|
+
}
|
37
|
+
|
38
|
+
div.dialog > p {
|
39
|
+
margin: 0 0 1em;
|
40
|
+
padding: 1em;
|
41
|
+
background-color: #F7F7F7;
|
42
|
+
border: 1px solid #CCC;
|
43
|
+
border-right-color: #999;
|
44
|
+
border-left-color: #999;
|
45
|
+
border-bottom-color: #999;
|
46
|
+
border-bottom-left-radius: 4px;
|
47
|
+
border-bottom-right-radius: 4px;
|
48
|
+
border-top-color: #DADADA;
|
49
|
+
color: #666;
|
50
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
51
|
+
}
|
52
|
+
</style>
|
53
|
+
</head>
|
54
|
+
|
55
|
+
<body>
|
56
|
+
<!-- This file lives in public/500.html -->
|
57
|
+
<div class="dialog">
|
58
|
+
<div>
|
59
|
+
<h1>We're sorry, but this request could not be verified.</h1>
|
60
|
+
</div>
|
61
|
+
<p>Please try relaunching this application at connect.zuora.com</p>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
|
65
|
+
</body></html>
|
@@ -0,0 +1,81 @@
|
|
1
|
+
<html><head>
|
2
|
+
<title>We're sorry, but something went wrong</title>
|
3
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
4
|
+
<style>
|
5
|
+
body {
|
6
|
+
background-color: #EFEFEF;
|
7
|
+
color: #2E2F30;
|
8
|
+
text-align: center;
|
9
|
+
font-family: arial, sans-serif;
|
10
|
+
margin: 0;
|
11
|
+
}
|
12
|
+
|
13
|
+
div.dialog {
|
14
|
+
width: 95%;
|
15
|
+
max-width: 33em;
|
16
|
+
margin: 4em auto 0;
|
17
|
+
}
|
18
|
+
|
19
|
+
div.dialog > div {
|
20
|
+
border: 1px solid #CCC;
|
21
|
+
border-right-color: #999;
|
22
|
+
border-left-color: #999;
|
23
|
+
border-bottom-color: #BBB;
|
24
|
+
border-top: #B00100 solid 4px;
|
25
|
+
border-top-left-radius: 9px;
|
26
|
+
border-top-right-radius: 9px;
|
27
|
+
background-color: white;
|
28
|
+
padding: 7px 12% 0;
|
29
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
30
|
+
}
|
31
|
+
|
32
|
+
h1 {
|
33
|
+
font-size: 100%;
|
34
|
+
color: #730E15;
|
35
|
+
line-height: 1.5em;
|
36
|
+
}
|
37
|
+
|
38
|
+
div.dialog > p {
|
39
|
+
margin: 0 0 1em;
|
40
|
+
padding: 1em;
|
41
|
+
background-color: #F7F7F7;
|
42
|
+
border: 1px solid #CCC;
|
43
|
+
border-right-color: #999;
|
44
|
+
border-left-color: #999;
|
45
|
+
border-bottom-color: #999;
|
46
|
+
border-bottom-left-radius: 4px;
|
47
|
+
border-bottom-right-radius: 4px;
|
48
|
+
border-top-color: #DADADA;
|
49
|
+
color: #666;
|
50
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
51
|
+
}
|
52
|
+
div#main{
|
53
|
+
background: white;
|
54
|
+
}
|
55
|
+
</style>
|
56
|
+
</head>
|
57
|
+
|
58
|
+
<body >
|
59
|
+
<div style='background: white;'>
|
60
|
+
<!-- This file lives in public/500.html -->
|
61
|
+
<% if defined?(exception) %>
|
62
|
+
<div class="dialog" style='max-width: 74em;'>
|
63
|
+
<div>
|
64
|
+
<h1><%= exception.class %> - '<%= exception.message %>'</h1>
|
65
|
+
</div>
|
66
|
+
<p style='text-align: left;'>
|
67
|
+
<% exception.backtrace.each do |line| %>
|
68
|
+
<%= line %><br>
|
69
|
+
<% end %>
|
70
|
+
</p>
|
71
|
+
</div>
|
72
|
+
<% else %>
|
73
|
+
<div class="dialog">
|
74
|
+
<div>
|
75
|
+
<h1>The launch url was invalid.</h1>
|
76
|
+
</div>
|
77
|
+
<p>Please try relaunching this application</p>
|
78
|
+
</div>
|
79
|
+
<% end %>
|
80
|
+
</div>
|
81
|
+
</body></html>
|