Merge pull request #203 from rustfs/feat/cros

Feat/cros
This commit is contained in:
weisd
2025-01-10 23:49:42 +08:00
committed by GitHub
6 changed files with 3191 additions and 888 deletions
Generated
+15
View File
@@ -2430,6 +2430,7 @@ dependencies = [
"tonic-build", "tonic-build",
"tonic-reflection", "tonic-reflection",
"tower 0.5.2", "tower 0.5.2",
"tower-http",
"tracing", "tracing",
"tracing-error", "tracing-error",
"tracing-subscriber", "tracing-subscriber",
@@ -3130,6 +3131,20 @@ dependencies = [
"tracing", "tracing",
] ]
[[package]]
name = "tower-http"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697"
dependencies = [
"bitflags 2.6.0",
"bytes",
"http",
"pin-project-lite",
"tower-layer",
"tower-service",
]
[[package]] [[package]]
name = "tower-layer" name = "tower-layer"
version = "0.3.3" version = "0.3.3"
@@ -1,9 +1,10 @@
// automatically generated by the FlatBuffers compiler, do not modify // automatically generated by the FlatBuffers compiler, do not modify
// @generated // @generated
use core::cmp::Ordering;
use core::mem; use core::mem;
use core::cmp::Ordering;
extern crate flatbuffers; extern crate flatbuffers;
use self::flatbuffers::{EndianScalar, Follow}; use self::flatbuffers::{EndianScalar, Follow};
@@ -11,8 +12,8 @@ use self::flatbuffers::{EndianScalar, Follow};
#[allow(unused_imports, dead_code)] #[allow(unused_imports, dead_code)]
pub mod models { pub mod models {
use core::cmp::Ordering;
use core::mem; use core::mem;
use core::cmp::Ordering;
extern crate flatbuffers; extern crate flatbuffers;
use self::flatbuffers::{EndianScalar, Follow}; use self::flatbuffers::{EndianScalar, Follow};
@@ -28,9 +29,7 @@ pub mod models {
type Inner = PingBody<'a>; type Inner = PingBody<'a>;
#[inline] #[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
Self { Self { _tab: flatbuffers::Table::new(buf, loc) }
_tab: flatbuffers::Table::new(buf, loc),
}
} }
} }
@@ -48,30 +47,28 @@ pub mod models {
#[allow(unused_mut)] #[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>( pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>, _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args PingBodyArgs<'args>, args: &'args PingBodyArgs<'args>
) -> flatbuffers::WIPOffset<PingBody<'bldr>> { ) -> flatbuffers::WIPOffset<PingBody<'bldr>> {
let mut builder = PingBodyBuilder::new(_fbb); let mut builder = PingBodyBuilder::new(_fbb);
if let Some(x) = args.payload { if let Some(x) = args.payload { builder.add_payload(x); }
builder.add_payload(x);
}
builder.finish() builder.finish()
} }
#[inline] #[inline]
pub fn payload(&self) -> Option<flatbuffers::Vector<'a, u8>> { pub fn payload(&self) -> Option<flatbuffers::Vector<'a, u8>> {
// Safety: // Safety:
// Created from valid Table for this object // Created from valid Table for this object
// which contains a valid value in this slot // which contains a valid value in this slot
unsafe { unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, u8>>>(PingBody::VT_PAYLOAD, None)}
self._tab
.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, u8>>>(PingBody::VT_PAYLOAD, None)
}
} }
} }
impl flatbuffers::Verifiable for PingBody<'_> { impl flatbuffers::Verifiable for PingBody<'_> {
#[inline] #[inline]
fn run_verifier(v: &mut flatbuffers::Verifier, pos: usize) -> Result<(), flatbuffers::InvalidFlatbuffer> { fn run_verifier(
v: &mut flatbuffers::Verifier, pos: usize
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable; use self::flatbuffers::Verifiable;
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, u8>>>("payload", Self::VT_PAYLOAD, false)? .visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, u8>>>("payload", Self::VT_PAYLOAD, false)?
@@ -85,7 +82,9 @@ pub mod models {
impl<'a> Default for PingBodyArgs<'a> { impl<'a> Default for PingBodyArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
PingBodyArgs { payload: None } PingBodyArgs {
payload: None,
}
} }
} }
@@ -96,8 +95,7 @@ pub mod models {
impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> PingBodyBuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> PingBodyBuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_payload(&mut self, payload: flatbuffers::WIPOffset<flatbuffers::Vector<'b , u8>>) { pub fn add_payload(&mut self, payload: flatbuffers::WIPOffset<flatbuffers::Vector<'b , u8>>) {
self.fbb_ self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(PingBody::VT_PAYLOAD, payload);
.push_slot_always::<flatbuffers::WIPOffset<_>>(PingBody::VT_PAYLOAD, payload);
} }
#[inline] #[inline]
pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> PingBodyBuilder<'a, 'b, A> { pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> PingBodyBuilder<'a, 'b, A> {
@@ -122,3 +120,4 @@ pub mod models {
} }
} }
} // pub mod models } // pub mod models
File diff suppressed because it is too large Load Diff
+1
View File
@@ -68,6 +68,7 @@ serde_urlencoded = "0.7.1"
crypto = { path = "../crypto" } crypto = { path = "../crypto" }
iam = { path = "../iam" } iam = { path = "../iam" }
jsonwebtoken = "9.3.0" jsonwebtoken = "9.3.0"
tower-http = { version = "0.6.2", features = ["cors"] }
[build-dependencies] [build-dependencies]
prost-build.workspace = true prost-build.workspace = true
+6 -1
View File
@@ -33,6 +33,7 @@ use service::hybrid;
use std::{io::IsTerminal, net::SocketAddr, str::FromStr}; use std::{io::IsTerminal, net::SocketAddr, str::FromStr};
use tokio::net::TcpListener; use tokio::net::TcpListener;
use tonic::{metadata::MetadataValue, Request, Status}; use tonic::{metadata::MetadataValue, Request, Status};
use tower_http::cors::CorsLayer;
use tracing::{debug, error, info, warn}; use tracing::{debug, error, info, warn};
use tracing_error::ErrorLayer; use tracing_error::ErrorLayer;
use tracing_subscriber::{fmt, layer::SubscriberExt, util::SubscriberInitExt}; use tracing_subscriber::{fmt, layer::SubscriberExt, util::SubscriberInitExt};
@@ -166,7 +167,11 @@ async fn run(opt: config::Opt) -> Result<()> {
tokio::spawn(async move { tokio::spawn(async move {
let hyper_service = service.into_shared(); let hyper_service = service.into_shared();
let hybrid_service = TowerToHyperService::new(hybrid(hyper_service, rpc_service)); let hybrid_service = TowerToHyperService::new(
tower::ServiceBuilder::new()
.layer(CorsLayer::very_permissive())
.service(hybrid(hyper_service, rpc_service)),
);
let http_server = ConnBuilder::new(TokioExecutor::new()); let http_server = ConnBuilder::new(TokioExecutor::new());
let mut ctrl_c = std::pin::pin!(tokio::signal::ctrl_c()); let mut ctrl_c = std::pin::pin!(tokio::signal::ctrl_c());
+13
View File
@@ -77,6 +77,19 @@ pin_project! {
} }
} }
impl<RestBody, GrpcBody> Default for HybridBody<RestBody, GrpcBody>
where
RestBody: Default,
GrpcBody: Default,
{
fn default() -> Self {
Self::Rest {
rest_body: RestBody::default(),
}
}
}
impl<RestBody, GrpcBody> http_body::Body for HybridBody<RestBody, GrpcBody> impl<RestBody, GrpcBody> http_body::Body for HybridBody<RestBody, GrpcBody>
where where
RestBody: http_body::Body + Send + Unpin, RestBody: http_body::Body + Send + Unpin,