From c794d398b8775e2dee857d3903c87f6f63f6e2dd Mon Sep 17 00:00:00 2001 From: glyph Date: Sun, 13 Mar 2022 11:09:00 +0200 Subject: [PATCH] add sbot settings config route --- .../{configure_sbot.rs => configure.rs} | 77 +++++++++++-------- 1 file changed, 45 insertions(+), 32 deletions(-) rename peach-web/src/routes/settings/scuttlebutt/{configure_sbot.rs => configure.rs} (81%) diff --git a/peach-web/src/routes/settings/scuttlebutt/configure_sbot.rs b/peach-web/src/routes/settings/scuttlebutt/configure.rs similarity index 81% rename from peach-web/src/routes/settings/scuttlebutt/configure_sbot.rs rename to peach-web/src/routes/settings/scuttlebutt/configure.rs index 6a5dd17..fdbdc1c 100644 --- a/peach-web/src/routes/settings/scuttlebutt/configure_sbot.rs +++ b/peach-web/src/routes/settings/scuttlebutt/configure.rs @@ -1,31 +1,49 @@ use maud::{html, PreEscaped}; -use peach_lib::sbot::SbotStatus; +use peach_lib::sbot::{SbotConfig, SbotStatus}; use crate::templates; // TODO: flash message implementation for rouille -// -/* -{# ASSIGN VARIABLES #} - {# ---------------- #} - {%- if sbot_config.hops -%} - {% set hops = sbot_config.hops -%} - {%- else -%} - {% set hops = "X" -%} - {%- endif -%} - {%- if sbot_config.lis -%} - {%- set listen_addr = sbot_config.lis | split(pat=":") -%} - {%- else -%} - {%- set listen_addr = ["", ""] -%} - {%- endif -%} -*/ +/// 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() + }; -// TODO: read the sbot config and assign variables accordingly -// pass those variables into the template builder + // 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()), + }; + + (run_on_startup, sbot_config, ip, port) +} /// Scuttlebutt settings menu template builder. pub fn build() -> PreEscaped { + let (run_on_startup, sbot_config, ip, port) = read_status_and_config(); + let menu_template = html! { (PreEscaped("")) div class="card center" { @@ -34,7 +52,7 @@ pub fn build() -> PreEscaped { label for="hops" class="label-small font-gray" { "HOPS" } div id="hops" style="display: flex; justify-content: space-evenly;" { div { - @if hops == 0 { + @if sbot_config.hops == 0 { input type="radio" id="hops_0" name="hops" value="0" checked; } @else { input type="radio" id="hops_0" name="hops" value="0"; @@ -42,7 +60,7 @@ pub fn build() -> PreEscaped { label class="font-normal" for="hops_0" { "0" } } div { - @if hops == 1 { + @if sbot_config.hops == 1 { input type="radio" id="hops_1" name="hops" value="1" checked; } @else { input type="radio" id="hops_1" name="hops" value="1"; @@ -50,7 +68,7 @@ pub fn build() -> PreEscaped { label class="font-normal" for="hops_1" { "1" } } div { - @if hops == 2 { + @if sbot_config.hops == 2 { input type="radio" id="hops_2" name="hops" value="2" checked; } @else { input type="radio" id="hops_2" name="hops" value="2"; @@ -58,7 +76,7 @@ pub fn build() -> PreEscaped { label class="font-normal" for="hops_2" { "2" } } div { - @if hops == 3 { + @if sbot_config.hops == 3 { input type="radio" id="hops_3" name="hops" value="3" checked; } @else { input type="radio" id="hops_3" name="hops" value="3"; @@ -66,7 +84,7 @@ pub fn build() -> PreEscaped { label class="font-normal" for="hops_3" { "3" } } div { - @if hops == 4 { + @if sbot_config.hops == 4 { input type="radio" id="hops_4" name="hops" value="4" checked; } @else { input type="radio" id="hops_4" name="hops" value="4"; @@ -78,20 +96,20 @@ pub fn build() -> PreEscaped { 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" } - input type="text" id="ip" name="lis_ip" value="{{ listen_addr.0 }}"; + input type="text" id="ip" name="lis_ip" value=(ip); } 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" } - input type="text" id="port" name="lis_port" value="{{ listen_addr.1 }}"; + input type="text" id="port" name="lis_port" value=(port); } } 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" } - input type="text" id="network_key" name="shscap" value="{{ sbot_config.shscap }}"; + input type="text" id="network_key" name="shscap" value=(sbot_config.shscap); } 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" } - input type="text" id="database_dir" name="repo" value="{{ sbot_config.repo }}"; + input type="text" id="database_dir" name="repo" value=(sbot_config.repo); } div class="center" { @if sbot_config.localadv == true { @@ -149,8 +167,3 @@ pub fn build() -> PreEscaped { // render the base template with the provided body templates::base::build(body) } - -/* -{%- extends "nav" -%} -{%- block card %} - */