Sha256: 50247bb6f2712963f61204ea7386aa77bce8333eaa78fdf14db4329382e8d512
Contents?: true
Size: 1.98 KB
Versions: 1
Compression:
Stored size: 1.98 KB
Contents
require "webrick" module Jekyll module Commands class Serve class Servlet < WEBrick::HTTPServlet::FileHandler DEFAULTS = { "Cache-Control" => "private, max-age=0, proxy-revalidate, " \ "no-store, no-cache, must-revalidate" } def basic_auth(request, response) WEBrick::HTTPAuth.basic_auth(request, response, 'My Realm') do |user, pass| credentials = SafeYAML.load_file(Jekyll::Configuration::DEFAULTS['source'] + '/admin/config.yml') user == credentials['user'] && pass == credentials['password'] end end def initialize(server, root, callbacks) # So we can access them easily. @jekyll_opts = server.config[:JekyllOptions] set_defaults super end # Add the ability to tap file.html the same way that Nginx does on our # Docker images (or on GitHub Pages.) The difference is that we might end # up with a different preference on which comes first. def search_file(req, res, basename) # /file.* > /file/index.html > /file.html super || super(req, res, "#{basename}.html") end # def do_GET(req, res) basic_auth(req, res) rtn = super validate_and_ensure_charset(req, res) res.header.merge!(@headers) rtn end # private def validate_and_ensure_charset(_req, res) key = res.header.keys.grep(/content-type/i).first typ = res.header[key] unless typ =~ /;\s*charset=/ res.header[key] = "#{typ}; charset=#{@jekyll_opts["encoding"]}" end end # private def set_defaults hash_ = @jekyll_opts.fetch("webrick", {}).fetch("headers", {}) DEFAULTS.each_with_object(@headers = hash_) do |(key, val), hash| hash[key] = val unless hash.key?(key) end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
jekyllplusadmin-1.1.0 | lib/jekyll/commands/serve/servlet.rb |