9个稳定版本
2.1.0 | 2023年12月3日 |
---|---|
2.0.4 | 2023年11月28日 |
2.0.2 | 2023年9月14日 |
1.0.3 | 2023年9月8日 |
#706 in Web编程
26KB
257 行
outline-api
本包实现了OutlineVPN管理API。
安装
要使用此包,您需要在您的系统上安装Rust和Cargo。一旦安装,您可以通过运行以下命令将此包添加到您的应用程序中
cargo add outline-api
用法
您可以使用此库构建自己的OutlineVPN管理应用,例如
main.rs
extern crate toml;
use std::{fs, io, time::Duration};
use toml::Value;
fn main() {
let toml_str = fs::read_to_string("config.toml").expect("Failed to read config file");
let toml_value: Value = toml::from_str(&toml_str).expect("Failed to parse config.toml");
let server_section = toml_value
.get("server")
.expect("Missing [server] section")
.as_table()
.expect("[server] section should be a table");
let cert_sha256 = server_section
.get("cert_sha256")
.and_then(Value::as_str)
.expect("Missing or invalid cert_sha256");
let api_url = server_section
.get("api_url")
.and_then(Value::as_str)
.expect("Missing or invalid api_url");
let request_timeout = server_section
.get("request_timeout_in_sec")
.and_then(|timeout| timeout.as_integer())
.map(|timeout_secs| Duration::from_secs(timeout_secs as u64))
.expect("Missing or invalid request_timeout");
let vpn = outline_api::new(cert_sha256, api_url, Some(request_timeout));
match vpn.get_server_info() {
Ok(info) => println!("Server info: {}", info),
Err(err) => eprintln!("Error getting server info: {}", err),
}
let raw_id = get_user_input("Provide user ID:");
match raw_id.parse::<u16>() {
Ok(id) => match vpn.delete_access_key_by_id(&id) {
Ok(info) => println!("response: {:?}\n", info),
Err(err) => {
eprintln!("Error delete_access_key_by_id: {}", err)
}
},
Err(_) => {
eprintln!("Failed to parse the ID input as number (u16)");
}
}
fn get_user_input(prompt: &str) -> String {
println!("{}", prompt);
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("Failed to read line");
input.trim().to_string()
}
}
config.toml
[server]
cert_sha256 = "CERT_SHA256" # like E2DE8...2A75D
api_url = "https://<IP_ADDR>:<PORT>/<SECRET>"
request_timeout_in_sec = 5
Outline API
以下是关于OutlineVPN API的一些重要说明
- API的官方版本(见api.yml)并不完全正确。
- 实际上,服务器上没有提供
/access-keys/<ID>
端点。
依赖
~6–19MB
~283K SLoC