Skip to content

Commit b2915ee

Browse files
authored
fix(cdn_url): add support for verify query parameter (#1513)
- Updated `MaybeExpiringUrls` to handle `verify` query parameter. - Extracted expiry timestamp from `verify` parameter if present. - Adjusted test cases to include URLs with `verify` parameter. - Updated assertions to account for the new URL format. This change ensures compatibility with URLs containing the `verify` query parameter, improving the flexibility of the CDN URL handling. Solves #1512
1 parent 2c425eb commit b2915ee

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

core/src/cdn_url.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,15 @@ impl TryFrom<CdnUrlMessage> for MaybeExpiringUrls {
119119
if is_expiring {
120120
let mut expiry_str: Option<String> = None;
121121
if let Some(token) = url
122+
.query_pairs()
123+
.into_iter()
124+
.find(|(key, _value)| key == "verify")
125+
{
126+
// https://audio-cf.spotifycdn.com/audio/844ecdb297a87ebfee4399f28892ef85d9ba725f?verify=1750549951-4R3I2w2q7OfNkR%2FGH8qH7xtIKUPlDxywBuADY%2BsvMeU%3D
127+
if let Some((expiry_str_candidate, _)) = token.1.split_once('-') {
128+
expiry_str = Some(expiry_str_candidate.to_string());
129+
}
130+
} else if let Some(token) = url
122131
.query_pairs()
123132
.into_iter()
124133
.find(|(key, _value)| key == "__token__")
@@ -187,6 +196,7 @@ mod test {
187196
let mut msg = CdnUrlMessage::new();
188197
msg.result = StorageResolveResponse_Result::CDN.into();
189198
msg.cdnurl = vec![
199+
format!("https://audio-cf.spotifycdn.com/audio/844ecdb297a87ebfee4399f28892ef85d9ba725f?verify={timestamp}-4R3I2w2q7OfNkR%2FGH8qH7xtIKUPlDxywBuADY%2BsvMeU%3D"),
190200
format!("https://audio-ak-spotify-com.akamaized.net/audio/foo?__token__=exp={timestamp}~hmac=4e661527574fab5793adb99cf04e1c2ce12294c71fe1d39ffbfabdcfe8ce3b41"),
191201
format!("https://audio-gm-off.spotifycdn.com/audio/foo?Expires={timestamp}~FullPath~hmac=IIZA28qptl8cuGLq15-SjHKHtLoxzpy_6r_JpAU4MfM="),
192202
format!("https://audio4-fa.scdn.co/audio/foo?{timestamp}_0GKSyXjLaTW1BksFOyI4J7Tf9tZDbBUNNPu9Mt4mhH4="),
@@ -195,11 +205,12 @@ mod test {
195205
msg.fileid = vec![0];
196206

197207
let urls = MaybeExpiringUrls::try_from(msg).expect("valid urls");
198-
assert_eq!(urls.len(), 4);
208+
assert_eq!(urls.len(), 5);
199209
assert!(urls[0].1.is_some());
200210
assert!(urls[1].1.is_some());
201211
assert!(urls[2].1.is_some());
202-
assert!(urls[3].1.is_none());
212+
assert!(urls[3].1.is_some());
213+
assert!(urls[4].1.is_none());
203214
let timestamp_margin = Duration::seconds(timestamp) - CDN_URL_EXPIRY_MARGIN;
204215
assert_eq!(
205216
urls[0].1.unwrap().as_timestamp_ms() as i128,

0 commit comments

Comments
 (0)