aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-22 15:23:52 +0900
committernsfisis <nsfisis@gmail.com>2026-02-22 15:23:52 +0900
commit7f75c394502d32a9a8967dcf3602141098fdd07d (patch)
treea608e90009d5664933fc5bba3cd08a5c7d2e5a48
parent0a6bafc75f329910bcaeb7d83feee3f9b01db66b (diff)
downloadphp-mozart-7f75c394502d32a9a8967dcf3602141098fdd07d.tar.gz
php-mozart-7f75c394502d32a9a8967dcf3602141098fdd07d.tar.zst
php-mozart-7f75c394502d32a9a8967dcf3602141098fdd07d.zip
refactor(http): centralize User-Agent string in mozart-core
Add mozart_core::http::user_agent() that returns a consistent "Mozart/<version> (<os>; <arch>)" string. Replace all scattered user-agent definitions across mozart-registry and mozart CLI commands. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
-rw-r--r--crates/mozart-core/src/http.rs11
-rw-r--r--crates/mozart-core/src/lib.rs1
-rw-r--r--crates/mozart-registry/src/downloader.rs5
-rw-r--r--crates/mozart-registry/src/packagist.rs9
-rw-r--r--crates/mozart/src/commands/diagnose.rs4
-rw-r--r--crates/mozart/src/commands/self_update.rs4
6 files changed, 26 insertions, 8 deletions
diff --git a/crates/mozart-core/src/http.rs b/crates/mozart-core/src/http.rs
new file mode 100644
index 0000000..ebd28f9
--- /dev/null
+++ b/crates/mozart-core/src/http.rs
@@ -0,0 +1,11 @@
+/// Returns the common User-Agent string for all HTTP requests.
+///
+/// Format: `Mozart/<version> (<os>; <arch>)`
+pub fn user_agent() -> String {
+ format!(
+ "Mozart/{} ({}; {})",
+ env!("CARGO_PKG_VERSION"),
+ std::env::consts::OS,
+ std::env::consts::ARCH,
+ )
+}
diff --git a/crates/mozart-core/src/lib.rs b/crates/mozart-core/src/lib.rs
index b02e5a3..aef7af3 100644
--- a/crates/mozart-core/src/lib.rs
+++ b/crates/mozart-core/src/lib.rs
@@ -1,5 +1,6 @@
pub mod console;
pub mod exit_code;
+pub mod http;
pub mod package;
pub mod platform;
pub mod suggest;
diff --git a/crates/mozart-registry/src/downloader.rs b/crates/mozart-registry/src/downloader.rs
index 9a5ed24..8bd99c7 100644
--- a/crates/mozart-registry/src/downloader.rs
+++ b/crates/mozart-registry/src/downloader.rs
@@ -108,7 +108,10 @@ pub async fn download_dist(
}
}
- let response = reqwest::get(url).await?;
+ let client = reqwest::Client::builder()
+ .user_agent(mozart_core::http::user_agent())
+ .build()?;
+ let response = client.get(url).send().await?;
if !response.status().is_success() {
anyhow::bail!(
diff --git a/crates/mozart-registry/src/packagist.rs b/crates/mozart-registry/src/packagist.rs
index e851955..ac290fb 100644
--- a/crates/mozart-registry/src/packagist.rs
+++ b/crates/mozart-registry/src/packagist.rs
@@ -215,7 +215,10 @@ pub async fn fetch_package_versions(
// Cache miss — fetch from Packagist
let url = format!("https://repo.packagist.org/p2/{package_name}.json");
- let response = reqwest::get(&url).await?;
+ let client = reqwest::Client::builder()
+ .user_agent(mozart_core::http::user_agent())
+ .build()?;
+ let response = client.get(&url).send().await?;
if !response.status().is_success() {
anyhow::bail!(
@@ -285,7 +288,7 @@ pub async fn search_packages(
package_type: Option<&str>,
) -> anyhow::Result<(Vec<SearchResult>, u64)> {
let client = reqwest::Client::builder()
- .user_agent("mozart/0.1.0")
+ .user_agent(mozart_core::http::user_agent())
.build()?;
let mut all_results: Vec<SearchResult> = Vec::new();
@@ -396,7 +399,7 @@ pub async fn fetch_security_advisories(
package_names: &[&str],
) -> anyhow::Result<BTreeMap<String, Vec<SecurityAdvisory>>> {
let client = reqwest::Client::builder()
- .user_agent("mozart/0.1.0")
+ .user_agent(mozart_core::http::user_agent())
.build()?;
let mut all_advisories: BTreeMap<String, Vec<SecurityAdvisory>> = BTreeMap::new();
diff --git a/crates/mozart/src/commands/diagnose.rs b/crates/mozart/src/commands/diagnose.rs
index da37137..dc1ea85 100644
--- a/crates/mozart/src/commands/diagnose.rs
+++ b/crates/mozart/src/commands/diagnose.rs
@@ -83,7 +83,7 @@ async fn check_http_connectivity(url: &str) -> CheckResult {
let client = match reqwest::Client::builder()
.timeout(std::time::Duration::from_secs(10))
- .user_agent(concat!("mozart/", env!("CARGO_PKG_VERSION")))
+ .user_agent(mozart_core::http::user_agent())
.build()
{
Ok(c) => c,
@@ -111,7 +111,7 @@ async fn check_github_api() -> CheckResult {
let client = match reqwest::Client::builder()
.timeout(std::time::Duration::from_secs(10))
- .user_agent(concat!("mozart/", env!("CARGO_PKG_VERSION")))
+ .user_agent(mozart_core::http::user_agent())
.build()
{
Ok(c) => c,
diff --git a/crates/mozart/src/commands/self_update.rs b/crates/mozart/src/commands/self_update.rs
index 9f6a7fe..ad9ae74 100644
--- a/crates/mozart/src/commands/self_update.rs
+++ b/crates/mozart/src/commands/self_update.rs
@@ -133,7 +133,7 @@ async fn fetch_releases(include_prerelease: bool) -> anyhow::Result<Vec<GitHubRe
let client = reqwest::Client::builder()
.timeout(std::time::Duration::from_secs(30))
- .user_agent(concat!("mozart/", env!("CARGO_PKG_VERSION")))
+ .user_agent(mozart_core::http::user_agent())
.build()
.map_err(|e| anyhow::anyhow!("Could not build HTTP client: {e}"))?;
@@ -212,7 +212,7 @@ async fn download_asset(
) -> anyhow::Result<()> {
let client = reqwest::Client::builder()
.timeout(std::time::Duration::from_secs(300))
- .user_agent(concat!("mozart/", env!("CARGO_PKG_VERSION")))
+ .user_agent(mozart_core::http::user_agent())
.build()
.map_err(|e| anyhow::anyhow!("Could not build HTTP client: {e}"))?;