Compare commits

..

No commits in common. "3342de60675f5edac486cc1b0ad233d98476dc13" and "dad0adeb8c8b6c6f802f834e4c455857386c5795" have entirely different histories.

3 changed files with 69 additions and 46 deletions

View File

@ -115,7 +115,8 @@ fn main() -> ExitCode {
let address = args.next(); let address = args.next();
let address = address.as_deref().unwrap_or("127.0.0.1:8080"); let address = address.as_deref().unwrap_or("127.0.0.1:8080");
let password = args.next(); let password = args.next();
start_server(path, address, password); let partial_password = args.next();
start_server(path, address, password, partial_password);
ExitCode::FAILURE ExitCode::FAILURE
} }
@ -125,7 +126,12 @@ fn get_thread_pool_size() -> usize {
.unwrap_or(4) .unwrap_or(4)
} }
fn start_server(path: PathBuf, address: &str, password: Option<String>) { fn start_server(
path: PathBuf,
address: &str,
password: Option<String>,
partial_password: Option<String>,
) {
let Ok(listener) = TcpListener::bind(address) else { let Ok(listener) = TcpListener::bind(address) else {
eprintln!("Invalid bind address {address:?}!"); eprintln!("Invalid bind address {address:?}!");
return; return;
@ -154,7 +160,16 @@ fn start_server(path: PathBuf, address: &str, password: Option<String>) {
let context = context.clone(); let context = context.clone();
let path = path.clone(); let path = path.clone();
let password = password.clone(); let password = password.clone();
pool.execute(move || handle_connection(context, path, stream, password.as_deref())); let hidden_password = partial_password.clone();
pool.execute(move || {
handle_connection(
context,
path,
stream,
password.as_deref(),
hidden_password.as_deref(),
)
});
} }
} }
@ -168,6 +183,7 @@ fn handle_connection(
path: PathBuf, path: PathBuf,
mut stream: TcpStream, mut stream: TcpStream,
password: Option<&str>, password: Option<&str>,
partial_password: Option<&str>,
) { ) {
let Some(request) = Request::from(&stream) else { let Some(request) = Request::from(&stream) else {
eprintln!("Invalid request!"); eprintln!("Invalid request!");
@ -189,6 +205,7 @@ fn handle_connection(
#[derive(PartialEq, Eq)] #[derive(PartialEq, Eq)]
enum Access { enum Access {
None, None,
Partial,
Full, Full,
} }
@ -206,6 +223,9 @@ fn handle_connection(
if input == password { if input == password {
access = Access::Full; access = Access::Full;
cookie = Some(password); cookie = Some(password);
} else if Some(input) == partial_password {
access = Access::Partial;
cookie = partial_password;
} }
break; break;
} }
@ -234,6 +254,9 @@ fn handle_connection(
if state == password { if state == password {
access = Access::Full; access = Access::Full;
break; break;
} else if Some(state) == partial_password {
access = Access::Partial;
break;
} }
} }
} }
@ -362,11 +385,11 @@ fn handle_connection(
return; return;
} }
if let Some(pki_path) = &pki_path if let Some(pki_path) = &pki_path {
&& !Path::is_file(pki_path) if !Path::is_file(pki_path) {
{ fail(stream);
fail(stream); return;
return; }
} }
let info = if let Ok(mut context) = context.lock() { let info = if let Ok(mut context) = context.lock() {
@ -521,11 +544,11 @@ fn handle_relative_connection(
let info = info.update(name, text, up, down); let info = info.update(name, text, up, down);
if let Ok(mut file) = File::create(file_paths.data) if let Ok(mut file) = File::create(file_paths.data) {
&& to_stream::<PortableSettings, _, _>(&info, &mut file).is_err() if to_stream::<PortableSettings, _, _>(&info, &mut file).is_err() {
{ eprintln!("Error saving data!");
eprintln!("Error saving data!"); eprintln!();
eprintln!(); }
} }
let SiteInfo { let SiteInfo {

View File

@ -129,13 +129,13 @@ impl TabInfo {
let _ = writeln!(stream, "<h2>Description</h2>"); let _ = writeln!(stream, "<h2>Description</h2>");
if let Some(audio_path) = &file_paths.audio if let Some(audio_path) = &file_paths.audio {
&& audio_path.is_file() if audio_path.is_file() {
{ let _ = writeln!(
let _ = writeln!( stream,
stream, "<p><audio controls src=\"/{relative_path}.mp3\"/></p>"
"<p><audio controls src=\"/{relative_path}.mp3\"/></p>" );
); }
} }
let lines = BufReader::new(pki_file).lines().map_while(Result::ok); let lines = BufReader::new(pki_file).lines().map_while(Result::ok);

View File

@ -507,36 +507,36 @@ fn apply_block_changes(
.flat_map(|l| &l.actions) .flat_map(|l| &l.actions)
.chain(&block.final_actions) .chain(&block.final_actions)
{ {
if let Some(state) = states.get_mut(parameter) if let Some(state) = states.get_mut(parameter) {
&& let Some(change) = changes[parameter].get(*state) if let Some(change) = changes[parameter].get(*state) {
{ settings.change(change);
settings.change(change); *state += 1;
*state += 1; }
} }
} }
} }
fn load_multilinear(mlc_path: Option<&Path>, mld_path: &Path) -> Option<NamedMultilinearInfo> { fn load_multilinear(mlc_path: Option<&Path>, mld_path: &Path) -> Option<NamedMultilinearInfo> {
let mut parser = MultilinearParser::default(); let mut parser = MultilinearParser::default();
if let Some(mlc_path) = mlc_path if let Some(mlc_path) = mlc_path {
&& let Ok(file) = File::open(mlc_path) if let Ok(file) = File::open(mlc_path) {
{ for line in BufReader::new(file).lines() {
for line in BufReader::new(file).lines() { let Ok(line) = line else {
let Ok(line) = line else { break;
break; };
};
if let Some((channel, default_value)) = line.split_once(':') { if let Some((channel, default_value)) = line.split_once(':') {
let _ = parser.add_new_channel(channel, default_value); let _ = parser.add_new_channel(channel, default_value);
continue; continue;
}
let line = line.trim();
if line.is_empty() {
continue;
}
return None;
} }
let line = line.trim();
if line.is_empty() {
continue;
}
return None;
} }
} }
@ -601,10 +601,10 @@ pub fn render_novel(
let mut choices = Vec::new(); let mut choices = Vec::new();
for (i, dialog_sequence) in dialogs.iter().enumerate() { for (i, dialog_sequence) in dialogs.iter().enumerate() {
if let Some(block) = dialog_sequence.blocks.first() if let Some(block) = dialog_sequence.blocks.first() {
&& simulation.callable(Event(i)) if simulation.callable(Event(i)) {
{ choices.push((i, block))
choices.push((i, block)) }
} }
} }