# peach-web ![Generic badge](https://img.shields.io/badge/version-0.6.0-.svg) ## Web Interface for PeachCloud **peach-web** provides a web interface for the PeachCloud device. The web interface is primarily designed as a means of managing a Scuttlebutt pub. As such, it exposes the following features: - Create a Scuttlebutt profile - Follow, unfollow, block and unblock peers - Generate pub invite codes - Configure the sbot (hops, log directory, LAN discovery etc.) - Send private messages - Stop, start and restart the sbot Additional features are focused on administration of the device itself. This includes networking functionality and device statistics. The peach-web stack currently consists of [Rouille](https://crates.io/crates/rouille) (Rust web framework), [Maud](https://maud.lambda.xyz/) (Rust template engine), HTML and CSS. Scuttlebutt functionality is provided by [golgi](http://golgi.mycelial.technology). _Note: This is a work-in-progress._ ## Setup Clone the `peach-workspace` repo: `git clone https://git.coopcloud.tech/PeachCloud/peach-workspace` Move into the repo and compile: `cd peach-workspace/peach-web` `cargo build --release` Run the binary: `../target/release/peach-web` ## Environment ### Configuration Mode The web application can be run with a minimal set of routes and functionality (PeachPub - a simple sbot manager) or with the full-suite of capabilities, including network management and access to device statistics (PeachCloud). The mode is enabled by default (as defined in `Rocket.toml`) but can be overwritten using the `STANDALONE_MODE` environment variable: `true` or `false`. If the variable is unset or the value is incorrectly set, the application defaults to standalone mode. ### Authentication Authentication is enabled by default when running the application. It can be disabled by setting the `DISABLE_AUTH` environment variable to `true`: `export DISABLE_AUTH=true` ### Logging Logging is made available with `env_logger`: `export RUST_LOG=info` Other logging levels include `debug`, `warn` and `error`. ## Debian Packaging A `systemd` service file and Debian maintainer scripts are included in the `debian` directory, allowing `peach-web` to be easily bundled as a Debian package (`.deb`). The `cargo-deb` [crate](https://crates.io/crates/cargo-deb) can be used to achieve this. Install `cargo-deb`: `cargo install cargo-deb` Move into the repo: `cd peach-web` Build the package: `cargo deb` The output will be written to `target/debian/peach-web_0.3.0_arm64.deb` (or similar). Install the package as follows: `sudo dpkg -i target/debian/peach-web_0.3.0_arm64.deb` The service will be automatically enabled and started. Uninstall the service: `sudo apt-get remove peach-web` Remove configuration files (not removed with `apt-get remove`): `sudo apt-get purge peach-web` ## Configuration Configuration variables are stored in /var/lib/peachcloud/config.yml. Peach-web also updates this file when changes are made to configurations via the web interface. peach-web has no database, so all configurations are stored in this file. ### Dynamic DNS Configuration Most users will want to use the default PeachCloud dynamic dns server. If the config dyn_use_custom_server=false, then default values will be used. If the config dyn_use_custom_server=true, then a value must also be set for dyn_dns_server_address (e.g. "http://peachdynserver.commoninternet.net"). This value is the URL of the instance of peach-dyndns-server that requests will be sent to for domain registration. Using a custom value can here can be useful for testing. ## Design `peach-web` has been designed with simplicity and resource minimalism in mind. Both the dependencies used by the project, as well as the code itself, reflect these design priorities. The Rouille micro-web-framework and Maud templating engine have been used to present a web interface for interacting with the device. HTML is rendered server-side and request handlers call `peach-` libraries and serve HTML and assets. The optimised binary for `peach-web` can be compiled on a RPi 3 B+ in approximately 30 minutes. ## Licensing AGPL-3.0