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 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<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);
/// Baut den Client aus einer aufgeloesten [`DtrackConfig`].
pub fn from_config(cfg: &DtrackConfig) -> Result<Self> {
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> {
Self::from_config(&DtrackConfig::from_env()?)
}
async fn get(&self, path: &str) -> Result<String> {
let url = format!("{}{}", self.base_url, path);
let resp = self