peach-workspace/peach-web
2022-01-12 20:21:39 +02:00
..
debian Remove configuration of http basic auth 2021-12-17 17:19:04 -05:00
docs First workspace commit 2021-08-06 13:58:40 -04:00
src cargo fmt 2022-01-12 20:21:39 +02:00
static remove json routes, utils and javascript 2022-01-12 13:04:47 +02:00
templates remove json routes, utils and javascript 2022-01-12 13:04:47 +02:00
.gitignore First workspace commit 2021-08-06 13:58:40 -04:00
.travis.yml First workspace commit 2021-08-06 13:58:40 -04:00
Cargo.toml replace snafu with custom error impl 2022-01-12 19:58:49 +02:00
README.md satisfy clippy nightly warnings 2022-01-12 13:15:04 +02:00
Rocket.toml Fix typo in secret_key 2021-12-18 09:22:55 -05:00

peach-web

Build Status Generic badge

Web Interface for PeachCloud

peach-web provides a web interface for the PeachCloud device.

Initial development is focused on administration of the device itself, beginning with networking functionality, with SSB-related administration to be integrated at a later stage.

The peach-web stack currently consists of Rocket (Rust web framework), Tera (Rust template engine), HTML and CSS.

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 tests:

cargo test

Move back to the peach-workspace directory:

cd ..

Run the binary:

./target/release/peach-web

Note: Networking functionality requires peach-network microservice to be running.

Environment

Deployment Mode

The web application deployment mode is configured with the ROCKET_ENV environment variable:

export ROCKET_ENV=stage

Other deployment modes are dev and prod. Read the Rocket Environment Configurations docs for further information.

Authentication

Authentication is disabled in development mode and enabled by default when running the application in production mode. It can be disabled by setting the ROCKET_DISABLE_AUTH environment variable to true:

export ROCKET_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 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 is built on the Rocket webserver and Tera templating engine. It presents a web interface for interacting with the device. HTML is rendered server-side. Request handlers call peach- libraries and serve HTML and assets. Each Tera template is passed a context object. In the case of Rust, this object is a struct and must implement Serialize. The fields of the context object are available in the context of the template to be rendered.

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.

Licensing

AGPL-3.0