diff --git a/mango b/mango index e6007a6..cb8ef0c 100755 Binary files a/mango and b/mango differ diff --git a/shard.yml b/shard.yml index c26e0a9..cf6f541 100644 --- a/shard.yml +++ b/shard.yml @@ -15,7 +15,7 @@ license: MIT dependencies: kemal: github: kemalcr/kemal - kemal-basic-auth: - github: kemalcr/kemal-basic-auth sqlite3: github: crystal-lang/crystal-sqlite3 + baked_file_system: + github: schovi/baked_file_system diff --git a/src/auth_handler.cr b/src/auth_handler.cr index ae5c1d0..8203aea 100644 --- a/src/auth_handler.cr +++ b/src/auth_handler.cr @@ -1,14 +1,6 @@ require "kemal" require "./storage" - -def request_path_startswith(env, ary) - ary.each do |prefix| - if env.request.path.starts_with? prefix - return true - end - end - return false -end +require "./util" class AuthHandler < Kemal::Handler exclude ["/login"] diff --git a/src/server.cr b/src/server.cr index df71c3c..318b97a 100644 --- a/src/server.cr +++ b/src/server.cr @@ -3,6 +3,7 @@ require "./config" require "./library" require "./storage" require "./auth_handler" +require "./static" require "./util" class Server @@ -276,6 +277,11 @@ class Server end add_handler AuthHandler.new @storage + {% if flag?(:release) %} + # when building for relase, embed the static files in binary + serve_static false + add_handler StaticHandler.new + {% end %} end def start diff --git a/src/static.cr b/src/static.cr new file mode 100644 index 0000000..ae10c44 --- /dev/null +++ b/src/static.cr @@ -0,0 +1,29 @@ +require "baked_file_system" +require "kemal" +require "gzip" +require "./util" + +class FS + extend BakedFileSystem + bake_folder "../public" +end + +class StaticHandler < Kemal::Handler + property dirs : Array(String) + + def initialize + @dirs = ["/css", "/js"] + end + + def call(env) + if request_path_startswith env, @dirs + file = FS.get? env.request.path + return call_next env if file.nil? + + slice = Bytes.new file.size + file.read slice + return send_file env, slice, file.mime_type + end + call_next env + end +end diff --git a/src/util.cr b/src/util.cr index 1304146..3e28ac1 100644 --- a/src/util.cr +++ b/src/util.cr @@ -23,3 +23,12 @@ end def hash_to_query(hash) hash.map { |k, v| "#{k}=#{v}" }.join("&") end + +def request_path_startswith(env, ary) + ary.each do |prefix| + if env.request.path.starts_with? prefix + return true + end + end + return false +end