mirror of
https://github.com/Blah-IM/blahrs.git
synced 2025-04-30 16:21:10 +00:00
build(deps): update to axum 0.8, rusqlite 0.33, tokio-tungstenite 0.26, thiserror 2
This commit is contained in:
parent
b56f8897ff
commit
740e540b4b
9 changed files with 294 additions and 323 deletions
552
Cargo.lock
generated
552
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -23,11 +23,11 @@ rand = "0.8"
|
|||
serde = { version = "1", features = ["derive"] }
|
||||
serde_jcs = "0.1"
|
||||
serde_json = "1"
|
||||
thiserror = "1"
|
||||
thiserror = "2"
|
||||
url = { version = "2", features = ["serde"] }
|
||||
|
||||
[dependencies.rusqlite]
|
||||
version = "0.32"
|
||||
version = "0.33"
|
||||
optional = true
|
||||
|
||||
[dependencies.schemars]
|
||||
|
|
|
@ -10,7 +10,7 @@ ed25519-dalek = { version = "2", features = ["pkcs8", "pem", "rand_core"] }
|
|||
humantime = "2"
|
||||
rand = "0.8"
|
||||
reqwest = { version = "0.12", features = ["json"] }
|
||||
rusqlite = { version = "0.32", features = ["rusqlite-macros"] }
|
||||
rusqlite = { version = "0.33", features = ["rusqlite-macros"] }
|
||||
serde_jcs = "0.1.0"
|
||||
serde_json = "1"
|
||||
tokio = { version = "1", features = ["rt", "macros"] }
|
||||
|
|
|
@ -10,8 +10,8 @@ unsafe_use_mock_instant_for_testing = ["dep:mock_instant", "blah-types/unsafe_us
|
|||
|
||||
[dependencies]
|
||||
anyhow = "1"
|
||||
axum = { version = "0.7", features = ["ws"] }
|
||||
axum-extra = "0.9"
|
||||
axum = { version = "0.8", features = ["ws"] }
|
||||
axum-extra = "0.10"
|
||||
clap = { version = "4", features = ["derive"] }
|
||||
data-encoding = "2"
|
||||
ed25519-dalek = "2"
|
||||
|
@ -23,7 +23,7 @@ parking_lot = "0.12" # Maybe no better performance, just that we hate poisoning.
|
|||
paste = "1.0.15"
|
||||
rand = "0.8"
|
||||
reqwest = "0.12"
|
||||
rusqlite = { version = "0.32", features = ["rusqlite-macros"] }
|
||||
rusqlite = { version = "0.33", features = ["rusqlite-macros"] }
|
||||
rustix = { version = "0.38", features = ["net"] }
|
||||
sd-notify = "0.4"
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
|
@ -54,10 +54,10 @@ url = "2"
|
|||
expect-test = "1"
|
||||
nix = { version = "0.29", features = ["fs", "process", "signal"] }
|
||||
reqwest = { version = "0.12", features = ["json"] }
|
||||
rstest = { version = "0.23", default-features = false }
|
||||
rstest = { version = "0.24", default-features = false }
|
||||
scopeguard = "1"
|
||||
tempfile = "3"
|
||||
tokio-tungstenite = "0.24"
|
||||
tokio-tungstenite = "0.26"
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
|
|
@ -96,7 +96,7 @@ impl WsSenderWrapper<'_, '_> {
|
|||
let data = serde_json::to_string(&msg).expect("serialization cannot fail");
|
||||
let fut = tokio::time::timeout(
|
||||
self.config.send_timeout_sec,
|
||||
self.inner.send(Message::Text(data)),
|
||||
self.inner.send(Message::Text(data.into())),
|
||||
);
|
||||
match fut.await {
|
||||
Ok(Ok(())) => Ok(()),
|
||||
|
|
|
@ -7,7 +7,7 @@ use anyhow::Result;
|
|||
use axum::body::Bytes;
|
||||
use axum::extract::{Path, Query, State};
|
||||
use axum::http::{header, HeaderName, HeaderValue, StatusCode};
|
||||
use axum::response::{IntoResponse, Response};
|
||||
use axum::response::{IntoResponse, NoContent, Response};
|
||||
use axum::routing::MethodRouter;
|
||||
use axum::{Json, Router};
|
||||
use axum_extra::extract::WithRejection as R;
|
||||
|
@ -24,7 +24,7 @@ use blah_types::{get_timestamp, Id, PubKey, Signed, UserKey};
|
|||
use data_encoding::BASE64_NOPAD;
|
||||
use database::{Transaction, TransactionOps};
|
||||
use id::IdExt;
|
||||
use middleware::{Auth, ETag, MaybeAuth, NoContent, ResultExt as _, SignedJson};
|
||||
use middleware::{Auth, ETag, MaybeAuth, ResultExt as _, SignedJson};
|
||||
use parking_lot::Mutex;
|
||||
use serde::de::DeserializeOwned;
|
||||
use serde::{Deserialize, Deserializer, Serialize};
|
||||
|
@ -151,7 +151,7 @@ impl AppState {
|
|||
type ArcState = State<Arc<AppState>>;
|
||||
|
||||
pub fn router(st: Arc<AppState>) -> Router {
|
||||
let r = || MethodRouter::new().fallback(fallback_method_route);
|
||||
let r = MethodRouter::new;
|
||||
|
||||
// NB. Use consistent handler naming: `<method>_<path>[_<details>]`.
|
||||
// Use prefix `list` for GET with pagination.
|
||||
|
@ -165,16 +165,17 @@ pub fn router(st: Arc<AppState>) -> Router {
|
|||
.route("/room", r().get(list_room).post(post_room))
|
||||
// TODO!: remove this.
|
||||
.route("/room/create", r().post(post_room))
|
||||
.route("/room/:rid", r().get(get_room).delete(delete_room))
|
||||
.route("/room/:rid/feed.json", r().get(feed::get_room_feed::<feed::JsonFeed>))
|
||||
.route("/room/:rid/feed.atom", r().get(feed::get_room_feed::<feed::AtomFeed>))
|
||||
.route("/room/:rid/msg", r().get(list_room_msg).post(post_room_msg))
|
||||
.route("/room/:rid/msg/:cid/seen", r().post(post_room_msg_seen))
|
||||
.route("/room/{rid}", r().get(get_room).delete(delete_room))
|
||||
.route("/room/{rid}/feed.json", r().get(feed::get_room_feed::<feed::JsonFeed>))
|
||||
.route("/room/{rid}/feed.atom", r().get(feed::get_room_feed::<feed::AtomFeed>))
|
||||
.route("/room/{rid}/msg", r().get(list_room_msg).post(post_room_msg))
|
||||
.route("/room/{rid}/msg/{cid}/seen", r().post(post_room_msg_seen))
|
||||
// TODO!: remove this.
|
||||
.route("/room/:rid/admin", r().post(post_room_admin))
|
||||
.route("/room/:rid/member", r().get(list_room_member).post(post_room_member))
|
||||
.route("/room/:rid/member/:idkey", r().get(get_room_member).delete(delete_room_member).patch(patch_room_member))
|
||||
.route("/room/:rid/member/:idkey/identity", r().get(get_room_member_identity))
|
||||
.route("/room/{rid}/admin", r().post(post_room_admin))
|
||||
.route("/room/{rid}/member", r().get(list_room_member).post(post_room_member))
|
||||
.route("/room/{rid}/member/{idkey}", r().get(get_room_member).delete(delete_room_member).patch(patch_room_member))
|
||||
.route("/room/{rid}/member/{idkey}/identity", r().get(get_room_member_identity))
|
||||
.method_not_allowed_fallback(fallback_method_route)
|
||||
.fallback(fallback_route)
|
||||
;
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ use axum::extract::rejection::{JsonRejection, PathRejection, QueryRejection};
|
|||
use axum::extract::{FromRef, FromRequest, FromRequestParts, Request};
|
||||
use axum::http::{header, request, HeaderValue, StatusCode};
|
||||
use axum::response::{IntoResponse, IntoResponseParts, Response, ResponseParts};
|
||||
use axum::{async_trait, Json};
|
||||
use axum::Json;
|
||||
use blah_types::msg::AuthPayload;
|
||||
use blah_types::server::ErrorObject;
|
||||
use blah_types::{Signed, UserKey};
|
||||
|
@ -158,7 +158,6 @@ impl From<rusqlite::Error> for ApiError {
|
|||
#[derive(Debug)]
|
||||
pub struct SignedJson<T>(pub Signed<T>);
|
||||
|
||||
#[async_trait]
|
||||
impl<S, T> FromRequest<S> for SignedJson<T>
|
||||
where
|
||||
S: Send + Sync,
|
||||
|
@ -216,7 +215,6 @@ pub type MaybeAuth = Result<Auth, AuthRejection>;
|
|||
#[derive(Debug)]
|
||||
pub struct Auth(pub UserKey);
|
||||
|
||||
#[async_trait]
|
||||
impl<S> FromRequestParts<S> for Auth
|
||||
where
|
||||
S: Send + Sync,
|
||||
|
@ -249,7 +247,6 @@ where
|
|||
#[derive(Debug, Clone)]
|
||||
pub struct ETag<T>(pub Option<T>);
|
||||
|
||||
#[async_trait]
|
||||
impl<S, T: FromStr> FromRequestParts<S> for ETag<T>
|
||||
where
|
||||
S: Send + Sync,
|
||||
|
@ -284,13 +281,3 @@ impl<T: fmt::Display> IntoResponseParts for ETag<T> {
|
|||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
// WAIT: https://github.com/tokio-rs/axum/pull/2978
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct NoContent;
|
||||
|
||||
impl IntoResponse for NoContent {
|
||||
fn into_response(self) -> Response {
|
||||
StatusCode::NO_CONTENT.into_response()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ use std::num::NonZero;
|
|||
use std::time::Duration;
|
||||
|
||||
use anyhow::{anyhow, ensure};
|
||||
use axum::response::NoContent;
|
||||
use blah_types::get_timestamp;
|
||||
use blah_types::identity::{IdUrl, UserIdentityDesc};
|
||||
use blah_types::msg::{UserRegisterChallengeResponse, UserRegisterPayload};
|
||||
|
@ -14,7 +15,7 @@ use serde::Deserialize;
|
|||
use sha2::{Digest, Sha256};
|
||||
|
||||
use crate::database::TransactionOps;
|
||||
use crate::middleware::{NoContent, SignedJson};
|
||||
use crate::middleware::SignedJson;
|
||||
use crate::utils::Instant;
|
||||
use crate::{ApiError, ArcState, SERVER_AND_VERSION};
|
||||
|
||||
|
|
|
@ -168,9 +168,7 @@ impl Server {
|
|||
let url = format!("ws://{}/_blah/ws", self.domain());
|
||||
let (mut ws, _) = tokio_tungstenite::connect_async(url).await.unwrap();
|
||||
if let Some(user) = auth_user {
|
||||
ws.send(tokio_tungstenite::tungstenite::Message::Text(auth(user)))
|
||||
.await
|
||||
.unwrap();
|
||||
ws.send(auth(user).into()).await.unwrap();
|
||||
}
|
||||
Ok(ws
|
||||
.map(|ret| {
|
||||
|
|
Loading…
Add table
Reference in a new issue