@@ -13,7 +13,6 @@ use rocket::response::Responder;
1313use rocket:: serde:: json:: Json ;
1414use rocket:: { routes, Data , Request , Response , Route , State } ;
1515use serde:: { Deserialize , Serialize } ;
16- use std:: collections:: HashMap ;
1716use tokio:: io:: AsyncRead ;
1817use tokio_util:: io:: StreamReader ;
1918
@@ -56,29 +55,6 @@ struct MirrorRequest {
5655 pub url : String ,
5756}
5857
59- #[ derive( Debug , Clone , Serialize , Deserialize ) ]
60- #[ serde( crate = "rocket::serde" ) ]
61- pub struct MirrorSuggestionsRequest {
62- pub servers : Vec < String > ,
63- }
64-
65- #[ derive( Debug , Clone , Serialize , Deserialize ) ]
66- #[ serde( crate = "rocket::serde" ) ]
67- pub struct FileMirrorSuggestion {
68- pub sha256 : String ,
69- pub url : String ,
70- pub size : u64 ,
71- pub mime_type : Option < String > ,
72- pub available_on : Vec < String > ,
73- pub missing_from : Vec < String > ,
74- }
75-
76- #[ derive( Debug , Clone , Serialize , Deserialize ) ]
77- #[ serde( crate = "rocket::serde" ) ]
78- pub struct MirrorSuggestionsResponse {
79- pub suggestions : Vec < FileMirrorSuggestion > ,
80- }
81-
8258#[ cfg( feature = "media-compression" ) ]
8359pub fn blossom_routes ( ) -> Vec < Route > {
8460 let mut routes = routes ! [
@@ -89,7 +65,6 @@ pub fn blossom_routes() -> Vec<Route> {
8965 upload_media,
9066 head_media,
9167 mirror,
92- mirror_suggestions,
9368 ] ;
9469
9570 #[ cfg( feature = "payments" ) ]
@@ -108,7 +83,6 @@ pub fn blossom_routes() -> Vec<Route> {
10883 list_files,
10984 upload_head,
11085 mirror,
111- mirror_suggestions,
11286 ] ;
11387
11488 #[ cfg( feature = "payments" ) ]
@@ -144,9 +118,6 @@ enum BlossomResponse {
144118
145119 #[ response( status = 200 ) ]
146120 BlobDescriptorList ( Json < Vec < BlobDescriptor > > ) ,
147-
148- #[ response( status = 200 ) ]
149- MirrorSuggestions ( Json < MirrorSuggestionsResponse > ) ,
150121}
151122
152123impl BlossomResponse {
@@ -306,77 +277,6 @@ async fn mirror(
306277 . await
307278}
308279
309- #[ rocket:: post( "/mirror-suggestions" , data = "<req>" , format = "json" ) ]
310- async fn mirror_suggestions (
311- auth : BlossomAuth ,
312- req : Json < MirrorSuggestionsRequest > ,
313- ) -> BlossomResponse {
314- if !check_method ( & auth. event , "mirror-suggestions" ) {
315- return BlossomResponse :: error ( "Invalid request method tag" ) ;
316- }
317-
318- let pubkey_hex = auth. event . pubkey . to_hex ( ) ;
319- let mut file_map: HashMap < String , FileMirrorSuggestion > = HashMap :: new ( ) ;
320-
321- // Fetch files from each server
322- for server_url in & req. servers {
323- if let Ok ( _server_url_parsed) = url:: Url :: parse ( server_url) {
324- let list_url = format ! ( "{}/list/{}" , server_url, pubkey_hex) ;
325-
326- match reqwest:: get ( & list_url) . await {
327- Ok ( response) => {
328- if response. status ( ) . is_success ( ) {
329- match response. json :: < Vec < BlobDescriptor > > ( ) . await {
330- Ok ( files) => {
331- for file in files {
332- file_map
333- . entry ( file. sha256 . clone ( ) )
334- . and_modify ( |suggestion| {
335- suggestion. available_on . push ( server_url. clone ( ) ) ;
336- } )
337- . or_insert_with ( || FileMirrorSuggestion {
338- sha256 : file. sha256 . clone ( ) ,
339- url : file. url . clone ( ) ,
340- size : file. size ,
341- mime_type : file. mime_type . clone ( ) ,
342- available_on : vec ! [ server_url. clone( ) ] ,
343- missing_from : Vec :: new ( ) ,
344- } ) ;
345- }
346- }
347- Err ( e) => {
348- error ! ( "Failed to parse file list from {}: {}" , server_url, e) ;
349- }
350- }
351- }
352- }
353- Err ( e) => {
354- error ! ( "Failed to fetch file list from {}: {}" , server_url, e) ;
355- }
356- }
357- }
358- }
359-
360- // Determine missing servers for each file
361- for suggestion in file_map. values_mut ( ) {
362- for server_url in & req. servers {
363- if !suggestion. available_on . contains ( server_url) {
364- suggestion. missing_from . push ( server_url. clone ( ) ) ;
365- }
366- }
367- }
368-
369- // Filter to only files that are missing from at least one server and available on at least one
370- let filtered_suggestions: Vec < FileMirrorSuggestion > = file_map
371- . into_values ( )
372- . filter ( |s| !s. missing_from . is_empty ( ) && !s. available_on . is_empty ( ) )
373- . collect ( ) ;
374-
375- BlossomResponse :: MirrorSuggestions ( Json ( MirrorSuggestionsResponse {
376- suggestions : filtered_suggestions,
377- } ) )
378- }
379-
380280#[ cfg( feature = "media-compression" ) ]
381281#[ rocket:: head( "/media" ) ]
382282fn head_media ( auth : BlossomAuth , settings : & State < Settings > ) -> BlossomHead {
0 commit comments