8 releases
0.3.4 | Sep 15, 2021 |
---|---|
0.3.3 | Sep 13, 2021 |
0.2.5 | Aug 12, 2021 |
0.2.4 | Jul 28, 2021 |
0.2.3 | Jun 24, 2021 |
#6 in #routing-security
17KB
264 lines
Routinator UI
This crate builds all the assets for the routinator web UI by storing them in a Vec of bytearrays that can be served by Hyper or another web serving crate.
The library has two public functions: get_endpoints()
, returning the Vec and
ui_resource(PATH)
that will return the UI resource.
Usage Example
use hyper::{Body, Request, Response};
const BASE_URL: &str = "/ui";
const CATCH_ALL_URL: &str = "index.html";
pub fn process_request(req: Request<Body>) -> Response<Body> {
let path = std::path::Path::new(req.uri().path());
if let Ok(p) = path.strip_prefix(BASE_URL) {
match routinator_ui::endpoints::ui_resource(p) {
Some(endpoint) => serve(endpoint.content, endpoint.content_type),
None => {
// In order to have the frontend handle all routing and queryparams under BASE_URL,
// all unknown URLs that start with /ui will route to the catch_all url defined here.
//
// Note that we could be smarter about this and do a (somewhat convoluted) regex on
// the requested URL to figure out if it makes sense as a search prefix url.
if let Some(default) =
routinator_ui::endpoints::ui_resource(std::path::Path::new(CATCH_ALL_URL))
{
serve(default.content, default.content_type)
} else {
super::not_found()
}
}
}
} else {
// The requested URL did *not* start with BASE_URL, so we're returning 404.
super::not_found()
}
}
fn serve(data: &'static [u8], ctype: &'static [u8]) -> Response<Body> {
Response::builder()
.header("Content-Type", ctype)
.body(data.into())
.unwrap()
}
Building this Library
Please do not use cargo publish
directly on this crate, or bump the version of this create in Cargo.toml
manually!
All versioning (and code generation) is done automatically for this crate by its parent repository, the Vue App.
If you need to bump the version of this crate, git checkout
its parent at github
and issue:
npm version [major|minor|patch] -m <MESSAGE>
Where you can specify patch
, minor
or major
to bump the, well, patch, minor or major version respectively. This will take
care of the git (release) branches, the git tags, the version in Cargo.toml in this crate and the version in package.json of its
parent.
A new release, whether it is patch, minor or major will be deployed to routinator.nlnetlabs.nl
automatically by the github
Actions CI.
Using it locally
You can always refer to a local crate with the well-known mechanisms (including a { path = ".." }
argument in the Cargo.toml
line for this crate in routinator. If you make changes in the parent repo (the Vue App) and compile routinator, you should see
the local changes.
Also, a .tar.gz file is created for every push to the main
branch by github Actions and can be downloaded from there.
No runtime deps
~0–2MB
~29K SLoC