From 9cfdb87507987e273209e0cd5a626da37c530568 Mon Sep 17 00:00:00 2001 From: Sebas Date: Tue, 23 Jun 2026 16:12:32 +0000 Subject: [PATCH] Stage 1: DtrackClient::from_config + DtrackConfig re-export --- crates/dtrack-core/src/lib.rs | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/crates/dtrack-core/src/lib.rs b/crates/dtrack-core/src/lib.rs index 976b8f9..3bf7338 100644 --- a/crates/dtrack-core/src/lib.rs +++ b/crates/dtrack-core/src/lib.rs @@ -1,6 +1,8 @@ use anyhow::{Context, Result}; use reqwest::Client; +pub use dtrack_config::DtrackConfig; + /// Read-only Client fuer die Dependency-Track REST-API (v1). /// /// Bewusst duenn: liefert die rohen JSON-Antworten als String zurueck. Das @@ -20,29 +22,25 @@ pub fn normalize_base(base: &str) -> String { } impl DtrackClient { - /// Baut den Client aus Umgebungsvariablen: - /// - `DTRACK_URL`: Basis-URL der DT-Instanz (z.B. https://dtrack.firma.intern) - /// - `DTRACK_API_KEY`: API-Key eines read-only Teams - /// - `DTRACK_INSECURE`: optional "1"/"true" -> TLS-Pruefung aus (Notbehelf bei internem CA-Cert) - pub fn from_env() -> Result { - let base = std::env::var("DTRACK_URL").context("DTRACK_URL nicht gesetzt")?; - let api_key = std::env::var("DTRACK_API_KEY").context("DTRACK_API_KEY nicht gesetzt")?; - let insecure = std::env::var("DTRACK_INSECURE") - .map(|v| v == "1" || v.eq_ignore_ascii_case("true")) - .unwrap_or(false); - + /// Baut den Client aus einer aufgeloesten [`DtrackConfig`]. + pub fn from_config(cfg: &DtrackConfig) -> Result { let http = Client::builder() - .danger_accept_invalid_certs(insecure) + .danger_accept_invalid_certs(cfg.insecure) .build() .context("HTTP-Client konnte nicht erstellt werden")?; Ok(Self { http, - base_url: normalize_base(&base), - api_key, + base_url: normalize_base(&cfg.url), + api_key: cfg.api_key.clone(), }) } + /// Convenience: Config aus Umgebungsvariablen lesen und Client bauen. + pub fn from_env() -> Result { + Self::from_config(&DtrackConfig::from_env()?) + } + async fn get(&self, path: &str) -> Result { let url = format!("{}{}", self.base_url, path); let resp = self