falcon 0.48.3 → 0.48.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/bake/falcon/supervisor.rb +2 -2
- data/bin/falcon +1 -1
- data/bin/falcon-host +1 -1
- data/lib/falcon/command/host.rb +4 -4
- data/lib/falcon/command/paths.rb +1 -1
- data/lib/falcon/command/proxy.rb +5 -5
- data/lib/falcon/command/redirect.rb +6 -6
- data/lib/falcon/command/serve.rb +21 -21
- data/lib/falcon/command/supervisor.rb +10 -10
- data/lib/falcon/command/top.rb +19 -19
- data/lib/falcon/command/virtual.rb +6 -6
- data/lib/falcon/command.rb +2 -2
- data/lib/falcon/configuration.rb +1 -1
- data/lib/falcon/endpoint.rb +3 -3
- data/lib/falcon/environment/application.rb +3 -3
- data/lib/falcon/environment/lets_encrypt_tls.rb +3 -3
- data/lib/falcon/environment/proxy.rb +5 -5
- data/lib/falcon/environment/rack.rb +3 -3
- data/lib/falcon/environment/rackup.rb +3 -3
- data/lib/falcon/environment/redirect.rb +2 -2
- data/lib/falcon/environment/self_signed_tls.rb +3 -3
- data/lib/falcon/environment/server.rb +4 -4
- data/lib/falcon/environment/supervisor.rb +3 -3
- data/lib/falcon/environment/tls.rb +2 -2
- data/lib/falcon/environment/virtual.rb +2 -2
- data/lib/falcon/middleware/proxy.rb +23 -20
- data/lib/falcon/middleware/redirect.rb +7 -5
- data/lib/falcon/middleware/validate.rb +26 -0
- data/lib/falcon/middleware/verbose.rb +7 -9
- data/lib/falcon/proxy_endpoint.rb +1 -1
- data/lib/falcon/rackup/handler.rb +5 -7
- data/lib/falcon/server.rb +16 -11
- data/lib/falcon/service/server.rb +3 -3
- data/lib/falcon/service/supervisor.rb +7 -7
- data/lib/falcon/service/virtual.rb +4 -4
- data/lib/falcon/version.rb +1 -1
- data/lib/rack/handler/falcon.rb +11 -5
- data/lib/rackup/handler/falcon.rb +10 -4
- data/license.md +4 -2
- data/readme.md +4 -0
- data/releases.md +4 -0
- data.tar.gz.sig +0 -0
- metadata +13 -15
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8ef2381f9e160ea759eb3514031d4503c04f757b0678b5d7ad3342392a55bc5b
|
|
4
|
+
data.tar.gz: 688e89fbbf7b410fa3be7bb9d570e2d6047b750bae36237a17b6837766eefbd7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7d183d3ea35bebecc7df5c360c20cda41fcf1e6b126f287d4dd9387d8911d0a24ef7b20221945efa9acd7451d9e9b053bef326bd9a53a0e55756fc283d427402
|
|
7
|
+
data.tar.gz: d9261f7e20b4d95d6519e1c70a70c34f0f243207ea72bbe8b9d340414b00ba73542229cc5c5d2a0054cef624fa0f1ff413bbb3580a27d610cbf46587459c43b0
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/bake/falcon/supervisor.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright, 2020-
|
|
4
|
+
# Copyright, 2020-2025, by Samuel Williams.
|
|
5
5
|
|
|
6
6
|
def restart
|
|
7
|
-
require_relative
|
|
7
|
+
require_relative "../../lib/falcon/command/supervisor"
|
|
8
8
|
|
|
9
9
|
Falcon::Command::Supervisor["restart"].call
|
|
10
10
|
end
|
data/bin/falcon
CHANGED
data/bin/falcon-host
CHANGED
data/lib/falcon/command/host.rb
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2019-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
6
|
+
require_relative "paths"
|
|
7
|
+
require_relative "../version"
|
|
8
8
|
|
|
9
|
-
require
|
|
10
|
-
require
|
|
9
|
+
require "samovar"
|
|
10
|
+
require "async/service/controller"
|
|
11
11
|
|
|
12
12
|
module Falcon
|
|
13
13
|
module Command
|
data/lib/falcon/command/paths.rb
CHANGED
data/lib/falcon/command/proxy.rb
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2020-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
6
|
+
require_relative "../environment/proxy"
|
|
7
|
+
require_relative "paths"
|
|
8
8
|
|
|
9
|
-
require
|
|
9
|
+
require "samovar"
|
|
10
10
|
|
|
11
11
|
module Falcon
|
|
12
12
|
module Command
|
|
@@ -19,9 +19,9 @@ module Falcon
|
|
|
19
19
|
# The command line options.
|
|
20
20
|
# @attribute [Samovar::Options]
|
|
21
21
|
options do
|
|
22
|
-
option
|
|
22
|
+
option "--bind <address>", "Bind to the given hostname/address", default: "https://[::]:443"
|
|
23
23
|
|
|
24
|
-
option
|
|
24
|
+
option "-t/--timeout <duration>", "Specify the maximum time to wait for non-blocking operations.", type: Float, default: nil
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
# One or more paths to the configuration files.
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2020-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
6
|
+
require_relative "../environment/redirect"
|
|
7
|
+
require_relative "paths"
|
|
8
8
|
|
|
9
|
-
require
|
|
9
|
+
require "samovar"
|
|
10
10
|
|
|
11
11
|
module Falcon
|
|
12
12
|
module Command
|
|
@@ -16,10 +16,10 @@ module Falcon
|
|
|
16
16
|
# The command line options.
|
|
17
17
|
# @attribute [Samovar::Options]
|
|
18
18
|
options do
|
|
19
|
-
option
|
|
20
|
-
option
|
|
19
|
+
option "--bind <address>", "Bind to the given hostname/address", default: "http://[::]:80"
|
|
20
|
+
option "--redirect <address>", "Redirect using this address as a template.", default: "https://[::]:443"
|
|
21
21
|
|
|
22
|
-
option
|
|
22
|
+
option "-t/--timeout <duration>", "Specify the maximum time to wait for non-blocking operations.", type: Float, default: nil
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
# One or more paths to the configuration files.
|
data/lib/falcon/command/serve.rb
CHANGED
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
# Copyright, 2018-2024, by Samuel Williams.
|
|
5
5
|
# Copyright, 2018, by Mitsutaka Mimura.
|
|
6
6
|
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
9
|
-
require_relative
|
|
10
|
-
require_relative
|
|
11
|
-
require_relative
|
|
7
|
+
require_relative "../server"
|
|
8
|
+
require_relative "../endpoint"
|
|
9
|
+
require_relative "../configuration"
|
|
10
|
+
require_relative "../service/server"
|
|
11
|
+
require_relative "../environment/rackup"
|
|
12
12
|
|
|
13
|
-
require
|
|
14
|
-
require
|
|
15
|
-
require
|
|
13
|
+
require "async/container"
|
|
14
|
+
require "async/http/client"
|
|
15
|
+
require "samovar"
|
|
16
16
|
|
|
17
17
|
module Falcon
|
|
18
18
|
module Command
|
|
@@ -25,26 +25,26 @@ module Falcon
|
|
|
25
25
|
# The command line options.
|
|
26
26
|
# @attribute [Samovar::Options]
|
|
27
27
|
options do
|
|
28
|
-
option
|
|
28
|
+
option "-b/--bind <address>", "Bind to the given hostname/address.", default: "https://localhost:9292"
|
|
29
29
|
|
|
30
|
-
option
|
|
31
|
-
option
|
|
32
|
-
option
|
|
30
|
+
option "-p/--port <number>", "Override the specified port.", type: Integer
|
|
31
|
+
option "-h/--hostname <hostname>", "Specify the hostname which would be used for certificates, etc."
|
|
32
|
+
option "-t/--timeout <duration>", "Specify the maximum time to wait for non-blocking operations.", type: Float, default: nil
|
|
33
33
|
|
|
34
|
-
option
|
|
35
|
-
option
|
|
34
|
+
option "-c/--config <path>", "Rackup configuration file to load.", default: "config.ru"
|
|
35
|
+
option "--preload <path>", "Preload the specified path before creating containers."
|
|
36
36
|
|
|
37
|
-
option
|
|
37
|
+
option "--cache", "Enable the response cache."
|
|
38
38
|
|
|
39
|
-
option
|
|
39
|
+
option "--forked | --threaded | --hybrid", "Select a specific parallelism model.", key: :container, default: :forked
|
|
40
40
|
|
|
41
|
-
option
|
|
41
|
+
option "-n/--count <count>", "Number of instances to start.", default: Async::Container.processor_count, type: Integer
|
|
42
42
|
|
|
43
|
-
option
|
|
44
|
-
option
|
|
43
|
+
option "--forks <count>", "Number of forks (hybrid only).", type: Integer
|
|
44
|
+
option "--threads <count>", "Number of threads (hybrid only).", type: Integer
|
|
45
45
|
|
|
46
|
-
option
|
|
47
|
-
option
|
|
46
|
+
option "--[no]-restart", "Enable/disable automatic restart.", default: true
|
|
47
|
+
option "--graceful-stop <timeout>", "Duration to wait for graceful stop.", type: Float, default: 1.0
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def container_options
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2019-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
6
|
+
require "samovar"
|
|
7
|
+
require "async"
|
|
8
|
+
require "json"
|
|
9
9
|
|
|
10
|
-
require
|
|
11
|
-
require
|
|
10
|
+
require "io/endpoint/unix_endpoint"
|
|
11
|
+
require "io/stream"
|
|
12
12
|
|
|
13
13
|
module Falcon
|
|
14
14
|
module Command
|
|
@@ -30,7 +30,7 @@ module Falcon
|
|
|
30
30
|
|
|
31
31
|
# Send the restart message to the supervisor.
|
|
32
32
|
def call(stream)
|
|
33
|
-
stream.puts({please:
|
|
33
|
+
stream.puts({please: "restart"}.to_json, separator: "\0")
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -40,7 +40,7 @@ module Falcon
|
|
|
40
40
|
|
|
41
41
|
# Send the metrics message to the supervisor and print the results.
|
|
42
42
|
def call(stream)
|
|
43
|
-
stream.puts({please:
|
|
43
|
+
stream.puts({please: "metrics"}.to_json, separator: "\0", chomp: true)
|
|
44
44
|
response = JSON.parse(stream.read_until("\0"), symbolize_names: true)
|
|
45
45
|
|
|
46
46
|
$stdout.puts response
|
|
@@ -51,9 +51,9 @@ module Falcon
|
|
|
51
51
|
# @name nested
|
|
52
52
|
# @attribute [Command]
|
|
53
53
|
nested :command, {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}, default:
|
|
54
|
+
"restart" => Restart,
|
|
55
|
+
"metrics" => Metrics,
|
|
56
|
+
}, default: "metrics"
|
|
57
57
|
|
|
58
58
|
# The endpoint the supervisor is bound to.
|
|
59
59
|
def endpoint
|
data/lib/falcon/command/top.rb
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2020-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
9
|
-
require_relative
|
|
10
|
-
require_relative
|
|
11
|
-
require_relative
|
|
6
|
+
require_relative "serve"
|
|
7
|
+
require_relative "host"
|
|
8
|
+
require_relative "virtual"
|
|
9
|
+
require_relative "proxy"
|
|
10
|
+
require_relative "redirect"
|
|
11
|
+
require_relative "supervisor"
|
|
12
12
|
|
|
13
|
-
require_relative
|
|
13
|
+
require_relative "../version"
|
|
14
14
|
|
|
15
|
-
require
|
|
15
|
+
require "samovar"
|
|
16
16
|
|
|
17
17
|
module Falcon
|
|
18
18
|
module Command
|
|
@@ -23,23 +23,23 @@ module Falcon
|
|
|
23
23
|
# The command line options.
|
|
24
24
|
# @attribute [Samovar::Options]
|
|
25
25
|
options do
|
|
26
|
-
option
|
|
27
|
-
option
|
|
28
|
-
option
|
|
29
|
-
option
|
|
26
|
+
option "--verbose | --quiet", "Verbosity of output for debugging.", key: :logging
|
|
27
|
+
option "-h/--help", "Print out help information."
|
|
28
|
+
option "-v/--version", "Print out the application version."
|
|
29
|
+
option "-e/--encoding", "Specify the default external encoding of the server.", default: "UTF-8"
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# The nested command to execute.
|
|
33
33
|
# @name nested
|
|
34
34
|
# @attribute [Command]
|
|
35
35
|
nested :command, {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}, default:
|
|
36
|
+
"serve" => Serve,
|
|
37
|
+
"host" => Host,
|
|
38
|
+
"virtual" => Virtual,
|
|
39
|
+
"proxy" => Proxy,
|
|
40
|
+
"redirect" => Redirect,
|
|
41
|
+
"supervisor" => Supervisor,
|
|
42
|
+
}, default: "serve"
|
|
43
43
|
|
|
44
44
|
# Whether verbose logging is enabled.
|
|
45
45
|
# @returns [Boolean]
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2018-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
6
|
+
require "async/service"
|
|
7
7
|
|
|
8
|
-
require_relative
|
|
8
|
+
require_relative "../environment/virtual"
|
|
9
9
|
|
|
10
|
-
require
|
|
10
|
+
require "samovar"
|
|
11
11
|
|
|
12
12
|
module Falcon
|
|
13
13
|
module Command
|
|
@@ -20,10 +20,10 @@ module Falcon
|
|
|
20
20
|
# The command line options.
|
|
21
21
|
# @attribute [Samovar::Options]
|
|
22
22
|
options do
|
|
23
|
-
option
|
|
24
|
-
option
|
|
23
|
+
option "--bind-insecure <address>", "Bind redirection to the given hostname/address", default: "http://[::]:80"
|
|
24
|
+
option "--bind-secure <address>", "Bind proxy to the given hostname/address", default: "https://[::]:443"
|
|
25
25
|
|
|
26
|
-
option
|
|
26
|
+
option "-t/--timeout <duration>", "Specify the maximum time to wait for non-blocking operations.", type: Float, default: 30
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# One or more paths to the configuration files.
|
data/lib/falcon/command.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright, 2017-
|
|
4
|
+
# Copyright, 2017-2025, by Samuel Williams.
|
|
5
5
|
# Copyright, 2018, by Mitsutaka Mimura.
|
|
6
6
|
|
|
7
|
-
require_relative
|
|
7
|
+
require_relative "command/top"
|
|
8
8
|
|
|
9
9
|
module Falcon
|
|
10
10
|
module Command
|
data/lib/falcon/configuration.rb
CHANGED
data/lib/falcon/endpoint.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright, 2018-
|
|
4
|
+
# Copyright, 2018-2025, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require
|
|
6
|
+
require "async/http/endpoint"
|
|
7
|
+
require "localhost/authority"
|
|
8
8
|
|
|
9
9
|
module Falcon
|
|
10
10
|
# An HTTP-specific endpoint which adds localhost TLS.
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
# Copyright, 2019-2024, by Samuel Williams.
|
|
5
5
|
# Copyright, 2020, by Daniel Evans.
|
|
6
6
|
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
7
|
+
require_relative "server"
|
|
8
|
+
require_relative "../proxy_endpoint"
|
|
9
9
|
|
|
10
10
|
module Falcon
|
|
11
11
|
module Environment
|
|
@@ -22,7 +22,7 @@ module Falcon
|
|
|
22
22
|
# The scheme to use to communicate with the application.
|
|
23
23
|
# @returns [String]
|
|
24
24
|
def scheme
|
|
25
|
-
|
|
25
|
+
"https"
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# The protocol to use to communicate with the application.
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2020-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
6
|
+
require_relative "tls"
|
|
7
|
+
require_relative "../environment"
|
|
8
8
|
|
|
9
9
|
module Falcon
|
|
10
10
|
module Environment
|
|
@@ -13,7 +13,7 @@ module Falcon
|
|
|
13
13
|
# The Lets Encrypt certificate store path.
|
|
14
14
|
# @parameter [String]
|
|
15
15
|
def lets_encrypt_root
|
|
16
|
-
|
|
16
|
+
"/etc/letsencrypt/live"
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
# The public certificate path.
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2020-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
9
|
-
require_relative
|
|
6
|
+
require_relative "server"
|
|
7
|
+
require_relative "../tls"
|
|
8
|
+
require_relative "../middleware/proxy"
|
|
9
|
+
require_relative "../environment"
|
|
10
10
|
|
|
11
11
|
module Falcon
|
|
12
12
|
module Environment
|
|
@@ -43,7 +43,7 @@ module Falcon
|
|
|
43
43
|
Console.info(self) {"Proxying #{self.url} to #{evaluator.authority} using #{evaluator.endpoint}"}
|
|
44
44
|
hosts[evaluator.authority] = evaluator
|
|
45
45
|
|
|
46
|
-
if RUBY_VERSION <
|
|
46
|
+
if RUBY_VERSION < "3.1"
|
|
47
47
|
# Ensure the SSL context is set up before forking - it's buggy on Ruby < 3.1:
|
|
48
48
|
evaluator.ssl_context
|
|
49
49
|
end
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
6
|
+
require_relative "application"
|
|
7
|
+
require_relative "rackup"
|
|
8
|
+
require_relative "../environment"
|
|
9
9
|
|
|
10
10
|
module Falcon
|
|
11
11
|
module Environment
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2020-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require_relative
|
|
6
|
+
require "rack/builder"
|
|
7
|
+
require_relative "../server"
|
|
8
8
|
|
|
9
9
|
module Falcon
|
|
10
10
|
module Environment
|
|
11
11
|
# Provides an environment for hosting loading a Rackup `config.ru` file.
|
|
12
12
|
module Rackup
|
|
13
13
|
def rackup_path
|
|
14
|
-
File.expand_path(
|
|
14
|
+
File.expand_path("config.ru", root)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def rack_app
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2020-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
6
|
+
require_relative "server"
|
|
7
|
+
require_relative "../middleware/redirect"
|
|
8
8
|
|
|
9
9
|
module Falcon
|
|
10
10
|
module Environment
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2019-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
6
|
+
require "localhost/authority"
|
|
7
|
+
require_relative "tls"
|
|
8
|
+
require_relative "../environment"
|
|
9
9
|
|
|
10
10
|
module Falcon
|
|
11
11
|
module Environment
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2020-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require
|
|
6
|
+
require "async/service/generic"
|
|
7
|
+
require "async/http/endpoint"
|
|
8
8
|
|
|
9
|
-
require_relative
|
|
10
|
-
require_relative
|
|
9
|
+
require_relative "../service/server"
|
|
10
|
+
require_relative "../server"
|
|
11
11
|
|
|
12
12
|
module Falcon
|
|
13
13
|
module Environment
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2019-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
7
|
-
require_relative
|
|
6
|
+
require_relative "../service/supervisor"
|
|
7
|
+
require_relative "../environment"
|
|
8
8
|
|
|
9
|
-
require
|
|
9
|
+
require "io/endpoint/unix_endpoint"
|
|
10
10
|
|
|
11
11
|
module Falcon
|
|
12
12
|
module Environment
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require_relative
|
|
6
|
+
require_relative "configured"
|
|
7
7
|
|
|
8
|
-
require_relative
|
|
8
|
+
require_relative "../service/virtual"
|
|
9
9
|
|
|
10
10
|
module Falcon
|
|
11
11
|
module Environment
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2018-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
6
|
+
require "async/http/client"
|
|
7
|
+
require "protocol/http/headers"
|
|
8
|
+
require "protocol/http/middleware"
|
|
9
9
|
|
|
10
|
-
require
|
|
11
|
-
require
|
|
10
|
+
require "console/event/failure"
|
|
11
|
+
require "traces/provider"
|
|
12
12
|
|
|
13
13
|
module Falcon
|
|
14
14
|
module Middleware
|
|
@@ -25,21 +25,21 @@ module Falcon
|
|
|
25
25
|
# A HTTP middleware for proxying requests to a given set of hosts.
|
|
26
26
|
# Typically used for implementing virtual servers.
|
|
27
27
|
class Proxy < Protocol::HTTP::Middleware
|
|
28
|
-
FORWARDED =
|
|
29
|
-
X_FORWARDED_FOR =
|
|
30
|
-
X_FORWARDED_PROTO =
|
|
28
|
+
FORWARDED = "forwarded"
|
|
29
|
+
X_FORWARDED_FOR = "x-forwarded-for"
|
|
30
|
+
X_FORWARDED_PROTO = "x-forwarded-proto"
|
|
31
31
|
|
|
32
|
-
VIA =
|
|
33
|
-
CONNECTION =
|
|
32
|
+
VIA = "via"
|
|
33
|
+
CONNECTION = "connection"
|
|
34
34
|
|
|
35
35
|
# HTTP hop headers which *should* not be passed through the proxy.
|
|
36
36
|
HOP_HEADERS = [
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
"connection",
|
|
38
|
+
"keep-alive",
|
|
39
|
+
"public",
|
|
40
|
+
"proxy-authenticate",
|
|
41
|
+
"transfer-encoding",
|
|
42
|
+
"upgrade",
|
|
43
43
|
]
|
|
44
44
|
|
|
45
45
|
# Initialize the proxy middleware.
|
|
@@ -78,7 +78,7 @@ module Falcon
|
|
|
78
78
|
# @returns [Service::Proxy]
|
|
79
79
|
def lookup(request)
|
|
80
80
|
# Trailing dot and port is ignored/normalized.
|
|
81
|
-
if authority = request.authority&.sub(/(\.)?(:\d+)?$/,
|
|
81
|
+
if authority = request.authority&.sub(/(\.)?(:\d+)?$/, "")
|
|
82
82
|
return @hosts[authority]
|
|
83
83
|
end
|
|
84
84
|
end
|
|
@@ -119,7 +119,7 @@ module Falcon
|
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
unless forwarded.empty?
|
|
122
|
-
request.headers.add(FORWARDED, forwarded.join(
|
|
122
|
+
request.headers.add(FORWARDED, forwarded.join(";"))
|
|
123
123
|
end
|
|
124
124
|
|
|
125
125
|
request.headers.add(VIA, "#{request.version} #{self.class}")
|
|
@@ -145,16 +145,19 @@ module Falcon
|
|
|
145
145
|
end
|
|
146
146
|
rescue => error
|
|
147
147
|
Console::Event::Failure.for(error).emit(self)
|
|
148
|
-
return Protocol::HTTP::Response[502, {
|
|
148
|
+
return Protocol::HTTP::Response[502, {"content-type" => "text/plain"}, [error.class.name]]
|
|
149
149
|
end
|
|
150
150
|
|
|
151
151
|
Traces::Provider(self) do
|
|
152
152
|
def call(request)
|
|
153
153
|
attributes = {
|
|
154
154
|
"authority" => request.authority,
|
|
155
|
+
"method" => request.method,
|
|
156
|
+
"path" => request.path,
|
|
157
|
+
"version" => request.version,
|
|
155
158
|
}
|
|
156
159
|
|
|
157
|
-
Traces.trace(
|
|
160
|
+
Traces.trace("falcon.middleware.proxy.call", attributes: attributes) do
|
|
158
161
|
super
|
|
159
162
|
end
|
|
160
163
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright, 2018-
|
|
4
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
6
|
+
require "async/http/client"
|
|
7
7
|
|
|
8
8
|
module Falcon
|
|
9
9
|
module Middleware
|
|
@@ -35,7 +35,7 @@ module Falcon
|
|
|
35
35
|
# @parameter request [Protocol::HTTP::Request]
|
|
36
36
|
def lookup(request)
|
|
37
37
|
# Trailing dot and port is ignored/normalized.
|
|
38
|
-
if authority = request.authority&.sub(/(\.)?(:\d+)?$/,
|
|
38
|
+
if authority = request.authority&.sub(/(\.)?(:\d+)?$/, "")
|
|
39
39
|
return @hosts[authority]
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -50,7 +50,9 @@ module Falcon
|
|
|
50
50
|
location = "#{@endpoint.scheme}://#{host.authority}:#{@endpoint.port}#{request.path}"
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Console.info(self, "Redirecting incoming request...", request: request, location: location)
|
|
54
|
+
|
|
55
|
+
return Protocol::HTTP::Response[301, [["location", location]], []]
|
|
54
56
|
else
|
|
55
57
|
super
|
|
56
58
|
end
|
|
@@ -58,7 +60,7 @@ module Falcon
|
|
|
58
60
|
|
|
59
61
|
Traces::Provider(self) do
|
|
60
62
|
def call(request)
|
|
61
|
-
Traces.trace(
|
|
63
|
+
Traces.trace("falcon.middleware.redirect.call", attributes: {authority: request.authority}) do
|
|
62
64
|
super
|
|
63
65
|
end
|
|
64
66
|
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Released under the MIT License.
|
|
4
|
+
# Copyright, 2025, by Samuel Williams.
|
|
5
|
+
|
|
6
|
+
module Falcon
|
|
7
|
+
module Middleware
|
|
8
|
+
# A HTTP middleware for validating incoming requests.
|
|
9
|
+
class Validate < Protocol::HTTP::Middleware
|
|
10
|
+
# Initialize the validate middleware.
|
|
11
|
+
# @parameter app [Protocol::HTTP::Middleware] The middleware to wrap.
|
|
12
|
+
def initialize(app)
|
|
13
|
+
super(app)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Validate the incoming request.
|
|
17
|
+
def call(request)
|
|
18
|
+
unless request.path.start_with?("/")
|
|
19
|
+
return Protocol::HTTP::Response[400, {}, ["Invalid request path!"]]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
return super
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright, 2018-
|
|
4
|
+
# Copyright, 2018-2025, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require
|
|
6
|
+
require "console"
|
|
7
|
+
require "async/http/statistics"
|
|
8
8
|
|
|
9
9
|
module Falcon
|
|
10
10
|
module Middleware
|
|
@@ -13,7 +13,7 @@ module Falcon
|
|
|
13
13
|
# Initialize the verbose middleware.
|
|
14
14
|
# @parameter app [Protocol::HTTP::Middleware] The middleware to wrap.
|
|
15
15
|
# @parameter logger [Console::Logger] The logger to use.
|
|
16
|
-
def initialize(app, logger = Console
|
|
16
|
+
def initialize(app, logger = Console)
|
|
17
17
|
super(app)
|
|
18
18
|
|
|
19
19
|
@logger = logger
|
|
@@ -24,7 +24,7 @@ module Falcon
|
|
|
24
24
|
task = Async::Task.current
|
|
25
25
|
address = request.remote_address
|
|
26
26
|
|
|
27
|
-
@logger.info(request
|
|
27
|
+
@logger.info(request, "-> #{request.method} #{request.path}", headers: request.headers.to_h, address: address.inspect)
|
|
28
28
|
|
|
29
29
|
task.annotate("#{request.method} #{request.path} from #{address.inspect}")
|
|
30
30
|
end
|
|
@@ -37,10 +37,8 @@ module Falcon
|
|
|
37
37
|
|
|
38
38
|
response = super
|
|
39
39
|
|
|
40
|
-
statistics.wrap(response) do |
|
|
41
|
-
@logger.info(request
|
|
42
|
-
|
|
43
|
-
@logger.error(request) {"#{error.class}: #{error.message}"} if error
|
|
40
|
+
statistics.wrap(response) do |body, error|
|
|
41
|
+
@logger.info(request, "<- #{request.method} #{request.path}", headers: response.headers.to_h, status: response.status, body: body.inspect, error: error)
|
|
44
42
|
end
|
|
45
43
|
|
|
46
44
|
return response
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright, 2024, by Samuel Williams.
|
|
4
|
+
# Copyright, 2024-2025, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
require_relative "../../falcon"
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
require 'kernel/sync'
|
|
11
|
-
require 'io/endpoint/host_endpoint'
|
|
8
|
+
require "kernel/sync"
|
|
9
|
+
require "io/endpoint/host_endpoint"
|
|
12
10
|
|
|
13
11
|
module Falcon
|
|
14
12
|
module Rackup
|
|
@@ -25,7 +23,7 @@ module Falcon
|
|
|
25
23
|
# Generate an endpoint for the given `rackup` options.
|
|
26
24
|
# @returns [::IO::Endpoint::HostEndpoint]
|
|
27
25
|
def self.endpoint_for(**options)
|
|
28
|
-
host = options[:Host] ||
|
|
26
|
+
host = options[:Host] || "localhost"
|
|
29
27
|
port = Integer(options[:Port] || 9292)
|
|
30
28
|
|
|
31
29
|
return ::IO::Endpoint.tcp(host, port)
|
data/lib/falcon/server.rb
CHANGED
|
@@ -1,38 +1,43 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright, 2017-
|
|
4
|
+
# Copyright, 2017-2025, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
6
|
+
require "async/http/server"
|
|
7
7
|
|
|
8
|
-
require
|
|
9
|
-
require
|
|
8
|
+
require "protocol/http/middleware/builder"
|
|
9
|
+
require "protocol/http/content_encoding"
|
|
10
10
|
|
|
11
|
-
require
|
|
12
|
-
|
|
13
|
-
require_relative
|
|
14
|
-
require
|
|
11
|
+
require "async/http/cache"
|
|
12
|
+
require_relative "middleware/verbose"
|
|
13
|
+
require_relative "middleware/validate"
|
|
14
|
+
require "protocol/rack"
|
|
15
15
|
|
|
16
16
|
module Falcon
|
|
17
17
|
# A server listening on a specific endpoint, hosting a specific middleware.
|
|
18
18
|
class Server < Async::HTTP::Server
|
|
19
19
|
# Wrap a rack application into a middleware suitable the server.
|
|
20
20
|
# @parameter rack_app [Proc | Object] A rack application/middleware.
|
|
21
|
-
# @parameter
|
|
21
|
+
# @parameter validate [Boolean] Whether to add the {Middleware::Validate} middleware.
|
|
22
|
+
# @parameter verbose [Boolean] Whether to add the {Middleware::Verbose} middleware.
|
|
22
23
|
# @parameter cache [Boolean] Whether to add the {Async::HTTP::Cache} middleware.
|
|
23
|
-
def self.middleware(rack_app, verbose: false, cache: true)
|
|
24
|
+
def self.middleware(rack_app, verbose: false, validate: true, cache: true)
|
|
24
25
|
::Protocol::HTTP::Middleware.build do
|
|
25
26
|
if verbose
|
|
26
27
|
use Middleware::Verbose
|
|
27
28
|
end
|
|
28
29
|
|
|
30
|
+
if validate
|
|
31
|
+
use Middleware::Validate
|
|
32
|
+
end
|
|
33
|
+
|
|
29
34
|
if cache
|
|
30
35
|
use Async::HTTP::Cache::General
|
|
31
36
|
end
|
|
32
37
|
|
|
33
38
|
use ::Protocol::HTTP::ContentEncoding
|
|
34
|
-
use ::Protocol::Rack::Adapter
|
|
35
39
|
|
|
40
|
+
use ::Protocol::Rack::Adapter
|
|
36
41
|
run rack_app
|
|
37
42
|
end
|
|
38
43
|
end
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
# Copyright, 2019-2024, by Samuel Williams.
|
|
5
5
|
# Copyright, 2020, by Daniel Evans.
|
|
6
6
|
|
|
7
|
-
require
|
|
8
|
-
require
|
|
7
|
+
require "async/service/generic"
|
|
8
|
+
require "async/http/endpoint"
|
|
9
9
|
|
|
10
|
-
require_relative
|
|
10
|
+
require_relative "../server"
|
|
11
11
|
|
|
12
12
|
module Falcon
|
|
13
13
|
module Service
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2019-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require
|
|
6
|
+
require "process/metrics"
|
|
7
|
+
require "json"
|
|
8
8
|
|
|
9
|
-
require
|
|
9
|
+
require "async/service/generic"
|
|
10
10
|
|
|
11
|
-
require
|
|
12
|
-
require
|
|
11
|
+
require "io/endpoint/bound_endpoint"
|
|
12
|
+
require "io/stream"
|
|
13
13
|
|
|
14
14
|
module Falcon
|
|
15
15
|
module Service
|
|
@@ -50,9 +50,9 @@ module Falcon
|
|
|
50
50
|
# @parameter message [Hash] The decoded message.
|
|
51
51
|
def handle(message)
|
|
52
52
|
case message[:please]
|
|
53
|
-
when
|
|
53
|
+
when "restart"
|
|
54
54
|
self.do_restart(message)
|
|
55
|
-
when
|
|
55
|
+
when "metrics"
|
|
56
56
|
self.do_metrics(message)
|
|
57
57
|
end
|
|
58
58
|
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
4
|
# Copyright, 2020-2024, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
6
|
+
require "async/service/generic"
|
|
7
7
|
|
|
8
8
|
module Falcon
|
|
9
9
|
module Service
|
|
@@ -18,14 +18,14 @@ module Falcon
|
|
|
18
18
|
def assume_privileges(path)
|
|
19
19
|
# Process.exec / Process.spawn don't replace the environment but instead update it, so we need to clear out any existing BUNDLE_ variables using `nil` values, which will cause them to be removed from the child environment:
|
|
20
20
|
env = ENV.to_h do |key, value|
|
|
21
|
-
if key.start_with?(
|
|
21
|
+
if key.start_with?("BUNDLE_")
|
|
22
22
|
[key, nil]
|
|
23
23
|
else
|
|
24
24
|
[key, value]
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
env[
|
|
28
|
+
env["PWD"] = File.dirname(path)
|
|
29
29
|
|
|
30
30
|
stat = File.stat(path)
|
|
31
31
|
|
|
@@ -33,7 +33,7 @@ module Falcon
|
|
|
33
33
|
Process::UID.change_privilege(stat.uid)
|
|
34
34
|
|
|
35
35
|
home = Etc.getpwuid(stat.uid).dir
|
|
36
|
-
env[
|
|
36
|
+
env["HOME"] = home
|
|
37
37
|
|
|
38
38
|
return env
|
|
39
39
|
end
|
data/lib/falcon/version.rb
CHANGED
data/lib/rack/handler/falcon.rb
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright, 2017-
|
|
4
|
+
# Copyright, 2017-2025, by Samuel Williams.
|
|
5
5
|
# Copyright, 2019, by Bryan Powell.
|
|
6
6
|
|
|
7
|
-
require
|
|
7
|
+
require "rack/handler"
|
|
8
8
|
|
|
9
|
-
require_relative
|
|
9
|
+
require_relative "../../falcon/rackup/handler"
|
|
10
|
+
|
|
11
|
+
# Generally speaking, you should not require this file directly, or assume the existance of the `Rack::Handler::Falcon` constant. Instead, use `Rack::Handler.get(:falcon)` to load and access the handler.
|
|
10
12
|
|
|
11
13
|
module Rack
|
|
12
14
|
module Handler
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
# Rack (v2) expects the constant to be in the `Rack::Handler` namespace, so we define a new handler class in the `Rack::Handler` namespace that inherits from `Falcon::Rackup::Handler`.
|
|
16
|
+
class Falcon < ::Falcon::Rackup::Handler
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Rack (v2) expects a string for the handler constant name. `Falcon.to_s` returns a more human friendly name, so we explicitly pass `Falcon.name` to `register` to ensure Rack can find the handler using the registered name.
|
|
20
|
+
register :falcon, Falcon.name
|
|
15
21
|
end
|
|
16
22
|
end
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright, 2023-
|
|
4
|
+
# Copyright, 2023-2025, by Samuel Williams.
|
|
5
5
|
|
|
6
|
-
require
|
|
6
|
+
require "rackup/handler"
|
|
7
7
|
|
|
8
|
-
require_relative
|
|
8
|
+
require_relative "../../falcon/rackup/handler"
|
|
9
|
+
|
|
10
|
+
# Generally speaking, you should not require this file directly, or assume the existance of the `Rackup::Handler::Falcon` constant. Instead, use `Rackup::Handler.get(:falcon)` to load and access the handler.
|
|
9
11
|
|
|
10
12
|
module Rackup
|
|
11
13
|
module Handler
|
|
12
|
-
|
|
14
|
+
# Sinatra (and possibly others) try to extract the name using the final part of the class path, so we define a new class in the `Rack::Handler` namespace that inherits from `Falcon::Rackup::Handler`, that follows that convention.
|
|
15
|
+
class Falcon < ::Falcon::Rackup::Handler
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Rack (v3) expects a class for the handler constant, so we explicitly pass `Falcon` to `register` to ensure Rack can find the handler using the registered name.
|
|
13
19
|
register :falcon, Falcon
|
|
14
20
|
end
|
|
15
21
|
end
|
data/license.md
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
# MIT License
|
|
2
2
|
|
|
3
|
-
Copyright, 2017-
|
|
3
|
+
Copyright, 2017-2025, by Samuel Williams.
|
|
4
4
|
Copyright, 2018, by Kent Gruber.
|
|
5
5
|
Copyright, 2018, by Janko Marohnić.
|
|
6
6
|
Copyright, 2018, by Tad Thorley.
|
|
7
7
|
Copyright, 2018, by Mitsutaka Mimura.
|
|
8
8
|
Copyright, 2018, by Kyle Tam.
|
|
9
9
|
Copyright, 2018, by Claudiu Garba.
|
|
10
|
+
Copyright, 2018, by Martin Hrdlicka.
|
|
10
11
|
Copyright, 2019, by Bryan Powell.
|
|
11
12
|
Copyright, 2019, by Sh Lin.
|
|
12
13
|
Copyright, 2019, by Sho Ito.
|
|
13
14
|
Copyright, 2019, by Colby Swandale.
|
|
15
|
+
Copyright, 2019-2024, by dependabot[bot].
|
|
14
16
|
Copyright, 2020, by Daniel Evans.
|
|
15
17
|
Copyright, 2020, by Mikel Kew.
|
|
16
18
|
Copyright, 2020, by Michael Adams.
|
|
@@ -20,9 +22,9 @@ Copyright, 2023, by Nick Janetakis.
|
|
|
20
22
|
Copyright, 2024, by Peter Schrammel.
|
|
21
23
|
Copyright, 2024, by Santiago Bartesaghi.
|
|
22
24
|
Copyright, 2024, by Trevor Turk.
|
|
23
|
-
Copyright, 2024, by dependabot[bot].
|
|
24
25
|
Copyright, 2024, by Adam Daniels.
|
|
25
26
|
Copyright, 2024, by Stefan Buhrmester.
|
|
27
|
+
Copyright, 2024, by Ismael Celis.
|
|
26
28
|
|
|
27
29
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
28
30
|
of this software and associated documentation files (the "Software"), to deal
|
data/readme.md
CHANGED
|
@@ -45,6 +45,10 @@ Please see the [project documentation](https://socketry.github.io/falcon/) for m
|
|
|
45
45
|
|
|
46
46
|
Please see the [project releases](https://socketry.github.io/falcon/releases/index) for all releases.
|
|
47
47
|
|
|
48
|
+
### v0.48.4
|
|
49
|
+
|
|
50
|
+
- Improve compatibility of rackup handler w.r.t. sinatra.
|
|
51
|
+
|
|
48
52
|
### v0.47.8
|
|
49
53
|
|
|
50
54
|
- Fix Falcon Supervisor implementation: due to invalid code, it was unable to start.
|
data/releases.md
CHANGED
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: falcon
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.48.
|
|
4
|
+
version: 0.48.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Samuel Williams
|
|
8
|
+
- dependabot[bot]
|
|
8
9
|
- Janko Marohnić
|
|
9
10
|
- Bryan Powell
|
|
10
11
|
- Trevor Turk
|
|
@@ -16,7 +17,9 @@ authors:
|
|
|
16
17
|
- Adam Daniels
|
|
17
18
|
- Colby Swandale
|
|
18
19
|
- Daniel Evans
|
|
20
|
+
- Ismael Celis
|
|
19
21
|
- Kent Gruber
|
|
22
|
+
- Martin Hrdlicka
|
|
20
23
|
- Michael Adams
|
|
21
24
|
- Mikel Kew
|
|
22
25
|
- Nick Janetakis
|
|
@@ -26,8 +29,6 @@ authors:
|
|
|
26
29
|
- Stefan Buhrmester
|
|
27
30
|
- Tad Thorley
|
|
28
31
|
- Tasos Latsas
|
|
29
|
-
- dependabot[bot]
|
|
30
|
-
autorequire:
|
|
31
32
|
bindir: bin
|
|
32
33
|
cert_chain:
|
|
33
34
|
- |
|
|
@@ -59,7 +60,7 @@ cert_chain:
|
|
|
59
60
|
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
|
60
61
|
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
|
61
62
|
-----END CERTIFICATE-----
|
|
62
|
-
date:
|
|
63
|
+
date: 2025-01-28 00:00:00.000000000 Z
|
|
63
64
|
dependencies:
|
|
64
65
|
- !ruby/object:Gem::Dependency
|
|
65
66
|
name: async
|
|
@@ -174,33 +175,33 @@ dependencies:
|
|
|
174
175
|
- !ruby/object:Gem::Version
|
|
175
176
|
version: '3.0'
|
|
176
177
|
- !ruby/object:Gem::Dependency
|
|
177
|
-
name:
|
|
178
|
+
name: process-metrics
|
|
178
179
|
requirement: !ruby/object:Gem::Requirement
|
|
179
180
|
requirements:
|
|
180
181
|
- - "~>"
|
|
181
182
|
- !ruby/object:Gem::Version
|
|
182
|
-
version: '0.
|
|
183
|
+
version: '0.2'
|
|
183
184
|
type: :runtime
|
|
184
185
|
prerelease: false
|
|
185
186
|
version_requirements: !ruby/object:Gem::Requirement
|
|
186
187
|
requirements:
|
|
187
188
|
- - "~>"
|
|
188
189
|
- !ruby/object:Gem::Version
|
|
189
|
-
version: '0.
|
|
190
|
+
version: '0.2'
|
|
190
191
|
- !ruby/object:Gem::Dependency
|
|
191
|
-
name:
|
|
192
|
+
name: protocol-http
|
|
192
193
|
requirement: !ruby/object:Gem::Requirement
|
|
193
194
|
requirements:
|
|
194
195
|
- - "~>"
|
|
195
196
|
- !ruby/object:Gem::Version
|
|
196
|
-
version: '0.
|
|
197
|
+
version: '0.31'
|
|
197
198
|
type: :runtime
|
|
198
199
|
prerelease: false
|
|
199
200
|
version_requirements: !ruby/object:Gem::Requirement
|
|
200
201
|
requirements:
|
|
201
202
|
- - "~>"
|
|
202
203
|
- !ruby/object:Gem::Version
|
|
203
|
-
version: '0.
|
|
204
|
+
version: '0.31'
|
|
204
205
|
- !ruby/object:Gem::Dependency
|
|
205
206
|
name: protocol-rack
|
|
206
207
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -229,8 +230,6 @@ dependencies:
|
|
|
229
230
|
- - "~>"
|
|
230
231
|
- !ruby/object:Gem::Version
|
|
231
232
|
version: '2.3'
|
|
232
|
-
description:
|
|
233
|
-
email:
|
|
234
233
|
executables:
|
|
235
234
|
- falcon
|
|
236
235
|
- falcon-host
|
|
@@ -268,6 +267,7 @@ files:
|
|
|
268
267
|
- lib/falcon/environment/virtual.rb
|
|
269
268
|
- lib/falcon/middleware/proxy.rb
|
|
270
269
|
- lib/falcon/middleware/redirect.rb
|
|
270
|
+
- lib/falcon/middleware/validate.rb
|
|
271
271
|
- lib/falcon/middleware/verbose.rb
|
|
272
272
|
- lib/falcon/proxy_endpoint.rb
|
|
273
273
|
- lib/falcon/rackup/handler.rb
|
|
@@ -289,7 +289,6 @@ licenses:
|
|
|
289
289
|
metadata:
|
|
290
290
|
documentation_uri: https://socketry.github.io/falcon/
|
|
291
291
|
source_code_uri: https://github.com/socketry/falcon.git
|
|
292
|
-
post_install_message:
|
|
293
292
|
rdoc_options: []
|
|
294
293
|
require_paths:
|
|
295
294
|
- lib
|
|
@@ -304,8 +303,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
304
303
|
- !ruby/object:Gem::Version
|
|
305
304
|
version: '0'
|
|
306
305
|
requirements: []
|
|
307
|
-
rubygems_version: 3.
|
|
308
|
-
signing_key:
|
|
306
|
+
rubygems_version: 3.6.2
|
|
309
307
|
specification_version: 4
|
|
310
308
|
summary: A fast, asynchronous, rack-compatible web server.
|
|
311
309
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|