aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/util
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-06 21:22:22 +0900
committernsfisis <nsfisis@gmail.com>2026-06-06 21:33:05 +0900
commit8bd02532cd04ee12d7595029c206f3dc5ab9dd96 (patch)
tree5f9897bfefcb9a503d92560311c4d95ee620a025 /crates/shirabe/src/util
parentc0b743c8d75813003756a72d2fdd110de8368b5f (diff)
downloadphp-shirabe-8bd02532cd04ee12d7595029c206f3dc5ab9dd96.tar.gz
php-shirabe-8bd02532cd04ee12d7595029c206f3dc5ab9dd96.tar.zst
php-shirabe-8bd02532cd04ee12d7595029c206f3dc5ab9dd96.zip
chore(shirabe): remove ports of PHP @deprecated APIs
Composer does not use its own deprecated APIs internally, so drop their Rust ports: whole deprecated classes, methods, constants, and field. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/util')
-rw-r--r--crates/shirabe/src/util/auth_helper.rs47
-rw-r--r--crates/shirabe/src/util/git.rs3
-rw-r--r--crates/shirabe/src/util/metadata_minifier.rs1
-rw-r--r--crates/shirabe/src/util/mod.rs4
-rw-r--r--crates/shirabe/src/util/tls_helper.rs193
5 files changed, 4 insertions, 244 deletions
diff --git a/crates/shirabe/src/util/auth_helper.rs b/crates/shirabe/src/util/auth_helper.rs
index 0465b10..61970f2 100644
--- a/crates/shirabe/src/util/auth_helper.rs
+++ b/crates/shirabe/src/util/auth_helper.rs
@@ -5,9 +5,9 @@ use anyhow::Result;
use indexmap::IndexMap;
use shirabe_external_packages::composer::pcre::Preg;
use shirabe_php_shim::{
- E_USER_DEPRECATED, PHP_URL_HOST, PHP_URL_PATH, PHP_URL_SCHEME, PhpMixed, RuntimeException,
- base64_encode, explode, in_array, is_array, is_string, json_decode, parse_url, sprintf,
- str_replace, strpos, strtolower, substr, trigger_error, trim,
+ PHP_URL_HOST, PHP_URL_PATH, PHP_URL_SCHEME, PhpMixed, RuntimeException, base64_encode, explode,
+ in_array, is_array, is_string, json_decode, parse_url, sprintf, str_replace, strpos,
+ strtolower, substr, trim,
};
use crate::config::Config;
@@ -478,47 +478,6 @@ impl AuthHelper {
})
}
- /// @deprecated use addAuthenticationOptions instead
- ///
- /// @param string[] $headers
- ///
- /// @return string[] updated headers array
- pub fn add_authentication_header(
- &mut self,
- headers: Vec<String>,
- origin: &str,
- url: &str,
- ) -> Result<Vec<String>> {
- trigger_error(
- "AuthHelper::addAuthenticationHeader is deprecated since Composer 2.9 use addAuthenticationOptions instead.",
- E_USER_DEPRECATED,
- );
-
- // PHP: $options = ['http' => ['header' => &$headers]];
- // PHP uses references so subsequent mutations affect $headers
- let mut options: IndexMap<String, PhpMixed> = IndexMap::new();
- let mut http: IndexMap<String, Box<PhpMixed>> = IndexMap::new();
- http.insert(
- "header".to_string(),
- Box::new(PhpMixed::List(
- headers
- .iter()
- .map(|h| Box::new(PhpMixed::String(h.clone())))
- .collect(),
- )),
- );
- options.insert("http".to_string(), PhpMixed::Array(http));
-
- let options = self.add_authentication_options(options, origin, url)?;
-
- let http = options.get("http").and_then(|v| v.as_array()).unwrap();
- let header = http.get("header").and_then(|v| v.as_list()).unwrap();
- Ok(header
- .iter()
- .filter_map(|v| v.as_string().map(|s| s.to_string()))
- .collect())
- }
-
/// @param array<string, mixed> $options
///
/// @return array<string, mixed> updated options
diff --git a/crates/shirabe/src/util/git.rs b/crates/shirabe/src/util/git.rs
index b2438c7..7e9619c 100644
--- a/crates/shirabe/src/util/git.rs
+++ b/crates/shirabe/src/util/git.rs
@@ -135,8 +135,7 @@ impl Git {
/// @param callable|array<callable> $commandCallable
/// @param mixed $commandOutput the output will be written into this var if passed by ref
/// if a callable is passed it will be used as output handler
- /// @deprecated Use runCommands with placeholders instead of callbacks for simplicity
- pub fn run_command(
+ fn run_command(
&mut self,
command_callable: Vec<Box<dyn Fn(&str) -> Vec<String>>>,
url: &str,
diff --git a/crates/shirabe/src/util/metadata_minifier.rs b/crates/shirabe/src/util/metadata_minifier.rs
deleted file mode 100644
index ddad547..0000000
--- a/crates/shirabe/src/util/metadata_minifier.rs
+++ /dev/null
@@ -1 +0,0 @@
-//! ref: composer/src/Composer/Util/MetadataMinifier.php
diff --git a/crates/shirabe/src/util/mod.rs b/crates/shirabe/src/util/mod.rs
index 633928b..d34fce5 100644
--- a/crates/shirabe/src/util/mod.rs
+++ b/crates/shirabe/src/util/mod.rs
@@ -15,7 +15,6 @@ pub mod http;
pub mod http_downloader;
pub mod ini_helper;
pub mod r#loop;
-pub mod metadata_minifier;
pub mod no_proxy_pattern;
pub mod package_info;
pub mod package_sorter;
@@ -28,7 +27,6 @@ pub mod stream_context_factory;
pub mod svn;
pub mod sync_helper;
pub mod tar;
-pub mod tls_helper;
pub mod url;
pub mod zip;
@@ -48,7 +46,6 @@ pub use hg::*;
pub use http::*;
pub use http_downloader::*;
pub use ini_helper::*;
-pub use metadata_minifier::*;
pub use no_proxy_pattern::*;
pub use package_info::*;
pub use package_sorter::*;
@@ -61,6 +58,5 @@ pub use stream_context_factory::*;
pub use svn::*;
pub use sync_helper::*;
pub use tar::*;
-pub use tls_helper::*;
pub use url::*;
pub use zip::*;
diff --git a/crates/shirabe/src/util/tls_helper.rs b/crates/shirabe/src/util/tls_helper.rs
deleted file mode 100644
index 0c20dd4..0000000
--- a/crates/shirabe/src/util/tls_helper.rs
+++ /dev/null
@@ -1,193 +0,0 @@
-//! ref: composer/src/Composer/Util/TlsHelper.php
-
-use shirabe_external_packages::composer::ca_bundle::CaBundle;
-use shirabe_external_packages::composer::pcre::Preg;
-use shirabe_php_shim::{
- PhpMixed, RuntimeException, base64_decode, openssl_get_publickey, openssl_pkey_get_details,
- openssl_x509_parse, preg_quote, substr_count,
-};
-
-/// @deprecated Use composer/ca-bundle and composer/composer 2.2 if you still need PHP 5 compatibility
-pub struct TlsHelper;
-
-impl TlsHelper {
- pub fn check_certificate_host(
- certificate: &PhpMixed,
- hostname: &str,
- cn: &mut Option<String>,
- ) -> bool {
- let names = match Self::get_certificate_names(certificate) {
- Some(n) => n,
- None => return false,
- };
-
- let mut combined_names = names.san.clone();
- combined_names.push(names.cn.clone());
- let hostname = hostname.to_lowercase();
-
- for cert_name in &combined_names {
- if let Some(matcher) = Self::cert_name_matcher(cert_name) {
- if matcher(&hostname) {
- *cn = Some(names.cn.clone());
- return true;
- }
- }
- }
-
- false
- }
-
- pub fn get_certificate_names(certificate: &PhpMixed) -> Option<CertificateNames> {
- let info = match certificate {
- PhpMixed::Array(arr) => arr.clone(),
- _ => {
- if CaBundle::is_openssl_parse_safe() {
- if let PhpMixed::String(cert_str) = certificate {
- openssl_x509_parse(cert_str, false)?
- } else {
- return None;
- }
- } else {
- return None;
- }
- }
- };
-
- let common_name = info
- .get("subject")
- .and_then(|v| v.as_array())
- .and_then(|subj| subj.get("commonName"))
- .and_then(|cn| cn.as_string())
- .map(|s| s.to_lowercase())?;
-
- let mut subject_alt_names = vec![];
- if let Some(san_value) = info
- .get("extensions")
- .and_then(|v| v.as_array())
- .and_then(|ext| ext.get("subjectAltName"))
- .and_then(|v| v.as_string())
- {
- let parts = Preg::split(r"{\s*,\s*}", san_value).unwrap_or_default();
- for name in parts {
- if name.starts_with("DNS:") {
- let dns = name[4..].trim_start().to_lowercase();
- subject_alt_names.push(dns);
- }
- }
- }
-
- Some(CertificateNames {
- cn: common_name,
- san: subject_alt_names,
- })
- }
-
- /// Get the certificate pin.
- ///
- /// By Kevin McArthur of StormTide Digital Studios Inc.
- /// @KevinSMcArthur / https://github.com/StormTide
- ///
- /// See https://tools.ietf.org/html/draft-ietf-websec-key-pinning-02
- ///
- /// This method was adapted from Sslurp.
- /// https://github.com/EvanDotPro/Sslurp
- ///
- /// (c) Evan Coury <me@evancoury.com>
- ///
- /// For the full copyright and license information, please see below:
- ///
- /// Copyright (c) 2013, Evan Coury
- /// All rights reserved.
- ///
- /// Redistribution and use in source and binary forms, with or without modification,
- /// are permitted provided that the following conditions are met:
- ///
- /// * Redistributions of source code must retain the above copyright notice,
- /// this list of conditions and the following disclaimer.
- ///
- /// * Redistributions in binary form must reproduce the above copyright notice,
- /// this list of conditions and the following disclaimer in the documentation
- /// and/or other materials provided with the distribution.
- ///
- /// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- /// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- /// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- /// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- /// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- /// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- /// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- /// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- /// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- /// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- pub fn get_certificate_fingerprint(certificate: &str) -> anyhow::Result<String> {
- let pubkey = openssl_get_publickey(certificate).ok_or_else(|| RuntimeException {
- message: "Failed to retrieve the public key from certificate".to_string(),
- code: 0,
- })?;
- let pubkeydetails = openssl_pkey_get_details(pubkey).ok_or_else(|| RuntimeException {
- message: "Failed to retrieve public key details".to_string(),
- code: 0,
- })?;
- let pubkeypem = pubkeydetails
- .get("key")
- .and_then(|v| v.as_string())
- .unwrap_or("")
- .to_string();
-
- let start = "-----BEGIN PUBLIC KEY-----";
- let end = "-----END PUBLIC KEY-----";
- let start_pos = pubkeypem.find(start).unwrap_or(0) + start.len();
- let end_pos = pubkeypem.rfind(end).unwrap_or(pubkeypem.len());
- let pemtrim = &pubkeypem[start_pos..end_pos];
-
- let der = base64_decode(pemtrim).unwrap_or_default();
-
- Ok(shirabe_php_shim::hash(
- "sha1",
- &String::from_utf8_lossy(&der),
- ))
- }
-
- pub fn is_openssl_parse_safe() -> bool {
- CaBundle::is_openssl_parse_safe()
- }
-
- fn cert_name_matcher(cert_name: &str) -> Option<Box<dyn Fn(&str) -> bool>> {
- let wildcards = substr_count(cert_name, "*");
-
- if wildcards == 0 {
- let name = cert_name.to_string();
- return Some(Box::new(move |hostname: &str| hostname == name));
- }
-
- if wildcards == 1 {
- let components: Vec<&str> = cert_name.split('.').collect();
-
- if components.len() < 3 {
- return None;
- }
-
- let first_component = components[0];
-
- if !first_component.ends_with('*') {
- return None;
- }
-
- let mut wildcard_regex = preg_quote(cert_name, None);
- wildcard_regex = wildcard_regex.replace("\\*", "[a-z0-9-]+");
- let wildcard_regex = format!("{{^{}$}}", wildcard_regex);
-
- return Some(Box::new(move |hostname: &str| {
- Preg::is_match(&wildcard_regex, hostname).unwrap_or(false)
- }));
- }
-
- None
- }
-}
-
-#[derive(Debug)]
-pub struct CertificateNames {
- pub cn: String,
- pub san: Vec<String>,
-}