Module: CoalescingPanda::ControllerHelpers
- Defined in:
 - lib/coalescing_panda/controller_helpers.rb
 
Instance Method Summary collapse
- #canvas_environment ⇒ Object
 - #canvas_oauth2(*roles) ⇒ Object
 - #have_session? ⇒ Boolean
 - #lti_authorize!(*roles) ⇒ Object
 - #lti_editor_button_response(return_type, return_params) ⇒ Object
 - #lti_roles ⇒ Object
 - #session_check ⇒ Object
 - #set_session(launch_presentation_return_url) ⇒ Object
 
Instance Method Details
#canvas_environment ⇒ Object
      104 105 106 107 108 109 110 111  | 
    
      # File 'lib/coalescing_panda/controller_helpers.rb', line 104 def canvas_environment case params['custom_test_environment'] when 'true' :test else :production end end  | 
  
#canvas_oauth2(*roles) ⇒ Object
      5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  | 
    
      # File 'lib/coalescing_panda/controller_helpers.rb', line 5 def canvas_oauth2(*roles) return if have_session? if (*roles) user_id = params['user_id'] launch_presentation_return_url = @lti_account.settings[:launch_presentation_return_url] || params['launch_presentation_return_url'] launch_presentation_return_url = [BearcatUri.new(request.env["HTTP_REFERER"]).prefix, launch_presentation_return_url].join unless launch_presentation_return_url.include?('http') uri = BearcatUri.new(launch_presentation_return_url) set_session(launch_presentation_return_url) if token = CanvasApiAuth.where('user_id = ? and api_domain = ?', user_id, uri.api_domain).pluck(:api_token).first @client = Bearcat::Client.new(token: token, prefix: uri.prefix) elsif @lti_account = params['oauth_consumer_key'] && LtiAccount.find_by_key(params['oauth_consumer_key']) client_id = @lti_account.oauth2_client_id client = Bearcat::Client.new(prefix: uri.prefix) session['state'] = SecureRandom.hex(32) redirect_url = [coalescing_panda_url, coalescing_panda.oauth2_redirect_path({key: params['oauth_consumer_key'], user_id: user_id, api_domain: uri.api_domain, state: session['state']})].join @canvas_url = client.auth_redirect_url(client_id, redirect_url) #delete the added params so the original oauth sig still works @lti_params = params.to_hash @lti_params.delete('action') @lti_params.delete('controller') render 'coalescing_panda/oauth2/oauth2', layout: 'coalescing_panda/application' end end end  | 
  
#have_session? ⇒ Boolean
      40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56  | 
    
      # File 'lib/coalescing_panda/controller_helpers.rb', line 40 def have_session? if params['tool_consumer_instance_guid'] && session['user_id'] != params['user_id'] reset_session logger.info("resetting session params") session['user_id'] = params['user_id'] end if (session['user_id'] && session['uri']) uri = BearcatUri.new(session['uri']) token = CanvasApiAuth.where('user_id = ? and api_domain = ?', session['user_id'], uri.api_domain).pluck(:api_token).first @client = Bearcat::Client.new(token: token, prefix: uri.prefix) if token end @lti_account = LtiAccount.find_by_key(session['oauth_consumer_key']) if session['oauth_consumer_key'] !!@client end  | 
  
#lti_authorize!(*roles) ⇒ Object
      58 59 60 61 62 63 64 65 66 67 68 69 70 71  | 
    
      # File 'lib/coalescing_panda/controller_helpers.rb', line 58 def (*roles) = false if @lti_account = params['oauth_consumer_key'] && LtiAccount.find_by_key(params['oauth_consumer_key']) @tp = IMS::LTI::ToolProvider.new(@lti_account.key, @lti_account.secret, params) = @tp.valid_request?(request) end logger.info 'not authorized on tp valid request' if ! = && (roles.count == 0 || (roles & lti_roles).count > 0) logger.info 'not authorized on roles' if ! = && @lti_account.validate_nonce(params['oauth_nonce'], DateTime.strptime(params['oauth_timestamp'], '%s')) logger.info 'not authorized on nonce' if ! render :text => 'Invalid Credentials, please contact your Administrator.', :status => :unauthorized unless end  | 
  
#lti_editor_button_response(return_type, return_params) ⇒ Object
      73 74 75 76 77 78 79  | 
    
      # File 'lib/coalescing_panda/controller_helpers.rb', line 73 def (return_type, return_params) valid_return_types = [:image_url, :iframe, :url, :lti_launch_url] raise "invalid editor button return type #{return_type}" unless valid_return_types.include?(return_type) return_params[:return_type] = return_type.to_s return_url = "#{params['launch_presentation_return_url']}?#{return_params.to_query}" redirect_to return_url end  | 
  
#lti_roles ⇒ Object
      81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102  | 
    
      # File 'lib/coalescing_panda/controller_helpers.rb', line 81 def lti_roles @lti_roles ||= params['roles'].split(',').map { |role| case role.downcase.strip when 'admin' :admin when 'urn:lti:instrole:ims/lis/administrator' :admin when 'learner' :student when 'instructor' :teacher when 'urn:lti:role:ims/lis/teachingassistant' :ta when 'contentdeveloper' :designer when 'urn:lti:instrole:ims/lis/observer' :observer else :none end }.uniq end  | 
  
#session_check ⇒ Object
      113 114 115 116 117 118 119 120 121 122 123 124 125 126  | 
    
      # File 'lib/coalescing_panda/controller_helpers.rb', line 113 def session_check user_agent = UserAgent.parse(request.user_agent) # Uses useragent gem! if user_agent.browser == 'Safari' # we apply the fix.. return if session[:safari_cookie_fixed] # it is already fixed.. continue if params[:safari_cookie_fix].present? # we should be top window and able to set cookies.. so fix the issue :) session[:safari_cookie_fixed] = true redirect_to params[:return_to] else # Redirect the top frame to your server.. query = params.to_query render :text => "<script>var referrer = document.referrer; top.window.location='?safari_cookie_fix=true&return_to='.concat(encodeURI(referrer));</script>" end end end  | 
  
#set_session(launch_presentation_return_url) ⇒ Object
      32 33 34 35 36 37 38  | 
    
      # File 'lib/coalescing_panda/controller_helpers.rb', line 32 def set_session(launch_presentation_return_url) session['user_id'] = params['user_id'] session['uri'] = launch_presentation_return_url session['lis_person_sourcedid'] = params['lis_person_sourcedid'] session['oauth_consumer_key'] = params['oauth_consumer_key'] session['custom_canvas_account_id'] = params['custom_canvas_account_id'] end  |