falcon 0.42.3 → 0.44.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/bake/falcon/supervisor.rb +3 -1
  4. data/changes.md +22 -0
  5. data/lib/falcon/command/host.rb +7 -50
  6. data/lib/falcon/command/paths.rb +2 -19
  7. data/lib/falcon/command/proxy.rb +21 -33
  8. data/lib/falcon/command/redirect.rb +22 -33
  9. data/lib/falcon/command/serve.rb +44 -82
  10. data/lib/falcon/command/supervisor.rb +2 -19
  11. data/lib/falcon/command/top.rb +2 -19
  12. data/lib/falcon/command/virtual.rb +16 -41
  13. data/lib/falcon/command.rb +3 -19
  14. data/lib/falcon/configuration.rb +28 -142
  15. data/lib/falcon/endpoint.rb +2 -19
  16. data/lib/falcon/environment/application.rb +60 -0
  17. data/lib/falcon/environment/lets_encrypt_tls.rb +34 -0
  18. data/lib/falcon/environment/proxy.rb +109 -0
  19. data/lib/falcon/environment/rack.rb +20 -0
  20. data/lib/falcon/environment/rackup.rb +26 -0
  21. data/lib/falcon/environment/redirect.rb +50 -0
  22. data/lib/falcon/environment/self_signed_tls.rb +45 -0
  23. data/lib/falcon/environment/server.rb +69 -0
  24. data/lib/falcon/environment/supervisor.rb +40 -0
  25. data/lib/falcon/environment/tls.rb +97 -0
  26. data/lib/falcon/environment.rb +13 -0
  27. data/lib/falcon/middleware/proxy.rb +3 -20
  28. data/lib/falcon/middleware/redirect.rb +2 -19
  29. data/lib/falcon/middleware/verbose.rb +2 -19
  30. data/lib/falcon/proxy_endpoint.rb +2 -19
  31. data/lib/falcon/railtie.rb +10 -0
  32. data/lib/falcon/server.rb +2 -19
  33. data/lib/falcon/service/server.rb +84 -0
  34. data/lib/falcon/service/supervisor.rb +5 -21
  35. data/lib/falcon/{controller → service}/virtual.rb +72 -36
  36. data/lib/falcon/tls.rb +2 -19
  37. data/lib/falcon/version.rb +3 -20
  38. data/lib/falcon.rb +5 -19
  39. data/lib/rack/handler/falcon.rb +4 -0
  40. data/lib/rackup/handler/falcon.rb +83 -0
  41. data/license.md +41 -0
  42. data/readme.md +60 -0
  43. data.tar.gz.sig +0 -0
  44. metadata +37 -117
  45. metadata.gz.sig +0 -0
  46. data/lib/.DS_Store +0 -0
  47. data/lib/falcon/controller/host.rb +0 -72
  48. data/lib/falcon/controller/proxy.rb +0 -126
  49. data/lib/falcon/controller/redirect.rb +0 -76
  50. data/lib/falcon/controller/serve.rb +0 -126
  51. data/lib/falcon/environments/application.rb +0 -72
  52. data/lib/falcon/environments/lets_encrypt_tls.rb +0 -47
  53. data/lib/falcon/environments/proxy.rb +0 -37
  54. data/lib/falcon/environments/rack.rb +0 -50
  55. data/lib/falcon/environments/self_signed_tls.rb +0 -55
  56. data/lib/falcon/environments/supervisor.rb +0 -51
  57. data/lib/falcon/environments/tls.rb +0 -103
  58. data/lib/falcon/environments.rb +0 -31
  59. data/lib/falcon/service/application.rb +0 -115
  60. data/lib/falcon/service/generic.rb +0 -78
  61. data/lib/falcon/service/proxy.rb +0 -66
  62. data/lib/falcon/services.rb +0 -99
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require 'async/container/controller'
24
-
25
- require_relative 'serve'
26
- require_relative '../middleware/redirect'
27
- require_relative '../service/proxy'
28
-
29
- module Falcon
30
- module Controller
31
- # A controller for redirecting requests.
32
- class Redirect < Serve
33
- # Initialize the redirect controller.
34
- # @parameter command [Command::Redirect] The user-specified command-line options.
35
- def initialize(command, **options)
36
- super(command, **options)
37
-
38
- @hosts = {}
39
- end
40
-
41
- # Load the {Middleware::Redirect} application with the specified hosts.
42
- def load_app
43
- return Middleware::Redirect.new(Middleware::NotFound, @hosts, @command.redirect_endpoint)
44
- end
45
-
46
- # The name of the controller which is used for the process title.
47
- def name
48
- "Falcon Redirect Server"
49
- end
50
-
51
- # The endpoint the server will bind to.
52
- def endpoint
53
- @command.endpoint.with(
54
- reuse_address: true,
55
- )
56
- end
57
-
58
- # Builds a map of host redirections.
59
- def start
60
- configuration = @command.configuration
61
-
62
- services = Services.new(configuration)
63
-
64
- @hosts = {}
65
-
66
- services.each do |service|
67
- if service.is_a?(Service::Proxy)
68
- @hosts[service.authority] = service
69
- end
70
- end
71
-
72
- super
73
- end
74
- end
75
- end
76
- end
@@ -1,126 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require_relative '../server'
24
-
25
- require 'async/container/controller'
26
- require 'async/io/trap'
27
-
28
- require 'async/io/shared_endpoint'
29
-
30
- module Falcon
31
- module Controller
32
- # A generic controller for serving an application.
33
- # Uses {Server} for handling incoming requests.
34
- class Serve < Async::Container::Controller
35
- # Initialize the server controller.
36
- # @parameter command [Command::Serve] The user-specified command-line options.
37
- def initialize(command, **options)
38
- @command = command
39
-
40
- @endpoint = nil
41
- @bound_endpoint = nil
42
- @debug_trap = Async::IO::Trap.new(:USR1)
43
-
44
- super(**options)
45
- end
46
-
47
- # Create the controller as specified by the command.
48
- # e.g. `Async::Container::Forked`.
49
- def create_container
50
- @command.container_class.new
51
- end
52
-
53
- # The endpoint the server will bind to.
54
- def endpoint
55
- @command.endpoint
56
- end
57
-
58
- # @returns [Protocol::HTTP::Middleware] an instance of the application to be served.
59
- def load_app
60
- @command.load_app
61
- end
62
-
63
- # Prepare the bound endpoint for the server.
64
- def start
65
- @endpoint ||= self.endpoint
66
-
67
- @bound_endpoint = Async do
68
- Async::IO::SharedEndpoint.bound(@endpoint)
69
- end.wait
70
-
71
- Console.logger.info(self) { "Starting #{name} on #{@endpoint.to_url}" }
72
-
73
- @debug_trap.ignore!
74
-
75
- super
76
- end
77
-
78
- # The name of the controller which is used for the process title.
79
- def name
80
- "Falcon Server"
81
- end
82
-
83
- # Setup the container with the application instance.
84
- # @parameter container [Async::Container::Generic]
85
- def setup(container)
86
- container.run(name: self.name, restart: true, **@command.container_options) do |instance|
87
- Async do |task|
88
- # Load one app instance per container:
89
- app = self.load_app
90
-
91
- task.async do
92
- if @debug_trap.install!
93
- Console.logger.info(instance) do
94
- "- Per-process status: kill -USR1 #{Process.pid}"
95
- end
96
- end
97
-
98
- @debug_trap.trap do
99
- Console.logger.info(self) do |buffer|
100
- task.reactor.print_hierarchy(buffer)
101
- end
102
- end
103
- end
104
-
105
- server = Falcon::Server.new(app, @bound_endpoint, protocol: @endpoint.protocol, scheme: @endpoint.scheme)
106
-
107
- server.run
108
-
109
- instance.ready!
110
-
111
- task.children.each(&:wait)
112
- end
113
- end
114
- end
115
-
116
- # Close the bound endpoint.
117
- def stop(*)
118
- @bound_endpoint&.close
119
-
120
- @debug_trap.default!
121
-
122
- super
123
- end
124
- end
125
- end
126
- end
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require_relative '../proxy_endpoint'
24
- require_relative '../server'
25
-
26
- require_relative '../service/application'
27
-
28
- # A general application environment.
29
- # Suitable for use with any {Protocol::HTTP::Middleware}.
30
- #
31
- # @scope Falcon Environments
32
- # @name application
33
- environment(:application) do
34
- # The middleware stack for the application.
35
- # @attribute [Protocol::HTTP::Middleware]
36
- middleware do
37
- ::Protocol::HTTP::Middleware::HelloWorld
38
- end
39
-
40
- # The scheme to use to communicate with the application.
41
- # @attribute [String]
42
- scheme 'https'
43
-
44
- # The protocol to use to communicate with the application.
45
- #
46
- # Typically one of {Async::HTTP::Protocol::HTTP1} or {Async::HTTP::Protocl::HTTP2}.
47
- #
48
- # @attribute [Async::HTTP::Protocol]
49
- protocol {Async::HTTP::Protocol::HTTP2}
50
-
51
- # The IPC path to use for communication with the application.
52
- # @attribute [String]
53
- ipc_path {::File.expand_path("application.ipc", root)}
54
-
55
- # The endpoint that will be used for communicating with the application server.
56
- # @attribute [Async::IO::Endpoint]
57
- endpoint do
58
- ::Falcon::ProxyEndpoint.unix(ipc_path,
59
- protocol: protocol,
60
- scheme: scheme,
61
- authority: authority
62
- )
63
- end
64
-
65
- # The service class to use for the application.
66
- # @attribute [Class]
67
- service ::Falcon::Service::Application
68
-
69
- # Number of instances to start.
70
- # @attribute [Integer | nil]
71
- count nil
72
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- load(:tls)
24
-
25
- # A Lets Encrypt SSL context environment.
26
- #
27
- # Derived from {.tls}.
28
- #
29
- # @scope Falcon Environments
30
- # @name lets_encrypt_tls
31
- environment(:lets_encrypt_tls, :tls) do
32
- # The Lets Encrypt certificate store path.
33
- # @parameter [String]
34
- lets_encrypt_root '/etc/letsencrypt/live'
35
-
36
- # The public certificate path.
37
- # @attribute [String]
38
- ssl_certificate_path do
39
- File.join(lets_encrypt_root, authority, "fullchain.pem")
40
- end
41
-
42
- # The private key path.
43
- # @attribute [String]
44
- ssl_private_key_path do
45
- File.join(lets_encrypt_root, authority, "privkey.pem")
46
- end
47
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- # A HTTP proxy environment.
24
- #
25
- # Derived from {.application}.
26
- #
27
- # @scope Falcon Environments
28
- # @name rack
29
- environment(:proxy) do
30
- # The upstream endpoint that will handle incoming requests.
31
- # @attribute [Async::HTTP::Endpoint]
32
- endpoint {::Async::HTTP::Endpoint.parse(url)}
33
-
34
- # The service class to use for the proxy.
35
- # @attribute [Class]
36
- service ::Falcon::Service::Proxy
37
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- load :application
24
-
25
- # A rack application environment.
26
- #
27
- # Derived from {.application}.
28
- #
29
- # @scope Falcon Environments
30
- # @name rack
31
- environment(:rack, :application) do
32
- # The rack configuration path.
33
- # @attribute [String]
34
- config_path {::File.expand_path("config.ru", root)}
35
-
36
- # Whether to enable the application layer cache.
37
- # @attribute [String]
38
- cache false
39
-
40
- # The middleware stack for the rack application.
41
- # @attribute [Protocol::HTTP::Middleware]
42
- middleware do
43
- app, _ = ::Rack::Builder.parse_file(config_path)
44
-
45
- ::Falcon::Server.middleware(app,
46
- verbose: verbose,
47
- cache: cache
48
- )
49
- end
50
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require 'localhost/authority'
24
-
25
- # A self-signed SSL context environment.
26
- #
27
- # @scope Falcon Environments
28
- # @name self_signed_tls
29
- environment(:self_signed_tls) do
30
- # The default session identifier for the session cache.
31
- # @attribute [String]
32
- ssl_session_id {"falcon"}
33
-
34
- # The SSL context to use for incoming connections.
35
- # @attribute [OpenSSL::SSL::SSLContext]
36
- ssl_context do
37
- contexts = Localhost::Authority.fetch(authority)
38
-
39
- contexts.server_context.tap do |context|
40
- context.alpn_select_cb = lambda do |protocols|
41
- if protocols.include? "h2"
42
- return "h2"
43
- elsif protocols.include? "http/1.1"
44
- return "http/1.1"
45
- elsif protocols.include? "http/1.0"
46
- return "http/1.0"
47
- else
48
- return nil
49
- end
50
- end
51
-
52
- context.session_id_context = ssl_session_id
53
- end
54
- end
55
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require_relative '../service/supervisor'
24
-
25
- # A application process monitor environment.
26
- #
27
- # @scope Falcon Environments
28
- # @name supervisor
29
- environment(:supervisor) do
30
- # The name of the supervisor
31
- # @attribute [String]
32
- name "supervisor"
33
-
34
- # The IPC path to use for communication with the supervisor.
35
- # @attribute [String]
36
- ipc_path do
37
- ::File.expand_path("supervisor.ipc", root)
38
- end
39
-
40
- # The endpoint the supervisor will bind to.
41
- # @attribute [Async::IO::Endpoint]
42
- endpoint do
43
- Async::IO::Endpoint.unix(ipc_path)
44
- end
45
-
46
- # The service class to use for the supervisor.
47
- # @attribute [Class]
48
- service do
49
- ::Falcon::Service::Supervisor
50
- end
51
- end
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require_relative '../controller/proxy'
24
- require_relative '../tls'
25
-
26
- # A general SSL context environment.
27
- #
28
- # @scope Falcon Environments
29
- # @name tls
30
- environment(:tls) do
31
- # The default session identifier for the session cache.
32
- # @attribute [String]
33
- ssl_session_id "falcon"
34
-
35
- # The supported ciphers.
36
- # @attribute [Array(String)]
37
- ssl_ciphers Falcon::TLS::SERVER_CIPHERS
38
-
39
- # The public certificate path.
40
- # @attribute [String]
41
- ssl_certificate_path do
42
- File.expand_path("ssl/certificate.pem", root)
43
- end
44
-
45
- # The list of certificates loaded from that path.
46
- # @attribute [Array(OpenSSL::X509::Certificate)]
47
- ssl_certificates do
48
- OpenSSL::X509::Certificate.load_file(ssl_certificate_path)
49
- end
50
-
51
- # The main certificate.
52
- # @attribute [OpenSSL::X509::Certificate]
53
- ssl_certificate {ssl_certificates[0]}
54
-
55
- # The certificate chain.
56
- # @attribute [Array(OpenSSL::X509::Certificate)]
57
- ssl_certificate_chain {ssl_certificates[1..-1]}
58
-
59
- # The private key path.
60
- # @attribute [String]
61
- ssl_private_key_path do
62
- File.expand_path("ssl/private.key", root)
63
- end
64
-
65
- # The private key.
66
- # @attribute [OpenSSL::PKey::RSA]
67
- ssl_private_key do
68
- OpenSSL::PKey::RSA.new(File.read(ssl_private_key_path))
69
- end
70
-
71
- # The SSL context to use for incoming connections.
72
- # @attribute [OpenSSL::SSL::SSLContext]
73
- ssl_context do
74
- OpenSSL::SSL::SSLContext.new.tap do |context|
75
- context.add_certificate(ssl_certificate, ssl_private_key, ssl_certificate_chain)
76
-
77
- context.session_cache_mode = OpenSSL::SSL::SSLContext::SESSION_CACHE_CLIENT
78
- context.session_id_context = ssl_session_id
79
-
80
- context.alpn_select_cb = lambda do |protocols|
81
- if protocols.include? "h2"
82
- return "h2"
83
- elsif protocols.include? "http/1.1"
84
- return "http/1.1"
85
- elsif protocols.include? "http/1.0"
86
- return "http/1.0"
87
- else
88
- return nil
89
- end
90
- end
91
-
92
- # TODO Ruby 2.4 requires using ssl_version.
93
- context.ssl_version = :TLSv1_2_server
94
-
95
- context.set_params(
96
- ciphers: ssl_ciphers,
97
- verify_mode: OpenSSL::SSL::VERIFY_NONE,
98
- )
99
-
100
- context.setup
101
- end
102
- end
103
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require 'build/environment'
24
-
25
- module Falcon
26
- # Pre-defined environments for hosting web applications.
27
- #
28
- # See {Configuration::Loader#load} for more details.
29
- module Environments
30
- end
31
- end