# peach-web ![Generic badge](https://img.shields.io/badge/version-0.6.18-.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, CSS and a tiny bit of JS. 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` ## Development Setup In order to test `peach-web` on a development machine you will need to have a running instance of `go-sbot` (please see the [go-sbot README](https://github.com/cryptoscope/ssb) for installation details). The `GO_SBOT_DATADIR` environment variable or corresponding config variable must be set to `/home//.ssb-go` and the `PEACH_HOMEDIR` variable must be set to `/home/`. See the Configuration section below for more details. The `go-sbot` process must be managed by `systemd` in order for it to be controlled via the `peach-web` web interface. Here is a basic `go-sbot.service` file: ``` [Unit] Description=GoSSB server. [Service] ExecStart=/usr/bin/go-sbot Environment="LIBRARIAN_WRITEALL=0" Restart=always [Install] WantedBy=multi-user.target ``` And a `sudoers` rule must be created to allow the `go-sbot.service` state to be modified without requiring a password. Here is an example `/etc/sudoers.d/peach-web` file: ``` # Control go-sbot service without sudo passworkd ALL=(ALL) NOPASSWD: /bin/systemctl start go-sbot.service, /bin/systemctl restart go-sbot.service, /bin/systemctl stop go-sbot.service, /bin/systemctl enable go-sbot.service, /bin/systemctl disable go-sbot.service ``` ## Configuration By default, configuration variables are stored in `/var/lib/peachcloud/config.yml`. The variables in the file are updated by `peach-web` when changes are made to configurations via the web interface. Since `peach-web` has no database, all configurations are stored in this file. A non-default configuration directory can be defined via the `PEACH_CONFIGDIR` environment variable or corresponding key in the `config.yml` file. ### 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 application runs in PeachPub mode by default. The complete PeachCloud mode will be available once a large refactor is complete; it is not currently in working order so it's best to stick with PeachPub for now. The running mode can be defined by setting the `STANDALONE_MODE` environment variable (`true` for PeachPub or `false` for PeachCloud). Alternatively, the desired mode can be set by modifying the PeachCloud configuration file. ### 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`. ### 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. ## 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` ## 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