SMB Module Phase 1完成 (79行代码)

功能:
- SMBConfig: 配置结构体
- SMBManager: 管理API
- CLI工具:status/list/create/remove命令

验证:
-  status命令JSON输出
-  list命令正确显示
-  create命令生成配置指南

下一步:
- 用户手动启用SMB服务(需要sudo)
- Windows/macOS客户端测试
- Phase 2: 权限控制优化
This commit is contained in:
Warren
2026-06-10 22:55:42 +08:00
parent 9b2d75935e
commit 5d657efbb5
5 changed files with 227 additions and 0 deletions

73
markbase-smb/src/main.rs Normal file
View File

@@ -0,0 +1,73 @@
use clap::Parser;
use markbase_smb::{SMBConfig, SMBManager};
#[derive(Parser)]
#[command(name = "markbase-smb")]
#[command(about = "MarkBase SMB Configuration Tool", long_about = None)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Parser)]
enum Commands {
/// Create SMB share configuration
Create {
/// Share name
#[arg(short, long, default_value = "markbase")]
name: String,
/// Path to share
#[arg(short, long, default_value = "/Users/accusys/momentry/var/sftpgo/data")]
path: String,
},
/// Remove SMB share
Remove {
/// Share name
#[arg(short, long)]
name: String,
},
/// List existing SMB shares
List,
/// Show SMB status
Status,
}
fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
match cli.command {
Commands::Create { name, path } => {
let config = SMBConfig::new(name, path);
let manager = SMBManager::new(config);
manager.create_share()?;
}
Commands::Remove { name } => {
let config = SMBConfig::new(name, "/dummy".to_string());
let manager = SMBManager::new(config);
manager.remove_share()?;
}
Commands::List => {
let shares = SMBManager::list_shares()?;
if shares.is_empty() {
println!("No SMB shares configured");
} else {
println!("Existing SMB shares:");
for share in shares {
println!(" - {}", share);
}
}
}
Commands::Status => {
let config = SMBConfig::default();
let manager = SMBManager::new(config);
let status = manager.status()?;
println!("{}", serde_json::to_string_pretty(&status)?);
}
}
Ok(())
}