From 15e4857d4c5ebbc04d43dc40831253c092a2f45f Mon Sep 17 00:00:00 2001 From: Juanjo Presa Date: Mon, 4 May 2026 19:07:41 +0200 Subject: [PATCH] build: remove vendored OpenSSL dependency (#743) * build: remove vendored OpenSSL dependency * remvoed unnecessary comments and clippy fixes --- CHANGELOG.md | 1 + Cargo.lock | 111 +++++++----------- backend/Cargo.toml | 3 +- backend/src/api/config_file.rs | 4 +- backend/src/api/endpoints/download_api.rs | 2 +- backend/src/api/endpoints/hdhomerun_api.rs | 2 +- backend/src/api/endpoints/hls_api.rs | 2 +- backend/src/api/endpoints/web_index.rs | 22 +--- backend/src/api/endpoints/xtream_api.rs | 4 +- backend/src/api/main_api.rs | 2 +- .../src/api/model/metadata_update_manager.rs | 2 +- backend/src/library/processor.rs | 2 +- backend/src/library/scanner.rs | 4 +- backend/src/main.rs | 16 +-- backend/src/model/config/web_auth.rs | 2 +- backend/src/processing/parser/m3u.rs | 10 +- backend/src/processing/playlist_watch.rs | 6 +- backend/src/processing/processor/epg.rs | 2 +- backend/src/processing/processor/playlist.rs | 2 +- backend/src/repository/m3u_repository.rs | 4 +- backend/src/repository/playlist_repository.rs | 8 +- backend/src/repository/strm_repository.rs | 2 +- backend/src/repository/target_id_mapping.rs | 2 +- backend/src/repository/user_repository.rs | 2 +- .../repository/xtream_playlist_iterator.rs | 4 +- backend/src/repository/xtream_repository.rs | 6 +- backend/src/utils/crypto_utils.rs | 78 +++++++----- backend/src/utils/file/config_reader.rs | 12 +- backend/src/utils/logging.rs | 2 +- backend/src/utils/lru_cache.rs | 4 +- backend/src/utils/network/request.rs | 10 +- backend/src/utils/network/xtream.rs | 14 +-- docker/Dockerfile | 4 +- docker/Dockerfile-cross | 5 +- frontend/src/services/event_service.rs | 2 +- shared/src/foundation/filter.rs | 28 ++--- shared/src/model/config/api_proxy.rs | 10 +- shared/src/model/config/rename.rs | 2 +- shared/src/model/mapping.rs | 22 ++-- shared/src/model/stream_properties.rs | 10 +- 40 files changed, 199 insertions(+), 231 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef15dbba0..69e859814 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -193,6 +193,7 @@ - **API User Category Selection**: Fixed API user category selection in the Web UI. - **Refactored Playlist And EPG Explorer**: Playlist Explorer and EPG Explorer have been refactored for improved reliability and UX. - HLS session info now reports accurate duration and total transferred data. +- Removed open-ssl dependency ## ⚙️ New Settings diff --git a/Cargo.lock b/Cargo.lock index 6adda8a0f..19344561d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,17 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + [[package]] name = "ahash" version = "0.8.12" @@ -524,6 +535,16 @@ dependencies = [ "half", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clap" version = "4.6.0" @@ -763,6 +784,15 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -1219,21 +1249,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -2187,6 +2202,15 @@ dependencies = [ "libc", ] +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + [[package]] name = "ipnet" version = "2.12.0" @@ -2744,60 +2768,12 @@ version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" -[[package]] -name = "openssl" -version = "0.10.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "951c002c75e16ea2c65b8c7e4d3d51d5530d8dfa7d060b4776828c88cfb18ecf" -dependencies = [ - "bitflags 2.11.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "openssl-probe" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" -[[package]] -name = "openssl-src" -version = "300.5.5+3.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f1787d533e03597a7934fd0a765f0d28e94ecc5fb7789f8053b1e699a56f709" -dependencies = [ - "cc", -] - -[[package]] -name = "openssl-sys" -version = "0.9.112" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb" -dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", -] - [[package]] name = "p256" version = "0.13.2" @@ -4623,6 +4599,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" name = "tuliprox" version = "3.3.27" dependencies = [ + "aes", "arc-swap", "async-compression", "axum", @@ -4635,6 +4612,7 @@ dependencies = [ "clap", "crc32fast", "cron", + "ctr", "dashmap", "deunicode", "enum-iterator", @@ -4663,7 +4641,6 @@ dependencies = [ "mime", "mime_guess", "notify", - "openssl", "parking_lot", "paste", "path-clean", @@ -4817,12 +4794,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "vergen" version = "9.1.0" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 2570fa8cc..1cf349a7b 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -33,7 +33,8 @@ path-clean.workspace = true pest.workspace = true pest_derive.workspace = true enum-iterator.workspace = true -openssl = { version = "0.10.76", features = ["vendored"] } #https://docs.rs/openssl/0.10.34/openssl/#vendored +aes = "0.8.4" +ctr = "0.9.2" deunicode.workspace = true mime = "0.3.17" log.workspace = true diff --git a/backend/src/api/config_file.rs b/backend/src/api/config_file.rs index 1d039ace2..8e3ee698a 100644 --- a/backend/src/api/config_file.rs +++ b/backend/src/api/config_file.rs @@ -240,11 +240,11 @@ impl ConfigFile { Ok(Some(api_proxy)) => { app_state.app_config.set_api_proxy(api_proxy)?; let paths = app_state.app_config.paths.load(); - info!("Loaded Api Proxy File: {:?}", &paths.api_proxy_file_path); + info!("Loaded Api Proxy File: {:?}", paths.api_proxy_file_path); } Ok(None) => { let paths = app_state.app_config.paths.load(); - info!("Could not load Api Proxy File: {:?}", &paths.api_proxy_file_path); + info!("Could not load Api Proxy File: {:?}", paths.api_proxy_file_path); } Err(err) => { error!("Failed to load api-proxy file {err}"); diff --git a/backend/src/api/endpoints/download_api.rs b/backend/src/api/endpoints/download_api.rs index 5650b4ba7..3ebfb6cd7 100644 --- a/backend/src/api/endpoints/download_api.rs +++ b/backend/src/api/endpoints/download_api.rs @@ -597,7 +597,7 @@ async fn download_file( } Err(err) => DownloadExecutionResult::Failed(format!( "Error while creating directory for file: {} {}", - &file_download.file_dir.to_str().unwrap_or("?"), + file_download.file_dir.to_str().unwrap_or("?"), err )), } diff --git a/backend/src/api/endpoints/hdhomerun_api.rs b/backend/src/api/endpoints/hdhomerun_api.rs index 5177b2d96..776bd55c4 100644 --- a/backend/src/api/endpoints/hdhomerun_api.rs +++ b/backend/src/api/endpoints/hdhomerun_api.rs @@ -203,7 +203,7 @@ fn create_device(app_state: &Arc) -> Option { } else { error!( "Failed to get credentials for username: {} for device: {} ", - &app_state.device.t_username, &app_state.device.name + app_state.device.t_username, app_state.device.name ); None } diff --git a/backend/src/api/endpoints/hls_api.rs b/backend/src/api/endpoints/hls_api.rs index c0b839494..67c98a587 100644 --- a/backend/src/api/endpoints/hls_api.rs +++ b/backend/src/api/endpoints/hls_api.rs @@ -315,7 +315,7 @@ pub(in crate::api) async fn handle_hls_stream_request( if custom_stream_response.as_ref().and_then(|c| c.channel_unavailable.as_ref()).is_some() { let url = format!( "{}/{CUSTOM_VIDEO_PREFIX}/{}/{}/{}.ts", - &server_info.get_base_url(), + server_info.get_base_url(), user.username, user.password, CustomVideoStreamType::ChannelUnavailable diff --git a/backend/src/api/endpoints/web_index.rs b/backend/src/api/endpoints/web_index.rs index 2fd499c90..b26fc67d7 100644 --- a/backend/src/api/endpoints/web_index.rs +++ b/backend/src/api/endpoints/web_index.rs @@ -10,8 +10,7 @@ use axum::{body::Body, http::Request, response::IntoResponse}; use base64::Engine; use log::{debug, error}; use lol_html::{element, RewriteStrSettings}; -//use base64::engine::general_purpose; -use openssl::rand::rand_bytes; +use rand::{rngs::OsRng, RngCore, TryRngCore}; use serde_json::json; use shared::{ model::{TokenResponse, UserCredential, TOKEN_NO_AUTH}, @@ -21,7 +20,6 @@ use std::{ path::{Path, PathBuf}, sync::Arc, }; -//use openssl::sha::{sha256}; use tower::{Service, ServiceExt}; use tower_http::services::ServeFile; @@ -238,25 +236,11 @@ async fn index( // ContentSecurityPolicy nonce let mut rnd = [0u8; 32]; - if let Err(e) = rand_bytes(&mut rnd) { - error!("Failed to generate random bytes for nonce: {e}"); - // Fallback: without further manipulation back - return try_unwrap_body!(axum::response::Response::builder() - .header(axum::http::header::CONTENT_TYPE, mime::TEXT_HTML_UTF_8.as_ref()) - .body(new_content)); + if OsRng.try_fill_bytes(&mut rnd).is_err() { + rand::rng().fill_bytes(&mut rnd); } let nonce_b64 = base64::engine::general_purpose::STANDARD.encode(rnd); - // let hash = sha256(&rnd); - // let nonce_b64 = general_purpose::STANDARD_NO_PAD.encode(hash); - - // Insert calculated nonce - // let script_tag = r#"