mirror of
https://github.com/euzu/tuliprox.git
synced 2026-10-12 02:42:30 +02:00
hls url token handling without delimiter
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user