Commit Graph

2391 Commits

Author SHA1 Message Date
Sergio Benitez
b12b7f27d7 Remove old 'log' macros. Color via subscriber.
This commit:
  - Removes painting outside trace subscriber in core.
  - Removes all non-subscriber uses of yansi.
  - Removes all uses of old log macros.
  - Fix trace exports.
2024-06-03 14:39:12 -07:00
Sergio Benitez
d767694861 Remove 'Error' panic-on-drop behavior.
Instead, the `#[launch]` attribute traces the error and panics,
replicating the old behavior in the common case.
2024-06-03 14:38:34 -07:00
Sergio Benitez
8a1c91b7d5 Implement 'Trace' trait. Use structured logging.
This commit:
  - Converts most log messages into structured messages.
  - Implements an initial request ID layer.
  - Implements pretty and compact loggers.
2024-06-03 14:33:24 -07:00
Sergio Benitez
ff6da900a0 Migrate to 'tracing' for logging.
This commit:
  - Remove all traces of 'log'.
  - Send all logs unedited via tracing.
  - Parses and propagate log_level.
  - Implements an initial formatting subscriber.

Co-authored-by: Eliza Weisman <eliza@buoyant.io>
Co-authored-by: Jeb Rosen <jeb@jebrosen.com>
2024-06-03 14:32:01 -07:00
Sergio Benitez
5cecc9f0be Detect and handle MessageStream WebSocket closure. 2024-05-31 13:36:32 -05:00
Sergio Benitez
abd7335f77 Free more disk space on Linux CI. 2024-05-31 13:36:32 -05:00
Cormac Relf
120d1e78da Generate deterministic names for 'uri' macros. 2024-05-29 15:21:49 -05:00
Sergio Benitez
2a1afd12f5 Add 0.5.1 CHANGELOG entry. 2024-05-23 15:48:35 -05:00
Sergio Benitez
091c6f58f6 Update 'deadpool' and related databases to 0.13. 2024-05-22 19:48:17 -05:00
Arjen
cde1fb5de0 Improve example TOML in configuration guide. 2024-05-22 16:52:32 -05:00
Sergio Benitez
9e3f9ae00f Update 'minijinja' to 2.0. 2024-05-22 15:03:18 -05:00
Michael Melanson
347d9da663 Improve minijinja and tera template error logs. 2024-05-22 14:46:03 -05:00
Bill
35a100fdec Remove double semicolon in SSE example 2024-05-22 14:38:20 -05:00
Sergio Benitez
3079dbfa85 Use workspace lints. Resolve new nightly warnings. 2024-05-20 13:39:14 -05:00
Sergio Benitez
bb48a4d724 Fix 'since' version in 'deprecated' attribute. 2024-05-07 02:18:27 -07:00
Sergio Benitez
370287c9a6 Fix 'TcpListener' port required regression. 2024-05-03 17:17:56 -07:00
Sergio Benitez
5f9ff3f3af Impl 'FromForm' for char, 'Range' types.
Implements 'FromForm' for:

  * `char`
  * `Range<T: FromForm>`
  * `RangeFrom<T: FromForm>`
  * `RangeTo<T: FromForm>`
  * `RangeToInclusive<T: FromForm>`

Resolves #2759.
2024-05-02 16:18:53 -07:00
Sergio Benitez
fd2094c5f3 Use call site hygiene in FromForm derive.
This commit changes the `FromForm` derive codegen so that it
consistently emits tokens with call site hygiene. This allows `FromForm`
derives to be emitted my macros more reliably.
2024-05-02 16:18:51 -07:00
Sergio Benitez
7b17de6699 Improve 'sync_db_pools' codegen. Update UI tests. 2024-05-02 16:16:00 -07:00
Sergio Benitez
a811a1810d Support sqlx_sqlite extensions in db_pools.
Resolves #2762.
2024-05-02 01:46:13 -07:00
Sergio Benitez
fb39c02212 Fix macOS CI native deps install step. 2024-05-02 01:46:13 -07:00
Sergio Benitez
e6aaea072c Use 'dep' syntax for 'http' features. 2024-04-26 01:42:33 -07:00
Sergio Benitez
84072a813a Add deploying guide.
Resolves #171.
2024-04-25 20:03:44 -07:00
Sergio Benitez
836e64fec3 Rename 'Rocket::configure()' to 'reconfigure()'. 2024-04-25 14:47:43 -07:00
Sergio Benitez
b34085392d Add 'Method' variants for all registered methods.
This commit allow routes to be declared for methods outside of the
standard HTTP method set. Specifically, it enables declaring routes for
any method in the IANA Method Registry:

