Skip to content

Commit 7df41ae

Browse files
author
bay
committed
crates upgrade and refactor
1 parent 20d2710 commit 7df41ae

88 files changed

Lines changed: 1455 additions & 1961 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 893 additions & 1414 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ edition = "2018"
1515
members = ["api", "chain", "config", "core", "keychain", "mwc_crates", "p2p", "servers", "store", "util", "pool", "node_workflow", "mwc_node_lib"]
1616
exclude = ["etc/gen_gen"]
1717

18+
[workspace.dependencies]
19+
thiserror = "2"
20+
safer-ffi = { version = "0.1", features = ["std", "headers"] }
21+
1822
[[bin]]
1923
name = "mwc"
2024
path = "src/bin/mwc.rs"
@@ -29,6 +33,7 @@ mwc_p2p = { path = "./p2p", version = "6.0.1" }
2933
mwc_servers = { path = "./servers", version = "6.0.1" }
3034
mwc_util = { path = "./util", version = "6.0.1" }
3135
mwc_node_workflow = { path = "./node_workflow", version = "6.0.1" }
36+
thiserror.workspace = true
3237

3338
[build-dependencies]
3439
mwc_crates = { path = "./mwc_crates", version = "6.0.1" }

api/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ mwc_chain = { path = "../chain", version = "6.0.1" }
1616
mwc_p2p = { path = "../p2p", version = "6.0.1" }
1717
mwc_pool = { path = "../pool", version = "6.0.1" }
1818
mwc_util = { path = "../util", version = "6.0.1" }
19+
thiserror.workspace = true
1920

2021
[features]
2122
libp2p = ["mwc_p2p/libp2p"]

api/src/auth.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
use crate::router::{Handler, HandlerObj, ResponseFuture};
1717
use crate::web::response;
1818
use crate::RouterError;
19+
use mwc_crates::bytes::Bytes;
1920
use mwc_crates::futures::future::{err, ok};
21+
use mwc_crates::http_body_util::Full;
2022
use mwc_crates::hyper::header::{HeaderValue, AUTHORIZATION, WWW_AUTHENTICATE};
21-
use mwc_crates::hyper::{Body, Request, Response, StatusCode};
23+
use mwc_crates::hyper::{Request, Response, StatusCode};
2224
use mwc_crates::lazy_static::lazy_static;
23-
use mwc_crates::ring::constant_time::verify_slices_are_equal;
25+
use mwc_crates::subtle::ConstantTimeEq;
2426

