Skip to content

Commit 5abc2bf

Browse files
committed
Add sas token format validation
Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
1 parent 27e2a86 commit 5abc2bf

1 file changed

Lines changed: 36 additions & 1 deletion

File tree

src/azure.rs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,18 @@ fn sanitize_tag_component(input: &str) -> String {
5353
.collect()
5454
}
5555

56+
fn normalize_sas_token(input: &str) -> String {
57+
let trimmed = input.trim();
58+
if trimmed.is_empty() {
59+
return String::new();
60+
}
61+
if trimmed.starts_with('?') {
62+
trimmed.to_string()
63+
} else {
64+
format!("?{}", trimmed)
65+
}
66+
}
67+
5668
/// Get Azure credentials from config.toml
5769
fn get_azure_credentials(name: &str) -> AzureConfig {
5870
let cfg_content = get_config_content();
@@ -67,7 +79,30 @@ fn get_azure_credentials(name: &str) -> AzureConfig {
6779
account: account.to_string(),
6880
key: key.to_string(),
6981
container: container.to_string(),
70-
sastoken: sastoken.to_string(),
82+
sastoken: normalize_sas_token(sastoken),
83+
}
84+
}
85+
86+
#[cfg(test)]
87+
mod tests {
88+
use super::normalize_sas_token;
89+
90+
#[test]
91+
fn sas_token_is_left_empty() {
92+
assert_eq!(normalize_sas_token(""), "");
93+
assert_eq!(normalize_sas_token(" "), "");
94+
}
95+
96+
#[test]
97+
fn sas_token_is_left_intact_when_prefixed() {
98+
assert_eq!(normalize_sas_token("?sv=1"), "?sv=1");
99+
assert_eq!(normalize_sas_token(" ?sv=1 "), "?sv=1");
100+
}
101+
102+
#[test]
103+
fn sas_token_is_prefixed_when_missing_question_mark() {
104+
assert_eq!(normalize_sas_token("sv=1"), "?sv=1");
105+
assert_eq!(normalize_sas_token(" sv=1 "), "?sv=1");
71106
}
72107
}
73108

0 commit comments

Comments
 (0)