@ -1,18 +1,14 @@
@@ -1,18 +1,14 @@
use crate ::{ utils , Data , MatrixResult , Ruma } ;
use crate ::{ Data , MatrixResult } ;
use http ::header ::{ HeaderValue , AUTHORIZATION } ;
use log ::error ;
use rocket ::{ get , options , post , put , response ::content ::Json , State } ;
use ruma_api ::{
error ::{ FromHttpRequestError , FromHttpResponseError } ,
Endpoint ,
} ;
use ruma_client_api ::error ::{ Error , ErrorKind } ;
use rocket ::{ get , post , put , response ::content ::Json , State } ;
use ruma_api ::Endpoint ;
use ruma_client_api ::error ::Error ;
use ruma_federation_api ::{ v1 ::get_server_version , v2 ::get_server_keys } ;
use serde_json ::json ;
use std ::{
collections ::{ BTreeMap , HashMap } ,
convert ::{ TryFrom , TryInto } ,
path ::PathBuf ,
collections ::BTreeMap ,
convert ::TryFrom ,
time ::{ Duration , SystemTime } ,
} ;
@ -20,28 +16,29 @@ pub async fn send_request<T: Endpoint>(
@@ -20,28 +16,29 @@ pub async fn send_request<T: Endpoint>(
data : & crate ::Data ,
destination : String ,
request : T ,
) -> Option < T ::Response >
{
) -> Option < T ::Response > {
let mut http_request : http ::Request < _ > = request . try_into ( ) . unwrap ( ) ;
* http_request . uri_mut ( ) = format! ( "https://{}:8448{}" , & destination . clone ( ) , T ::METADATA . path ) . parse ( ) . unwrap ( ) ;
* http_request . uri_mut ( ) = format! ( "https://{}:8448{}" , & destination . clone ( ) , T ::METADATA . path )
. parse ( )
. unwrap ( ) ;
let mut request_map = serde_json ::Map ::new ( ) ;
if ! http_request . body ( ) . is_empty ( ) {
request_map . insert ( "content" . to_owned ( ) ,
serde_json ::to_value ( http_request . body ( ) ) . unwrap ( ) ) ;
request_map . insert (
"content" . to_owned ( ) ,
serde_json ::to_value ( http_request . body ( ) ) . unwrap ( ) ,
) ;
} ;
request_map . insert ( "method" . to_owned ( ) , T ::METADATA . method . to_string ( ) . into ( ) ) ;
request_map . insert ( "uri" . to_owned ( ) , T ::METADATA . path . into ( ) ) ;
request_map . insert ( "origin" . to_owned ( ) , data . hostname ( ) . into ( ) ) ;
request_map . insert ( "destination" . to_owned ( ) , destination . to_string ( ) . into ( ) ) ;
//request_map.insert("signatures".to_owned(), json!({}));
request_map . insert ( "destination" . to_owned ( ) , "privacytools.io" . into ( ) ) ;
let mut request_json = request_map . into ( ) ;
ruma_signatures ::sign_json ( data . hostname ( ) , data . keypair ( ) , dbg! ( & mut request_json ) ) . unwrap ( ) ;
println! ( "{}" , & request_json ) ;
ruma_signatures ::sign_json ( data . hostname ( ) , data . keypair ( ) , & mut request_json ) . unwrap ( ) ;
let signatures = request_json [ "signatures" ]
. as_object ( )
@ -67,10 +64,7 @@ pub async fn send_request<T: Endpoint>(
@@ -67,10 +64,7 @@ pub async fn send_request<T: Endpoint>(
) ;
}
let reqwest_response = data
. reqwest_client ( )
. execute ( dbg! ( http_request . into ( ) ) )
. await ;
let reqwest_response = data . reqwest_client ( ) . execute ( http_request . into ( ) ) . await ;
// Because reqwest::Response -> http::Response is complicated:
match reqwest_response {
@ -92,15 +86,13 @@ pub async fn send_request<T: Endpoint>(
@@ -92,15 +86,13 @@ pub async fn send_request<T: Endpoint>(
. into_iter ( )
. collect ( ) ;
Some (
< T ::Response > ::try_from (
dbg! ( http_response . body ( body ) ) . unwrap ( ) ,
)
. ok ( )
. unwrap ( ) ,
< T ::Response > ::try_from ( http_response . body ( body ) . unwrap ( ) )
. ok ( )
. unwrap ( ) ,
)
}
Err ( e ) = > {
println !( "ERROR: {}" , e ) ;
error ! ( "{}" , e ) ;
None
}
}
@ -114,7 +106,7 @@ pub fn well_known_server(data: State<Data>) -> Json<String> {
@@ -114,7 +106,7 @@ pub fn well_known_server(data: State<Data>) -> Json<String> {
}
#[ get( " /_matrix/federation/v1/version " ) ]
pub fn get_server_version ( data : State < Data > ) -> MatrixResult < get_server_version ::Response , Error > {
pub fn get_server_version ( ) -> MatrixResult < get_server_version ::Response , Error > {
MatrixResult ( Ok ( get_server_version ::Response {
server : get_server_version ::Server {
name : Some ( "Conduit" . to_owned ( ) ) ,
@ -123,8 +115,8 @@ pub fn get_server_version(data: State<Data>) -> MatrixResult<get_server_version:
@@ -123,8 +115,8 @@ pub fn get_server_version(data: State<Data>) -> MatrixResult<get_server_version:
} ) )
}
#[ get( " /_matrix/key/v2/server " , data = " <body> " ) ]
pub fn get_server_keys ( data : State < Data > , body : Ruma < get_server_keys ::Request > ) -> Json < String > {
#[ get( " /_matrix/key/v2/server " ) ]
pub fn get_server_keys ( data : State < Data > ) -> Json < String > {
let mut verify_keys = BTreeMap ::new ( ) ;
verify_keys . insert (
format! ( "ed25519:{}" , data . keypair ( ) . version ( ) ) ,
@ -138,21 +130,20 @@ pub fn get_server_keys(data: State<Data>, body: Ruma<get_server_keys::Request>)
@@ -138,21 +130,20 @@ pub fn get_server_keys(data: State<Data>, body: Ruma<get_server_keys::Request>)
verify_keys ,
old_verify_keys : BTreeMap ::new ( ) ,
signatures : BTreeMap ::new ( ) ,
valid_until_ts : SystemTime ::now ( ) + Duration ::from_secs ( 60 * 60 * 24 ) ,
valid_until_ts : SystemTime ::now ( ) + Duration ::from_secs ( 60 * 2 ) ,
} )
. unwrap ( )
. body ( ) ,
)
. unwrap ( ) ;
ruma_signatures ::sign_json ( data . hostname ( ) , data . keypair ( ) , & mut response ) . unwrap ( ) ;
Json ( dbg! ( response . to_string ( ) ) )
Json ( response . to_string ( ) )
}
#[ get( " /_matrix/key/v2/server/<_key_id> " , data = " <body> " ) ]
#[ get( " /_matrix/key/v2/server/<_key_id> " ) ]
pub fn get_server_keys_deprecated (
data : State < Data > ,
body : Ruma < get_server_keys ::Request > ,
_key_id : String ,
) -> Json < String > {
get_server_keys ( data , body )
get_server_keys ( data )
}