2527
lazy_static! {
2628
pub static ref MWC_BASIC_REALM: HeaderValue =
@@ -53,7 +55,7 @@ impl BasicAuthMiddleware {
5355
impl Handler for BasicAuthMiddleware {
5456
fn call(
5557
&self,
56-
req: Request<Body>,
58+
req: Request<Bytes>,
5759
mut handlers: Box<dyn Iterator<Item = HandlerObj>>,
5860
) -> ResponseFuture {
5961
let next_handler = match handlers.next() {
@@ -69,11 +71,10 @@ impl Handler for BasicAuthMiddleware {
6971
}
7072
}
7173
if req.headers().contains_key(AUTHORIZATION)
72-
&& verify_slices_are_equal(
73-
req.headers()[AUTHORIZATION].as_bytes(),
74-
&self.api_basic_auth.as_bytes(),
75-
)
76-
.is_ok()
74+
&& req.headers()[AUTHORIZATION]
75+
.as_bytes()
76+
.ct_eq(self.api_basic_auth.as_bytes())
77+
.into()
7778
{
7879
next_handler.call(req, handlers)
7980
} else {
@@ -107,7 +108,7 @@ impl BasicAuthURIMiddleware {
107108
impl Handler for BasicAuthURIMiddleware {
108109
fn call(
109110
&self,
110-
req: Request<Body>,
111+
req: Request<Bytes>,
111112
mut handlers: Box<dyn Iterator<Item = HandlerObj>>,
112113
) -> ResponseFuture {
113114
let next_handler = match handlers.next() {
@@ -119,11 +120,10 @@ impl Handler for BasicAuthURIMiddleware {
119120
}
120121
if req.uri().path() == self.target_uri {
121122
if req.headers().contains_key(AUTHORIZATION)
122-
&& verify_slices_are_equal(
123-
req.headers()[AUTHORIZATION].as_bytes(),
124-
&self.api_basic_auth.as_bytes(),
125-
)
126-
.is_ok()
123+
&& req.headers()[AUTHORIZATION]
124+
.as_bytes()
125+
.ct_eq(self.api_basic_auth.as_bytes())
126+
.into()
127127
{
128128
next_handler.call(req, handlers)
129129
} else {
@@ -140,7 +140,7 @@ fn unauthorized_response(basic_realm: &HeaderValue) -> ResponseFuture {
140140
match Response::builder()
141141
.status(StatusCode::UNAUTHORIZED)
142142
.header(WWW_AUTHENTICATE, basic_realm)
143-
.body(Body::empty())
143+
.body(Full::new(Bytes::new()))
144144
{
145145
Ok(resp) => Box::pin(ok(resp)),
146146
Err(e) => Box::pin(err(RouterError::Internal(format!(

api/src/handlers.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,11 @@ use crate::web::*;
5454
use mwc_chain::{Chain, SyncState};
5555
use mwc_core::global;
5656
use mwc_core::stratum;
57+
use mwc_crates::bytes::Bytes;
5758
use mwc_crates::easy_jsonrpc_mwc::{Handler, MaybeReply};
59+
use mwc_crates::http_body_util::Full;
5860
use mwc_crates::hyper;
59-
use mwc_crates::hyper::{Body, Request, Response, StatusCode};
61+
use mwc_crates::hyper::{Request, Response, StatusCode};
6062
use mwc_crates::log::{error, warn};
6163
use mwc_crates::serde::Serialize;
6264
use mwc_crates::serde_json;
@@ -238,7 +240,7 @@ impl OwnerAPIHandlerV2 {
238240
}
239241

240242
impl crate::router::Handler for OwnerAPIHandlerV2 {
241-
fn post(&self, req: Request<Body>) -> ResponseFuture {
243+
fn post(&self, req: Request<Bytes>) -> ResponseFuture {
242244
let api = Owner::new(
243245
self.chain.clone(),
244246
self.peers.clone(),
@@ -267,7 +269,7 @@ impl crate::router::Handler for OwnerAPIHandlerV2 {
267269
})
268270
}
269271

270-
fn options(&self, _req: Request<Body>) -> ResponseFuture {
272+
fn options(&self, _req: Request<Bytes>) -> ResponseFuture {
271273
Box::pin(async { Ok(create_ok_response("{}")) })
272274
}
273275
}
@@ -312,7 +314,7 @@ where
312314
B: BlockChain + 'static,
313315
P: PoolAdapter + 'static,
314316
{
315-
fn post(&self, req: Request<Body>) -> ResponseFuture {
317+
fn post(&self, req: Request<Bytes>) -> ResponseFuture {
316318
let api = Foreign::new(
317319
self.peers.clone(),
318320
self.chain.clone(),
@@ -343,7 +345,7 @@ where
343345
})
344346
}
345347

346-
fn options(&self, _req: Request<Body>) -> ResponseFuture {
348+
fn options(&self, _req: Request<Bytes>) -> ResponseFuture {
347349
Box::pin(async { Ok(create_ok_response("{}")) })
348350
}
349351
}
@@ -361,7 +363,7 @@ impl StratumAPIHandlerV2 {
361363
}
362364

363365
impl crate::router::Handler for StratumAPIHandlerV2 {
364-
fn post(&self, req: Request<Body>) -> ResponseFuture {
366+
fn post(&self, req: Request<Bytes>) -> ResponseFuture {
365367
let api = Stratum::new(self.stratum_ip_pool.clone());
366368

367369
Box::pin(async move {
@@ -386,13 +388,13 @@ impl crate::router::Handler for StratumAPIHandlerV2 {
386388
})
387389
}
388390

389-
fn options(&self, _req: Request<Body>) -> ResponseFuture {
391+
fn options(&self, _req: Request<Bytes>) -> ResponseFuture {
390392
Box::pin(async { Ok(create_ok_response("{}")) })
391393
}
392394
}
393395

394396
// pretty-printed version of above
395-
fn json_response_pretty<T>(s: &T) -> Response<Body>
397+
fn json_response_pretty<T>(s: &T) -> Response<Full<Bytes>>
396398
where
397399
T: Serialize,
398400
{
@@ -405,22 +407,22 @@ where
405407
}
406408
}
407409

408-
fn create_error_response(e: Error) -> Response<Body> {
410+
fn create_error_response(e: Error) -> Response<Full<Bytes>> {
409411
match Response::builder()
410412
.status(StatusCode::INTERNAL_SERVER_ERROR)
411413
.header("access-control-allow-origin", "*")
412414
.header(
413415
"access-control-allow-headers",
414416
"Content-Type, Authorization",
415417
)
416-
.body(format!("{}", e).into())
418+
.body(Full::new(Bytes::from(format!("{}", e))))
417419
{
418420
Ok(r) => r,
419421
Err(e) => json_response_pretty(&format!("{}", e)),
420422
}
421423
}
422424

423-
fn create_ok_response(json: &str) -> Response<Body> {
425+
fn create_ok_response(json: &str) -> Response<Full<Bytes>> {
424426
match Response::builder()
425427
.status(StatusCode::OK)
426428
.header("access-control-allow-origin", "*")
@@ -429,7 +431,7 @@ fn create_ok_response(json: &str) -> Response<Body> {
429431
"Content-Type, Authorization",
430432
)
431433
.header(hyper::header::CONTENT_TYPE, "application/json")
432-
.body(json.to_string().into())
434+
.body(Full::new(Bytes::from(json.to_string())))
433435
{
434436
Ok(r) => r,
435437
Err(e) => json_response_pretty(&format!("{}", e)),
@@ -440,7 +442,7 @@ fn create_ok_response(json: &str) -> Response<Body> {
440442
///
441443
/// Whenever the status code is `StatusCode::OK` the text parameter should be
442444
/// valid JSON as the content type header will be set to `application/json'
443-
fn response<T: Into<Body>>(status: StatusCode, text: T) -> Response<Body> {
445+
fn response<T: Into<Bytes>>(status: StatusCode, text: T) -> Response<Full<Bytes>> {
444446
let mut builder = Response::builder();
445447

446448
builder = builder
@@ -455,7 +457,7 @@ fn response<T: Into<Body>>(status: StatusCode, text: T) -> Response<Body> {
455457
builder = builder.header(hyper::header::CONTENT_TYPE, "application/json");
456458
}
457459

458-
match builder.body(text.into()) {
460+
match builder.body(Full::new(text.into())) {
459461
Ok(r) => r,
460462
Err(e) => json_response_pretty(&format!("{}", e)),
461463
}

api/src/handlers/blocks_api.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ use crate::types::*;
1919
use crate::web::*;
2020
use mwc_core::core::hash::Hash;
2121
use mwc_core::core::hash::Hashed;
22-
use mwc_crates::hyper::{Body, Request, StatusCode};
22+
use mwc_crates::bytes::Bytes;
23+
use mwc_crates::hyper::{Request, StatusCode};
2324
use mwc_crates::lazy_static::lazy_static;
2425
use mwc_crates::regex::Regex;
2526
use mwc_crates::url;
@@ -142,7 +143,7 @@ impl HeaderHandler {
142143
}
143144

144145
impl Handler for HeaderHandler {
145-
fn get(&self, req: Request<Body>) -> ResponseFuture {
146+
fn get(&self, req: Request<Bytes>) -> ResponseFuture {
146147
let el = right_path_element!(req);
147148
result_to_response(self.get_header(el.to_string()))
148149
}
@@ -357,7 +358,7 @@ fn check_block_param(input: &str) -> Result<(), Error> {
357358
}
358359

359360
impl Handler for BlockHandler {
360-
fn get(&self, req: Request<Body>) -> ResponseFuture {
361+
fn get(&self, req: Request<Bytes>) -> ResponseFuture {
361362
let el = right_path_element!(req);
362363
let h = match self.parse_input(el.to_string()) {
363364
Err(e) => {

api/src/handlers/chain_api.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ use crate::router::{Handler, ResponseFuture};
1919
use crate::types::*;
2020
use crate::web::*;
2121
use mwc_core::core::hash::{Hash, Hashed};
22-
use mwc_crates::hyper::{Body, Request, StatusCode};
22+
use mwc_crates::bytes::Bytes;
23+
use mwc_crates::hyper::{Request, StatusCode};
2324
use mwc_crates::log::{debug, error, warn};
2425
use mwc_crates::secp::pedersen::Commitment;
2526
use std::sync::Weak;
@@ -40,7 +41,7 @@ impl ChainHandler {
4041
}
4142

4243
impl Handler for ChainHandler {
43-
fn get(&self, _req: Request<Body>) -> ResponseFuture {
44+
fn get(&self, _req: Request<Bytes>) -> ResponseFuture {
4445
result_to_response(self.get_tip())
4546
}
4647
}
@@ -63,7 +64,7 @@ impl ChainValidationHandler {
6364
}
6465

6566
impl Handler for ChainValidationHandler {
66-
fn get(&self, _req: Request<Body>) -> ResponseFuture {
67+
fn get(&self, _req: Request<Bytes>) -> ResponseFuture {
6768
match w_fut!(&self.chain).validate(true) {
6869
Ok(_) => response(StatusCode::OK, "{}"),
6970
Err(e) => response(
@@ -90,7 +91,7 @@ impl ChainCompactHandler {
9091
}
9192

9293
impl Handler for ChainCompactHandler {
93-
fn post(&self, _req: Request<Body>) -> ResponseFuture {
94+
fn post(&self, _req: Request<Bytes>) -> ResponseFuture {
9495
match w_fut!(&self.chain).compact() {
9596
Ok(_) => response(StatusCode::OK, "{}"),
9697
Err(e) => response(
@@ -207,7 +208,7 @@ impl OutputHandler {
207208
Ok(out)
208209
}
209210

210-
fn outputs_by_ids(&self, req: &Request<Body>) -> Result<Vec<Output>, Error> {
211+
fn outputs_by_ids(&self, req: &Request<Bytes>) -> Result<Vec<Output>, Error> {
211212
let mut commitments: Vec<String> = vec![];
212213

213214
let query = must_get_query!(req);
@@ -324,7 +325,7 @@ impl OutputHandler {
324325
}
325326

326327
// returns outputs for a specified range of blocks
327-
fn outputs_block_batch(&self, req: &Request<Body>) -> Result<Vec<BlockOutputs>, Error> {
328+
fn outputs_block_batch(&self, req: &Request<Bytes>) -> Result<Vec<BlockOutputs>, Error> {
328329
let mut commitments: Vec<Commitment> = vec![];
329330

330331
let query = must_get_query!(req);
@@ -394,7 +395,7 @@ impl OutputHandler {
394395
}
395396

396397
impl Handler for OutputHandler {
397-
fn get(&self, req: Request<Body>) -> ResponseFuture {
398+
fn get(&self, req: Request<Bytes>) -> ResponseFuture {
398399
match right_path_element!(req) {
399400
"byids" => result_to_response(self.outputs_by_ids(&req)),
400401
"byheight" => result_to_response(self.outputs_block_batch(&req)),
@@ -411,7 +412,7 @@ pub struct KernelHandler {
411412
}
412413

413414
impl KernelHandler {
414-
fn get_kernel(&self, req: Request<Body>) -> Result<Option<LocatedTxKernel>, Error> {
415+
fn get_kernel(&self, req: Request<Bytes>) -> Result<Option<LocatedTxKernel>, Error> {
415416
let excess_s = req
416417
.uri()
417418
.path()
@@ -516,7 +517,7 @@ impl KernelHandler {
516517
}
517518

518519
impl Handler for KernelHandler {
519-
fn get(&self, req: Request<Body>) -> ResponseFuture {
520+
fn get(&self, req: Request<Bytes>) -> ResponseFuture {
520521
result_to_response(self.get_kernel(req))
521522
}
522523
}

api/src/handlers/peers_api.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ use super::utils::w;
1717
use crate::rest::*;
1818
use crate::router::{Handler, ResponseFuture};
1919
use crate::web::*;
20-
use mwc_crates::hyper::{Body, Request, StatusCode};
20+
use mwc_crates::bytes::Bytes;
21+
use mwc_crates::hyper::{Request, StatusCode};
2122
use mwc_p2p::types::Direction;
2223
use mwc_p2p::types::PeerInfoDisplayLegacy;
2324
use mwc_p2p::types::{PeerAddr, PeerInfoDisplay, ReasonForBan};
@@ -31,7 +32,7 @@ pub struct PeersAllHandler {
3132
}
3233

3334
impl Handler for PeersAllHandler {
34-
fn get(&self, _req: Request<Body>) -> ResponseFuture {
35+
fn get(&self, _req: Request<Bytes>) -> ResponseFuture {
3536
let peers = &w_fut!(&self.peers).all_peer_data(Capabilities::UNKNOWN);
3637
json_response_pretty(&peers)
3738
}
@@ -85,7 +86,7 @@ impl PeersConnectedHandler {
8586
}
8687

8788
impl Handler for PeersConnectedHandler {
88-
fn get(&self, _req: Request<Body>) -> ResponseFuture {
89+
fn get(&self, _req: Request<Bytes>) -> ResponseFuture {
8990
let peers: Vec<PeerInfoDisplay> = w_fut!(&self.peers)
9091
.iter()
9192
.connected()
@@ -174,7 +175,7 @@ impl PeerHandler {
174175
}
175176

176177
impl Handler for PeerHandler {
177-
fn get(&self, req: Request<Body>) -> ResponseFuture {
178+
fn get(&self, req: Request<Bytes>) -> ResponseFuture {
178179
#![allow(irrefutable_let_patterns)]
179180
let command = right_path_element!(req);
180181

@@ -205,7 +206,7 @@ impl Handler for PeerHandler {
205206
}
206207
}
207208

208-
fn post(&self, req: Request<Body>) -> ResponseFuture {
209+
fn post(&self, req: Request<Bytes>) -> ResponseFuture {
209210
#![allow(irrefutable_let_patterns)]
210211
let mut path_elems = req.uri().path().trim_end_matches('/').rsplit('/');
211212
let command = match path_elems.next() {

0 commit comments

Comments
 (0)