@@ -192,7 +192,7 @@ impl<'a> tokio::io::AsyncRead for FieldStream<'a> {
192192
193193#[ async_trait]
194194trait Driver : Send + Sync {
195- fn write_file (
195+ async fn write_file (
196196 & self ,
197197 filename : String ,
198198 data : Vec < u8 > ,
@@ -206,13 +206,13 @@ trait Driver: Send + Sync {
206206 cont_type : String ,
207207 owner_email : Option < String > ,
208208 ) -> ( String , usize ) ;
209- fn get_file ( & self , filename : String ) -> ReceivedFile ;
210- fn tag_file (
209+ async fn get_file ( & self , filename : String ) -> ReceivedFile ;
210+ async fn tag_file (
211211 & self ,
212212 filename : String ,
213213 user_tags : Vec < ( String , String ) > ,
214214 ) -> Result < String , String > ;
215- fn list_files ( & self , directory : String ) -> Vec < String > ;
215+ async fn list_files ( & self , directory : String ) -> Vec < String > ;
216216}
217217
218218fn init_driver ( driver_type : & str ) -> Box < dyn Driver > {
@@ -984,7 +984,7 @@ async fn ax_get_file(
984984 } ;
985985
986986 // IMPORTANT! Headers in cache must be stored in lowercase
987- let received_file = driver_get_file ( filepath. clone ( ) ) ;
987+ let received_file = driver_get_file ( filepath. clone ( ) ) . await ;
988988
989989 // Release the semaphore now that the file is resolved
990990 drop ( _permit) ;
@@ -1147,21 +1147,21 @@ async fn ax_get_file(
11471147 }
11481148}
11491149
1150- fn driver_get_file ( filepath : String ) -> ReceivedFile {
1150+ async fn driver_get_file ( filepath : String ) -> ReceivedFile {
11511151 let driver_name = get_driver_type ( ) ;
11521152 let driver = init_driver ( & driver_name) ;
1153- driver. get_file ( filepath)
1153+ driver. get_file ( filepath) . await
11541154}
11551155
1156- fn write_file_driver (
1156+ async fn write_file_driver (
11571157 filename : String ,
11581158 data : Vec < u8 > ,
11591159 cont_type : String ,
11601160 owner_email : Option < String > ,
11611161) -> String {
11621162 let driver_name = get_driver_type ( ) ;
11631163 let driver = init_driver ( & driver_name) ;
1164- driver. write_file ( filename, data, cont_type, owner_email) ;
1164+ driver. write_file ( filename, data, cont_type, owner_email) . await ;
11651165 "" . to_string ( )
11661166}
11671167
@@ -1222,8 +1222,13 @@ fn verify_auth_hdr(headers: &HeaderMap) -> Result<String, Option<String>> {
12221222
12231223async fn ax_list_files ( ) -> ( StatusCode , String ) {
12241224 let driver_name = get_driver_type ( ) ;
1225+ // Listing files is disabled for Azure backend because it is too slow
1226+ // (flat blob namespace requires enumerating all blobs with prefix filtering).
1227+ if driver_name == "azure" {
1228+ return ( StatusCode :: FORBIDDEN , "Listing files is disabled for Azure storage backend" . to_string ( ) ) ;
1229+ }
12251230 let driver = init_driver ( & driver_name) ;
1226- let files = driver. list_files ( "/" . to_string ( ) ) ;
1231+ let files = driver. list_files ( "/" . to_string ( ) ) . await ;
12271232 // generate nice list of files, with one file per line
12281233 let files_str = files. join ( "\n " ) ;
12291234 ( StatusCode :: OK , files_str)
0 commit comments