diff options
| author | Samantaz Fox <coding@samantaz.fr> | 2022-08-17 21:34:01 +0200 |
|---|---|---|
| committer | Samantaz Fox <coding@samantaz.fr> | 2022-08-17 21:34:01 +0200 |
| commit | b0bb156918f6b61764694aa87f9e4e1ad26e130f (patch) | |
| tree | f51ce6c57f3be94828754f83201a842fcf49f57b | |
| parent | b2c0f7efc373e924e401c030849c20566e813d0a (diff) | |
| parent | 5565204273de4140d7b72ab201adec1dd90ecf0c (diff) | |
| download | invidious-b0bb156918f6b61764694aa87f9e4e1ad26e130f.tar.gz invidious-b0bb156918f6b61764694aa87f9e4e1ad26e130f.tar.bz2 invidious-b0bb156918f6b61764694aa87f9e4e1ad26e130f.zip | |
Adapt StaticFileHandler for Crystal 1.6 (#3269)
| -rw-r--r-- | src/ext/kemal_static_file_handler.cr | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/ext/kemal_static_file_handler.cr b/src/ext/kemal_static_file_handler.cr index 6ef2d74c..eb068aeb 100644 --- a/src/ext/kemal_static_file_handler.cr +++ b/src/ext/kemal_static_file_handler.cr @@ -111,7 +111,7 @@ module Kemal if @fallthrough call_next(context) else - context.response.status_code = 405 + context.response.status = HTTP::Status::METHOD_NOT_ALLOWED context.response.headers.add("Allow", "GET, HEAD") end return @@ -124,7 +124,7 @@ module Kemal # File path cannot contains '\0' (NUL) because all filesystem I know # don't accept '\0' character as file name. if request_path.includes? '\0' - context.response.status_code = 400 + context.response.status = HTTP::Status::BAD_REQUEST return end @@ -143,13 +143,15 @@ module Kemal add_cache_headers(context.response.headers, last_modified) if cache_request?(context, last_modified) - context.response.status_code = 304 + context.response.status = HTTP::Status::NOT_MODIFIED return end send_file(context, file_path, file[:data], file[:filestat]) else - is_dir = Dir.exists? file_path + file_info = File.info?(file_path) + is_dir = file_info.try &.directory? || false + is_file = file_info.try &.file? || false if request_path != expanded_path redirect_to context, expanded_path @@ -157,19 +159,21 @@ module Kemal redirect_to context, expanded_path + '/' end - if Dir.exists?(file_path) + return call_next(context) if file_info.nil? + + if is_dir if config.is_a?(Hash) && config["dir_listing"] == true context.response.content_type = "text/html" directory_listing(context.response, request_path, file_path) else call_next(context) end - elsif File.exists?(file_path) - last_modified = modification_time(file_path) + elsif is_file + last_modified = file_info.modification_time add_cache_headers(context.response.headers, last_modified) if cache_request?(context, last_modified) - context.response.status_code = 304 + context.response.status = HTTP::Status::NOT_MODIFIED return end @@ -177,14 +181,12 @@ module Kemal data = Bytes.new(size) File.open(file_path, &.read(data)) - filestat = File.info(file_path) - - @cached_files[file_path] = {data: data, filestat: filestat} - send_file(context, file_path, data, filestat) + @cached_files[file_path] = {data: data, filestat: file_info} + send_file(context, file_path, data, file_info) else send_file(context, file_path) end - else + else # Not a normal file (FIFO/device/socket) call_next(context) end end |
