peach-workspace/peach-web/src/routes/settings/scuttlebutt/configure.rs

171 lines
9.7 KiB
Rust
Raw Normal View History

2022-03-12 08:36:40 +00:00
use maud::{html, PreEscaped};
2022-03-13 09:09:00 +00:00
use peach_lib::sbot::{SbotConfig, SbotStatus};
2022-03-12 08:36:40 +00:00
use crate::templates;
// TODO: flash message implementation for rouille
2022-03-13 09:09:00 +00:00
/// Read the status and configuration of the sbot.
/// Define fallback values if an error is returned from either read function.
fn read_status_and_config() -> (String, SbotConfig, String, String) {
// retrieve go-sbot systemd process status
let run_on_startup = if let Ok(status) = SbotStatus::read() {
// if the read is ok, return the value or "disabled" if no value is set
match status.boot_state {
Some(state) => state,
None => "disabled".to_string(),
}
} else {
// if the read returns an error, set the value to "disabled"
"disabled".to_string()
};
// retrieve sbot config parameters
let sbot_config = match SbotConfig::read() {
Ok(config) => config,
// build default config if an error is returned from the read attempt
Err(_) => SbotConfig::default(),
};
// split the listen address into ip and port
let (ip, port) = match sbot_config.lis.find(':') {
Some(index) => {
let (ip, port) = sbot_config.lis.split_at(index);
(ip.to_string(), port.to_string())
}
// if no ':' separator is found, assume an ip has been configured (without port)
None => (sbot_config.lis.to_string(), String::new()),
};
2022-03-12 08:36:40 +00:00
2022-03-13 09:09:00 +00:00
(run_on_startup, sbot_config, ip, port)
}
2022-03-12 08:36:40 +00:00
/// Scuttlebutt settings menu template builder.
pub fn build_template() -> PreEscaped<String> {
2022-03-13 09:09:00 +00:00
let (run_on_startup, sbot_config, ip, port) = read_status_and_config();
2022-03-12 08:36:40 +00:00
let menu_template = html! {
(PreEscaped("<!-- SBOT CONFIGURATION FORM -->"))
div class="card center" {
form id="sbotConfig" class="center" action="/settings/scuttlebutt/configure" method="post" {
div class="center" style="display: flex; flex-direction: column; margin-bottom: 2rem;" title="Number of hops to replicate" {
label for="hops" class="label-small font-gray" { "HOPS" }
div id="hops" style="display: flex; justify-content: space-evenly;" {
div {
2022-03-13 09:09:00 +00:00
@if sbot_config.hops == 0 {
2022-03-12 08:36:40 +00:00
input type="radio" id="hops_0" name="hops" value="0" checked;
} @else {
input type="radio" id="hops_0" name="hops" value="0";
}
label class="font-normal" for="hops_0" { "0" }
}
div {
2022-03-13 09:09:00 +00:00
@if sbot_config.hops == 1 {
2022-03-12 08:36:40 +00:00
input type="radio" id="hops_1" name="hops" value="1" checked;
} @else {
input type="radio" id="hops_1" name="hops" value="1";
}
label class="font-normal" for="hops_1" { "1" }
}
div {
2022-03-13 09:09:00 +00:00
@if sbot_config.hops == 2 {
2022-03-12 08:36:40 +00:00
input type="radio" id="hops_2" name="hops" value="2" checked;
} @else {
input type="radio" id="hops_2" name="hops" value="2";
}
label class="font-normal" for="hops_2" { "2" }
}
div {
2022-03-13 09:09:00 +00:00
@if sbot_config.hops == 3 {
2022-03-12 08:36:40 +00:00
input type="radio" id="hops_3" name="hops" value="3" checked;
} @else {
input type="radio" id="hops_3" name="hops" value="3";
}
label class="font-normal" for="hops_3" { "3" }
}
div {
2022-03-13 09:09:00 +00:00
@if sbot_config.hops == 4 {
2022-03-12 08:36:40 +00:00
input type="radio" id="hops_4" name="hops" value="4" checked;
} @else {
input type="radio" id="hops_4" name="hops" value="4";
}
label class="font-normal" for="hops_4" { "4" }
}
}
}
div class="center" style="display: flex; justify-content: space-between;" {
div style="display: flex; flex-direction: column; width: 60%; margin-bottom: 2rem;" title="IP address on which the sbot runs" {
label for="ip" class="label-small font-gray" { "IP ADDRESS" }
2022-03-13 09:09:00 +00:00
input type="text" id="ip" name="lis_ip" value=(ip);
2022-03-12 08:36:40 +00:00
}
div style="display: flex; flex-direction: column; width: 20%; margin-bottom: 2rem;" title="Port on which the sbot runs" {
label for="port" class="label-small font-gray" { "PORT" }
2022-03-13 09:09:00 +00:00
input type="text" id="port" name="lis_port" value=(port);
2022-03-12 08:36:40 +00:00
}
}
div class="center" style="display: flex; flex-direction: column; margin-bottom: 2rem;" title="Network key (aka 'caps key') to define the Scuttleverse in which the sbot operates in" {
label for="network_key" class="label-small font-gray" { "NETWORK KEY" }
2022-03-13 09:09:00 +00:00
input type="text" id="network_key" name="shscap" value=(sbot_config.shscap);
2022-03-12 08:36:40 +00:00
}
div class="center" style="display: flex; flex-direction: column; margin-bottom: 2rem;" title="Directory in which the sbot database is saved" {
label for="database_dir" class="label-small font-gray" { "DATABASE DIRECTORY" }
2022-03-13 09:09:00 +00:00
input type="text" id="database_dir" name="repo" value=(sbot_config.repo);
2022-03-12 08:36:40 +00:00
}
div class="center" {
@if sbot_config.localadv {
2022-03-12 08:36:40 +00:00
input type="checkbox" id="lanBroadcast" style="margin-bottom: 1rem;" name="localadv" checked;
} @else {
input type="checkbox" id="lanBroadcast" style="margin-bottom: 1rem;" name="localadv";
}
label class="font-normal" for="lanBroadcast" title="Broadcast the IP and port of this sbot instance so that local peers can discovery it and attempt to connect" {
"Enable LAN Broadcasting"
}
br;
@if sbot_config.localdiscov {
2022-03-12 08:36:40 +00:00
input type="checkbox" id="lanDiscovery" style="margin-bottom: 1rem;" name="localdiscov" checked;
} @else {
input type="checkbox" id="lanDiscovery" style="margin-bottom: 1rem;" name="localdiscov";
}
label class="font-normal" for="lanDiscovery" title="Listen for the presence of local peers and attempt to connect if found" { "Enable LAN Discovery" }
br;
@if run_on_startup == "enabled" {
input type="checkbox" id="startup" style="margin-bottom: 1rem;" name="startup" checked;
} @else {
input type="checkbox" id="startup" style="margin-bottom: 1rem;" name="startup";
}
label class="font-normal" for="startup" title="Run the pub automatically on system startup" { "Run pub when computer starts" }
br;
@if sbot_config.repair {
2022-03-12 08:36:40 +00:00
input type="checkbox" id="repair" name="repair" checked;
} @else {
input type="checkbox" id="repair" name="repair";
}
label class="font-normal" for="repair" title="Attempt to repair the filesystem when starting the pub" { "Attempt filesystem repair when pub starts" }
}
(PreEscaped("<!-- hidden input elements for all other config variables -->"))
input type="hidden" id="debugdir" name="debugdir" value=(sbot_config.debugdir);
input type="hidden" id="hmac" name="hmac" value=(sbot_config.hmac);
input type="hidden" id="wslis" name="wslis" value=(sbot_config.wslis);
input type="hidden" id="debuglis" name="debuglis" value=(sbot_config.debuglis);
input type="hidden" id="enable_ebt" name="enable_ebt" value=(sbot_config.enable_ebt);
input type="hidden" id="promisc" name="promisc" value=(sbot_config.promisc);
input type="hidden" id="nounixsock" name="nounixsock" value=(sbot_config.nounixsock);
(PreEscaped("<!-- BUTTONS -->"))
input id="saveConfig" class="button button-primary center" style="margin-top: 2rem;" type="submit" title="Save configuration parameters to file" value="Save";
input id="saveRestartConfig" class="button button-primary center" type="submit" title="Save configuration parameters to file and then (re)start the pub" value="Save & Restart" formaction="/settings/scuttlebutt/configure?restart=true";
a id="restoreDefaults" class="button button-warning center" href="/settings/scuttlebutt/configure/default" title="Restore default configuration parameters and save them to file" { "Restore Defaults" }
}
(PreEscaped("<!-- FLASH MESSAGE -->"))
// TODO: flash message
}
};
// wrap the nav bars around the settings menu template content
// parameters are template, title and back url
let body =
templates::nav::build_template(menu_template, "Scuttlebutt Settings", Some("/settings"));
2022-03-12 08:36:40 +00:00
// render the base template with the provided body
templates::base::build_template(body)
2022-03-12 08:36:40 +00:00
}