@@ -53,7 +53,7 @@ use bfsp::{
53
53
file_server_message:: Message :: {
54
54
ChunksUploadedQuery , DeleteChunksQuery , DeleteFileMetadataQuery , DownloadChunkQuery ,
55
55
DownloadFileMetadataQuery , GetUsageQuery , ListChunkMetadataQuery , ListFileMetadataQuery ,
56
- UploadChunk , UploadFileMetadata ,
56
+ UpdateFileMetadata , UploadChunk , UploadFileMetadata ,
57
57
} ,
58
58
ChunkID , ChunkMetadata , ChunksUploadedQueryResp , DownloadChunkResp , FileServerMessage , Message ,
59
59
} ;
@@ -497,6 +497,13 @@ pub async fn handle_message<M: MetaDB + 'static, C: ChunkDB + 'static>(
497
497
. encode_to_vec ( ) ,
498
498
Err ( _) => todo ! ( ) ,
499
499
} ,
500
+ UpdateFileMetadata ( query) => {
501
+ let enc_meta = query. encrypted_file_metadata . unwrap ( ) ;
502
+ match handle_update_file_metadata ( meta_db. as_ref ( ) , & token, enc_meta) . await {
503
+ Ok ( _) => bfsp:: UpdateFileMetadataResp { err : None } . encode_to_vec ( ) ,
504
+ Err ( _) => todo ! ( ) ,
505
+ }
506
+ }
500
507
_ => todo ! ( ) ,
501
508
}
502
509
. prepend_len ( ) )
@@ -660,7 +667,7 @@ pub async fn handle_upload_file_metadata<D: MetaDB>(
660
667
token : & Biscuit ,
661
668
enc_file_meta : EncryptedFileMetadata ,
662
669
) -> Result < ( ) , UploadMetadataError > {
663
- let user_id = authorize ( Right :: Write , token, Vec :: new ( ) , meta_db)
670
+ let user_id = authorize ( Right :: Write , token, vec ! [ enc_file_meta . id . clone ( ) ] , meta_db)
664
671
. await
665
672
. unwrap ( ) ;
666
673
@@ -682,6 +689,34 @@ pub async fn handle_upload_file_metadata<D: MetaDB>(
682
689
Ok ( ( ) )
683
690
}
684
691
692
+ #[ tracing:: instrument( err, skip( token, meta_db, enc_file_meta) ) ]
693
+ pub async fn handle_update_file_metadata < D : MetaDB > (
694
+ meta_db : & D ,
695
+ token : & Biscuit ,
696
+ enc_file_meta : EncryptedFileMetadata ,
697
+ ) -> Result < ( ) , UploadMetadataError > {
698
+ let user_id = authorize ( Right :: Write , token, vec ! [ enc_file_meta. id. clone( ) ] , meta_db)
699
+ . await
700
+ . unwrap ( ) ;
701
+
702
+ let storage_usages = meta_db. total_usages ( & [ user_id] ) . await . unwrap ( ) ;
703
+ let storage_usage = * storage_usages. get ( & user_id) . unwrap ( ) ;
704
+
705
+ let storage_caps = meta_db. storage_caps ( & [ user_id] ) . await . unwrap ( ) ;
706
+ let storage_cap = * storage_caps. get ( & user_id) . unwrap ( ) ;
707
+
708
+ if storage_usage + enc_file_meta. metadata . len ( ) as u64 > storage_cap {
709
+ todo ! ( "Deny uploads that exceed storage cap" ) ;
710
+ }
711
+
712
+ meta_db
713
+ . update_file_meta ( enc_file_meta, user_id)
714
+ . await
715
+ . unwrap ( ) ;
716
+
717
+ Ok ( ( ) )
718
+ }
719
+
685
720
#[ tracing:: instrument( err, skip( token, meta_db) ) ]
686
721
pub async fn handle_download_file_metadata < D : MetaDB > (
687
722
meta_db : & D ,
0 commit comments