```rust
#[route(LINK, uri = "/<foo>")]
fn link() { ... }

#[route("VERSION-CONTROL", uri = "/<foo>")]
fn version_control() { ... }
```

The `Method` type has gained variants for each registered method.

Breaking changes:

  - `Method::from_str()` no longer parses mixed-case method names.
  - `Method` is marked as non-exhaustive.
  - `Method::supports_payload()` removed in favor of
    `Method::allows_request_body()`.

Resolves #232.
2024-04-24 19:22:03 -07:00
Sergio Benitez
7c50a58c99 Fix TLS example for updated bind interface. 2024-04-22 17:57:34 -07:00
Sergio Benitez
85ca2bc01c Refactor internal ignite sequencing. 2024-04-22 17:27:01 -07:00
Sergio Benitez
3bfc4ca644 Simplify 'Bind'. Allow try-launching on Futures. 2024-04-22 17:26:51 -07:00
Sergio Benitez
7cc818cd85 Introduce dynamic TLS resolvers.
This commit introduces the ability to dynamically select a TLS
configuration based on the client's TLS hello via the new `Resolver`
trait. In support of this, it also makes the following changes:

  * Added `Authority::set_port()`.
  * `UdsListener` is now `UnixListener`.
  * `Bindable` removed in favor of new `Bind`.
  * All built-in listeners now implement `Bind<&Rocket>`.
  * `Connection` requires `AsyncRead + AsyncWrite`.
  * The `Debug` impl for `Endpoint` displays the underlying address.
  * `Listener` must be `Sized`.
  * The TLS listener was moved to `tls::TlsListener`.
  * The preview `quic` listener no longer implements `Listener`.
  * Added `TlsConfig::server_config()`.
  * Added `race` future helpers.
  * Added `Rocket::launch_with()`, `Rocket::bind_launch()`.
  * Added a default `client.pem` to the TLS example.
  * Various unnecessary listener `Config` structures removed.

In addition, the testbench was revamped to support more scenarios. This
resulted in the following issues being found and fixed:

  * Fix an issue where the logger would ignore color requests.
  * Clarified docs for `mtls::Certificate` guard.
  * Improved error messages on listener misconfiguration.

Resolves #2730.
Resolves #2363.
Closes #2748.
Closes #2683.
Closes #2577.
2024-04-16 23:50:28 -07:00
Sergio Benitez
60f3cd57b0 Add end-to-end testbench.
Resolves #1509.
2024-04-12 03:15:44 -07:00
Sergio Benitez
eec5c08179 Make all nightly CI jobs fallible. 2024-04-11 19:17:06 -07:00
Sergio Benitez
8831d47aad Restrict CI trigger job to 'rwf2/Rocket'. 2024-04-11 18:22:28 -07:00
Rong "Mantle" Bao
ff12b1d4bc Update allowed lints for MSRV of 1.75. 2024-04-11 18:13:37 -07:00
Sergio Benitez
dcde224648 Update dependencies and fix nightly warnings. 2024-04-11 18:09:21 -07:00
Sergio Benitez
17eca5bcc6 Allow CI on nightly to fail. 2024-04-11 18:08:56 -07:00
Wesley Rosenblum
07e4170b72 Use 's2n-quic' TLS server builder. 2024-04-10 14:06:58 -07:00
Łukasz Wojniłowicz
a742d3da4f Symlink license files in all crate directories.
Resolves #2760.
2024-04-06 20:46:07 -07:00
Sergio Benitez
8614a7fece Support minijinja in 'dyn_templates'. 2024-04-03 14:54:01 -07:00
Sergio Benitez
0edbb6dad5 Document changeable TLS 'CryptoProvider's. 2024-03-31 11:46:56 -07:00
Sergio Benitez
edce8bd656 Use default 'CryptoProvider' for all TLS ops.
Prior to this commit, some TLS related operations used 'ring' even when
a different default 'CryptoProvider' was installed. This commit fixes
that by refactoring 'TlsConfig' such that all utility methods are
required to use the default 'CryptoProvider'.

