#bgp #web-ui #rpki #路由安全 #url-path #web-interface #构建

bin+lib routinator-ui

作为 RPKI 依赖方软件的 Routinator 的 Web UI

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#路由安全

BSD-3-Clause

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<信息>

您可以在其中指定 patchminormajor 来提升补丁、次要或主版本。这将处理 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