lib/logster/middleware/viewer.rb in logster-0.0.2 vs lib/logster/middleware/viewer.rb in logster-0.0.3

- old
+ new

@@ -3,27 +3,36 @@ module Logster module Middleware class Viewer PATH_INFO = "PATH_INFO".freeze + SCRIPT_NAME = "SCRIPT_NAME".freeze - def initialize(app, config) + def initialize(app) @app = app - @logs_path = config[:path] || "/logs" - @path_regex = Regexp.new("(#{@logs_path}$)|(#{@logs_path}(/.*))$") - @store = config[:store] or raise ArgumentError.new("store") + @logs_path = Logster.config.subdirectory || "/logs" + @path_regex = Regexp.new("^(#{@logs_path}$)|^(#{@logs_path}(/.*))$") + @store = Logster.store or raise ArgumentError.new("store") @assets_path = File.expand_path("../../../../assets", __FILE__) @fileserver = Rack::File.new(@assets_path) + @authorize_callback = Logster.config.authorize_callback end def call(env) path = env[PATH_INFO] + script_name = env[SCRIPT_NAME] + if script_name && script_name.length > 0 + path = script_name + path + end + if resource = resolve_path(path) + return @app.call(env) if @authorize_callback && !@authorize_callback.call(env) + if resource =~ /\.js$|\.handlebars$|\.css$/ env[PATH_INFO] = resource @fileserver.call(env) elsif resource.start_with?("/messages.json") serve_messages(Rack::Request.new(env)) @@ -48,16 +57,29 @@ if(filter = req["filter"]) filter = filter.split("_").map{|s| s.to_i} opts[:severity] = filter end + if search = req["search"] + search = (parse_regex(search) || search) if req["regex_search"] == "true" + opts[:search] = search + end + payload = { messages: @store.latest(opts), total: @store.count } json = JSON.generate(payload) [200, {"Content-Type" => "application/json"}, [json]] + end + + def parse_regex(string) + if string =~ /\/(.+)\/(.*)/ + s = $1 + flags = Regexp::IGNORECASE if $2 && $2.include?("i") + Regexp.new(s, flags) rescue nil + end end def resolve_path(path) if path =~ @path_regex $3 || "/"