v0.5.2-pre.006

This commit is contained in:
2026-08-10 23:14:17 +02:00
parent e3acb8ceb1
commit 066d969f5a
51 changed files with 1937 additions and 88 deletions

View File

@@ -1,5 +1,5 @@
// file: ks-config/src/settings.rs
// version: 23
// version: 24
//! Resolved runtime configuration models retained during the `0.5.1` source-document split.
@@ -226,6 +226,8 @@ pub struct WalletConfig {
pub wallet_dir: std::string::String,
/// Selected cluster name.
pub cluster: std::string::String,
/// Optional persistent native wallet alias selected by this profile.
pub wallet_alias: std::option::Option<std::string::String>,
/// Enables the managed temporary wallet for this profile.
pub temporary_wallet_enabled: bool,
/// Alias used for the managed temporary wallet.
@@ -736,7 +738,13 @@ pub(crate) fn validate_wallet(config: &WalletConfig) -> ks_core::Result<()> {
std::result::Result::Ok(()) => (),
std::result::Result::Err(error) => return std::result::Result::Err(error),
}
match validate_wallet_alias(&config.temporary_wallet_alias) {
if let std::option::Option::Some(alias) = config.wallet_alias.as_deref() {
match validate_wallet_alias(alias, "wallet.wallet_alias") {
std::result::Result::Ok(()) => (),
std::result::Result::Err(error) => return std::result::Result::Err(error),
}
}
match validate_wallet_alias(&config.temporary_wallet_alias, "wallet.temporary_wallet_alias") {
std::result::Result::Ok(()) => (),
std::result::Result::Err(error) => return std::result::Result::Err(error),
}
@@ -755,11 +763,11 @@ pub(crate) fn validate_wallet(config: &WalletConfig) -> ks_core::Result<()> {
return std::result::Result::Ok(());
}
fn validate_wallet_alias(value: &str) -> ks_core::Result<()> {
pub(crate) fn validate_wallet_alias(value: &str, field: &str) -> ks_core::Result<()> {
if value.is_empty() || value.len() > 64 {
return std::result::Result::Err(ks_core::Error::new(
"wallet_alias_length_invalid",
"temporary wallet alias length must be between 1 and 64 bytes",
format!("{field} length must be between 1 and 64 bytes"),
));
}
if !value.bytes().enumerate().all(|(index, byte)| {
@@ -767,7 +775,7 @@ fn validate_wallet_alias(value: &str) -> ks_core::Result<()> {
}) {
return std::result::Result::Err(ks_core::Error::new(
"wallet_alias_invalid",
"temporary wallet alias contains invalid characters",
format!("{field} contains invalid characters"),
));
}
return std::result::Result::Ok(());
@@ -1016,6 +1024,16 @@ mod tests {
assert!(result.is_err());
}
#[test]
fn parser_rejects_invalid_persistent_wallet_alias() {
let mut value = parse_default_value();
value["profiles"][0]["wallet"]["wallet_alias"] =
serde_json::Value::String("../wallet".to_string());
let raw_json = value_to_json(&value);
let result = super::parse_config_json(&raw_json);
assert!(result.is_err());
}
#[test]
fn parser_rejects_invalid_temporary_wallet_alias() {
let mut value = parse_default_value();