# Header of each directory page
var header: nullable Writable = null is writable
+ # Custom JavaScript code added within a `<script>` block to each page
+ var javascript_header: nullable Writable = null is writable
+
+ # Caching attributes of served files, used as the `cache-control` field in response headers
+ var cache_control = "public, max-age=360" is writable
+
+ # Show directory listing?
+ var show_directory_listing = true is writable
+
redef fun answer(request, turi)
do
var response
end
end
- response = new HttpResponse(200)
- if local_file.file_stat.is_dir then
+ var is_dir = local_file.file_stat.is_dir
+ if show_directory_listing and is_dir then
# Show the directory listing
var title = turi
var files = local_file.files
+ alpha_comparator.sort files
+
var links = new Array[String]
if turi.length > 1 then
var path = (request.uri + "/..").simplify_path
header_code = header.write_to_string
else header_code = ""
+ response = new HttpResponse(200)
response.body = """
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+ <script>
+ {{{javascript_header or else ""}}}
+ </script>
<title>{{{title}}}</title>
</head>
<body>
</html>"""
response.header["Content-Type"] = media_types["html"].as(not null)
- else
+ else if not is_dir then
# It's a single file
+ response = new HttpResponse(200)
response.files.add local_file
var ext = local_file.file_extension
response.header["Content-Type"] = media_type
else response.header["Content-Type"] = "application/octet-stream"
end
- end
+ # Cache control
+ response.header["cache-control"] = cache_control
+
+ else response = new HttpResponse(404)
else response = new HttpResponse(404)
else response = new HttpResponse(403)