Loading crates/s3s-aws/src/proxy/mod.rs +1 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ macro_rules! wrap_sdk_error { if let Some(val) = meta.request_id() { err.set_request_id(val); } err.set_status_code(e.raw().http().status()); } err.set_source(Box::new(source)); Loading crates/s3s-proxy/Cargo.toml 0 → 100644 +17 −0 Original line number Diff line number Diff line [package] name = "s3s-proxy" version = "0.0.0" edition = "2021" publish = false [dependencies] aws-config = "0.53.0" aws-credential-types = "0.53.0" aws-sdk-s3 = "0.23.0" clap = { version = "4.1.1", features = ["derive"] } hyper = { version = "0.14.23", features = ["full"] } s3s = { version = "0.2.0-dev", path = "../s3s" } s3s-aws = { version = "0.2.0-dev", path = "../s3s-aws" } tokio = { version = "1.24.2", features = ["full"] } tracing = "0.1.37" tracing-subscriber = { version = "0.3.16", features = ["env-filter", "time"] } crates/s3s-proxy/src/main.rs 0 → 100644 +74 −0 Original line number Diff line number Diff line #![forbid(unsafe_code)] #![deny(clippy::all)] use s3s::service::S3Service; use s3s::SimpleAuth; use std::error::Error; use std::net::TcpListener; use aws_credential_types::provider::ProvideCredentials; use clap::Parser; use hyper::server::Server; use tracing::info; #[derive(Debug, Parser)] struct Opt { #[clap(long, default_value = "localhost")] host: String, #[clap(long, default_value = "8014")] port: u16, #[clap(long)] domain_name: Option<String>, #[clap(long)] endpoint_url: String, } fn setup_tracing() { use tracing_subscriber::EnvFilter; tracing_subscriber::fmt() .pretty() .with_env_filter(EnvFilter::from_default_env()) .init() } #[tokio::main] async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> { setup_tracing(); let opt = Opt::parse(); // Setup S3 service let conf = aws_config::from_env().endpoint_url(&opt.endpoint_url).load().await; let proxy = s3s_aws::Proxy::from(aws_sdk_s3::Client::new(&conf)); let mut service = S3Service::new(Box::new(proxy)); // Enable authentication if let Some(cred_provider) = conf.credentials_provider() { let cred = cred_provider.provide_credentials().await?; let auth = SimpleAuth::from_single(cred.access_key_id(), cred.secret_access_key()); service.set_auth(Box::new(auth)); } // Enable parsing virtual-hosted-style requests if let Some(domain_name) = opt.domain_name { service.set_base_domain(domain_name); } // Run server let listener = TcpListener::bind((opt.host.as_str(), opt.port))?; let server = Server::from_tcp(listener)?.serve(service.into_shared().into_make_service()); info!("server is running at http://{}:{}/", opt.host, opt.port); info!("server is forwarding requests to {}", opt.endpoint_url); let task = tokio::spawn(server); tokio::signal::ctrl_c().await?; task.abort(); Ok(()) } justfile +2 −0 Original line number Diff line number Diff line Loading @@ -17,9 +17,11 @@ codegen: install: cargo install --offline --path crates/s3s-fs --features binary cargo install --offline --path crates/s3s-proxy sync-version: cargo set-version -p s3s 0.2.0-dev cargo set-version -p s3s-codegen 0.0.0 cargo set-version -p s3s-fs 0.2.0-dev cargo set-version -p s3s-aws 0.2.0-dev cargo set-version -p s3s-proxy 0.0.0 Loading
crates/s3s-aws/src/proxy/mod.rs +1 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ macro_rules! wrap_sdk_error { if let Some(val) = meta.request_id() { err.set_request_id(val); } err.set_status_code(e.raw().http().status()); } err.set_source(Box::new(source)); Loading
crates/s3s-proxy/Cargo.toml 0 → 100644 +17 −0 Original line number Diff line number Diff line [package] name = "s3s-proxy" version = "0.0.0" edition = "2021" publish = false [dependencies] aws-config = "0.53.0" aws-credential-types = "0.53.0" aws-sdk-s3 = "0.23.0" clap = { version = "4.1.1", features = ["derive"] } hyper = { version = "0.14.23", features = ["full"] } s3s = { version = "0.2.0-dev", path = "../s3s" } s3s-aws = { version = "0.2.0-dev", path = "../s3s-aws" } tokio = { version = "1.24.2", features = ["full"] } tracing = "0.1.37" tracing-subscriber = { version = "0.3.16", features = ["env-filter", "time"] }
crates/s3s-proxy/src/main.rs 0 → 100644 +74 −0 Original line number Diff line number Diff line #![forbid(unsafe_code)] #![deny(clippy::all)] use s3s::service::S3Service; use s3s::SimpleAuth; use std::error::Error; use std::net::TcpListener; use aws_credential_types::provider::ProvideCredentials; use clap::Parser; use hyper::server::Server; use tracing::info; #[derive(Debug, Parser)] struct Opt { #[clap(long, default_value = "localhost")] host: String, #[clap(long, default_value = "8014")] port: u16, #[clap(long)] domain_name: Option<String>, #[clap(long)] endpoint_url: String, } fn setup_tracing() { use tracing_subscriber::EnvFilter; tracing_subscriber::fmt() .pretty() .with_env_filter(EnvFilter::from_default_env()) .init() } #[tokio::main] async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> { setup_tracing(); let opt = Opt::parse(); // Setup S3 service let conf = aws_config::from_env().endpoint_url(&opt.endpoint_url).load().await; let proxy = s3s_aws::Proxy::from(aws_sdk_s3::Client::new(&conf)); let mut service = S3Service::new(Box::new(proxy)); // Enable authentication if let Some(cred_provider) = conf.credentials_provider() { let cred = cred_provider.provide_credentials().await?; let auth = SimpleAuth::from_single(cred.access_key_id(), cred.secret_access_key()); service.set_auth(Box::new(auth)); } // Enable parsing virtual-hosted-style requests if let Some(domain_name) = opt.domain_name { service.set_base_domain(domain_name); } // Run server let listener = TcpListener::bind((opt.host.as_str(), opt.port))?; let server = Server::from_tcp(listener)?.serve(service.into_shared().into_make_service()); info!("server is running at http://{}:{}/", opt.host, opt.port); info!("server is forwarding requests to {}", opt.endpoint_url); let task = tokio::spawn(server); tokio::signal::ctrl_c().await?; task.abort(); Ok(()) }
justfile +2 −0 Original line number Diff line number Diff line Loading @@ -17,9 +17,11 @@ codegen: install: cargo install --offline --path crates/s3s-fs --features binary cargo install --offline --path crates/s3s-proxy sync-version: cargo set-version -p s3s 0.2.0-dev cargo set-version -p s3s-codegen 0.0.0 cargo set-version -p s3s-fs 0.2.0-dev cargo set-version -p s3s-aws 0.2.0-dev cargo set-version -p s3s-proxy 0.0.0