From c2ffdee26933911d69946048909bd712240260e5 Mon Sep 17 00:00:00 2001 From: Tyler Beckman Date: Thu, 19 Jun 2025 00:33:02 -0600 Subject: [PATCH 1/4] Make bind address configurable --- src/main.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2ee14f8..b68590c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,8 +20,9 @@ #![allow(incomplete_features)] extern crate core; +use std::str::FromStr as _; use std::env; -use std::net::SocketAddr; +use std::net::{IpAddr, SocketAddr}; use std::time::Duration; use crate::hypixel::Rule; @@ -67,6 +68,7 @@ pub struct RequestContext { pub struct GlobalApplicationContext { client: Client>, hypixel_token: Obscure, + address: IpAddr, port: u16, rules: Vec, allow_anonymous: bool, @@ -173,6 +175,9 @@ fn init_config() -> anyhow::Result { }) }) .collect::, _>>()?; + let address = IpAddr::from_str(&config_var("ADDRESS") + .unwrap_or("172.0.0.1".to_owned())) + .with_context(|| "Could not parse bind address at URSA_ADDRESS")?; let port = config_var("PORT")? .parse::() .with_context(|| "Could not parse port at URSA_PORT")?; @@ -191,6 +196,7 @@ fn init_config() -> anyhow::Result { let rate_limit_bucket = config_var("RATE_LIMIT_BUCKET")?.parse::()?; Ok(GlobalApplicationContext { client, + address, port, hypixel_token: Obscure(hypixel_token), rules, @@ -267,7 +273,7 @@ async fn run_server() -> anyhow::Result<()> { "Launching with configuration: {:#?}", *global_application_config ); - let addr = SocketAddr::from(([127, 0, 0, 1], global_application_config.port)); + let addr = SocketAddr::from((global_application_config.address, global_application_config.port)); let redis_client = redis::Client::open(global_application_config.redis_url.clone())?; let managed = redis::aio::ConnectionManager::new(redis_client).await?; let service = make_service_fn(|_conn| { From 6c63dd7252e8cc15f5fa4b08dacb901337942d68 Mon Sep 17 00:00:00 2001 From: Tyler Beckman Date: Thu, 19 Jun 2025 00:41:47 -0600 Subject: [PATCH 2/4] Format --- src/lbin.rs | 7 ++----- src/main.rs | 12 +++++++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/lbin.rs b/src/lbin.rs index 71f47ab..e860755 100644 --- a/src/lbin.rs +++ b/src/lbin.rs @@ -98,11 +98,8 @@ impl Auction { #[tracing::instrument(skip_all)] fn item_bytes(&self) -> anyhow::Result> { - let base64_decoded = base64::engine::general_purpose::STANDARD.decode( - self.item_bytes_compressed - .as_ref() - .as_bytes(), - )?; + let base64_decoded = base64::engine::general_purpose::STANDARD + .decode(self.item_bytes_compressed.as_ref().as_bytes())?; Ok(base64_decoded.into()) } diff --git a/src/main.rs b/src/main.rs index b68590c..203c5c9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,9 +20,9 @@ #![allow(incomplete_features)] extern crate core; -use std::str::FromStr as _; use std::env; use std::net::{IpAddr, SocketAddr}; +use std::str::FromStr as _; use std::time::Duration; use crate::hypixel::Rule; @@ -40,8 +40,8 @@ use hyper_tls::HttpsConnector; use tokio::task::JoinHandle; use tokio::time::Instant; use tokio_util::sync::CancellationToken; -use tracing::{error, info, warn}; use tracing::instrument::WithSubscriber; +use tracing::{error, info, warn}; pub mod hypixel; pub mod meta; @@ -175,8 +175,7 @@ fn init_config() -> anyhow::Result { }) }) .collect::, _>>()?; - let address = IpAddr::from_str(&config_var("ADDRESS") - .unwrap_or("172.0.0.1".to_owned())) + let address = IpAddr::from_str(&config_var("ADDRESS").unwrap_or("172.0.0.1".to_owned())) .with_context(|| "Could not parse bind address at URSA_ADDRESS")?; let port = config_var("PORT")? .parse::() @@ -273,7 +272,10 @@ async fn run_server() -> anyhow::Result<()> { "Launching with configuration: {:#?}", *global_application_config ); - let addr = SocketAddr::from((global_application_config.address, global_application_config.port)); + let addr = SocketAddr::from(( + global_application_config.address, + global_application_config.port, + )); let redis_client = redis::Client::open(global_application_config.redis_url.clone())?; let managed = redis::aio::ConnectionManager::new(redis_client).await?; let service = make_service_fn(|_conn| { From d6ed4c56a320ae5436c6c0894b8621efcc8aee68 Mon Sep 17 00:00:00 2001 From: Tyler Beckman Date: Thu, 19 Jun 2025 00:47:35 -0600 Subject: [PATCH 3/4] Add missing feature gates --- src/main.rs | 1 + src/util.rs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/main.rs b/src/main.rs index 203c5c9..0aea290 100644 --- a/src/main.rs +++ b/src/main.rs @@ -205,6 +205,7 @@ fn init_config() -> anyhow::Result { default_token_duration: Duration::from_secs(token_lifespan), rate_limit_lifespan, rate_limit_bucket, + #[cfg(feature = "influxdb")] influx_url, }) } diff --git a/src/util.rs b/src/util.rs index bb36380..666dda0 100644 --- a/src/util.rs +++ b/src/util.rs @@ -17,6 +17,7 @@ use chrono::Utc; use hyper::http::request::Builder; use hyper::Uri; +#[cfg(feature = "influxdb")] use influxdb::Timestamp; use serde::{Deserialize, Serialize}; use std::fmt::{Debug, Formatter, Write}; @@ -69,11 +70,14 @@ impl Debug for MillisecondTimestamp { } } +#[cfg(feature = "influxdb")] impl From for Timestamp { fn from(value: MillisecondTimestamp) -> Self { chrono::DateTime::::from(SystemTime::from(value)).into() } } + +#[cfg(feature = "influxdb")] impl From for MillisecondTimestamp { fn from(value: Timestamp) -> Self { let datetime: chrono::DateTime = value.into(); From beb26c3572dc600a255645d7a797eabffb9e72a9 Mon Sep 17 00:00:00 2001 From: Tyler Beckman Date: Fri, 20 Jun 2025 00:26:31 -0600 Subject: [PATCH 4/4] Add meta to nix packaging --- flake.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/flake.nix b/flake.nix index 20292b8..642571c 100644 --- a/flake.nix +++ b/flake.nix @@ -34,6 +34,11 @@ buildInputs = deps; nativeBuildInputs = [pkgs.pkg-config]; env = {GIT_HASH = self.rev or self.dirtyRev or "nix-dirty";}; + + meta = { + mainProgram = "ursa-minor"; + license = lib.licenses.agpl3Only; + }; }; devShells.default = mkShell { buildInputs =