767: unexpected token at '<!DOCTYPE html>
<!--[if lte IE 9]><html class="ie ie9 lte9" lang="en"><![endif]-->
<!--[if !IE]><!--><html lang="en"><!--<![endif]-->
<head dir="ltr">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
Page Not Found | ibl
</title>
<script type="text/javascript">
/* immediately break out of an iframe if coming from the marketing website */
(function(window) {
if (window.location !== window.top.location) {
window.top.location = window.location;
}
})(this);
</script>
<script type="text/javascript" src="/static/js/i18n/en/djangojs.705ead69114e.js"></script>
<script type="text/javascript" src="/static/js/ie11_find_array.bd1c6dc7a133.js"></script>
<link rel="icon" type="image/x-icon" href="/static/images/favicon.03ffbbf95a0d.ico"/>
<link href="/static/iblx-cms/css/lms-style-vendor.68e48093f5dd.css" rel="stylesheet" type="text/css" />
<link href="/static/iblx-cms/css/lms-main-v1.42c3320c94e0.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/static/js/lms-main_vendor.3c3c9a2604d6.js" charset="utf-8"></script>
<script type="text/javascript" src="/static/js/lms-application.98d9a8549a03.js" charset="utf-8"></script>
<script type="text/javascript" src="/static/bundles/commons.03a86eae582415fc4d08.2dda9d3d760c.js" ></script>
<script>
window.baseUrl = "/static/";
(function (require) {
require.config({
baseUrl: window.baseUrl
});
}).call(this, require || RequireJS.require);
</script>
<script type="text/javascript" src="/static/lms/js/require-config.38226099c6ad.js"></script>
<script type="text/javascript">
(function (require) {
require.config({
paths: {
'course_bookmarks/js/views/bookmark_button': 'course_bookmarks/js/views/bookmark_button.d4cfaf3361fa',
'js/views/message_banner': 'js/views/message_banner.141974fd4f5d',
'moment': 'common/js/vendor/moment-with-locales.e3cc27d412a1',
'moment-timezone': 'common/js/vendor/moment-timezone-with-data.60142e6c4416',
'js/courseware/course_info_events': 'js/courseware/course_info_events.2fc35b57627f',
'js/courseware/accordion_events': 'js/courseware/accordion_events.6064c7809de5',
'js/dateutil_factory': 'js/dateutil_factory.a28baef97506',
'js/courseware/link_clicked_events': 'js/courseware/link_clicked_events',
'js/courseware/toggle_element_visibility': 'js/courseware/toggle_element_visibility.474ff5ba9de3',
'js/student_account/logistration_factory': 'js/student_account/logistration_factory.8e1e0a0f9e76',
'js/courseware/courseware_factory': 'js/courseware/courseware_factory.1504fc10caef',
'js/groups/views/cohorts_dashboard_factory': 'js/groups/views/cohorts_dashboard_factory.35bf944b34d2',
'js/groups/discussions_management/discussions_dashboard_factory': 'js/discussions_management/views/discussions_dashboard_factory.2e10d9097343',
'draggabilly': 'js/vendor/draggabilly.26caba6f7187',
'hls': 'common/js/vendor/hls.5e0c7e1b3bfd'
}
});
}).call(this, require || RequireJS.require);
</script>
<script type="application/json" id="user-metadata">
null
</script>
<!-- dummy Segment -->
<script type="text/javascript">
var analytics = {
track: function() { return; },
trackLink: function() { return; },
pageview: function() { return; },
page: function() { return; }
};
</script>
<!-- end dummy Segment -->
<meta name="path_prefix" content="">
<meta name="openedx-release-line" content="olive" />
</head>
<body class="ltr lang_en">
<div id="page-prompt"></div>
<div class="window-wrap" dir="ltr">
<a class="nav-skip sr-only sr-only-focusable" href="#main">Skip to main content</a>
<header class="global-header ">
<div class="main-header">
<h1 class="header-logo">
<a href="/dashboard">
<img class="logo" src="/static/images/logo.b6c374d66d57.png" alt="ibl Home Page"/>
</a>
</h1>
<div class="hamburger-menu" role="button" aria-label=Options Menu aria-expanded="false" aria-controls="mobile-menu" tabindex="0">
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
</div>
<nav class="nav-links" aria-label=Supplemental Links>
<div class="main">
<div class="mobile-nav-item hidden-mobile nav-item">
<a href="/courses">Explore courses</a>
</div>
</div>
<div class="secondary">
<div>
<div class="mobile-nav-item hidden-mobile nav-item">
<a class="register-btn btn" href="https://apps.learn.geoff.ibl.network/authn/register?next=%2Fapi%2Flti_consumer%2Fv1%2Ftoken%2Fblock-v1%3Aibl%2B101%2B2024-01%2Btype%40lti_consumer%2Bblock%4004a59b17d9414600bbcde27c73c0edd6">Register</a>
</div>
<div class="mobile-nav-item hidden-mobile nav-item">
<a class="sign-in-btn btn" href="https://apps.learn.geoff.ibl.network/authn/login?next=%2Fapi%2Flti_consumer%2Fv1%2Ftoken%2Fblock-v1%3Aibl%2B101%2B2024-01%2Btype%40lti_consumer%2Bblock%4004a59b17d9414600bbcde27c73c0edd6">Sign in</a>
</div>
</div>
</div>
</nav>
</div>
<div class="mobile-menu hidden" aria-label=More Options role="menu" id="mobile-menu"></div>
</header>
<div class="marketing-hero"></div>
<div class="content-wrapper main-container" id="content" dir="ltr">
<main id="main" aria-label="Content" tabindex="-1">
<section class="outside-app">
<h1>
Page not found
</h1>
<p>
The page that you were looking for was not found. Go back to the <a href="/">homepage</a> .
</p>
</section>
</main>
</div>
<div class="wrapper wrapper-footer">
<footer id="footer-openedx" class="grid-container"
>
<div class="colophon">
<nav class="nav-colophon" aria-label="About">
<ol>
<li class="nav-colophon-01">
<a id="about" href="/about">About</a>
</li>
<li class="nav-colophon-02">
<a id="blog" href="/blog">Blog</a>
</li>
<li class="nav-colophon-03">
<a id="contact" href="/support/contact_us">Contact</a>
</li>
<li class="nav-colophon-04">
<a id="donate" href="/donate">Donate</a>
</li>
</ol>
</nav>
<div class="wrapper-logo">
<p>
<a href="/">
<img alt="organization logo" src="http://learn.geoff.ibl.network/static/images/logo.b6c374d66d57.png">
</a>
</p>
</div>
<p class="copyright">© ibl. All rights reserved except where noted. edX, Open edX and their respective logos are registered trademarks of edX Inc.
</p>
<nav class="nav-legal" aria-label="Legal">
<ul>
<li class="nav-legal-01">
<a href="/tos_and_honor">Terms of Service & Honor Code</a>
</li>
<li class="nav-legal-02">
<a href="/privacy">Privacy Policy</a>
</li>
<li><a href="https://www.edx.org/?utm_medium=affiliate_partner&utm_source=opensource-partner&utm_content=open-edx-partner-footer-link&utm_campaign=open-edx-footer">Take free online courses at edX.org</a></li>
</ul>
</nav>
</div>
<div class="footer-about-openedx">
<p>
<a href="https://open.edx.org">
<img src="https://logos.openedx.org/open-edx-logo-tag.png" alt="Powered by Open edX" width="175" />
</a>
</p>
</div>
</footer>
</div>
</div>
<script type="text/javascript" src="/static/js/vendor/noreferrer.aa62a3e70ffa.js" charset="utf-8"></script>
<script type="text/javascript" src="/static/js/utils/navigation.08930e16ab3d.js" charset="utf-8"></script>
<script type="text/javascript" src="/static/js/header/header.309a1243e175.js"></script>
<script type="text/javascript" src="/static/js/src/jquery_extend_patch.54dddef28d15.js"></script>
<div id="lean_overlay"></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"=>"2838", "id"=>"20725"}
GATEWAY_INTERFACE: "CGI/1.2"
HTTP_ACCEPT: "*/*"
HTTP_VERSION: "HTTP/1.1"
HTTP_X_FORWARDED_FOR: "10.128.0.16"
HTTP_X_FORWARDED_HOST: "lti-ri.imsglobal.org"
HTTP_X_REQUEST_ID: "9bc8491c2aa6bb4d4e26fad9a09c9c8d"
ORIGINAL_SCRIPT_NAME: ""
REMOTE_ADDR: "10.24.0.8"
SERVER_NAME: "lti-ri.imsglobal.org"
SERVER_PROTOCOL: "HTTP/1.1"
Response
Headers:
None