Stage 1: DtrackClient::from_config + DtrackConfig re-export
CI / test (push) Successful in 11m49s

This commit is contained in:
2026-06-23 16:12:32 +00:00
parent 7619f968fd
commit 9cfdb87507
+12 -14
View File
@@ -1,6 +1,8 @@
use anyhow::{Context, Result}; use anyhow::{Context, Result};
use reqwest::Client; use reqwest::Client;
pub use dtrack_config::DtrackConfig;
/// Read-only Client fuer die Dependency-Track REST-API (v1). /// Read-only Client fuer die Dependency-Track REST-API (v1).
/// ///
/// Bewusst duenn: liefert die rohen JSON-Antworten als String zurueck. Das /// Bewusst duenn: liefert die rohen JSON-Antworten als String zurueck. Das
@@ -20,29 +22,25 @@ pub fn normalize_base(base: &str) -> String {
} }
impl DtrackClient { impl DtrackClient {
/// Baut den Client aus Umgebungsvariablen: /// Baut den Client aus einer aufgeloesten [`DtrackConfig`].
/// - `DTRACK_URL`: Basis-URL der DT-Instanz (z.B. https://dtrack.firma.intern) pub fn from_config(cfg: &DtrackConfig) -> Result<Self> {
/// - `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<Self> {
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);
let http = Client::builder() let http = Client::builder()
.danger_accept_invalid_certs(insecure) .danger_accept_invalid_certs(cfg.insecure)
.build() .build()
.context("HTTP-Client konnte nicht erstellt werden")?; .context("HTTP-Client konnte nicht erstellt werden")?;
Ok(Self { Ok(Self {
http, http,
base_url: normalize_base(&base), base_url: normalize_base(&cfg.url),
api_key, api_key: cfg.api_key.clone(),
}) })
} }
/// Convenience: Config aus Umgebungsvariablen lesen und Client bauen.
pub fn from_env() -> Result<Self> {
Self::from_config(&DtrackConfig::from_env()?)
}
async fn get(&self, path: &str) -> Result<String> { async fn get(&self, path: &str) -> Result<String> {
let url = format!("{}{}", self.base_url, path); let url = format!("{}{}", self.base_url, path);
let resp = self let resp = self