secra_plugins 0.1.32

生产级插件系统 - 插件的生命周期
Documentation
//! 插件执行相关方法

use crate::error::{PluginManagerError, PluginManagerResult};
use super::constants::MAX_ACTION_LEN;
use super::validation::sanitize_plugin_name;
use tokio::time::{timeout, Duration};
use tracing::{debug, error, info, trace, warn};

/// 验证执行参数
///
/// 验证插件执行操作的参数,确保动作名称符合安全要求。
/// 防止空字符串和过长的输入,避免潜在的安全问题。
///
/// # 参数
/// * `action` - 要执行的动作名称
///
/// # 返回值
/// * `PluginManagerResult<()>` - 验证通过返回 `Ok(())`
///
/// # 错误
/// * `PluginManagerError::ValidationFailed` - 如果动作名称为空或过长
///
/// # 验证规则
/// * 动作名称不能为空(去除空白字符后)
/// * 动作名称长度不能超过 `MAX_ACTION_LEN`(255 字符)
///
/// # 示例
/// ```no_run
/// # fn example() {
/// validate_execute_params("my_action")?;
/// validate_execute_params("")?; // 返回错误
/// # }
/// ```
pub fn validate_execute_params(action: &str) -> PluginManagerResult<()> {
    trace!("验证执行参数: {}", action);
    
    // 检查 action 是否为空
    if action.trim().is_empty() {
        error!("动作名称不能为空");
        return Err(PluginManagerError::ValidationFailed(
            "动作名称不能为空".to_string()
        ));
    }
    
    // 检查 action 长度(防止过长的输入)
    if action.len() > MAX_ACTION_LEN {
        error!("动作名称过长: {} (最大长度: {})", action.len(), MAX_ACTION_LEN);
        return Err(PluginManagerError::ValidationFailed(
            format!("动作名称过长:超过{}个字符", MAX_ACTION_LEN)
        ));
    }
    
    debug!("执行参数验证通过: {} (长度: {})", action, action.len());
    Ok(())
}