module ZuoraConnect::Controllers::Helpers
def authenticate_connect_app_request
def authenticate_connect_app_request if defined?(ElasticAPM) && ElasticAPM.running? if ElasticAPM.respond_to?(:set_label) ElasticAPM.set_label(:trace_id, request.uuid) else ElasticAPM.set_label(:trace_id, request.uuid) end end Thread.current[:appinstance] = nil start_time = Time.now if ZuoraConnect.configuration.mode == "Production" setup_instance_via_prod_mode else setup_instance_via_dev_mode end if !defined?(@appinstance) || @appinstance.blank? render "zuora_connect/static/error_handled", :locals => { :title => "Application state could not be found.", :message => "Please relaunch application." }, :layout => false return end #Call .data_lookup with the current session to retrieve session. In some cases session may be stored/cache in redis #so data lookup provides a model method that can be overriden per app. if params[:controller] != 'zuora_connect/api/v1/app_instance' && params[:action] != 'drop' if @appinstance.new_session_for_ui_requests(:params => params) @appinstance.new_session(:session => @appinstance.data_lookup(:session => session)) end end if session["#{@appinstance.id}::user::email"].present? ElasticAPM.set_user(session["#{@appinstance.id}::user::email"]) if defined?(ElasticAPM) && ElasticAPM.running? PaperTrail.whodunnit = session["#{@appinstance.id}::user::email"] if defined?(PaperTrail) end begin locale = session["#{@appinstance.id}::user::locale"] I18n.locale = locale.present? ? locale : @appinstance.locale rescue I18n::InvalidLocale => ex ZuoraConnect.logger.error(ex) if !ZuoraConnect::AppInstance::IGNORED_LOCALS.include?(ex.locale.to_s.downcase) end begin Time.zone = session["#{@appinstance.id}::user::timezone"] ? session["#{@appinstance.id}::user::timezone"] : @appinstance.timezone rescue ZuoraConnect.logger.error(ex) end ZuoraConnect.logger.debug("[#{@appinstance.blank? ? "N/A" : @appinstance.id}] Authenticate App Request Completed In - #{(Time.now - start_time).round(2)}s") rescue ZuoraConnect::Exceptions::InvalidCredentialSet => ex id = @appinstance.id ZuoraConnect::AppInstance.destroy(id) Apartment::Tenant.drop(id) render "zuora_connect/static/error_handled", :locals => { :title => "Application Setup Error", :message => "Application cannot be run using Zuora Session. Delete old application \ deployment and create new with Zuora Basic or OAuth credentials." }, :layout => false return rescue ZuoraConnect::Exceptions::AccessDenied => ex respond_to do |format| format.html { render "zuora_connect/static/error_handled", :locals => { :title => "Application State Error", :message => ex.message }, status: 401 } format.js { render "zuora_connect/static/error_handled", :locals => { :title => "Application State Error", :message => ex.message }, status: 401 } format.json { render json: {'errors' => ex.message}, status: 401 } format.all { render json: ex.message, status: 401 } end return rescue => ex ZuoraConnect.logger.error("UI Authorization Error", ex) respond_to do |format| format.html { render 'zuora_connect/static/error_unhandled', :locals => {:exception => ex, :skip_exception => true}, status: 500, layout: false } format.js { render 'zuora_connect/static/error_unhandled', :locals => {:exception => ex, :skip_exception => true}, status: 500, layout: false} end return end