8 个版本
0.3.4 | 2021 年 9 月 15 日 |
---|---|
0.3.3 | 2021 年 9 月 13 日 |
0.2.5 | 2021 年 8 月 12 日 |
0.2.4 | 2021 年 7 月 28 日 |
0.2.3 | 2021 年 6 月 24 日 |
#6 在 #路由安全
17KB
264 行
Routinator UI
此软件包通过将所有资产存储在字节阵列 Vec 中,并由 Hyper 或其他 Web 服务器软件包提供服务,构建 Routinator Web UI 的所有资产。
该库有两个公共函数:get_endpoints()
,返回 Vec 和 ui_resource(PATH)
,后者将返回 UI 资源。
使用示例
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()
}
构建此库
请勿在此软件包上直接使用 cargo publish
,或手动在 Cargo.toml
中提升此创建的版本!
此软件包的所有版本控制(以及代码生成)都由其父存储库(Vue 应用程序)自动完成。
如果您需要提升此软件包的版本,请在 github 上检出其父存储库并提交
npm 版本[主要|次要|补丁] -m<信息>
您可以在其中指定 patch
、minor
或 major
来提升补丁、次要或主版本。这将处理 git(发布)分支、git 标签、此软件包中 Cargo.toml 中的版本以及其父 package.json 中的版本。
新版本(无论它是补丁、次要还是主版本)将由 github Actions CI 自动部署到 routinator.nlnetlabs.nl
。
本地使用
您始终可以使用在 routinator 中此软件包的 Cargo.toml
行中的已知机制(包括一个 { path = ".." }
参数)引用本地软件包。如果您在父存储库(Vue 应用程序)中进行更改并编译 routinator,您应该看到本地更改。
此外,每次向 main
分支推送时,GitHub Actions 都会创建一个 .tar.gz 文件,并可以从那里下载。
无运行时依赖
~0–1.8MB
~28K SLoC