🐛 Don't create new rendezvous points for unknown servers.
Also improve error reporting when loading config filesmain
parent
b1b37ee696
commit
189ae7abd7
|
@ -1 +1,3 @@
|
||||||
/target
|
/target
|
||||||
|
/ptth_server.toml
|
||||||
|
/ptth_relay.toml
|
||||||
|
|
|
@ -7,13 +7,17 @@ use std::{
|
||||||
async fn main () -> Result <(), Box <dyn Error>> {
|
async fn main () -> Result <(), Box <dyn Error>> {
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
|
||||||
let mut f = File::open ("ptth_relay.toml").unwrap ();
|
let config_file = {
|
||||||
let mut buffer = vec! [0u8; 4096];
|
let config_file_path = "ptth_relay.toml";
|
||||||
let bytes_read = f.read (&mut buffer).unwrap ();
|
|
||||||
buffer.truncate (bytes_read);
|
let mut f = File::open (config_file_path).expect (&format! ("Can't open {:?}", config_file_path));
|
||||||
|
let mut buffer = vec! [0u8; 4096];
|
||||||
let config_s = String::from_utf8 (buffer).unwrap ();
|
let bytes_read = f.read (&mut buffer).expect (&format! ("Can't read {:?}", config_file_path));
|
||||||
let config_file: ptth::relay::ConfigFile = toml::from_str (&config_s).unwrap ();
|
buffer.truncate (bytes_read);
|
||||||
|
|
||||||
|
let config_s = String::from_utf8 (buffer).expect (&format! ("Can't parse {:?} as UTF-8", config_file_path));
|
||||||
|
toml::from_str (&config_s).expect (&format! ("Can't parse {:?} as TOML", config_file_path))
|
||||||
|
};
|
||||||
|
|
||||||
ptth::relay::main (config_file).await
|
ptth::relay::main (config_file).await
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,13 +18,17 @@ struct Opt {
|
||||||
async fn main () -> Result <(), Box <dyn Error>> {
|
async fn main () -> Result <(), Box <dyn Error>> {
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
|
||||||
let mut f = std::fs::File::open ("ptth_server.toml").unwrap ();
|
let config_file = {
|
||||||
let mut buffer = vec! [0u8; 4096];
|
let config_file_path = "ptth_server.toml";
|
||||||
let bytes_read = f.read (&mut buffer).unwrap ();
|
|
||||||
buffer.truncate (bytes_read);
|
let mut f = std::fs::File::open (config_file_path).expect (&format! ("Can't open {:?}", config_file_path));
|
||||||
|
let mut buffer = vec! [0u8; 4096];
|
||||||
let config_s = String::from_utf8 (buffer).unwrap ();
|
let bytes_read = f.read (&mut buffer).expect (&format! ("Can't read {:?}", config_file_path));
|
||||||
let config_file: ptth::server::ConfigFile = toml::from_str (&config_s).unwrap ();
|
buffer.truncate (bytes_read);
|
||||||
|
|
||||||
|
let config_s = String::from_utf8 (buffer).expect (&format! ("Can't parse {:?} as UTF-8", config_file_path));
|
||||||
|
toml::from_str (&config_s).expect (&format! ("Can't parse {:?} as TOML", config_file_path))
|
||||||
|
};
|
||||||
|
|
||||||
let opt = Opt::from_args ();
|
let opt = Opt::from_args ();
|
||||||
|
|
||||||
|
|
10
src/lib.rs
10
src/lib.rs
|
@ -49,7 +49,7 @@ mod tests {
|
||||||
|
|
||||||
// Spawn the root task
|
// Spawn the root task
|
||||||
rt.block_on (async {
|
rt.block_on (async {
|
||||||
let server_name = "alien_wildlands";
|
let server_name = "aliens_wildland";
|
||||||
let api_key = "AnacondaHardcoverGrannyUnlatchLankinessMutate";
|
let api_key = "AnacondaHardcoverGrannyUnlatchLankinessMutate";
|
||||||
let tripcode = base64::encode (blake3::hash (api_key.as_bytes ()).as_bytes ());
|
let tripcode = base64::encode (blake3::hash (api_key.as_bytes ()).as_bytes ());
|
||||||
println! ("Relay is expecting tripcode {}", tripcode);
|
println! ("Relay is expecting tripcode {}", tripcode);
|
||||||
|
@ -116,6 +116,14 @@ mod tests {
|
||||||
]) {
|
]) {
|
||||||
panic! ("{}", String::from_utf8 (resp.to_vec ()).unwrap ());
|
panic! ("{}", String::from_utf8 (resp.to_vec ()).unwrap ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Requesting a file from a server that isn't registered
|
||||||
|
// will error out
|
||||||
|
|
||||||
|
let resp = client.get (&format! ("{}/servers/obviously_this_server_does_not_exist/files/COPYING", relay_url))
|
||||||
|
.send ().await.unwrap ();
|
||||||
|
|
||||||
|
assert_eq! (resp.status (), reqwest::StatusCode::NOT_FOUND);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,7 +228,10 @@ async fn handle_http_request (
|
||||||
)
|
)
|
||||||
-> Response <Body>
|
-> Response <Body>
|
||||||
{
|
{
|
||||||
let id = ulid::Ulid::new ().to_string ();
|
if ! state.config.server_tripcodes.contains_key (&watcher_code) {
|
||||||
|
return status_reply (StatusCode::NOT_FOUND, "Unknown server");
|
||||||
|
}
|
||||||
|
|
||||||
let req = match http_serde::RequestParts::from_hyper (req.method, uri, req.headers) {
|
let req = match http_serde::RequestParts::from_hyper (req.method, uri, req.headers) {
|
||||||
Ok (x) => x,
|
Ok (x) => x,
|
||||||
_ => return status_reply (StatusCode::BAD_REQUEST, "Bad request"),
|
_ => return status_reply (StatusCode::BAD_REQUEST, "Bad request"),
|
||||||
|
@ -236,6 +239,7 @@ async fn handle_http_request (
|
||||||
|
|
||||||
let (tx, rx) = oneshot::channel ();
|
let (tx, rx) = oneshot::channel ();
|
||||||
|
|
||||||
|
let id = ulid::Ulid::new ().to_string ();
|
||||||
state.response_rendezvous.insert (id.clone (), tx);
|
state.response_rendezvous.insert (id.clone (), tx);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue