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?)