This commit also cleans up code related to the rustls 0.23 update.
2024-03-31 11:46:56 -07:00
Abdullah Alyan
ce92c5dd76 Update rustls to 0.23. Support 'CryptoProvider's.
This commit updates rustls to 0.23 and adds support for custom
'CryptoProvider's installable via 'CryptoProvider::install_default()'.
In particular, this enables using `aws-lc-rs` for cryptography related
operation in TLS. The 'TLS' example was updated to test use of
'aws-lc-rs' on Unix.
2024-03-31 11:46:56 -07:00
Sergio Benitez
bd26ca462a Introduce #[suppress]: suppress Rocket lints.
Adding `#[suppress(lint)]` for a known `lint` suppresses the
corresponding warning generated by Rocket's codegen. The lints are:

  * `unknown_format`
  * `dubious_payload`
  * `segment_chars`
  * `arbitrary_main`
  * `sync_spawn`

For example, the following works as expected to suppress the warning
generated by the unknown media type "application/foo":

```rust
fn post_foo() -> &'static str { "post_foo" }
```

Resolves #1188.
2024-03-21 20:24:53 -07:00
Tau
35a1cf12b6 Fix and always set Content-Length header.
Previously, the header was erroneously set as 'Content-Type' and not
visible to local clients. This commit fixes both of these issues.
2024-03-21 16:42:09 -07:00
Sergio Benitez
8f3061ba40 Rename 'candidate_endpoint()', 'bind_endpoint()'. 2024-03-20 14:29:32 -07:00
高奕GaoYi
19dd627a7c Add 'WebSocket::accept_key()'. 2024-03-20 14:18:39 -07:00
Sergio Benitez
225655817a Update 'x509-parser' to 0.16. 2024-03-20 01:37:31 -07:00
Sergio Benitez
02011a1307 Clean up codebase: fix reasonable clippy warnings.
This commit is a codebase-wide cleanup driven by clippy warnings. In
addition to fixing every reasonable warning, the following new
functionality was introduced:

  * `Accept::new()` now takes any `T: Into<QMediaType>` iterator.
  * `TempFile::is_empty()` was added.
  * `HeaderMap` now implements `IntoIterator`.

This commit makes the following breaking changes:

  * The `IntoCollection` trait is gone. Generics previously bound by the
    trait are now bound by `IntoIterator`. This affects:
    - `Accept::new()`
    - `ContentType::with_params()`
    - `Permission::{allow, allowed}()`
  * `MediaType`, `QMediaType`, and `Allow` implement `IntoIterator`,
    enabling most existing code to continue working without change.
  * The inherent `HeaderMap::into_iter()` method was removed.
  * The `Ok` variant in ErrorKind::Liftoff` is now `Box<Rocket<Orbit>>`.
2024-03-20 00:47:38 -07:00
Sergio Benitez
d9249db6d6 Address new nightly compiler warnings. 2024-03-19 14:08:14 -07:00
Sergio Benitez
1619bbbddc Support QUIC and HTTP/3.
This commit adds support for HTTP/3 and QUIC under a disabled-by-default
feature `http3-preview`. The current implementation depends on modified
versions of h3 and s2n-quic-h3 which will need to be upstreamed and
published before a release is possible.

During the course of development various facets of Rocket's internal
connection handling and recent listener APIs were improved. The complete
list of changes included in this PR is:

  * A `shutdown` module was introduced.
  * `config::Shutdown` was renamed to `ShutdownConfig` and moved to
    `shutdown` while being re-exported from `config`.
  * `ListenerAddr` is now called `Endpoint`. Various methods which
    previously referred to "addresses" now refer to "endpoints".
  * `Rocket::endpoint()` was renamed to `Rocket::endpoints()` and now
    returns an iterator over the endpoints Rocket is listening on.
  * `Endpoint` acquired various query utility methods.
  * The `{set_}remote()` methods now take/produce `Endpoint`s.
  * `TlsBindable` only accepts single-phase internal interfaces.
  * Bind error messages include candidate endpoint info when possible.
  * The warning message when a secret key is not configured now includes
    information about its effect on private cookies.

Internal changes include:

  * Config module tests were moved to `config/tests.rs`.
  * The cancellable I/O implementation was significantly simplified.
  * The `TripWire` implementation was simplified.
  * Individual shutdown stages can now be awaited on via `Stages`.
  * The `Shield` implementation was simplified.

Resolves #2723.
2024-03-18 20:23:22 -07:00
Sergio Benitez
50c44e8fdc Allow displaying [T; N], Vec<T>, [u8] via 'uri!'.
Resolves #2750.
2024-03-14 15:26:03 -07:00