tls: basic tls implementation with tokio-rustls (tokio-only!)#441
tls: basic tls implementation with tokio-rustls (tokio-only!)#441kanarus merged 9 commits intoohkami-rs:v0.24from
Conversation
| wg.await; | ||
| } | ||
|
|
||
| #[cfg(all(feature="__rt_native__", feature="rt_tokio"))] |
| #[cfg(feature = "rt_tokio")] | ||
| use tokio::io::{AsyncRead, AsyncWrite}; | ||
| #[cfg(any(feature = "rt_async-std", feature = "rt_smol"))] | ||
| use futures_util::io::{AsyncRead, AsyncWrite}; | ||
| #[cfg(feature = "rt_glommio")] | ||
| use glommio::io::{AsyncRead, AsyncWrite}; |
There was a problem hiding this comment.
use crate::__rt__::{AsyncWrite, AsyncRead}; does this cleanly
| pub(crate) struct Session<S> { | ||
| router: Arc<Router>, | ||
| connection: S, // Changed connection to generic type for TcpStream and TlsStream | ||
| ip: std::net::IpAddr, |
| #![cfg(feature="__rt_native__")] | ||
|
|
||
| use std::{any::Any, pin::Pin, sync::Arc, time::Duration}; | ||
| use std::panic::{AssertUnwindSafe, catch_unwind}; | ||
| use crate::__rt__::TcpStream; | ||
| #[cfg(feature = "__rt_native__")] | ||
| use crate::router::r#final::Router; |
There was a problem hiding this comment.
This #[cfg(feature = "__rt_native__")] is only applied to use crate::router::r#final::Router meaninglessly.
Please declare #![cfg(...)] inner attribute, not related to specific use, at the top of this file
There was a problem hiding this comment.
right, my bad lol
There was a problem hiding this comment.
Currently Upgrade::WebSocket holds WebSocket<TcpStream> ( TcpStream is the default type param of mews::WebSocket ), so ws.manage_with_timeout() can't accept generic S.
Could you work around this to upgrade only when Session<TcpStream> for now ?
|
ohkami/src/header/etag.rs#L86-L88 /// assert_eq!(etags.next(), Some(ETag::Strong("abc123".into())));
/// assert_eq!(etags.next(), Some(ETag::Weak("def456".into())));
/// assert_eq!(etags.next(), Some(ETag::Strong("ghi789".into())));
seems to be deleted accidentally when merging v0.24 branch into tls-test 👀 |
kanarus
left a comment
There was a problem hiding this comment.
Thank you for great first step for TLS support !
|
Noice, can't wait for the HTTP/2 implementation! :D |
* v0.24, edition 2024 * docs(README): mention local fangs more clearly (#403) * docs(README): add `Typed error` section in `Snippets` (#404) * docs(README): add `Typed error` section in `Snippets` * fix sample code * docs: add `DI by generics` section to README `Snippets` and similar one to `Ohkami` struct doc (#405) * docs: add `DI by generics` section to README `Snippets` and similar one to `Ohkami` struct doc * fix sample code * rename(openapi): `Parameter::maybe_in_*` -> `Parameter::in_*_optional` (#413) * fix(openapi): correct `APIKey::{query, cookie}`'s `apikey_in:"header"` (#414) * enhance(worker): Support global bindings arg of `#[worker]` (#416) * introduce `x_worker::FromEnv` * add `samples/worker-with-global-bindings` for test * sucessfully generate `openapi.json` && add test for `samples/worker-with-global-bindings` * chore: fix account name in CODEOWNERS (#418) * enhance(openapi): provide default implementation of `openapi_responses` returning empty `Responses` (#419) * enhance(openapi): allow `#[operation]` to newly set status description (#420) * enhance(typed): success status with headers (#422) * enhance(typed): add `with_headers` to success status types * update doc * improve doc * add tests * fix to avoid empty `CONTENT_TYPE` * fix to check `B::CONTENT_TYPE.is_empty()` before evaluating `into_body()` * not run this tests on rt_worker * enhance(util): improve internal log macros (#424) * enhance(util): improve internal log macros * print file, line, column in `DEBUG!` * enhance(worker): Support wrangler.jsonc (#425) * enhance(worker): Support wrangler.jsonc * pass regression tests (toml / by samples/test.sh) * add `samples/worker-bindings-jsonc` & pass test ( compiles / by samples/test.sh ) * fix test * refactor(worker): use `Option<&'static str>` instead of unclear string convention (#426) * docs(worker): mention about first-class support for rt_worker (#427) * docs(worker): say `wrangler.jsonc` instead of `wrangler.toml` in template description (#428) * enhance(fangs): set `SendSyncOnNative + 'static` as super trait of `Fang` `Fangs` (#429) * enhance(ohkami): Support howl with an existing `TcpListener` (#430) * enhance(ohkami): Support howl with an existing `TcpListener` * fix sample code in doc comment * fix typo * enhance(ohkami): Support single-thread async runtime on multiple threads (#432) * add regression baseline `examples/multiple=single-threads` (currently only main thread) * update regression baseline with socket.resueaddr and thread::spawn by num_cpus - 1 (currently panics by multiple CtrlC handlers) * refactor and extend `sync::CtrlC` impl * perf: use `RwLock<Vec<AtomicPtr<_` instead of `Mutex<Vec<_` * fix(request): hardcoded buffer size (#434) * fix `__rt__::testing::block_on` and related & add `request/_test_parse/test_parse_request_large` (currently fails with `BadRequest` as expected) * introduce `OHKAMI_REQUEST_BUFSIZE` environment variable instead of hardcoded `const BUFSIZE` * add warning when failed to parse request headers * increase default request_bufsize to 1 << 11 * comment out DEBUG * fix test * update WARNING message * create `examples/jwt` and move large-buf test into it * fix test * fix test * refactor(routing): `.Dir()` (#436) * refactor(routing): `.Dir()` * comment out DEBUG * fix cfg * chore: test `.Dir()` (#437) * add `TestResponse::content()` & update `examples/static_files` test * fix `RouteSegment::new`'s validation & add `test_omit_html` `test_serve_dotfiles` * comment out DEBUG * fix: check `Content-Length` in `testing` and correctly set `Content-Length` in `StaticFileHandler` of `Dir` (#438) * enhance(testing): expect `TestResponse::json`'s `serde_json::Result` to be `Ok` (#439) * enhance(Dir): support conditional fetch (#442) * enhance(Dir): support conditional fetch with `If-None-Match` `If-Modified-Since` * next: test conditional fetch impl * add `Debug` `PartialEq` for `ETag` * tls: basic tls implementation with tokio-rustls (tokio-only!) (#441) * enhance(Dir): support conditional fetch with `If-None-Match` `If-Modified-Since` * next: test conditional fetch impl * tls: implement basic tls implementation with tokio-rustls (tokio-only!) * fix(session): fix AsyncRead & AsyncWrite imports for session * fix(session): fix unsupported WS over TLS & cfg handling * fix(session): fix trait bounds when ws feature is disabled * fix(session): omit Send trait to unbreak builds on other runtimes (hopefully) * fix(etag): merge issues fix --------- Co-authored-by: kanarus <kanarus786@gmail.com> * [refactor, chore](tls): tidy cfg, fix doc, test tls feature (#443) * refactor(tls): tidy cfg, fix doc, test tls feature * fix test * docs(tls): update README (#444) * refactor(session): use per-read timeouts for improved keepalive handling (#445) * enhance(Dir): Support precompressed files (#447) * introduce `header::{qvalue, encoding}` * 2025-04-01 20:21+9:00 * 2025-04-04 01:59+9:00 * skelton * remove DEBUG * first, pass existing tests * todo: test compression handling * sort `compressed` by file size * next: test compression handling * fix AcceptEncoding * fix Debug and typo * pass basic tests * introduce brotli in addition to gzip, and pass tests * add test cases for 406 Not Acceptable, and pass * modify comment * modify test name * update doc * skip empty path in `Dir::new` * fix handling of file extension and canonicalization * add test cases for precompressed files in subdirectory, and pass * modify DEBUG print * remove `async-std` support (#448) * rename(Ohkami): `howl_tls` to `howls` (#449) * rename(Ohkami): `howl_tls` to `howls` * fix doc sample code * chore: remove `async-std`-related docs and cfgs (#450) * fix(headers): Corretly handle *overset after deletion* (#455) * fix(headers): correctly handle overset after deletion * rm rustc-ice* * update ./examples/test.sh * cherry-pick #460 into v0.24 (#461) * cherry-pick #460 * resolve errors * handle Keep-Alive timeout log as `DEBUG`, not `WARNING` (#463) * handle session timeout log as `DEBUG`, not `WARNING` * WebSocket timeout as WARNING, Keep-Alive timeout as DEBUG * dx: introduce `INFO!` macro and log around CtrlC as INFO (#464) * dx: introduce `INFO!` macro and log around CtrlC as INFO * fix howl_tls and cfg * dx: make `WARNING!` print `[ohkami:WARNING]`, not `[ohkami:WARNS]` (#465) * fix(session): revise default timeout config (#466) * chore(worker): bump `worker` dependency to v0.6 (#475) * chore(CI): cache sccache directory after the most large task in order to maximize cache hit (#476) * chore: resolve warnings (#477) * chore: resolve warnings * remove unused mut * enhance(request): return `Response::RequestHeaderFieldsTooLarge` when met unexpected situation in request header parsing (#478) * docs: specify runtime versions (#484) * rename(fang, format): follow Rust's naming convention (#485) * rename(fang, format): follow Rust's naming convention * rename `EnamelFields`'s fields * fix code format * fix very critial typo, thanks to good tests! * chore(examples): run `cargo check` for all examples before tests for some examples (#486) * rename(headers): follow Rust's naming convention (#487) * rename(openapi): follow Rust's naming convention (#488) * rename(openapi): follow Rust's naming convention * fix `requestBody` -> `requestbody` * fix serde rename * fix typo: external_cocs -> external_docs * fix `openapi::secirity` method names * fix oauth flow namings & fangs' security uses * chore: bump `lambda_runtime` dependency to v0.14 (#489) * chore: bump `num_cpus` dependency to v1.17 (#490) * feat: introduce `Path<T>` and obsolete current implicit path params (#493) * impled skelton; TODO: update all tests, examples, samples and docs * update docs * update examples * fix openapi::Schema generic impls * update samples * update tests * chore(CI): temporarily omit `nio` (#495) * chore(CI): temporarily omit `nio` * fix around `benches_rt` * fix Taskfile's `status` for benches (skip control) * rename: unify `typed` and `format` modules into `handle` API (#496) * rename: unify `typed` and `format` module * update `Query` doc; TODO: update examples, samples, doc sample codes * rename the unified module to `component` * 2025-08-07 09:16+9:00 * update doc * update examples, samples, benches_rt * update tests * enhance(handle): impl `FromParam` for `Uuid` by default (#497) * enhance(handle): impl `FromParam` for `Uuid` by default * add `impl ohkami_openapi::Schema for uuid::Uuid` * docs: be sure to setup `Context` in DI sample's entry point (#498) * docs: be sure to setup `Context` in DI sample's entry point * fix to pass test * chore: resolve warnings (#499) * docs: mention `openapi::Tag` in README (#500) * enhance(worker): remove `wrangler whoami` call from `worker_openapi.js` (#501) * enhance(worker): remove `wrangler whoami` call from `worker_openapi.js` and add doc & test of `#[worker]` attribute's documentation args * improve `#[worker]` doc & add test for only-`servers` arg * docs: improve `#[worker]` docs and README's `rt_worker` description (#502) * docs: improve README's `rt_worker` description * improve README * mention global bindings pattern in `#[worker]` doc * docs: improve docs around `FromRequest` (#503) * rename: `handle` to `claw` (#505) * rename: `handle` to `claw` * fix wrong rename * fix examples * fix README * refactor around the `n_params` assertion system (#506) * refactor around the `n_params` assertion system * fix test * dx: put `#[diagnostic::do_not_recommend]` for local fangs' `IntoHandler` impls (#507) * dx: put `#[diagnostic::do_not_recommend]` for local fangs' `IntoHandler` impls * restore debug * docs: improve README (#508) * docs: improve README (#509) * refactor: unify where to impl `IntoHandler` (#510) * dx: `INFO!` log `howl(s)`ed address (#511) * dx: `INFO!` log `holwl(s)`ed local address * update examples * enhance(Route): deprecate `.Dir()` and introduce `.Mount()` (#512) * enhance(Route): deprecate `.Dir()` and introduce `.Mount()` * add `: Sized` constraint to `Route` * complete cfg * feat(worker): Support Hyperdrive in `#[bindings]` (#513) * feat(worker): Support Hyperdrive in `#[bindings]` * remove debug * docs(openapi): documentation for `Schema` trait (#514) * docs: follow templates repo's rename (#515) * docs: improve README (#516) * docs: improve README * fix a phrase * enhance(ws): Support `wss://` (#519) * enhance(ws): Support `wss://` * improve TLS accept handling and update examples/websocket * fix AsyncRead impl * update `mews` to v0.4.0 and tidy `session::connection` * chore(CI): add temporal workaround for bug of nightly-2025-08-12 (#522) * chore(CI): add temporal workaround for bug of nightly-2025-08-12 * do `rustup target add wasm32-unknown-unknown` also for workaround-one * feat(tls): Support `tls` feature on all native runtimes (#523) * impl skelton * update tests * how to setup test-*.pem for test * update test * pass tests & update docs * chore * fix typo * refactor around rt, io, format, logging (#525) * docs: `#[cfg_attr(docsrs, doc(cfg(feature = "...")))]` (#527) * rename(util): `timeout_in` into `with_timeout` (#528) * refactor(request): rename `Request::{init => uninit}` & fix `Pin::{new_unchecked => new}` (#529) * chore(CI): restore `rt_nio` checks/tests (#530) * chore(dep): bump `toml` from 0.8 to 0.9 (#531) * chore(dep): bump `toml` from 0.8 to 0.9 * fix `toml` features * fix(Mount): `omit_extension`'s doc and behavior to accept both `\.?ext` (#532) * fix(Mount): `omit_extension`'s doc and behavior to accept both `\.?ext` * fix deref * fix slice * refactor(Ohkami): reorganize `howl` and `howls` (#534) * tls: unify `howls` to `howl` * fix inline and doc * refactor around `howl` and `howls` * fix doc * remove unnecessary `impl Into` & improve doc * feat(fang): Add builtin CSRF protaction fang (#535) * impl skelton * add doc and init-validation * add first test * complete tests & pass * fix doc sample code * dx: add `#[derive]`s for some types (#536) * docs: A performant, declarative, and runtime-flexible web framework for Rust (#537) * remove zombie example * chore: resolve warnings * chore: fix typo * pref: `Connection` inlining * perf: add some #[inline]s * fix(request): avoid panic in str conversion (#543) * fix(request): avoid panic in str conversion * fix `Path`'s `Deref` users * refactor(header): improve `IndexMap` implementation (into `ByteArrayMap`) and fix benches (#544) * refactor `header::{IndexMap => ByteArrayMap}` * introduce `ByteArrayMap::insert_new` and use it in `ResponseHeaders::insert` * update bench * update bench * update response_headers bench * fix phrases and update some * refactor(fangs): update `Csrf` doc and `with_trusted_origins` validation (#545) * refactor(fangs): update `Csrf` docs and registration-validation * refactor more * improve panic messages * refactor(fangs): improve `FangAction` doc and tidy code format (#546) * update(testing): automatically set `Host` and `Date` header if not set (#547) * update(testing): automatically set `Host` and `Date` header if not set * avoid unnecessary unsafe * rename(testing): `Testing` to `Tester`, `TestingOhkami` to `TestOhkami` (#548) --------- Co-authored-by: agam <145994211+voldtman@users.noreply.github.com>
* v0.24, edition 2024 * docs(README): mention local fangs more clearly (ohkami-rs#403) * docs(README): add `Typed error` section in `Snippets` (ohkami-rs#404) * docs(README): add `Typed error` section in `Snippets` * fix sample code * docs: add `DI by generics` section to README `Snippets` and similar one to `Ohkami` struct doc (ohkami-rs#405) * docs: add `DI by generics` section to README `Snippets` and similar one to `Ohkami` struct doc * fix sample code * rename(openapi): `Parameter::maybe_in_*` -> `Parameter::in_*_optional` (ohkami-rs#413) * fix(openapi): correct `APIKey::{query, cookie}`'s `apikey_in:"header"` (ohkami-rs#414) * enhance(worker): Support global bindings arg of `#[worker]` (ohkami-rs#416) * introduce `x_worker::FromEnv` * add `samples/worker-with-global-bindings` for test * sucessfully generate `openapi.json` && add test for `samples/worker-with-global-bindings` * chore: fix account name in CODEOWNERS (ohkami-rs#418) * enhance(openapi): provide default implementation of `openapi_responses` returning empty `Responses` (ohkami-rs#419) * enhance(openapi): allow `#[operation]` to newly set status description (ohkami-rs#420) * enhance(typed): success status with headers (ohkami-rs#422) * enhance(typed): add `with_headers` to success status types * update doc * improve doc * add tests * fix to avoid empty `CONTENT_TYPE` * fix to check `B::CONTENT_TYPE.is_empty()` before evaluating `into_body()` * not run this tests on rt_worker * enhance(util): improve internal log macros (ohkami-rs#424) * enhance(util): improve internal log macros * print file, line, column in `DEBUG!` * enhance(worker): Support wrangler.jsonc (ohkami-rs#425) * enhance(worker): Support wrangler.jsonc * pass regression tests (toml / by samples/test.sh) * add `samples/worker-bindings-jsonc` & pass test ( compiles / by samples/test.sh ) * fix test * refactor(worker): use `Option<&'static str>` instead of unclear string convention (ohkami-rs#426) * docs(worker): mention about first-class support for rt_worker (ohkami-rs#427) * docs(worker): say `wrangler.jsonc` instead of `wrangler.toml` in template description (ohkami-rs#428) * enhance(fangs): set `SendSyncOnNative + 'static` as super trait of `Fang` `Fangs` (ohkami-rs#429) * enhance(ohkami): Support howl with an existing `TcpListener` (ohkami-rs#430) * enhance(ohkami): Support howl with an existing `TcpListener` * fix sample code in doc comment * fix typo * enhance(ohkami): Support single-thread async runtime on multiple threads (ohkami-rs#432) * add regression baseline `examples/multiple=single-threads` (currently only main thread) * update regression baseline with socket.resueaddr and thread::spawn by num_cpus - 1 (currently panics by multiple CtrlC handlers) * refactor and extend `sync::CtrlC` impl * perf: use `RwLock<Vec<AtomicPtr<_` instead of `Mutex<Vec<_` * fix(request): hardcoded buffer size (ohkami-rs#434) * fix `__rt__::testing::block_on` and related & add `request/_test_parse/test_parse_request_large` (currently fails with `BadRequest` as expected) * introduce `OHKAMI_REQUEST_BUFSIZE` environment variable instead of hardcoded `const BUFSIZE` * add warning when failed to parse request headers * increase default request_bufsize to 1 << 11 * comment out DEBUG * fix test * update WARNING message * create `examples/jwt` and move large-buf test into it * fix test * fix test * refactor(routing): `.Dir()` (ohkami-rs#436) * refactor(routing): `.Dir()` * comment out DEBUG * fix cfg * chore: test `.Dir()` (ohkami-rs#437) * add `TestResponse::content()` & update `examples/static_files` test * fix `RouteSegment::new`'s validation & add `test_omit_html` `test_serve_dotfiles` * comment out DEBUG * fix: check `Content-Length` in `testing` and correctly set `Content-Length` in `StaticFileHandler` of `Dir` (ohkami-rs#438) * enhance(testing): expect `TestResponse::json`'s `serde_json::Result` to be `Ok` (ohkami-rs#439) * enhance(Dir): support conditional fetch (ohkami-rs#442) * enhance(Dir): support conditional fetch with `If-None-Match` `If-Modified-Since` * next: test conditional fetch impl * add `Debug` `PartialEq` for `ETag` * tls: basic tls implementation with tokio-rustls (tokio-only!) (ohkami-rs#441) * enhance(Dir): support conditional fetch with `If-None-Match` `If-Modified-Since` * next: test conditional fetch impl * tls: implement basic tls implementation with tokio-rustls (tokio-only!) * fix(session): fix AsyncRead & AsyncWrite imports for session * fix(session): fix unsupported WS over TLS & cfg handling * fix(session): fix trait bounds when ws feature is disabled * fix(session): omit Send trait to unbreak builds on other runtimes (hopefully) * fix(etag): merge issues fix --------- Co-authored-by: kanarus <kanarus786@gmail.com> * [refactor, chore](tls): tidy cfg, fix doc, test tls feature (ohkami-rs#443) * refactor(tls): tidy cfg, fix doc, test tls feature * fix test * docs(tls): update README (ohkami-rs#444) * refactor(session): use per-read timeouts for improved keepalive handling (ohkami-rs#445) * enhance(Dir): Support precompressed files (ohkami-rs#447) * introduce `header::{qvalue, encoding}` * 2025-04-01 20:21+9:00 * 2025-04-04 01:59+9:00 * skelton * remove DEBUG * first, pass existing tests * todo: test compression handling * sort `compressed` by file size * next: test compression handling * fix AcceptEncoding * fix Debug and typo * pass basic tests * introduce brotli in addition to gzip, and pass tests * add test cases for 406 Not Acceptable, and pass * modify comment * modify test name * update doc * skip empty path in `Dir::new` * fix handling of file extension and canonicalization * add test cases for precompressed files in subdirectory, and pass * modify DEBUG print * remove `async-std` support (ohkami-rs#448) * rename(Ohkami): `howl_tls` to `howls` (ohkami-rs#449) * rename(Ohkami): `howl_tls` to `howls` * fix doc sample code * chore: remove `async-std`-related docs and cfgs (ohkami-rs#450) * fix(headers): Corretly handle *overset after deletion* (ohkami-rs#455) * fix(headers): correctly handle overset after deletion * rm rustc-ice* * update ./examples/test.sh * cherry-pick ohkami-rs#460 into v0.24 (ohkami-rs#461) * cherry-pick ohkami-rs#460 * resolve errors * handle Keep-Alive timeout log as `DEBUG`, not `WARNING` (ohkami-rs#463) * handle session timeout log as `DEBUG`, not `WARNING` * WebSocket timeout as WARNING, Keep-Alive timeout as DEBUG * dx: introduce `INFO!` macro and log around CtrlC as INFO (ohkami-rs#464) * dx: introduce `INFO!` macro and log around CtrlC as INFO * fix howl_tls and cfg * dx: make `WARNING!` print `[ohkami:WARNING]`, not `[ohkami:WARNS]` (ohkami-rs#465) * fix(session): revise default timeout config (ohkami-rs#466) * chore(worker): bump `worker` dependency to v0.6 (ohkami-rs#475) * chore(CI): cache sccache directory after the most large task in order to maximize cache hit (ohkami-rs#476) * chore: resolve warnings (ohkami-rs#477) * chore: resolve warnings * remove unused mut * enhance(request): return `Response::RequestHeaderFieldsTooLarge` when met unexpected situation in request header parsing (ohkami-rs#478) * docs: specify runtime versions (ohkami-rs#484) * rename(fang, format): follow Rust's naming convention (ohkami-rs#485) * rename(fang, format): follow Rust's naming convention * rename `EnamelFields`'s fields * fix code format * fix very critial typo, thanks to good tests! * chore(examples): run `cargo check` for all examples before tests for some examples (ohkami-rs#486) * rename(headers): follow Rust's naming convention (ohkami-rs#487) * rename(openapi): follow Rust's naming convention (ohkami-rs#488) * rename(openapi): follow Rust's naming convention * fix `requestBody` -> `requestbody` * fix serde rename * fix typo: external_cocs -> external_docs * fix `openapi::secirity` method names * fix oauth flow namings & fangs' security uses * chore: bump `lambda_runtime` dependency to v0.14 (ohkami-rs#489) * chore: bump `num_cpus` dependency to v1.17 (ohkami-rs#490) * feat: introduce `Path<T>` and obsolete current implicit path params (ohkami-rs#493) * impled skelton; TODO: update all tests, examples, samples and docs * update docs * update examples * fix openapi::Schema generic impls * update samples * update tests * chore(CI): temporarily omit `nio` (ohkami-rs#495) * chore(CI): temporarily omit `nio` * fix around `benches_rt` * fix Taskfile's `status` for benches (skip control) * rename: unify `typed` and `format` modules into `handle` API (ohkami-rs#496) * rename: unify `typed` and `format` module * update `Query` doc; TODO: update examples, samples, doc sample codes * rename the unified module to `component` * 2025-08-07 09:16+9:00 * update doc * update examples, samples, benches_rt * update tests * enhance(handle): impl `FromParam` for `Uuid` by default (ohkami-rs#497) * enhance(handle): impl `FromParam` for `Uuid` by default * add `impl ohkami_openapi::Schema for uuid::Uuid` * docs: be sure to setup `Context` in DI sample's entry point (ohkami-rs#498) * docs: be sure to setup `Context` in DI sample's entry point * fix to pass test * chore: resolve warnings (ohkami-rs#499) * docs: mention `openapi::Tag` in README (ohkami-rs#500) * enhance(worker): remove `wrangler whoami` call from `worker_openapi.js` (ohkami-rs#501) * enhance(worker): remove `wrangler whoami` call from `worker_openapi.js` and add doc & test of `#[worker]` attribute's documentation args * improve `#[worker]` doc & add test for only-`servers` arg * docs: improve `#[worker]` docs and README's `rt_worker` description (ohkami-rs#502) * docs: improve README's `rt_worker` description * improve README * mention global bindings pattern in `#[worker]` doc * docs: improve docs around `FromRequest` (ohkami-rs#503) * rename: `handle` to `claw` (ohkami-rs#505) * rename: `handle` to `claw` * fix wrong rename * fix examples * fix README * refactor around the `n_params` assertion system (ohkami-rs#506) * refactor around the `n_params` assertion system * fix test * dx: put `#[diagnostic::do_not_recommend]` for local fangs' `IntoHandler` impls (ohkami-rs#507) * dx: put `#[diagnostic::do_not_recommend]` for local fangs' `IntoHandler` impls * restore debug * docs: improve README (ohkami-rs#508) * docs: improve README (ohkami-rs#509) * refactor: unify where to impl `IntoHandler` (ohkami-rs#510) * dx: `INFO!` log `howl(s)`ed address (ohkami-rs#511) * dx: `INFO!` log `holwl(s)`ed local address * update examples * enhance(Route): deprecate `.Dir()` and introduce `.Mount()` (ohkami-rs#512) * enhance(Route): deprecate `.Dir()` and introduce `.Mount()` * add `: Sized` constraint to `Route` * complete cfg * feat(worker): Support Hyperdrive in `#[bindings]` (ohkami-rs#513) * feat(worker): Support Hyperdrive in `#[bindings]` * remove debug * docs(openapi): documentation for `Schema` trait (ohkami-rs#514) * docs: follow templates repo's rename (ohkami-rs#515) * docs: improve README (ohkami-rs#516) * docs: improve README * fix a phrase * enhance(ws): Support `wss://` (ohkami-rs#519) * enhance(ws): Support `wss://` * improve TLS accept handling and update examples/websocket * fix AsyncRead impl * update `mews` to v0.4.0 and tidy `session::connection` * chore(CI): add temporal workaround for bug of nightly-2025-08-12 (ohkami-rs#522) * chore(CI): add temporal workaround for bug of nightly-2025-08-12 * do `rustup target add wasm32-unknown-unknown` also for workaround-one * feat(tls): Support `tls` feature on all native runtimes (ohkami-rs#523) * impl skelton * update tests * how to setup test-*.pem for test * update test * pass tests & update docs * chore * fix typo * refactor around rt, io, format, logging (ohkami-rs#525) * docs: `#[cfg_attr(docsrs, doc(cfg(feature = "...")))]` (ohkami-rs#527) * rename(util): `timeout_in` into `with_timeout` (ohkami-rs#528) * refactor(request): rename `Request::{init => uninit}` & fix `Pin::{new_unchecked => new}` (ohkami-rs#529) * chore(CI): restore `rt_nio` checks/tests (ohkami-rs#530) * chore(dep): bump `toml` from 0.8 to 0.9 (ohkami-rs#531) * chore(dep): bump `toml` from 0.8 to 0.9 * fix `toml` features * fix(Mount): `omit_extension`'s doc and behavior to accept both `\.?ext` (ohkami-rs#532) * fix(Mount): `omit_extension`'s doc and behavior to accept both `\.?ext` * fix deref * fix slice * refactor(Ohkami): reorganize `howl` and `howls` (ohkami-rs#534) * tls: unify `howls` to `howl` * fix inline and doc * refactor around `howl` and `howls` * fix doc * remove unnecessary `impl Into` & improve doc * feat(fang): Add builtin CSRF protaction fang (ohkami-rs#535) * impl skelton * add doc and init-validation * add first test * complete tests & pass * fix doc sample code * dx: add `#[derive]`s for some types (ohkami-rs#536) * docs: A performant, declarative, and runtime-flexible web framework for Rust (ohkami-rs#537) * remove zombie example * chore: resolve warnings * chore: fix typo * pref: `Connection` inlining * perf: add some #[inline]s * fix(request): avoid panic in str conversion (ohkami-rs#543) * fix(request): avoid panic in str conversion * fix `Path`'s `Deref` users * refactor(header): improve `IndexMap` implementation (into `ByteArrayMap`) and fix benches (ohkami-rs#544) * refactor `header::{IndexMap => ByteArrayMap}` * introduce `ByteArrayMap::insert_new` and use it in `ResponseHeaders::insert` * update bench * update bench * update response_headers bench * fix phrases and update some * refactor(fangs): update `Csrf` doc and `with_trusted_origins` validation (ohkami-rs#545) * refactor(fangs): update `Csrf` docs and registration-validation * refactor more * improve panic messages * refactor(fangs): improve `FangAction` doc and tidy code format (ohkami-rs#546) * update(testing): automatically set `Host` and `Date` header if not set (ohkami-rs#547) * update(testing): automatically set `Host` and `Date` header if not set * avoid unnecessary unsafe * rename(testing): `Testing` to `Tester`, `TestingOhkami` to `TestOhkami` (ohkami-rs#548) --------- Co-authored-by: agam <145994211+voldtman@users.noreply.github.com>
Might need some tidying up since this implementation is Tokio-only.