hls url token handling without delimiter

This commit is contained in:
euzu
2025-04-30 11:30:09 +02:00
parent fc90202de1
commit a58d537dd3
2 changed files with 22 additions and 5 deletions
+20 -3
View File
@@ -6,16 +6,18 @@ use std::str;
fn create_hls_session_token_and_url(secret: &[u8], session_token: u32, stream_url: &str) -> Option<String> {
let token = hash_utils::u32_to_base64(session_token);
if let Ok(cookie_value) = obfuscate_text(secret, &format!("{token}@{stream_url}")) {
if let Ok(cookie_value) = obfuscate_text(secret, &format!("{token}{stream_url}")) {
return Some(cookie_value);
}
None
}
const TOKEN_LEN: usize = 6;
pub fn get_hls_session_token_and_url_from_token(secret: &[u8], token: &str) -> Option<(Option<u32>, String)> {
if let Ok(decrypted) = deobfuscate_text(secret, token) {
let (session_token, stream_url) = decrypted.split_once('@')?;
return Some((hash_utils::base64_to_u32(session_token), stream_url.to_owned()));
let session_token: String = decrypted.chars().take(TOKEN_LEN).collect();
let stream_url: String = decrypted.chars().skip(TOKEN_LEN).collect();
return Some((hash_utils::base64_to_u32(&session_token), stream_url));
}
None
}
@@ -96,3 +98,18 @@ pub fn rewrite_hls(user: &ProxyUserCredentials, props: &RewriteHlsProps) -> Stri
result.push("\r\n".to_string());
result.join("\r\n")
}
#[cfg(test)]
mod test {
use rand::RngCore;
use crate::utils::hash_utils;
#[test]
fn test_token_size() {
for _i in 0..10_000 {
let session_token = rand::rng().next_u32();
assert_eq!(hash_utils::u32_to_base64(session_token).len(), 6);
}
}
}