mirror of
				https://gitea.invidious.io/iv-org/shard-kemal.git
				synced 2024-08-15 00:53:36 +00:00 
			
		
		
		
	Merge pull request #387 from kemalcr/static-headers
Allow headers in built-in static file server
This commit is contained in:
		
						commit
						c81f8f979a
					
				
					 4 changed files with 41 additions and 0 deletions
				
			
		
							
								
								
									
										12
									
								
								spec/static/dir/index.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								spec/static/dir/index.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
|   <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>title</title> | ||||
|     <link rel="stylesheet" href="style.css"> | ||||
|     <script src="script.js"></script> | ||||
|   </head> | ||||
|   <body> | ||||
|     <!-- page content --> | ||||
|   </body> | ||||
| </html> | ||||
|  | @ -130,4 +130,24 @@ describe Kemal::StaticFileHandler do | |||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   it "should handle setting custom headers" do | ||||
|     headers = Proc(HTTP::Server::Response, String, File::Stat, Void).new do |response, path, stat| | ||||
|       if path =~ /\.html$/ | ||||
|         response.headers.add("Access-Control-Allow-Origin", "*") | ||||
|       end | ||||
|       response.headers.add("Content-Size", stat.size.to_s) | ||||
|     end | ||||
| 
 | ||||
|     static_headers(&headers) | ||||
| 
 | ||||
|     response = handle HTTP::Request.new("GET", "/dir/test.txt") | ||||
|     response.headers.has_key?("Access-Control-Allow-Origin").should be_false | ||||
|     response.headers["Content-Size"].should eq( | ||||
|       File.stat("#{__DIR__}/static/dir/test.txt").size.to_s | ||||
|     ) | ||||
| 
 | ||||
|     response = handle HTTP::Request.new("GET", "/dir/index.html") | ||||
|     response.headers["Access-Control-Allow-Origin"].should eq("*") | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ module Kemal | |||
|       always_rescue, serve_static : (Bool | Hash(String, Bool)), server, extra_options, | ||||
|       shutdown_message | ||||
|     getter custom_handler_position | ||||
|     property static_headers : (HTTP::Server::Response, String, File::Stat -> Void)? | ||||
| 
 | ||||
|     def initialize | ||||
|       @host_binding = "0.0.0.0" | ||||
|  |  | |||
|  | @ -102,6 +102,10 @@ def send_file(env, path : String, mime_type : String? = nil) | |||
|   minsize = 860 # http://webmasters.stackexchange.com/questions/31750/what-is-recommended-minimum-object-size-for-gzip-performance-benefits ?? | ||||
|   request_headers = env.request.headers | ||||
|   filesize = File.size(file_path) | ||||
|   filestat = File.stat(file_path) | ||||
| 
 | ||||
|   Kemal.config.static_headers.try(&.call(env.response, file_path, filestat)) | ||||
| 
 | ||||
|   File.open(file_path) do |file| | ||||
|     if env.request.method == "GET" && env.request.headers.has_key?("Range") | ||||
|       next multipart(file, env) | ||||
|  | @ -196,3 +200,7 @@ end | |||
| def gzip(status : Bool = false) | ||||
|   add_handler HTTP::CompressHandler.new if status | ||||
| end | ||||
| 
 | ||||
| def static_headers(&headers : HTTP::Server::Response, String, File::Stat -> Void) | ||||
|   Kemal.config.static_headers = headers | ||||
| end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue