♻️ refactor: make `load_templates` private
							parent
							
								
									ae4f102bdf
								
							
						
					
					
						commit
						c6f651387e
					
				| 
						 | 
					@ -1443,7 +1443,7 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "ptth_core"
 | 
					name = "ptth_core"
 | 
				
			||||||
version = "1.4.0"
 | 
					version = "2.0.0"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "base64",
 | 
					 "base64",
 | 
				
			||||||
 "ctrlc",
 | 
					 "ctrlc",
 | 
				
			||||||
| 
						 | 
					@ -1529,7 +1529,7 @@ dependencies = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "ptth_relay"
 | 
					name = "ptth_relay"
 | 
				
			||||||
version = "1.3.0"
 | 
					version = "2.0.0"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "base64",
 | 
					 "base64",
 | 
				
			||||||
 "blake3",
 | 
					 "blake3",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
[package]
 | 
					[package]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
name = "ptth_core"
 | 
					name = "ptth_core"
 | 
				
			||||||
version = "1.4.0"
 | 
					version = "2.0.0"
 | 
				
			||||||
authors = ["Trish"]
 | 
					authors = ["Trish"]
 | 
				
			||||||
edition = "2018"
 | 
					edition = "2018"
 | 
				
			||||||
license = "AGPL-3.0"
 | 
					license = "AGPL-3.0"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,19 +22,6 @@ pub mod prelude;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const PTTH_MAGIC_HEADER: &str = "X-PTTH-2LJYXWC4";
 | 
					pub const PTTH_MAGIC_HEADER: &str = "X-PTTH-2LJYXWC4";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// The arguments are in order so they are in order overall:
 | 
					 | 
				
			||||||
// e.g. prefix_match ("/prefix", "/prefix/middle/suffix") -> "/middle/suffix"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[must_use]
 | 
					 | 
				
			||||||
#[deprecated (
 | 
					 | 
				
			||||||
    since = "1.4.0",
 | 
					 | 
				
			||||||
    note = "Use `str::strip_prefix instead`"
 | 
					 | 
				
			||||||
)]
 | 
					 | 
				
			||||||
pub fn prefix_match <'a> (prefix: &str, hay: &'a str) -> Option <&'a str>
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	hay.strip_prefix (prefix)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/// Generates 64 bytes of entropy and returns it as Base64
 | 
					/// Generates 64 bytes of entropy and returns it as Base64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn gen_key () -> String {
 | 
					pub fn gen_key () -> String {
 | 
				
			||||||
| 
						 | 
					@ -48,16 +35,17 @@ pub fn gen_key () -> String {
 | 
				
			||||||
#[cfg (test)]
 | 
					#[cfg (test)]
 | 
				
			||||||
mod tests {
 | 
					mod tests {
 | 
				
			||||||
	use super::*;
 | 
						use super::*;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	#[test]
 | 
						#[test]
 | 
				
			||||||
	fn prefix () {
 | 
						fn test_gen_key () {
 | 
				
			||||||
		for (p, h, expected) in &[
 | 
							// Smoke test
 | 
				
			||||||
			("/files/", "/files/a", Some ("a")),
 | 
							
 | 
				
			||||||
			("/files/", "/files/abc/def", Some ("abc/def")),
 | 
							let blank = base64::encode (&vec! [0_u8; 64]);
 | 
				
			||||||
			("/files/", "/files", None),
 | 
							let a = gen_key ();
 | 
				
			||||||
			("/files/", "/not_files", None),
 | 
							let b = gen_key ();
 | 
				
			||||||
			("/files/", "/files/", Some ("")),
 | 
							
 | 
				
			||||||
		] {
 | 
							assert_ne! (blank, a);
 | 
				
			||||||
			assert_eq! (prefix_match (*p, *h), *expected);
 | 
							assert_ne! (blank, b);
 | 
				
			||||||
		}
 | 
							assert_ne! (a, b);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,4 +35,4 @@ tracing = "0.1.25"
 | 
				
			||||||
tracing-futures = "0.2.4"
 | 
					tracing-futures = "0.2.4"
 | 
				
			||||||
tracing-subscriber = "0.2.15"
 | 
					tracing-subscriber = "0.2.15"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ptth_core = { path = "../ptth_core", version = "1.4.0" }
 | 
					ptth_core = { path = "../ptth_core", version = "2.0.0" }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,6 @@ use tokio_stream::wrappers::ReceiverStream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use ptth_core::{
 | 
					use ptth_core::{
 | 
				
			||||||
	http_serde,
 | 
						http_serde,
 | 
				
			||||||
	prefix_match,
 | 
					 | 
				
			||||||
	prelude::*,
 | 
						prelude::*,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -559,7 +558,7 @@ async fn handle_all (
 | 
				
			||||||
	Ok (response)
 | 
						Ok (response)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn load_templates (asset_root: &Path) 
 | 
					fn load_templates (asset_root: &Path) 
 | 
				
			||||||
-> Result <Handlebars <'static>, RelayError>
 | 
					-> Result <Handlebars <'static>, RelayError>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	let mut handlebars = Handlebars::new ();
 | 
						let mut handlebars = Handlebars::new ();
 | 
				
			||||||
| 
						 | 
					@ -606,7 +605,7 @@ async fn reload_config (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub async fn run_relay (
 | 
					pub async fn run_relay (
 | 
				
			||||||
	state: Arc <RelayState>,
 | 
						state: Arc <RelayState>,
 | 
				
			||||||
	handlebars: Arc <Handlebars <'static>>,
 | 
						asset_root: &Path,
 | 
				
			||||||
	shutdown_oneshot: oneshot::Receiver <()>,
 | 
						shutdown_oneshot: oneshot::Receiver <()>,
 | 
				
			||||||
	config_reload_path: Option <PathBuf>
 | 
						config_reload_path: Option <PathBuf>
 | 
				
			||||||
) 
 | 
					) 
 | 
				
			||||||
| 
						 | 
					@ -617,6 +616,8 @@ pub async fn run_relay (
 | 
				
			||||||
		AuditEvent,
 | 
							AuditEvent,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						let handlebars = Arc::new (load_templates (asset_root)?);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	if let Some (x) = git_version::read ().await {
 | 
						if let Some (x) = git_version::read ().await {
 | 
				
			||||||
		info! ("ptth_relay Git version: {:?}", x);
 | 
							info! ("ptth_relay Git version: {:?}", x);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ async fn main () -> Result <(), Box <dyn Error>> {
 | 
				
			||||||
	forced_shutdown.wrap_server (
 | 
						forced_shutdown.wrap_server (
 | 
				
			||||||
		run_relay (
 | 
							run_relay (
 | 
				
			||||||
			Arc::new (RelayState::try_from (config)?),
 | 
								Arc::new (RelayState::try_from (config)?),
 | 
				
			||||||
			Arc::new (ptth_relay::load_templates (&PathBuf::new ())?),
 | 
								&PathBuf::new (),
 | 
				
			||||||
			shutdown_rx,
 | 
								shutdown_rx,
 | 
				
			||||||
			Some (config_path)
 | 
								Some (config_path)
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,6 @@ use crate::{
 | 
				
			||||||
		BlakeHashWrapper,
 | 
							BlakeHashWrapper,
 | 
				
			||||||
		KeyValidity,
 | 
							KeyValidity,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	prefix_match,
 | 
					 | 
				
			||||||
	relay_state::RelayState,
 | 
						relay_state::RelayState,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -160,7 +159,7 @@ async fn api_v1 (
 | 
				
			||||||
		let x = v1_server_list (&state).await;
 | 
							let x = v1_server_list (&state).await;
 | 
				
			||||||
		Ok (error_reply (StatusCode::OK, &serde_json::to_string (&x).unwrap ())?)
 | 
							Ok (error_reply (StatusCode::OK, &serde_json::to_string (&x).unwrap ())?)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if let Some (rest) = prefix_match ("server/", path_rest) {
 | 
						else if let Some (rest) = path_rest.strip_prefix ("server/") {
 | 
				
			||||||
		// DRY T4H76LB3
 | 
							// DRY T4H76LB3
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if let Some (idx) = rest.find ('/') {
 | 
							if let Some (idx) = rest.find ('/') {
 | 
				
			||||||
| 
						 | 
					@ -196,10 +195,10 @@ pub async fn handle (
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if let Some (rest) = prefix_match ("v1/", path_rest) {
 | 
						if let Some (rest) = path_rest.strip_prefix ("v1/") {
 | 
				
			||||||
		api_v1 (req, state, rest).await
 | 
							api_v1 (req, state, rest).await
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if let Some (rest) = prefix_match ("api/", path_rest) {
 | 
						else if let Some (rest) = path_rest.strip_prefix ("api/") {
 | 
				
			||||||
		api_v1 (req, state, rest).await
 | 
							api_v1 (req, state, rest).await
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,7 +43,7 @@ toml = "0.5.7"
 | 
				
			||||||
uom = "0.30.0"
 | 
					uom = "0.30.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
always_equal = { path = "../always_equal", version = "1.0.0" }
 | 
					always_equal = { path = "../always_equal", version = "1.0.0" }
 | 
				
			||||||
ptth_core = { path = "../ptth_core", version = "1.4.0" }
 | 
					ptth_core = { path = "../ptth_core", version = "2.0.0" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dev-dependencies]
 | 
					[dev-dependencies]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue