767: unexpected token at '<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Action Controller: Exception caught</title>
<style>
body {
background-color: #FAFAFA;
color: #333;
margin: 0px;
}
body, p, ol, ul, td {
font-family: helvetica, verdana, arial, sans-serif;
font-size: 13px;
line-height: 18px;
}
pre {
font-size: 11px;
white-space: pre-wrap;
}
pre.box {
border: 1px solid #EEE;
padding: 10px;
margin: 0px;
width: 958px;
}
header {
color: #F0F0F0;
background: #C52F24;
padding: 0.5em 1.5em;
}
h1 {
margin: 0.2em 0;
line-height: 1.1em;
font-size: 2em;
}
h2 {
color: #C52F24;
line-height: 25px;
}
.details {
border: 1px solid #D0D0D0;
border-radius: 4px;
margin: 1em 0px;
display: block;
width: 978px;
}
.summary {
padding: 8px 15px;
border-bottom: 1px solid #D0D0D0;
display: block;
}
.details pre {
margin: 5px;
border: none;
}
#container {
box-sizing: border-box;
width: 100%;
padding: 0 1.5em;
}
.source * {
margin: 0px;
padding: 0px;
}
.source {
border: 1px solid #D9D9D9;
background: #ECECEC;
width: 978px;
}
.source pre {
padding: 10px 0px;
border: none;
}
.source .data {
font-size: 80%;
overflow: auto;
background-color: #FFF;
}
.info {
padding: 0.5em;
}
.source .data .line_numbers {
background-color: #ECECEC;
color: #AAA;
padding: 1em .5em;
border-right: 1px solid #DDD;
text-align: right;
}
.line {
padding-left: 10px;
white-space: pre;
}
.line:hover {
background-color: #F6F6F6;
}
.line.active {
background-color: #FFCCCC;
}
.hidden {
display: none;
}
a { color: #980905; }
a:visited { color: #666; }
a.trace-frames { color: #666; }
a:hover { color: #C52F24; }
a.trace-frames.selected { color: #C52F24 }
</style>
<script>
var toggle = function(id) {
var s = document.getElementById(id).style;
s.display = s.display == 'none' ? 'block' : 'none';
return false;
}
var show = function(id) {
document.getElementById(id).style.display = 'block';
}
var hide = function(id) {
document.getElementById(id).style.display = 'none';
}
var toggleTrace = function() {
return toggle('blame_trace');
}
var toggleSessionDump = function() {
return toggle('session_dump');
}
var toggleEnvDump = function() {
return toggle('env_dump');
}
</script>
</head>
<body>
<header>
<h1>
Faraday::SSLError
in AccessTokensController#create
</h1>
</header>
<div id="container">
<h2>SSL_connect returned=1 errno=0 state=error: certificate verify failed (unspecified certificate verification error)</h2>
<div class="source hidden" id="frame-source-0">
<div class="info">
Extracted source (around line <strong>#44</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>42</span>
<span>43</span>
<span>44</span>
<span>45</span>
<span>46</span>
<span>47</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> start = Process.clock_gettime Process::CLOCK_MONOTONIC
</div><div class="line"> # to_io is required because SSLSocket doesn't have wait_readable yet
</div><div class="line active"> case s.connect_nonblock(exception: false)
</div><div class="line"> when :wait_readable; s.to_io.wait_readable(timeout)
</div><div class="line"> when :wait_writable; s.to_io.wait_writable(timeout)
</div><div class="line"> else; break
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-1">
<div class="info">
Extracted source (around line <strong>#44</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>42</span>
<span>43</span>
<span>44</span>
<span>45</span>
<span>46</span>
<span>47</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> start = Process.clock_gettime Process::CLOCK_MONOTONIC
</div><div class="line"> # to_io is required because SSLSocket doesn't have wait_readable yet
</div><div class="line active"> case s.connect_nonblock(exception: false)
</div><div class="line"> when :wait_readable; s.to_io.wait_readable(timeout)
</div><div class="line"> when :wait_writable; s.to_io.wait_writable(timeout)
</div><div class="line"> else; break
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-2">
<div class="info">
Extracted source (around line <strong>#996</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>994</span>
<span>995</span>
<span>996</span>
<span>997</span>
<span>998</span>
<span>999</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> s.session = @ssl_session
</div><div class="line"> end
</div><div class="line active"> ssl_socket_connect(s, @open_timeout)
</div><div class="line"> if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
</div><div class="line"> s.post_connection_check(@address)
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-3">
<div class="info">
Extracted source (around line <strong>#930</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>928</span>
<span>929</span>
<span>930</span>
<span>931</span>
<span>932</span>
<span>933</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def do_start
</div><div class="line active"> connect
</div><div class="line"> @started = true
</div><div class="line"> end
</div><div class="line"> private :do_start
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-4">
<div class="info">
Extracted source (around line <strong>#919</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>917</span>
<span>918</span>
<span>919</span>
<span>920</span>
<span>921</span>
<span>922</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> if block_given?
</div><div class="line"> begin
</div><div class="line active"> do_start
</div><div class="line"> return yield(self)
</div><div class="line"> ensure
</div><div class="line"> do_finish
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-5">
<div class="info">
Extracted source (around line <strong>#144</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>142</span>
<span>143</span>
<span>144</span>
<span>145</span>
<span>146</span>
<span>147</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> # Must use Net::HTTP#start and pass it a block otherwise the server's
</div><div class="line"> # TCP socket does not close correctly.
</div><div class="line active"> http.start do |opened_http|
</div><div class="line"> opened_http.get env[:url].request_uri, env[:request_headers], &block
</div><div class="line"> end
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-6">
<div class="info">
Extracted source (around line <strong>#135</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>133</span>
<span>134</span>
<span>135</span>
<span>136</span>
<span>137</span>
<span>138</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> if (env[:method] == :get) && !env[:body]
</div><div class="line"> # prefer `get` to `request` because the former handles gzip (ruby 1.9)
</div><div class="line active"> request_via_get_method(http, env, &block)
</div><div class="line"> else
</div><div class="line"> request_via_request_method(http, env, &block)
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-7">
<div class="info">
Extracted source (around line <strong>#128</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>126</span>
<span>127</span>
<span>128</span>
<span>129</span>
<span>130</span>
<span>131</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> http_response
</div><div class="line"> else
</div><div class="line active"> request_with_wrapped_block(http, env)
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line">
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-8">
<div class="info">
Extracted source (around line <strong>#70</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>68</span>
<span>69</span>
<span>70</span>
<span>71</span>
<span>72</span>
<span>73</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> http_response = connection(env) do |http|
</div><div class="line"> begin
</div><div class="line active"> perform_request(http, env)
</div><div class="line"> rescue *NET_HTTP_EXCEPTIONS => e
</div><div class="line"> if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
</div><div class="line"> raise Faraday::SSLError, e
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-9">
<div class="info">
Extracted source (around line <strong>#60</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>58</span>
<span>59</span>
<span>60</span>
<span>61</span>
<span>62</span>
<span>63</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> return conn unless block_given?
</div><div class="line">
</div><div class="line active"> yield conn
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> # Close any persistent connections. The adapter should still be usable
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-10">
<div class="info">
Extracted source (around line <strong>#68</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>66</span>
<span>67</span>
<span>68</span>
<span>69</span>
<span>70</span>
<span>71</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> super
</div><div class="line active"> http_response = connection(env) do |http|
</div><div class="line"> begin
</div><div class="line"> perform_request(http, env)
</div><div class="line"> rescue *NET_HTTP_EXCEPTIONS => e
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-11">
<div class="info">
Extracted source (around line <strong>#25</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>23</span>
<span>24</span>
<span>25</span>
<span>26</span>
<span>27</span>
<span>28</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> env.body = params.to_query(env.params_encoder)
</div><div class="line"> end
</div><div class="line active"> @app.call env
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> # @param env [Faraday::Env]
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-12">
<div class="info">
Extracted source (around line <strong>#153</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>151</span>
<span>152</span>
<span>153</span>
<span>154</span>
<span>155</span>
<span>156</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> # @return [Faraday::Response]
</div><div class="line"> def build_response(connection, request)
</div><div class="line active"> app.call(build_env(connection, request))
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> # The "rack app" wrapped in middleware. All requests are sent here.
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-13">
<div class="info">
Extracted source (around line <strong>#492</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>490</span>
<span>491</span>
<span>492</span>
<span>493</span>
<span>494</span>
<span>495</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> end
</div><div class="line">
</div><div class="line active"> builder.build_response(self, request)
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> # Creates and configures the request object.
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-14">
<div class="info">
Extracted source (around line <strong>#198</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>196</span>
<span>197</span>
<span>198</span>
<span>199</span>
<span>200</span>
<span>201</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> class_eval <<-RUBY, __FILE__, __LINE__ + 1
</div><div class="line"> def #{method}(url = nil, params = nil, headers = nil)
</div><div class="line active"> run_request(:#{method}, url, nil, headers) do |request|
</div><div class="line"> request.params.update(params) if params
</div><div class="line"> yield request if block_given?
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source " id="frame-source-15">
<div class="info">
Extracted source (around line <strong>#12</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def call
</div><div class="line active"> Rails.application.executor.wrap { Faraday.new(url: @platform.tool_keyset_url).get }
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line">end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-16">
<div class="info">
Extracted source (around line <strong>#83</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>81</span>
<span>82</span>
<span>83</span>
<span>84</span>
<span>85</span>
<span>86</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> # Perform the work in the supplied block as an execution.
</div><div class="line"> def self.wrap
</div><div class="line active"> return yield if active?
</div><div class="line">
</div><div class="line"> instance = run!
</div><div class="line"> begin
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-17">
<div class="info">
Extracted source (around line <strong>#12</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def call
</div><div class="line active"> Rails.application.executor.wrap { Faraday.new(url: @platform.tool_keyset_url).get }
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line">end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-18">
<div class="info">
Extracted source (around line <strong>#43</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>41</span>
<span>42</span>
<span>43</span>
<span>44</span>
<span>45</span>
<span>46</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def tool_request_for_keys
</div><div class="line active"> request = LtiPlatform::ToolKeys.new(@platform).call
</div><div class="line"> JSON.parse(request.body)
</div><div class="line"> end
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-19">
<div class="info">
Extracted source (around line <strong>#29</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>27</span>
<span>28</span>
<span>29</span>
<span>30</span>
<span>31</span>
<span>32</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def fetch_key_from_jwks(kid)
</div><div class="line active"> tool_keys = tool_request_for_keys
</div><div class="line"> jwk_key = tool_keys['keys'].detect { |f| f['kid'] == kid }
</div><div class="line">
</div><div class="line"> # jwk_key: {"alg"=>"...", "e"=>"...", kid=>"...", "kty"=>"...", "n"=>"...", "use"=>"..."}
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-20">
<div class="info">
Extracted source (around line <strong>#24</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>22</span>
<span>23</span>
<span>24</span>
<span>25</span>
<span>26</span>
<span>27</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> decoded_header = Jwt::Header.new(@tool_jwt).call
</div><div class="line"> kid = decoded_header['kid']
</div><div class="line active"> fetch_key_from_jwks(kid)
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line">
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-21">
<div class="info">
Extracted source (around line <strong>#12</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def call
</div><div class="line active"> rsa_public = tool_public_key
</div><div class="line">
</div><div class="line"> # decode JWT
</div><div class="line"> Jwt::Decode.new(@tool_jwt, rsa_public).call
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-22">
<div class="info">
Extracted source (around line <strong>#41</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>39</span>
<span>40</span>
<span>41</span>
<span>42</span>
<span>43</span>
<span>44</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> # may be others we should rescue from, we'll see
</div><div class="line"> def decode_client_assertion
</div><div class="line active"> @payload = LtiPlatform::DecodeToolJwt.new(@platform, @params[:client_assertion]).call.first
</div><div class="line"> validate_client_assertion
</div><div class="line"> rescue JWT::ExpiredSignature
</div><div class="line"> @error = 'Expired token'
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-23">
<div class="info">
Extracted source (around line <strong>#20</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>18</span>
<span>19</span>
<span>20</span>
<span>21</span>
<span>22</span>
<span>23</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> incorrect_grant_type && return unless @params[:grant_type] == 'client_credentials'
</div><div class="line"> incorrect_client_assertion_type && return unless @params[:client_assertion_type] == 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer'
</div><div class="line active"> decode_client_assertion
</div><div class="line"> generate_token unless @error
</div><div class="line"> # TODO: will want to validate scopes eventually
</div><div class="line"> @scope = @params[:scope]
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-24">
<div class="info">
Extracted source (around line <strong>#13</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
<span>16</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> @error = nil
</div><div class="line"> @access_token = nil
</div><div class="line active"> valid_request?
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> def valid_request?
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-25">
<div class="info">
Extracted source (around line <strong>#8</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> # POST /platform/access_tokens.json
</div><div class="line"> def create
</div><div class="line active"> @token = LtiPlatform::GenerateAccessToken.new(@platform, access_token_params)
</div><div class="line">
</div><div class="line"> respond_to do |format|
</div><div class="line"> unless @token.error
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-26">
<div class="info">
Extracted source (around line <strong>#8</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> # POST /platform/access_tokens.json
</div><div class="line"> def create
</div><div class="line active"> @token = LtiPlatform::GenerateAccessToken.new(@platform, access_token_params)
</div><div class="line">
</div><div class="line"> respond_to do |format|
</div><div class="line"> unless @token.error
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-27">
<div class="info">
Extracted source (around line <strong>#6</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> module BasicImplicitRender # :nodoc:
</div><div class="line"> def send_action(method, *args)
</div><div class="line active"> super.tap { default_render unless performed? }
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> def default_render(*args)
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-28">
<div class="info">
Extracted source (around line <strong>#194</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>192</span>
<span>193</span>
<span>194</span>
<span>195</span>
<span>196</span>
<span>197</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> # which is *not* necessarily the same as the action name.
</div><div class="line"> def process_action(method_name, *args)
</div><div class="line active"> send_action(method_name, *args)
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> # Actually call the method associated with the action. Override
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-29">
<div class="info">
Extracted source (around line <strong>#30</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>28</span>
<span>29</span>
<span>30</span>
<span>31</span>
<span>32</span>
<span>33</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def process_action(*) #:nodoc:
</div><div class="line"> self.formats = request.formats.map(&:ref).compact
</div><div class="line active"> super
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> # Check for double render errors and set the content_type after rendering.
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-30">
<div class="info">
Extracted source (around line <strong>#42</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>40</span>
<span>41</span>
<span>42</span>
<span>43</span>
<span>44</span>
<span>45</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def process_action(*args)
</div><div class="line"> run_callbacks(:process_action) do
</div><div class="line active"> super
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line">
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-31">
<div class="info">
Extracted source (around line <strong>#132</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>130</span>
<span>131</span>
<span>132</span>
<span>133</span>
<span>134</span>
<span>135</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> if next_sequence.final?
</div><div class="line"> next_sequence.invoke_before(env)
</div><div class="line active"> env.value = !env.halted && (!block_given? || yield)
</div><div class="line"> next_sequence.invoke_after(env)
</div><div class="line"> env.value
</div><div class="line"> else
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-32">
<div class="info">
Extracted source (around line <strong>#41</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>39</span>
<span>40</span>
<span>41</span>
<span>42</span>
<span>43</span>
<span>44</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> # <tt>process_action</tt> callbacks around the normal behavior.
</div><div class="line"> def process_action(*args)
</div><div class="line active"> run_callbacks(:process_action) do
</div><div class="line"> super
</div><div class="line"> end
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-33">
<div class="info">
Extracted source (around line <strong>#22</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>20</span>
<span>21</span>
<span>22</span>
<span>23</span>
<span>24</span>
<span>25</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> private
</div><div class="line"> def process_action(*args)
</div><div class="line active"> super
</div><div class="line"> rescue Exception => exception
</div><div class="line"> request.env["action_dispatch.show_detailed_exceptions"] ||= show_detailed_exceptions?
</div><div class="line"> rescue_with_handler(exception) || raise
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-34">
<div class="info">
Extracted source (around line <strong>#34</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>32</span>
<span>33</span>
<span>34</span>
<span>35</span>
<span>36</span>
<span>37</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload|
</div><div class="line"> begin
</div><div class="line active"> result = super
</div><div class="line"> payload[:status] = response.status
</div><div class="line"> result
</div><div class="line"> ensure
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-35">
<div class="info">
Extracted source (around line <strong>#168</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>166</span>
<span>167</span>
<span>168</span>
<span>169</span>
<span>170</span>
<span>171</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def instrument(name, payload = {})
</div><div class="line"> if notifier.listening?(name)
</div><div class="line active"> instrumenter.instrument(name, payload) { yield payload if block_given? }
</div><div class="line"> else
</div><div class="line"> yield payload if block_given?
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-36">
<div class="info">
Extracted source (around line <strong>#23</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>21</span>
<span>22</span>
<span>23</span>
<span>24</span>
<span>25</span>
<span>26</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> listeners_state = start name, payload
</div><div class="line"> begin
</div><div class="line active"> yield payload
</div><div class="line"> rescue Exception => e
</div><div class="line"> payload[:exception] = [e.class.name, e.message]
</div><div class="line"> payload[:exception_object] = e
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-37">
<div class="info">
Extracted source (around line <strong>#168</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>166</span>
<span>167</span>
<span>168</span>
<span>169</span>
<span>170</span>
<span>171</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def instrument(name, payload = {})
</div><div class="line"> if notifier.listening?(name)
</div><div class="line active"> instrumenter.instrument(name, payload) { yield payload if block_given? }
</div><div class="line"> else
</div><div class="line"> yield payload if block_given?
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-38">
<div class="info">
Extracted source (around line <strong>#32</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>30</span>
<span>31</span>
<span>32</span>
<span>33</span>
<span>34</span>
<span>35</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> ActiveSupport::Notifications.instrument("start_processing.action_controller", raw_payload.dup)
</div><div class="line">
</div><div class="line active"> ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload|
</div><div class="line"> begin
</div><div class="line"> result = super
</div><div class="line"> payload[:status] = response.status
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-39">
<div class="info">
Extracted source (around line <strong>#256</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>254</span>
<span>255</span>
<span>256</span>
<span>257</span>
<span>258</span>
<span>259</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> request.filtered_parameters.merge! wrapped_filtered_hash
</div><div class="line"> end
</div><div class="line active"> super
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> private
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-40">
<div class="info">
Extracted source (around line <strong>#24</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>22</span>
<span>23</span>
<span>24</span>
<span>25</span>
<span>26</span>
<span>27</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> # and it won't be cleaned up by the method below.
</div><div class="line"> ActiveRecord::LogSubscriber.reset_runtime
</div><div class="line active"> super
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> def cleanup_view_runtime
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-41">
<div class="info">
Extracted source (around line <strong>#134</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>132</span>
<span>133</span>
<span>134</span>
<span>135</span>
<span>136</span>
<span>137</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> @_response_body = nil
</div><div class="line">
</div><div class="line active"> process_action(action_name, *args)
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> # Delegates to the class' ::controller_path
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-42">
<div class="info">
Extracted source (around line <strong>#32</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>30</span>
<span>31</span>
<span>32</span>
<span>33</span>
<span>34</span>
<span>35</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def process(*) #:nodoc:
</div><div class="line"> old_config, I18n.config = I18n.config, I18nProxy.new(I18n.config, lookup_context)
</div><div class="line active"> super
</div><div class="line"> ensure
</div><div class="line"> I18n.config = old_config
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-43">
<div class="info">
Extracted source (around line <strong>#191</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>189</span>
<span>190</span>
<span>191</span>
<span>192</span>
<span>193</span>
<span>194</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> set_request!(request)
</div><div class="line"> set_response!(response)
</div><div class="line active"> process(name)
</div><div class="line"> request.commit_flash
</div><div class="line"> to_a
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-44">
<div class="info">
Extracted source (around line <strong>#252</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>250</span>
<span>251</span>
<span>252</span>
<span>253</span>
<span>254</span>
<span>255</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> middleware_stack.build(name) { |env| new.dispatch(name, req, res) }.call req.env
</div><div class="line"> else
</div><div class="line active"> new.dispatch(name, req, res)
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-45">
<div class="info">
Extracted source (around line <strong>#52</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>50</span>
<span>51</span>
<span>52</span>
<span>53</span>
<span>54</span>
<span>55</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def dispatch(controller, action, req, res)
</div><div class="line active"> controller.dispatch(action, req, res)
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line">
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-46">
<div class="info">
Extracted source (around line <strong>#34</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>32</span>
<span>33</span>
<span>34</span>
<span>35</span>
<span>36</span>
<span>37</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> controller = controller req
</div><div class="line"> res = controller.make_response! req
</div><div class="line active"> dispatch(controller, params[:action], req, res)
</div><div class="line"> rescue ActionController::RoutingError
</div><div class="line"> if @raise_on_name_error
</div><div class="line"> raise
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-47">
<div class="info">
Extracted source (around line <strong>#52</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>50</span>
<span>51</span>
<span>52</span>
<span>53</span>
<span>54</span>
<span>55</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> req.path_parameters = set_params.merge parameters
</div><div class="line">
</div><div class="line active"> status, headers, body = route.app.serve(req)
</div><div class="line">
</div><div class="line"> if "pass" == headers["X-Cascade"]
</div><div class="line"> req.script_name = script_name
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-48">
<div class="info">
Extracted source (around line <strong>#35</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>33</span>
<span>34</span>
<span>35</span>
<span>36</span>
<span>37</span>
<span>38</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def serve(req)
</div><div class="line active"> find_routes(req).each do |match, parameters, route|
</div><div class="line"> set_params = req.path_parameters
</div><div class="line"> path_info = req.path_info
</div><div class="line"> script_name = req.script_name
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-49">
<div class="info">
Extracted source (around line <strong>#35</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>33</span>
<span>34</span>
<span>35</span>
<span>36</span>
<span>37</span>
<span>38</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def serve(req)
</div><div class="line active"> find_routes(req).each do |match, parameters, route|
</div><div class="line"> set_params = req.path_parameters
</div><div class="line"> path_info = req.path_info
</div><div class="line"> script_name = req.script_name
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-50">
<div class="info">
Extracted source (around line <strong>#840</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>838</span>
<span>839</span>
<span>840</span>
<span>841</span>
<span>842</span>
<span>843</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> req = make_request(env)
</div><div class="line"> req.path_info = Journey::Router::Utils.normalize_path(req.path_info)
</div><div class="line active"> @router.serve(req)
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> def recognize_path(path, environment = {})
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-51">
<div class="info">
Extracted source (around line <strong>#15</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>13</span>
<span>14</span>
<span>15</span>
<span>16</span>
<span>17</span>
<span>18</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> env[RACK_TEMPFILES] ||= []
</div><div class="line active"> status, headers, body = @app.call(env)
</div><div class="line"> body_proxy = BodyProxy.new(body) do
</div><div class="line"> env[RACK_TEMPFILES].each(&:close!) unless env[RACK_TEMPFILES].nil?
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-52">
<div class="info">
Extracted source (around line <strong>#27</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>25</span>
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
<span>30</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def call(env)
</div><div class="line active"> status, headers, body = @app.call(env)
</div><div class="line">
</div><div class="line"> if etag_status?(status) && etag_body?(body) && !skip_caching?(headers)
</div><div class="line"> original_body = body
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-53">
<div class="info">
Extracted source (around line <strong>#40</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>38</span>
<span>39</span>
<span>40</span>
<span>41</span>
<span>42</span>
<span>43</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> [status, headers, body]
</div><div class="line"> else
</div><div class="line active"> @app.call(env)
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line">
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-54">
<div class="info">
Extracted source (around line <strong>#12</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def call(env)
</div><div class="line active"> status, headers, body = @app.call(env)
</div><div class="line">
</div><div class="line"> if env[REQUEST_METHOD] == HEAD
</div><div class="line"> [
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-55">
<div class="info">
Extracted source (around line <strong>#18</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>16</span>
<span>17</span>
<span>18</span>
<span>19</span>
<span>20</span>
<span>21</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> request = ActionDispatch::Request.new env
</div><div class="line active"> _, headers, _ = response = @app.call(env)
</div><div class="line">
</div><div class="line"> return response unless html_response?(headers)
</div><div class="line"> return response if policy_present?(headers)
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-56">
<div class="info">
Extracted source (around line <strong>#266</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>264</span>
<span>265</span>
<span>266</span>
<span>267</span>
<span>268</span>
<span>269</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> req = make_request env
</div><div class="line"> prepare_session(req)
</div><div class="line active"> status, headers, body = app.call(req.env)
</div><div class="line"> res = Rack::Response::Raw.new status, headers
</div><div class="line"> commit_session(req, res)
</div><div class="line"> [status, headers, body]
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-57">
<div class="info">
Extracted source (around line <strong>#260</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>258</span>
<span>259</span>
<span>260</span>
<span>261</span>
<span>262</span>
<span>263</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def call(env)
</div><div class="line active"> context(env)
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> def context(env, app = @app)
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-58">
<div class="info">
Extracted source (around line <strong>#670</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>668</span>
<span>669</span>
<span>670</span>
<span>671</span>
<span>672</span>
<span>673</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> request = ActionDispatch::Request.new env
</div><div class="line">
</div><div class="line active"> status, headers, body = @app.call(env)
</div><div class="line">
</div><div class="line"> if request.have_cookie_jar?
</div><div class="line"> cookie_jar = request.cookie_jar
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-59">
<div class="info">
Extracted source (around line <strong>#28</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
<span>30</span>
<span>31</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> result = run_callbacks :call do
</div><div class="line"> begin
</div><div class="line active"> @app.call(env)
</div><div class="line"> rescue => error
</div><div class="line"> end
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-60">
<div class="info">
Extracted source (around line <strong>#98</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>96</span>
<span>97</span>
<span>98</span>
<span>99</span>
<span>100</span>
<span>101</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> if callbacks.empty?
</div><div class="line active"> yield if block_given?
</div><div class="line"> else
</div><div class="line"> env = Filters::Environment.new(self, false, nil)
</div><div class="line"> next_sequence = callbacks.compile
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-61">
<div class="info">
Extracted source (around line <strong>#26</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>24</span>
<span>25</span>
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> error = nil
</div><div class="line active"> result = run_callbacks :call do
</div><div class="line"> begin
</div><div class="line"> @app.call(env)
</div><div class="line"> rescue => error
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-62">
<div class="info">
Extracted source (around line <strong>#61</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>59</span>
<span>60</span>
<span>61</span>
<span>62</span>
<span>63</span>
<span>64</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> request = ActionDispatch::Request.new env
</div><div class="line active"> _, headers, body = response = @app.call(env)
</div><div class="line">
</div><div class="line"> if headers["X-Cascade"] == "pass"
</div><div class="line"> body.close if body.respond_to?(:close)
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-63">
<div class="info">
Extracted source (around line <strong>#33</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>31</span>
<span>32</span>
<span>33</span>
<span>34</span>
<span>35</span>
<span>36</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> request = ActionDispatch::Request.new env
</div><div class="line active"> @app.call(env)
</div><div class="line"> rescue Exception => exception
</div><div class="line"> if request.show_exceptions?
</div><div class="line"> render_exception(request, exception)
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-64">
<div class="info">
Extracted source (around line <strong>#38</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>36</span>
<span>37</span>
<span>38</span>
<span>39</span>
<span>40</span>
<span>41</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> instrumenter.start "request.action_dispatch", request: request
</div><div class="line"> logger.info { started_request_message(request) }
</div><div class="line active"> status, headers, body = @app.call(env)
</div><div class="line"> body = ::Rack::BodyProxy.new(body) { finish(request) }
</div><div class="line"> [status, headers, body]
</div><div class="line"> rescue Exception
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-65">
<div class="info">
Extracted source (around line <strong>#26</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>24</span>
<span>25</span>
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> if logger.respond_to?(:tagged)
</div><div class="line active"> logger.tagged(compute_tags(request)) { call_app(request, env) }
</div><div class="line"> else
</div><div class="line"> call_app(request, env)
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-66">
<div class="info">
Extracted source (around line <strong>#71</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>69</span>
<span>70</span>
<span>71</span>
<span>72</span>
<span>73</span>
<span>74</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def tagged(*tags)
</div><div class="line active"> formatter.tagged(*tags) { yield self }
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> def flush
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-67">
<div class="info">
Extracted source (around line <strong>#28</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
<span>30</span>
<span>31</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def tagged(*tags)
</div><div class="line"> new_tags = push_tags(*tags)
</div><div class="line active"> yield self
</div><div class="line"> ensure
</div><div class="line"> pop_tags(new_tags.size)
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-68">
<div class="info">
Extracted source (around line <strong>#71</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>69</span>
<span>70</span>
<span>71</span>
<span>72</span>
<span>73</span>
<span>74</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def tagged(*tags)
</div><div class="line active"> formatter.tagged(*tags) { yield self }
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> def flush
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-69">
<div class="info">
Extracted source (around line <strong>#26</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>24</span>
<span>25</span>
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> if logger.respond_to?(:tagged)
</div><div class="line active"> logger.tagged(compute_tags(request)) { call_app(request, env) }
</div><div class="line"> else
</div><div class="line"> call_app(request, env)
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-70">
<div class="info">
Extracted source (around line <strong>#81</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>79</span>
<span>80</span>
<span>81</span>
<span>82</span>
<span>83</span>
<span>84</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> req = ActionDispatch::Request.new env
</div><div class="line"> req.remote_ip = GetIp.new(req, check_ip, proxies)
</div><div class="line active"> @app.call(req.env)
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> # The GetIp class exists as a way to defer processing of the request data
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-71">
<div class="info">
Extracted source (around line <strong>#27</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>25</span>
<span>26</span>
<span>27</span>
<span>28</span>
<span>29</span>
<span>30</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> req = ActionDispatch::Request.new env
</div><div class="line"> req.request_id = make_request_id(req.x_request_id)
</div><div class="line active"> @app.call(env).tap { |_status, headers, _body| headers[X_REQUEST_ID] = req.request_id }
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> private
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-72">
<div class="info">
Extracted source (around line <strong>#24</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>22</span>
<span>23</span>
<span>24</span>
<span>25</span>
<span>26</span>
<span>27</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> end
</div><div class="line">
</div><div class="line active"> @app.call(env)
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> def method_override(env)
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-73">
<div class="info">
Extracted source (around line <strong>#22</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>20</span>
<span>21</span>
<span>22</span>
<span>23</span>
<span>24</span>
<span>25</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> start_time = Utils.clock_time
</div><div class="line active"> status, headers, body = @app.call(env)
</div><div class="line"> headers = Utils::HeaderHash[headers]
</div><div class="line">
</div><div class="line"> request_time = Utils.clock_time - start_time
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-74">
<div class="info">
Extracted source (around line <strong>#29</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>27</span>
<span>28</span>
<span>29</span>
<span>30</span>
<span>31</span>
<span>32</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new)
</div><div class="line active"> response = @app.call(env)
</div><div class="line"> response[2] = ::Rack::BodyProxy.new(response[2]) do
</div><div class="line"> LocalCacheRegistry.set_cache_for(local_cache_key, nil)
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-75">
<div class="info">
Extracted source (around line <strong>#14</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
<span>16</span>
<span>17</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> state = @executor.run!
</div><div class="line"> begin
</div><div class="line active"> response = @app.call(env)
</div><div class="line"> returned = response << ::Rack::BodyProxy.new(response.pop) { state.complete! }
</div><div class="line"> ensure
</div><div class="line"> state.complete! unless returned
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-76">
<div class="info">
Extracted source (around line <strong>#127</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>125</span>
<span>126</span>
<span>127</span>
<span>128</span>
<span>129</span>
<span>130</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> end
</div><div class="line">
</div><div class="line active"> @app.call(req.env)
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line">end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-77">
<div class="info">
Extracted source (around line <strong>#110</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>108</span>
<span>109</span>
<span>110</span>
<span>111</span>
<span>112</span>
<span>113</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> def call(env)
</div><div class="line active"> status, headers, body = @app.call(env)
</div><div class="line"> if body.respond_to?(:to_path)
</div><div class="line"> case type = variation(env)
</div><div class="line"> when 'X-Accel-Redirect'
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-78">
<div class="info">
Extracted source (around line <strong>#524</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>522</span>
<span>523</span>
<span>524</span>
<span>525</span>
<span>526</span>
<span>527</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> req = build_request env
</div><div class="line active"> app.call req.env
</div><div class="line"> end
</div><div class="line">
</div><div class="line"> # Defines additional Rack env configuration that is added on each call.
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-79">
<div class="info">
Extracted source (around line <strong>#228</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>226</span>
<span>227</span>
<span>228</span>
<span>229</span>
<span>230</span>
<span>231</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> def call(env)
</div><div class="line"> env[Const::PUMA_CONFIG] = @config
</div><div class="line active"> @app.call(env)
</div><div class="line"> end
</div><div class="line"> end
</div><div class="line">
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-80">
<div class="info">
Extracted source (around line <strong>#718</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>716</span>
<span>717</span>
<span>718</span>
<span>719</span>
<span>720</span>
<span>721</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> begin
</div><div class="line"> begin
</div><div class="line active"> status, headers, res_body = @app.call(env)
</div><div class="line">
</div><div class="line"> return :async if req.hijacked
</div><div class="line">
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-81">
<div class="info">
Extracted source (around line <strong>#472</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>470</span>
<span>471</span>
<span>472</span>
<span>473</span>
<span>474</span>
<span>475</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> while true
</div><div class="line active"> case handle_request(client, buffer)
</div><div class="line"> when false
</div><div class="line"> return
</div><div class="line"> when :async
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-82">
<div class="info">
Extracted source (around line <strong>#328</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>326</span>
<span>327</span>
<span>328</span>
<span>329</span>
<span>330</span>
<span>331</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line"> else
</div><div class="line"> if process_now
</div><div class="line active"> process_client client, buffer
</div><div class="line"> else
</div><div class="line"> client.set_timeout @first_data_timeout
</div><div class="line"> @reactor.add client
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="source hidden" id="frame-source-83">
<div class="info">
Extracted source (around line <strong>#134</strong>):
</div>
<div class="data">
<table cellpadding="0" cellspacing="0" class="lines">
<tr>
<td>
<pre class="line_numbers">
<span>132</span>
<span>133</span>
<span>134</span>
<span>135</span>
<span>136</span>
<span>137</span>
</pre>
</td>
<td width="100%">
<pre>
<div class="line">
</div><div class="line"> begin
</div><div class="line active"> block.call(work, *extra)
</div><div class="line"> rescue Exception => e
</div><div class="line"> STDERR.puts "Error reached top of thread-pool: #{e.message} (#{e.class})"
</div><div class="line"> end
</div>
</pre>
</td>
</tr>
</table>
</div>
</div>
<p><code>Rails.root: /app</code></p>
<div id="traces">
<a href="#" onclick="hide('Framework-Trace');hide('Full-Trace');show('Application-Trace');; return false;">Application Trace</a> |
<a href="#" onclick="hide('Application-Trace');hide('Full-Trace');show('Framework-Trace');; return false;">Framework Trace</a> |
<a href="#" onclick="hide('Application-Trace');hide('Framework-Trace');show('Full-Trace');; return false;">Full Trace</a>
<div id="Application-Trace" style="display: block;">
<pre><code><a class="trace-frames" data-frame-id="15" href="#">app/services/lti_platform/tool_keys.rb:12:in `block in call'</a><br><a class="trace-frames" data-frame-id="17" href="#">app/services/lti_platform/tool_keys.rb:12:in `call'</a><br><a class="trace-frames" data-frame-id="18" href="#">app/services/lti_platform/decode_tool_jwt.rb:43:in `tool_request_for_keys'</a><br><a class="trace-frames" data-frame-id="19" href="#">app/services/lti_platform/decode_tool_jwt.rb:29:in `fetch_key_from_jwks'</a><br><a class="trace-frames" data-frame-id="20" href="#">app/services/lti_platform/decode_tool_jwt.rb:24:in `tool_public_key'</a><br><a class="trace-frames" data-frame-id="21" href="#">app/services/lti_platform/decode_tool_jwt.rb:12:in `call'</a><br><a class="trace-frames" data-frame-id="22" href="#">app/services/lti_platform/generate_access_token.rb:41:in `decode_client_assertion'</a><br><a class="trace-frames" data-frame-id="23" href="#">app/services/lti_platform/generate_access_token.rb:20:in `valid_request?'</a><br><a class="trace-frames" data-frame-id="24" href="#">app/services/lti_platform/generate_access_token.rb:13:in `initialize'</a><br><a class="trace-frames" data-frame-id="25" href="#">app/controllers/access_tokens_controller.rb:8:in `new'</a><br><a class="trace-frames" data-frame-id="26" href="#">app/controllers/access_tokens_controller.rb:8:in `create'</a><br></code></pre>
</div>
<div id="Framework-Trace" style="display: none;">
<pre><code><a class="trace-frames" data-frame-id="0" href="#">/usr/local/lib/ruby/2.6.0/net/protocol.rb:44:in `connect_nonblock'</a><br><a class="trace-frames" data-frame-id="1" href="#">/usr/local/lib/ruby/2.6.0/net/protocol.rb:44:in `ssl_socket_connect'</a><br><a class="trace-frames" data-frame-id="2" href="#">/usr/local/lib/ruby/2.6.0/net/http.rb:996:in `connect'</a><br><a class="trace-frames" data-frame-id="3" href="#">/usr/local/lib/ruby/2.6.0/net/http.rb:930:in `do_start'</a><br><a class="trace-frames" data-frame-id="4" href="#">/usr/local/lib/ruby/2.6.0/net/http.rb:919:in `start'</a><br><a class="trace-frames" data-frame-id="5" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:144:in `request_via_get_method'</a><br><a class="trace-frames" data-frame-id="6" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:135:in `request_with_wrapped_block'</a><br><a class="trace-frames" data-frame-id="7" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:128:in `perform_request'</a><br><a class="trace-frames" data-frame-id="8" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:70:in `block in call'</a><br><a class="trace-frames" data-frame-id="9" href="#">faraday (1.0.1) lib/faraday/adapter.rb:60:in `connection'</a><br><a class="trace-frames" data-frame-id="10" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:68:in `call'</a><br><a class="trace-frames" data-frame-id="11" href="#">faraday (1.0.1) lib/faraday/request/url_encoded.rb:25:in `call'</a><br><a class="trace-frames" data-frame-id="12" href="#">faraday (1.0.1) lib/faraday/rack_builder.rb:153:in `build_response'</a><br><a class="trace-frames" data-frame-id="13" href="#">faraday (1.0.1) lib/faraday/connection.rb:492:in `run_request'</a><br><a class="trace-frames" data-frame-id="14" href="#">faraday (1.0.1) lib/faraday/connection.rb:198:in `get'</a><br><a class="trace-frames" data-frame-id="16" href="#">activesupport (5.2.4.6) lib/active_support/execution_wrapper.rb:83:in `wrap'</a><br><a class="trace-frames" data-frame-id="27" href="#">actionpack (5.2.4.6) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'</a><br><a class="trace-frames" data-frame-id="28" href="#">actionpack (5.2.4.6) lib/abstract_controller/base.rb:194:in `process_action'</a><br><a class="trace-frames" data-frame-id="29" href="#">actionpack (5.2.4.6) lib/action_controller/metal/rendering.rb:30:in `process_action'</a><br><a class="trace-frames" data-frame-id="30" href="#">actionpack (5.2.4.6) lib/abstract_controller/callbacks.rb:42:in `block in process_action'</a><br><a class="trace-frames" data-frame-id="31" href="#">activesupport (5.2.4.6) lib/active_support/callbacks.rb:132:in `run_callbacks'</a><br><a class="trace-frames" data-frame-id="32" href="#">actionpack (5.2.4.6) lib/abstract_controller/callbacks.rb:41:in `process_action'</a><br><a class="trace-frames" data-frame-id="33" href="#">actionpack (5.2.4.6) lib/action_controller/metal/rescue.rb:22:in `process_action'</a><br><a class="trace-frames" data-frame-id="34" href="#">actionpack (5.2.4.6) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'</a><br><a class="trace-frames" data-frame-id="35" href="#">activesupport (5.2.4.6) lib/active_support/notifications.rb:168:in `block in instrument'</a><br><a class="trace-frames" data-frame-id="36" href="#">activesupport (5.2.4.6) lib/active_support/notifications/instrumenter.rb:23:in `instrument'</a><br><a class="trace-frames" data-frame-id="37" href="#">activesupport (5.2.4.6) lib/active_support/notifications.rb:168:in `instrument'</a><br><a class="trace-frames" data-frame-id="38" href="#">actionpack (5.2.4.6) lib/action_controller/metal/instrumentation.rb:32:in `process_action'</a><br><a class="trace-frames" data-frame-id="39" href="#">actionpack (5.2.4.6) lib/action_controller/metal/params_wrapper.rb:256:in `process_action'</a><br><a class="trace-frames" data-frame-id="40" href="#">activerecord (5.2.4.6) lib/active_record/railties/controller_runtime.rb:24:in `process_action'</a><br><a class="trace-frames" data-frame-id="41" href="#">actionpack (5.2.4.6) lib/abstract_controller/base.rb:134:in `process'</a><br><a class="trace-frames" data-frame-id="42" href="#">actionview (5.2.4.6) lib/action_view/rendering.rb:32:in `process'</a><br><a class="trace-frames" data-frame-id="43" href="#">actionpack (5.2.4.6) lib/action_controller/metal.rb:191:in `dispatch'</a><br><a class="trace-frames" data-frame-id="44" href="#">actionpack (5.2.4.6) lib/action_controller/metal.rb:252:in `dispatch'</a><br><a class="trace-frames" data-frame-id="45" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:52:in `dispatch'</a><br><a class="trace-frames" data-frame-id="46" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:34:in `serve'</a><br><a class="trace-frames" data-frame-id="47" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:52:in `block in serve'</a><br><a class="trace-frames" data-frame-id="48" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:35:in `each'</a><br><a class="trace-frames" data-frame-id="49" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:35:in `serve'</a><br><a class="trace-frames" data-frame-id="50" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:840:in `call'</a><br><a class="trace-frames" data-frame-id="51" href="#">rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'</a><br><a class="trace-frames" data-frame-id="52" href="#">rack (2.2.3) lib/rack/etag.rb:27:in `call'</a><br><a class="trace-frames" data-frame-id="53" href="#">rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'</a><br><a class="trace-frames" data-frame-id="54" href="#">rack (2.2.3) lib/rack/head.rb:12:in `call'</a><br><a class="trace-frames" data-frame-id="55" href="#">actionpack (5.2.4.6) lib/action_dispatch/http/content_security_policy.rb:18:in `call'</a><br><a class="trace-frames" data-frame-id="56" href="#">rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'</a><br><a class="trace-frames" data-frame-id="57" href="#">rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'</a><br><a class="trace-frames" data-frame-id="58" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/cookies.rb:670:in `call'</a><br><a class="trace-frames" data-frame-id="59" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'</a><br><a class="trace-frames" data-frame-id="60" href="#">activesupport (5.2.4.6) lib/active_support/callbacks.rb:98:in `run_callbacks'</a><br><a class="trace-frames" data-frame-id="61" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/callbacks.rb:26:in `call'</a><br><a class="trace-frames" data-frame-id="62" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'</a><br><a class="trace-frames" data-frame-id="63" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'</a><br><a class="trace-frames" data-frame-id="64" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:38:in `call_app'</a><br><a class="trace-frames" data-frame-id="65" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `block in call'</a><br><a class="trace-frames" data-frame-id="66" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `block in tagged'</a><br><a class="trace-frames" data-frame-id="67" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:28:in `tagged'</a><br><a class="trace-frames" data-frame-id="68" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `tagged'</a><br><a class="trace-frames" data-frame-id="69" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `call'</a><br><a class="trace-frames" data-frame-id="70" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'</a><br><a class="trace-frames" data-frame-id="71" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/request_id.rb:27:in `call'</a><br><a class="trace-frames" data-frame-id="72" href="#">rack (2.2.3) lib/rack/method_override.rb:24:in `call'</a><br><a class="trace-frames" data-frame-id="73" href="#">rack (2.2.3) lib/rack/runtime.rb:22:in `call'</a><br><a class="trace-frames" data-frame-id="74" href="#">activesupport (5.2.4.6) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'</a><br><a class="trace-frames" data-frame-id="75" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/executor.rb:14:in `call'</a><br><a class="trace-frames" data-frame-id="76" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/static.rb:127:in `call'</a><br><a class="trace-frames" data-frame-id="77" href="#">rack (2.2.3) lib/rack/sendfile.rb:110:in `call'</a><br><a class="trace-frames" data-frame-id="78" href="#">railties (5.2.4.6) lib/rails/engine.rb:524:in `call'</a><br><a class="trace-frames" data-frame-id="79" href="#">puma (4.3.8) lib/puma/configuration.rb:228:in `call'</a><br><a class="trace-frames" data-frame-id="80" href="#">puma (4.3.8) lib/puma/server.rb:718:in `handle_request'</a><br><a class="trace-frames" data-frame-id="81" href="#">puma (4.3.8) lib/puma/server.rb:472:in `process_client'</a><br><a class="trace-frames" data-frame-id="82" href="#">puma (4.3.8) lib/puma/server.rb:328:in `block in run'</a><br><a class="trace-frames" data-frame-id="83" href="#">puma (4.3.8) lib/puma/thread_pool.rb:134:in `block in spawn_thread'</a><br></code></pre>
</div>
<div id="Full-Trace" style="display: none;">
<pre><code><a class="trace-frames" data-frame-id="0" href="#">/usr/local/lib/ruby/2.6.0/net/protocol.rb:44:in `connect_nonblock'</a><br><a class="trace-frames" data-frame-id="1" href="#">/usr/local/lib/ruby/2.6.0/net/protocol.rb:44:in `ssl_socket_connect'</a><br><a class="trace-frames" data-frame-id="2" href="#">/usr/local/lib/ruby/2.6.0/net/http.rb:996:in `connect'</a><br><a class="trace-frames" data-frame-id="3" href="#">/usr/local/lib/ruby/2.6.0/net/http.rb:930:in `do_start'</a><br><a class="trace-frames" data-frame-id="4" href="#">/usr/local/lib/ruby/2.6.0/net/http.rb:919:in `start'</a><br><a class="trace-frames" data-frame-id="5" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:144:in `request_via_get_method'</a><br><a class="trace-frames" data-frame-id="6" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:135:in `request_with_wrapped_block'</a><br><a class="trace-frames" data-frame-id="7" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:128:in `perform_request'</a><br><a class="trace-frames" data-frame-id="8" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:70:in `block in call'</a><br><a class="trace-frames" data-frame-id="9" href="#">faraday (1.0.1) lib/faraday/adapter.rb:60:in `connection'</a><br><a class="trace-frames" data-frame-id="10" href="#">faraday (1.0.1) lib/faraday/adapter/net_http.rb:68:in `call'</a><br><a class="trace-frames" data-frame-id="11" href="#">faraday (1.0.1) lib/faraday/request/url_encoded.rb:25:in `call'</a><br><a class="trace-frames" data-frame-id="12" href="#">faraday (1.0.1) lib/faraday/rack_builder.rb:153:in `build_response'</a><br><a class="trace-frames" data-frame-id="13" href="#">faraday (1.0.1) lib/faraday/connection.rb:492:in `run_request'</a><br><a class="trace-frames" data-frame-id="14" href="#">faraday (1.0.1) lib/faraday/connection.rb:198:in `get'</a><br><a class="trace-frames" data-frame-id="15" href="#">app/services/lti_platform/tool_keys.rb:12:in `block in call'</a><br><a class="trace-frames" data-frame-id="16" href="#">activesupport (5.2.4.6) lib/active_support/execution_wrapper.rb:83:in `wrap'</a><br><a class="trace-frames" data-frame-id="17" href="#">app/services/lti_platform/tool_keys.rb:12:in `call'</a><br><a class="trace-frames" data-frame-id="18" href="#">app/services/lti_platform/decode_tool_jwt.rb:43:in `tool_request_for_keys'</a><br><a class="trace-frames" data-frame-id="19" href="#">app/services/lti_platform/decode_tool_jwt.rb:29:in `fetch_key_from_jwks'</a><br><a class="trace-frames" data-frame-id="20" href="#">app/services/lti_platform/decode_tool_jwt.rb:24:in `tool_public_key'</a><br><a class="trace-frames" data-frame-id="21" href="#">app/services/lti_platform/decode_tool_jwt.rb:12:in `call'</a><br><a class="trace-frames" data-frame-id="22" href="#">app/services/lti_platform/generate_access_token.rb:41:in `decode_client_assertion'</a><br><a class="trace-frames" data-frame-id="23" href="#">app/services/lti_platform/generate_access_token.rb:20:in `valid_request?'</a><br><a class="trace-frames" data-frame-id="24" href="#">app/services/lti_platform/generate_access_token.rb:13:in `initialize'</a><br><a class="trace-frames" data-frame-id="25" href="#">app/controllers/access_tokens_controller.rb:8:in `new'</a><br><a class="trace-frames" data-frame-id="26" href="#">app/controllers/access_tokens_controller.rb:8:in `create'</a><br><a class="trace-frames" data-frame-id="27" href="#">actionpack (5.2.4.6) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'</a><br><a class="trace-frames" data-frame-id="28" href="#">actionpack (5.2.4.6) lib/abstract_controller/base.rb:194:in `process_action'</a><br><a class="trace-frames" data-frame-id="29" href="#">actionpack (5.2.4.6) lib/action_controller/metal/rendering.rb:30:in `process_action'</a><br><a class="trace-frames" data-frame-id="30" href="#">actionpack (5.2.4.6) lib/abstract_controller/callbacks.rb:42:in `block in process_action'</a><br><a class="trace-frames" data-frame-id="31" href="#">activesupport (5.2.4.6) lib/active_support/callbacks.rb:132:in `run_callbacks'</a><br><a class="trace-frames" data-frame-id="32" href="#">actionpack (5.2.4.6) lib/abstract_controller/callbacks.rb:41:in `process_action'</a><br><a class="trace-frames" data-frame-id="33" href="#">actionpack (5.2.4.6) lib/action_controller/metal/rescue.rb:22:in `process_action'</a><br><a class="trace-frames" data-frame-id="34" href="#">actionpack (5.2.4.6) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'</a><br><a class="trace-frames" data-frame-id="35" href="#">activesupport (5.2.4.6) lib/active_support/notifications.rb:168:in `block in instrument'</a><br><a class="trace-frames" data-frame-id="36" href="#">activesupport (5.2.4.6) lib/active_support/notifications/instrumenter.rb:23:in `instrument'</a><br><a class="trace-frames" data-frame-id="37" href="#">activesupport (5.2.4.6) lib/active_support/notifications.rb:168:in `instrument'</a><br><a class="trace-frames" data-frame-id="38" href="#">actionpack (5.2.4.6) lib/action_controller/metal/instrumentation.rb:32:in `process_action'</a><br><a class="trace-frames" data-frame-id="39" href="#">actionpack (5.2.4.6) lib/action_controller/metal/params_wrapper.rb:256:in `process_action'</a><br><a class="trace-frames" data-frame-id="40" href="#">activerecord (5.2.4.6) lib/active_record/railties/controller_runtime.rb:24:in `process_action'</a><br><a class="trace-frames" data-frame-id="41" href="#">actionpack (5.2.4.6) lib/abstract_controller/base.rb:134:in `process'</a><br><a class="trace-frames" data-frame-id="42" href="#">actionview (5.2.4.6) lib/action_view/rendering.rb:32:in `process'</a><br><a class="trace-frames" data-frame-id="43" href="#">actionpack (5.2.4.6) lib/action_controller/metal.rb:191:in `dispatch'</a><br><a class="trace-frames" data-frame-id="44" href="#">actionpack (5.2.4.6) lib/action_controller/metal.rb:252:in `dispatch'</a><br><a class="trace-frames" data-frame-id="45" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:52:in `dispatch'</a><br><a class="trace-frames" data-frame-id="46" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:34:in `serve'</a><br><a class="trace-frames" data-frame-id="47" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:52:in `block in serve'</a><br><a class="trace-frames" data-frame-id="48" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:35:in `each'</a><br><a class="trace-frames" data-frame-id="49" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:35:in `serve'</a><br><a class="trace-frames" data-frame-id="50" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:840:in `call'</a><br><a class="trace-frames" data-frame-id="51" href="#">rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'</a><br><a class="trace-frames" data-frame-id="52" href="#">rack (2.2.3) lib/rack/etag.rb:27:in `call'</a><br><a class="trace-frames" data-frame-id="53" href="#">rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'</a><br><a class="trace-frames" data-frame-id="54" href="#">rack (2.2.3) lib/rack/head.rb:12:in `call'</a><br><a class="trace-frames" data-frame-id="55" href="#">actionpack (5.2.4.6) lib/action_dispatch/http/content_security_policy.rb:18:in `call'</a><br><a class="trace-frames" data-frame-id="56" href="#">rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'</a><br><a class="trace-frames" data-frame-id="57" href="#">rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'</a><br><a class="trace-frames" data-frame-id="58" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/cookies.rb:670:in `call'</a><br><a class="trace-frames" data-frame-id="59" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'</a><br><a class="trace-frames" data-frame-id="60" href="#">activesupport (5.2.4.6) lib/active_support/callbacks.rb:98:in `run_callbacks'</a><br><a class="trace-frames" data-frame-id="61" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/callbacks.rb:26:in `call'</a><br><a class="trace-frames" data-frame-id="62" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'</a><br><a class="trace-frames" data-frame-id="63" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'</a><br><a class="trace-frames" data-frame-id="64" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:38:in `call_app'</a><br><a class="trace-frames" data-frame-id="65" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `block in call'</a><br><a class="trace-frames" data-frame-id="66" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `block in tagged'</a><br><a class="trace-frames" data-frame-id="67" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:28:in `tagged'</a><br><a class="trace-frames" data-frame-id="68" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `tagged'</a><br><a class="trace-frames" data-frame-id="69" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `call'</a><br><a class="trace-frames" data-frame-id="70" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'</a><br><a class="trace-frames" data-frame-id="71" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/request_id.rb:27:in `call'</a><br><a class="trace-frames" data-frame-id="72" href="#">rack (2.2.3) lib/rack/method_override.rb:24:in `call'</a><br><a class="trace-frames" data-frame-id="73" href="#">rack (2.2.3) lib/rack/runtime.rb:22:in `call'</a><br><a class="trace-frames" data-frame-id="74" href="#">activesupport (5.2.4.6) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'</a><br><a class="trace-frames" data-frame-id="75" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/executor.rb:14:in `call'</a><br><a class="trace-frames" data-frame-id="76" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/static.rb:127:in `call'</a><br><a class="trace-frames" data-frame-id="77" href="#">rack (2.2.3) lib/rack/sendfile.rb:110:in `call'</a><br><a class="trace-frames" data-frame-id="78" href="#">railties (5.2.4.6) lib/rails/engine.rb:524:in `call'</a><br><a class="trace-frames" data-frame-id="79" href="#">puma (4.3.8) lib/puma/configuration.rb:228:in `call'</a><br><a class="trace-frames" data-frame-id="80" href="#">puma (4.3.8) lib/puma/server.rb:718:in `handle_request'</a><br><a class="trace-frames" data-frame-id="81" href="#">puma (4.3.8) lib/puma/server.rb:472:in `process_client'</a><br><a class="trace-frames" data-frame-id="82" href="#">puma (4.3.8) lib/puma/server.rb:328:in `block in run'</a><br><a class="trace-frames" data-frame-id="83" href="#">puma (4.3.8) lib/puma/thread_pool.rb:134:in `block in spawn_thread'</a><br></code></pre>
</div>
<script type="text/javascript">
var traceFrames = document.getElementsByClassName('trace-frames');
var selectedFrame, currentSource = document.getElementById('frame-source-0');
// Add click listeners for all stack frames
for (var i = 0; i < traceFrames.length; i++) {
traceFrames[i].addEventListener('click', function(e) {
e.preventDefault();
var target = e.target;
var frame_id = target.dataset.frameId;
if (selectedFrame) {
selectedFrame.className = selectedFrame.className.replace("selected", "");
}
target.className += " selected";
selectedFrame = target;
// Change the extracted source code
changeSourceExtract(frame_id);
});
function changeSourceExtract(frame_id) {
var el = document.getElementById('frame-source-' + frame_id);
if (currentSource && el) {
currentSource.className += " hidden";
el.className = el.className.replace(" hidden", "");
currentSource = el;
}
}
}
</script>
</div>
<h2 style="margin-top: 30px">Request</h2>
<p><b>Parameters</b>:</p> <pre>{"client_assertion"=>
"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik1NSHlabzJnWFlUVVJ1TERRU3FhNndEUFY5TGhCRU5EdlYtalZBSGlOaEEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJLU1Rvb2wiLCJzdWIiOiI5OTk5OSIsImF1ZCI6Imh0dHBzOi8vbHRpLXJpLmltc2dsb2JhbC5vcmcvcGxhdGZvcm1zLzIyNTMvYWNjZXNzX3Rva2VucyIsImlhdCI6MTcxMTcxMTYxNSwiZXhwIjoxNzExNzExOTE1LCJqdGkiOiJlMmJkMGM4OTBmMDRjZDg2ZmU3YSJ9.FEdd5SAdRDFGZUTocsxGkqavyao43fkkfR4GZYXjAcbScroIRYAJ0POSQhMPCyZtj96BLQPVXZDWPvjQ-OZFjw7zdUa72P-yWL3CzhKoysVom7SJlizwICI3a1_TYLUcr_EWqoGN06fcawR6KM1KC4JJe7QdtPHtWF6b-MMkMLHFjWEZxjDBpq_a87N6bKq6h_pQuNv0fDsWLaRJbXnPHrxEOyOxOUQI3_51Kkq8uP369FeoGyuIMzPMdG33LrXfDEry_esTB6c0VhaBej8zHW92JdAoKGCB3tO7EEy8jUMJ6b8oSHBci-BJfE8d0K1RNTNP5kmbS0sM8HIUVRC1Ew",
"client_assertion_type"=>"urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
"grant_type"=>"client_credentials",
"scope"=>
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly https://purl.imsglobal.org/spec/lti-ags/scope/score https://purl.imsglobal.org/spec/lti-ap/scope/control.all https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly https://purl.imsglobal.org/spec/lti-ap/scope/control.all",
"platform_id"=>"2253"}
</pre>
<div class="details">
<div class="summary"><a href="#" onclick="return toggleSessionDump()">Toggle session dump</a></div>
<div id="session_dump" style="display:none"><pre></pre></div>
</div>
<div class="details">
<div class="summary"><a href="#" onclick="return toggleEnvDump()">Toggle env dump</a></div>
<div id="env_dump" style="display:none"><pre>GATEWAY_INTERFACE: "CGI/1.2"
HTTP_ACCEPT: "*/*"
HTTP_ACCEPT_ENCODING: "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
HTTP_VERSION: "HTTP/1.1"
HTTP_X_FORWARDED_FOR: "10.24.0.1"
HTTP_X_FORWARDED_HOST: "lti-ri.imsglobal.org"
HTTP_X_REQUEST_ID: "70d4d0c6ee798b1e1c578f1a844091e0"
ORIGINAL_SCRIPT_NAME: ""
REMOTE_ADDR: "10.24.0.8"
SERVER_NAME: "lti-ri.imsglobal.org"
SERVER_PROTOCOL: "HTTP/1.1"</pre></div>
</div>
<h2 style="margin-top: 30px">Response</h2>
<p><b>Headers</b>:</p> <pre>None</pre>
</div>
</body>
</html>
'
Extracted source (around line #156):
154
155
156
157
158
159
|
# * *array_class*: Defaults to Array
def parse(source, opts = {})
Parser.new(source, opts).parse
end
# Parse the JSON document _source_ into a Ruby data structure and return it.
|
Extracted source (around line #156):
154
155
156
157
158
159
|
# * *array_class*: Defaults to Array
def parse(source, opts = {})
Parser.new(source, opts).parse
end
# Parse the JSON document _source_ into a Ruby data structure and return it.
|
Extracted source (around line #26):
24
25
26
27
28
29
|
request = conn.post @tool.oauth2_url, body
JSON.parse(request.body)
end
def body
|
Extracted source (around line #15):
13
14
15
16
17
18
|
# GET /launches/1.json
def show
Rails.application.executor.wrap { @access_token = @tool.oauth2_url.present? ? LtiService::GetAgsAccessToken.new(@tool).call : nil }
# caliper event background job
ToolUseEventWorker.perform_async(@tool.id, @launch.id, root_url, request.uuid)
end
|
Extracted source (around line #83):
81
82
83
84
85
86
|
# Perform the work in the supplied block as an execution.
def self.wrap
return yield if active?
instance = run!
begin
|
Extracted source (around line #15):
13
14
15
16
17
18
|
# GET /launches/1.json
def show
Rails.application.executor.wrap { @access_token = @tool.oauth2_url.present? ? LtiService::GetAgsAccessToken.new(@tool).call : nil }
# caliper event background job
ToolUseEventWorker.perform_async(@tool.id, @launch.id, root_url, request.uuid)
end
|
Extracted source (around line #6):
4
5
6
7
8
9
|
module BasicImplicitRender # :nodoc:
def send_action(method, *args)
super.tap { default_render unless performed? }
end
def default_render(*args)
|
Extracted source (around line #194):
192
193
194
195
196
197
|
# which is *not* necessarily the same as the action name.
def process_action(method_name, *args)
send_action(method_name, *args)
end
# Actually call the method associated with the action. Override
|
Extracted source (around line #30):
28
29
30
31
32
33
|
def process_action(*) #:nodoc:
self.formats = request.formats.map(&:ref).compact
super
end
# Check for double render errors and set the content_type after rendering.
|
Extracted source (around line #42):
40
41
42
43
44
45
|
def process_action(*args)
run_callbacks(:process_action) do
super
end
end
|
Extracted source (around line #132):
130
131
132
133
134
135
|
if next_sequence.final?
next_sequence.invoke_before(env)
env.value = !env.halted && (!block_given? || yield)
next_sequence.invoke_after(env)
env.value
else
|
Extracted source (around line #41):
39
40
41
42
43
44
|
# <tt>process_action</tt> callbacks around the normal behavior.
def process_action(*args)
run_callbacks(:process_action) do
super
end
end
|
Extracted source (around line #22):
20
21
22
23
24
25
|
private
def process_action(*args)
super
rescue Exception => exception
request.env["action_dispatch.show_detailed_exceptions"] ||= show_detailed_exceptions?
rescue_with_handler(exception) || raise
|
Extracted source (around line #34):
32
33
34
35
36
37
|
ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload|
begin
result = super
payload[:status] = response.status
result
ensure
|
Extracted source (around line #168):
166
167
168
169
170
171
|
def instrument(name, payload = {})
if notifier.listening?(name)
instrumenter.instrument(name, payload) { yield payload if block_given? }
else
yield payload if block_given?
end
|
Extracted source (around line #23):
21
22
23
24
25
26
|
listeners_state = start name, payload
begin
yield payload
rescue Exception => e
payload[:exception] = [e.class.name, e.message]
payload[:exception_object] = e
|
Extracted source (around line #168):
166
167
168
169
170
171
|
def instrument(name, payload = {})
if notifier.listening?(name)
instrumenter.instrument(name, payload) { yield payload if block_given? }
else
yield payload if block_given?
end
|
Extracted source (around line #32):
30
31
32
33
34
35
|
ActiveSupport::Notifications.instrument("start_processing.action_controller", raw_payload.dup)
ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload|
begin
result = super
payload[:status] = response.status
|
Extracted source (around line #256):
254
255
256
257
258
259
|
request.filtered_parameters.merge! wrapped_filtered_hash
end
super
end
private
|
Extracted source (around line #24):
22
23
24
25
26
27
|
# and it won't be cleaned up by the method below.
ActiveRecord::LogSubscriber.reset_runtime
super
end
def cleanup_view_runtime
|
Extracted source (around line #134):
132
133
134
135
136
137
|
@_response_body = nil
process_action(action_name, *args)
end
# Delegates to the class' ::controller_path
|
Extracted source (around line #32):
30
31
32
33
34
35
|
def process(*) #:nodoc:
old_config, I18n.config = I18n.config, I18nProxy.new(I18n.config, lookup_context)
super
ensure
I18n.config = old_config
end
|
Extracted source (around line #191):
189
190
191
192
193
194
|
set_request!(request)
set_response!(response)
process(name)
request.commit_flash
to_a
end
|
Extracted source (around line #252):
250
251
252
253
254
255
|
middleware_stack.build(name) { |env| new.dispatch(name, req, res) }.call req.env
else
new.dispatch(name, req, res)
end
end
end
|
Extracted source (around line #52):
50
51
52
53
54
55
|
def dispatch(controller, action, req, res)
controller.dispatch(action, req, res)
end
end
|
Extracted source (around line #34):
32
33
34
35
36
37
|
controller = controller req
res = controller.make_response! req
dispatch(controller, params[:action], req, res)
rescue ActionController::RoutingError
if @raise_on_name_error
raise
|
Extracted source (around line #52):
50
51
52
53
54
55
|
req.path_parameters = set_params.merge parameters
status, headers, body = route.app.serve(req)
if "pass" == headers["X-Cascade"]
req.script_name = script_name
|
Extracted source (around line #35):
33
34
35
36
37
38
|
def serve(req)
find_routes(req).each do |match, parameters, route|
set_params = req.path_parameters
path_info = req.path_info
script_name = req.script_name
|
Extracted source (around line #35):
33
34
35
36
37
38
|
def serve(req)
find_routes(req).each do |match, parameters, route|
set_params = req.path_parameters
path_info = req.path_info
script_name = req.script_name
|
Extracted source (around line #840):
838
839
840
841
842
843
|
req = make_request(env)
req.path_info = Journey::Router::Utils.normalize_path(req.path_info)
@router.serve(req)
end
def recognize_path(path, environment = {})
|
Extracted source (around line #15):
13
14
15
16
17
18
|
def call(env)
env[RACK_TEMPFILES] ||= []
status, headers, body = @app.call(env)
body_proxy = BodyProxy.new(body) do
env[RACK_TEMPFILES].each(&:close!) unless env[RACK_TEMPFILES].nil?
end
|
Extracted source (around line #27):
25
26
27
28
29
30
|
def call(env)
status, headers, body = @app.call(env)
if etag_status?(status) && etag_body?(body) && !skip_caching?(headers)
original_body = body
|
Extracted source (around line #27):
25
26
27
28
29
30
|
case env[REQUEST_METHOD]
when "GET", "HEAD"
status, headers, body = @app.call(env)
headers = Utils::HeaderHash[headers]
if status == 200 && fresh?(env, headers)
status = 304
|
Extracted source (around line #12):
10
11
12
13
14
15
|
def call(env)
status, headers, body = @app.call(env)
if env[REQUEST_METHOD] == HEAD
[
|
Extracted source (around line #18):
16
17
18
19
20
21
|
def call(env)
request = ActionDispatch::Request.new env
_, headers, _ = response = @app.call(env)
return response unless html_response?(headers)
return response if policy_present?(headers)
|
Extracted source (around line #266):
264
265
266
267
268
269
|
req = make_request env
prepare_session(req)
status, headers, body = app.call(req.env)
res = Rack::Response::Raw.new status, headers
commit_session(req, res)
[status, headers, body]
|
Extracted source (around line #260):
258
259
260
261
262
263
|
def call(env)
context(env)
end
def context(env, app = @app)
|
Extracted source (around line #670):
668
669
670
671
672
673
|
request = ActionDispatch::Request.new env
status, headers, body = @app.call(env)
if request.have_cookie_jar?
cookie_jar = request.cookie_jar
|
Extracted source (around line #28):
26
27
28
29
30
31
|
result = run_callbacks :call do
begin
@app.call(env)
rescue => error
end
end
|
Extracted source (around line #98):
96
97
98
99
100
101
|
if callbacks.empty?
yield if block_given?
else
env = Filters::Environment.new(self, false, nil)
next_sequence = callbacks.compile
|
Extracted source (around line #26):
24
25
26
27
28
29
|
def call(env)
error = nil
result = run_callbacks :call do
begin
@app.call(env)
rescue => error
|
Extracted source (around line #61):
59
60
61
62
63
64
|
def call(env)
request = ActionDispatch::Request.new env
_, headers, body = response = @app.call(env)
if headers["X-Cascade"] == "pass"
body.close if body.respond_to?(:close)
|
Extracted source (around line #33):
31
32
33
34
35
36
|
def call(env)
request = ActionDispatch::Request.new env
@app.call(env)
rescue Exception => exception
if request.show_exceptions?
render_exception(request, exception)
|
Extracted source (around line #38):
36
37
38
39
40
41
|
instrumenter.start "request.action_dispatch", request: request
logger.info { started_request_message(request) }
status, headers, body = @app.call(env)
body = ::Rack::BodyProxy.new(body) { finish(request) }
[status, headers, body]
rescue Exception
|
Extracted source (around line #26):
24
25
26
27
28
29
|
if logger.respond_to?(:tagged)
logger.tagged(compute_tags(request)) { call_app(request, env) }
else
call_app(request, env)
end
|
Extracted source (around line #71):
69
70
71
72
73
74
|
def tagged(*tags)
formatter.tagged(*tags) { yield self }
end
def flush
|
Extracted source (around line #28):
26
27
28
29
30
31
|
def tagged(*tags)
new_tags = push_tags(*tags)
yield self
ensure
pop_tags(new_tags.size)
end
|
Extracted source (around line #71):
69
70
71
72
73
74
|
def tagged(*tags)
formatter.tagged(*tags) { yield self }
end
def flush
|
Extracted source (around line #26):
24
25
26
27
28
29
|
if logger.respond_to?(:tagged)
logger.tagged(compute_tags(request)) { call_app(request, env) }
else
call_app(request, env)
end
|
Extracted source (around line #81):
79
80
81
82
83
84
|
req = ActionDispatch::Request.new env
req.remote_ip = GetIp.new(req, check_ip, proxies)
@app.call(req.env)
end
# The GetIp class exists as a way to defer processing of the request data
|
Extracted source (around line #27):
25
26
27
28
29
30
|
req = ActionDispatch::Request.new env
req.request_id = make_request_id(req.x_request_id)
@app.call(env).tap { |_status, headers, _body| headers[X_REQUEST_ID] = req.request_id }
end
private
|
Extracted source (around line #24):
22
23
24
25
26
27
|
end
@app.call(env)
end
def method_override(env)
|
Extracted source (around line #22):
20
21
22
23
24
25
|
def call(env)
start_time = Utils.clock_time
status, headers, body = @app.call(env)
headers = Utils::HeaderHash[headers]
request_time = Utils.clock_time - start_time
|
Extracted source (around line #29):
27
28
29
30
31
32
|
def call(env)
LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new)
response = @app.call(env)
response[2] = ::Rack::BodyProxy.new(response[2]) do
LocalCacheRegistry.set_cache_for(local_cache_key, nil)
end
|
Extracted source (around line #14):
12
13
14
15
16
17
|
state = @executor.run!
begin
response = @app.call(env)
returned = response << ::Rack::BodyProxy.new(response.pop) { state.complete! }
ensure
state.complete! unless returned
|
Extracted source (around line #127):
125
126
127
128
129
130
|
end
@app.call(req.env)
end
end
end
|
Extracted source (around line #110):
108
109
110
111
112
113
|
def call(env)
status, headers, body = @app.call(env)
if body.respond_to?(:to_path)
case type = variation(env)
when 'X-Accel-Redirect'
|
Extracted source (around line #524):
522
523
524
525
526
527
|
def call(env)
req = build_request env
app.call req.env
end
# Defines additional Rack env configuration that is added on each call.
|
Extracted source (around line #228):
226
227
228
229
230
231
|
def call(env)
env[Const::PUMA_CONFIG] = @config
@app.call(env)
end
end
|
Extracted source (around line #718):
716
717
718
719
720
721
|
begin
begin
status, headers, res_body = @app.call(env)
return :async if req.hijacked
|
Extracted source (around line #472):
470
471
472
473
474
475
|
while true
case handle_request(client, buffer)
when false
return
when :async
|
Extracted source (around line #328):
326
327
328
329
330
331
|
else
if process_now
process_client client, buffer
else
client.set_timeout @first_data_timeout
@reactor.add client
|
Extracted source (around line #134):
132
133
134
135
136
137
|
begin
block.call(work, *extra)
rescue Exception => e
STDERR.puts "Error reached top of thread-pool: #{e.message} (#{e.class})"
end
|
Rails.root: /app
Request
Parameters:
{"tool_id"=>"2014", "id"=>"14462"}
GATEWAY_INTERFACE: "CGI/1.2"
HTTP_ACCEPT: "*/*"
HTTP_VERSION: "HTTP/1.1"
HTTP_X_FORWARDED_FOR: "10.128.0.9"
HTTP_X_FORWARDED_HOST: "lti-ri.imsglobal.org"
HTTP_X_REQUEST_ID: "14c2fac0114f1558cd5f41e8b0185151"
ORIGINAL_SCRIPT_NAME: ""
REMOTE_ADDR: "10.24.0.8"
SERVER_NAME: "lti-ri.imsglobal.org"
SERVER_PROTOCOL: "HTTP/1.1"
Response
Headers:
None