@@ -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
5769fn 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