lib/falcon/command/virtual.rb in falcon-0.25.0 vs lib/falcon/command/virtual.rb in falcon-0.26.0

- old
+ new

@@ -19,10 +19,11 @@ # THE SOFTWARE. require_relative '../server' require_relative '../endpoint' require_relative '../hosts' +require_relative '../configuration' require 'async/container' require 'async/container/controller' require 'async/io/host_endpoint' @@ -38,83 +39,25 @@ module Command class Virtual < Samovar::Command self.description = "Run an HTTP server with one or more virtual hosts." options do - option '--bind-insecure <address>', "Bind redirection to the given hostname/address", default: "http://localhost" - option '--bind-secure <address>', "Bind proxy to the given hostname/address", default: "https://localhost" - - option '--self-signed', "Use self-signed SSL", default: false + option '--bind-insecure <address>', "Bind redirection to the given hostname/address", default: "http://[::]" + option '--bind-secure <address>', "Bind proxy to the given hostname/address", default: "https://[::]" end - many :sites + many :paths - CONFIG_RU = "config.ru" - - def load_app(path, verbose) - config = File.join(path, CONFIG_RU) - - rack_app, options = Rack::Builder.parse_file(config) - - return Server.middleware(rack_app, verbose: verbose), options - end - - def client - Async::HTTP::Client.new(client_endpoint) - end - def run(verbose = false) - hosts = Falcon::Hosts.new - root = Dir.pwd + configuration = Configuration.new(verbose) - sites.each do |path| - name = File.basename(path) - - hosts.add(name) do |host| - host.app_root = File.expand_path(path, root) - - if @options[:self_signed] - host.self_signed!(name) - else - host.ssl_certificate_path = File.join(path, "ssl", "fullchain.pem") - host.ssl_key_path = File.join(path, "ssl", "privkey.pem") - end - end + @paths.each do |path| + configuration.load_file(path) end - controller = Async::Container::Controller.new + hosts = Hosts.new(configuration) - hosts.each do |name, host| - if container = host.start - controller << container - end - end - - controller << Async::Container::Forked.new do |task| - proxy = hosts.proxy - secure_endpoint = Async::HTTP::URLEndpoint.parse(@options[:bind_secure], ssl_context: hosts.ssl_context) - - Process.setproctitle("Falcon Proxy") - - proxy_server = Falcon::Server.new(proxy, secure_endpoint) - - proxy_server.run - end - - controller << Async::Container::Forked.new do |task| - redirection = hosts.redirection - insecure_endpoint = Async::HTTP::URLEndpoint.parse(@options[:bind_insecure]) - - Process.setproctitle("Falcon Redirector") - - redirection_server = Falcon::Server.new(redirection, insecure_endpoint) - - redirection_server.run - end - - Process.setproctitle("Falcon Controller") - - return controller + return hosts.run(@options) end def invoke(parent) container = run(parent.verbose?)