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:
73
markbase-smb/src/main.rs
Normal file
73
markbase-smb/src/main.rs
Normal 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(())
|
||||
}
|
||||
Reference in New Issue
Block a user