diff options
| author | MatthieuCoder <matthieu@matthieu-dev.xyz> | 2023-01-03 00:14:27 +0400 |
|---|---|---|
| committer | MatthieuCoder <matthieu@matthieu-dev.xyz> | 2023-01-03 00:14:27 +0400 |
| commit | 91a27342dbee8ca0478f862df93bf502337f4c6e (patch) | |
| tree | af5f4818d300934d8c9ea14896fe756fea13d578 /exes/rest/src | |
| parent | c3e47ff0b1b06ff26830e78b7e37e212d1e47200 (diff) | |
add all in one binary
Diffstat (limited to 'exes/rest/src')
| -rw-r--r-- | exes/rest/src/config.rs | 2 | ||||
| -rw-r--r-- | exes/rest/src/lib.rs | 67 | ||||
| -rw-r--r-- | exes/rest/src/main.rs | 69 | ||||
| -rw-r--r-- | exes/rest/src/ratelimit_client/mod.rs | 6 | ||||
| -rw-r--r-- | exes/rest/src/ratelimit_client/remote_hashring.rs | 2 |
5 files changed, 74 insertions, 72 deletions
diff --git a/exes/rest/src/config.rs b/exes/rest/src/config.rs index 5c2698b..4e27a30 100644 --- a/exes/rest/src/config.rs +++ b/exes/rest/src/config.rs @@ -2,7 +2,7 @@ use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; use serde::Deserialize; fn default_listening_address() -> SocketAddr { - SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, 8080)) + SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, 8090)) } #[derive(Debug, Deserialize, Clone)] diff --git a/exes/rest/src/lib.rs b/exes/rest/src/lib.rs new file mode 100644 index 0000000..02721cc --- /dev/null +++ b/exes/rest/src/lib.rs @@ -0,0 +1,67 @@ +use config::ReverseProxyConfig; + +use handler::handle_request; +use hyper::{ + server::conn::AddrStream, + service::{make_service_fn, service_fn}, + Body, Client, Request, Server, +}; +use hyper_tls::HttpsConnector; +use leash::{AnyhowResultFuture, Component}; +use shared::config::Settings; +use std::{convert::Infallible, sync::Arc}; +use tokio::sync::oneshot; + +mod config; +mod handler; +mod ratelimit_client; + +pub struct ReverseProxyServer {} +impl Component for ReverseProxyServer { + type Config = ReverseProxyConfig; + const SERVICE_NAME: &'static str = "rest"; + + fn start( + &self, + settings: Settings<Self::Config>, + stop: oneshot::Receiver<()>, + ) -> AnyhowResultFuture<()> { + Box::pin(async move { + // Client to the remote ratelimiters + let ratelimiter = ratelimit_client::RemoteRatelimiter::new(); + let client = Client::builder().build(HttpsConnector::new()); + + let token = Arc::new(settings.discord.token.clone()); + let service_fn = make_service_fn(move |_: &AddrStream| { + let client = client.clone(); + let ratelimiter = ratelimiter.clone(); + let token = token.clone(); + async move { + Ok::<_, Infallible>(service_fn(move |request: Request<Body>| { + let client = client.clone(); + let ratelimiter = ratelimiter.clone(); + let token = token.clone(); + async move { + let token = token.as_str(); + handle_request(client, ratelimiter, token, request).await + } + })) + } + }); + + let server = Server::bind(&settings.config.server.listening_adress).serve(service_fn); + + server + .with_graceful_shutdown(async { + stop.await.expect("should not fail"); + }) + .await?; + + Ok(()) + }) + } + + fn new() -> Self { + Self {} + } +}
\ No newline at end of file diff --git a/exes/rest/src/main.rs b/exes/rest/src/main.rs index 07d835c..fe8ada7 100644 --- a/exes/rest/src/main.rs +++ b/exes/rest/src/main.rs @@ -1,69 +1,4 @@ -use config::ReverseProxyConfig; - -use handler::handle_request; -use hyper::{ - server::conn::AddrStream, - service::{make_service_fn, service_fn}, - Body, Client, Request, Server, -}; -use hyper_tls::HttpsConnector; -use leash::{ignite, AnyhowResultFuture, Component}; -use shared::config::Settings; -use std::{convert::Infallible, sync::Arc}; -use tokio::sync::oneshot; - -mod config; -mod handler; -mod ratelimit_client; - -struct ReverseProxyServer {} -impl Component for ReverseProxyServer { - type Config = ReverseProxyConfig; - const SERVICE_NAME: &'static str = "rest"; - - fn start( - &self, - settings: Settings<Self::Config>, - stop: oneshot::Receiver<()>, - ) -> AnyhowResultFuture<()> { - Box::pin(async move { - // Client to the remote ratelimiters - let ratelimiter = ratelimit_client::RemoteRatelimiter::new(); - let client = Client::builder().build(HttpsConnector::new()); - - let token = Arc::new(settings.discord.token.clone()); - let service_fn = make_service_fn(move |_: &AddrStream| { - let client = client.clone(); - let ratelimiter = ratelimiter.clone(); - let token = token.clone(); - async move { - Ok::<_, Infallible>(service_fn(move |request: Request<Body>| { - let client = client.clone(); - let ratelimiter = ratelimiter.clone(); - let token = token.clone(); - async move { - let token = token.as_str(); - handle_request(client, ratelimiter, token, request).await - } - })) - } - }); - - let server = Server::bind(&settings.config.server.listening_adress).serve(service_fn); - - server - .with_graceful_shutdown(async { - stop.await.expect("should not fail"); - }) - .await?; - - Ok(()) - }) - } - - fn new() -> Self { - Self {} - } -} +use leash::ignite; +use rest::ReverseProxyServer; ignite!(ReverseProxyServer); diff --git a/exes/rest/src/ratelimit_client/mod.rs b/exes/rest/src/ratelimit_client/mod.rs index 87737dd..afaf2b7 100644 --- a/exes/rest/src/ratelimit_client/mod.rs +++ b/exes/rest/src/ratelimit_client/mod.rs @@ -30,14 +30,14 @@ impl Drop for RemoteRatelimiter { impl RemoteRatelimiter { async fn get_ratelimiters(&self) -> Result<(), anyhow::Error> { // get list of dns responses - let responses = dns_lookup::lookup_host("ratelimit") + /*let responses = dns_lookup::lookup_host("localhost") .unwrap() .into_iter() - .map(|f| f.to_string()); + .map(|f| f.to_string());*/ let mut write = self.remotes.write().await; - for ip in responses { + for ip in ["localhost"] { let a = VNode::new(ip.into()).await?; write.add(a.clone()); } diff --git a/exes/rest/src/ratelimit_client/remote_hashring.rs b/exes/rest/src/ratelimit_client/remote_hashring.rs index b9f7800..4e3fa06 100644 --- a/exes/rest/src/ratelimit_client/remote_hashring.rs +++ b/exes/rest/src/ratelimit_client/remote_hashring.rs @@ -34,7 +34,7 @@ impl Hash for VNode { impl VNode { pub async fn new(address: String) -> Result<Self, tonic::transport::Error> { - let client = RatelimiterClient::connect(format!("http://{}:8080", address.clone())).await?; + let client = RatelimiterClient::connect(format!("http://{}:8093", address.clone())).await?; Ok(VNode { client, address }) } |
