Sha256: 85cd7acbbae0393c26d1610767de8efa6fea85198324d9bf9fc7b698678cb1ae

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

require 'rack'
require 'rack/handler/puma'
require 'puma/configuration'
require 'hamlit'
require 'active_support/all'
require 'lru_redux'
require 'tty-config'

require 'thread'
require 'pathname'
require 'json'
require 'digest'

module Servel
  def self.build_app(listings:, username: nil, password: nil)
    app = build_listings_app(build_path_map(listings))

    if username && username != ""
      build_authentication_app(app: app, username: username, password: password)
    else
      app
    end
  end

  def self.build_authentication_app(app:, username:, password:)
    hashed_username = Digest::SHA512.digest(username)
    hashed_password = Digest::SHA512.digest(password)

    Rack::Auth::Basic.new(app) do |submitted_username, submitted_password|
      hashed_submitted_username = Digest::SHA512.digest(submitted_username)
      hashed_submitted_password = Digest::SHA512.digest(submitted_password)

      Rack::Utils.secure_compare(
        "#{hashed_username}#{hashed_password}",
        "#{hashed_submitted_username}#{hashed_submitted_password}"
      )
    end
  end

  def self.build_path_map(listings)
    listings.map do |listing|
      listing = { listing => nil } if listing.is_a?(String)

      root, url_root = listing.keys.first, listing.values.first || "/"
      [Pathname.new(root).realpath, url_root]
    end.to_h
  end

  def self.build_listings_app(path_map)
    url_map = path_map.map { |root, url_root| [url_root, Servel::App.new(root)] }.to_h
    url_map["/"] = Servel::HomeApp.new(path_map.values) unless url_map.keys.include?("/")

    Rack::URLMap.new(url_map)
  end


end

require "servel/version"
require "servel/instrumentation"
require "servel/entry"
require "servel/entry_factory"
require "servel/haml_context"
require "servel/index"
require "servel/app"
require "servel/home_app"
require "servel/config_parser"
require "servel/cli"

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
servel-0.33.0 lib/servel.rb