1 个不稳定版本
新版本 0.1.0 | 2024 年 8 月 15 日 |
---|
#11 在 #licensing
66KB
1.5K SLoC
非官方 Keygen Rust SDK
keygen-rs
包允许 Rust 程序使用 keygen.sh 服务进行许可。
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
keygen-rs = "0.1.0"
配置
KeygenConfig
使用 KeygenConfig
全局配置 SDK。您应该在调用任何 API 之前设置此配置。
use keygen_rs::config::{self, KeygenConfig};
config::set_config(KeygenConfig {
api_url: "https://api.keygen.sh".to_string(),
account: "YOUR_KEYGEN_ACCOUNT_ID".to_string(),
product: "YOUR_KEYGEN_PRODUCT_ID".to_string(),
license_key: Some("A_KEYGEN_LICENSE_KEY".to_string()),
public_key: Some("YOUR_KEYGEN_PUBLIC_KEY".to_string()),
..KeygenConfig::default()
});
用法
验证许可证
要验证许可证,请使用您的 Keygen 账户详情配置 KeygenConfig
。然后使用设备指纹调用 validate
函数
use keygen_rs::{config::{self, KeygenConfig}, errors::Error};
#[tokio::main]
async fn main() -> Result<(), Error> {
config::set_config(KeygenConfig {
api_url: "https://api.keygen.sh".to_string(),
account: "YOUR_KEYGEN_ACCOUNT_ID".to_string(),
product: "YOUR_KEYGEN_PRODUCT_ID".to_string(),
license_key: Some("A_KEYGEN_LICENSE_KEY".to_string()),
public_key: Some("YOUR_KEYGEN_PUBLIC_KEY".to_string()),
..KeygenConfig::default()
});
let fingerprint = machine_uid::get().unwrap_or("".into());
let license = keygen_rs::validate(&[fingerprint]).await?;
println!("License validated successfully: {:?}", license);
Ok(())
}
激活机器
要为许可证激活机器
use keygen_rs::{config::{self, KeygenConfig}, errors::Error};
#[tokio::main]
async fn main() -> Result<(), Error> {
config::set_config(KeygenConfig {
// ... (same configuration as above)
});
let fingerprint = machine_uid::get().unwrap_or("".into());
if let Err(err) = keygen_rs::validate(&[fingerprint.clone()]).await {
match err {
Error::LicenseNotActivated(license) => {
let machine = license.activate(&fingerprint, &[]).await?;
println!("License activated successfully: {:?}", machine);
},
_ => {
println!("License validation failed: {:?}", err);
}
}
} else {
println!("License already validated successfully");
}
Ok(())
}
离线许可证密钥验证
要离线验证已签名的许可证密钥
use keygen_rs::{config::{self, KeygenConfig}, license::SchemeCode};
fn main() {
config::set_config(KeygenConfig {
// ... (configuration with public_key set)
});
let signed_key = "YOUR_SIGNED_LICENSE_KEY";
if let Ok(data) = keygen_rs::verify(SchemeCode::Ed25519Sign, signed_key) {
println!("License verified: {:?}", String::from_utf8_lossy(&data));
} else {
println!("License verification failed");
}
}
错误处理
SDK 返回有意义的错误,您可以在集成中进行处理。以下是一个处理 LicenseNotActivated
错误的示例
use keygen_rs::{config::{self, KeygenConfig}, errors::Error};
#[tokio::main]
async fn main() -> Result<(), Error> {
config::set_config(KeygenConfig {
// ... (configuration)
});
let fingerprint = machine_uid::get().unwrap_or("".into());
match keygen_rs::validate(&[fingerprint.clone()]).await {
Ok(license) => println!("License is valid: {:?}", license),
Err(Error::LicenseNotActivated(license)) => {
println!("License is not activated. Activating...");
let machine = license.activate(&fingerprint, &[]).await?;
println!("Machine activated: {:?}", machine);
},
Err(e) => println!("Error: {:?}", e),
}
Ok(())
}
示例
有关更详细的示例,请参阅存储库中的 examples
目录。
测试
在实现您的许可集成测试策略时,我们建议模拟 Keygen API 响应。这对于 CI/CD 环境尤为重要,可以防止对 Keygen 服务器的过度负载,并保持您的账户每日请求限制。您可以使用 mockito
或 wiremock
等包在测试中模拟 HTTP 响应。
受以下启发
许可证
本项目采用 MIT 许可证。
依赖项
~13–50MB
~775K SLoC