# tools **Repository Path**: jamespi/tools ## Basic Information - **Project Name**: tools - **Description**: 这是一个工具类组件,使用该组件可以提高项目开发效率,该组件包含:图片处理、并发处理的功能 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-11 - **Last Updated**: 2025-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 🚀 特性 - 插件说明 - [lecheng-tools](https://gitee.com/jamespi/tools) - 这是一个工具类组件,使用该组件可以提高项目开发效率,该组件包含:图片处理、并发处理的功能。 - 插件调用:go get gitee.com/jamespi/tools@v0.1.1 - 整体插件采用六边形架构思想构建 ## 🏗️ 架构设计 - 架构图![架构图](2.jpg) ## 🚀 主要特性 ### 1. 安全配置管理 - **加密存储**: 敏感信息(如token、密钥)现在使用AES-GCM加密存储 - **环境变量**: 支持从环境变量读取加密密钥 - **配置验证**: 增强的配置验证机制 ```go // 使用安全配置 secureConfig := config.GetSecureConfig() err := secureConfig.SetSecureToken("fh2_token", "your-sensitive-token") token, err := secureConfig.GetSecureToken("fh2_token") ``` ### 2. 安全HTTP客户端 - **TLS配置**: 强制使用TLS 1.2+ - **连接池**: 优化的连接池管理 - **超时控制**: 30秒请求超时 - **URL验证**: 防止SSRF攻击 ```go // 使用安全HTTP客户端 client := httpclient.NewSecureHTTPClient() resp, err := client.DoRequest(ctx, "GET", url, nil, headers) ``` ### 3. 多租户支持 - **租户上下文**: 基于Context的租户信息传递 - **状态隔离**: 每个租户独立的状态管理 - **权限控制**: 租户级别的权限验证 ```go // 创建租户上下文 tenantInfo := tenant.NewTenantInfo("tenant_001", "token", "org_001") ctx := tenant.WithTenant(context.Background(), tenantInfo) // 使用多租户API projectList, err := fh2.GetProjectListWithContext(ctx) ``` ### 4. 输入验证 - **UUID验证**: 严格的UUID格式验证 - **参数清理**: 自动清理和转义输入参数 - **长度限制**: 防止过长输入导致的攻击 - **注入防护**: 防止XSS和SQL注入 ```go // 输入验证 validator := validator.GetValidator() err := validator.ValidateUUID(projectUuid) err := validator.ValidateDeviceSN(deviceSn) ``` ## 🚀 快速开始 - 插件调用示例 ```azure func main() { // 初始化配置 if err := config.InitDefaultConfig(); err != nil { log.Fatalf("Configuration initialization failed: %v", err) } // 启用指定插件 plugin.LoadEnableList([]string{"process_image"}) // 多租户使用示例 log.Println("Multi-tenant usage example starts...") for i := 0; i < 3; i++ { demonstrateMultiTenant() } } // demonstrateMultiTenant 多租户使用 func demonstrateMultiTenant() { // 创建多租户 tenantInfo := tenant.NewTenantInfo(1, "tenant_token_example", "tenant_id_example") tenantInfo.Permissions = []string{"process_image:read", "process_image:write"} tenantInfo.ExpiresAt = time.Now().Add(12 * time.Hour) // 设置过期时间为12小时后 // 创建带租户信息的上下文 ctx := context.Background() ctx = tenant.WithTenant(ctx, tenantInfo) ctx = tenant.WithRequestID(ctx, uuid.New().String()) // 获取插件实例 if processor, ok := plugin.Get[service.ProcessImagesAdapter](plugin.ProcessImage); ok { if err := processor.GetTenantInfoFromContext(ctx); err != nil { log.Println("获取租户信息失败:", err) return } // 在这里可以传递ctx给插件的方法,以便插件内部使用租户信息 if _, err := processor.ReadGPSInfo(ctx, "/path/to/your/images/1.jpg"); err != nil { log.Println("获取租户信息失败:", err) return } } } ``` ## 📖 接口文档 ```azure // GetTenantInfoFromContext 从上下文获取租户信息 GetTenantInfoFromContext(ctx context.Context) error // ReadGPS 从图片读取GPS信息 ReadGPSInfo(ctx context.Context, imagePath string) (*GPSInfo, error) // GetDSMHeight 从DSM获取指定经纬度的高度 GetDSMHeight(ctx context.Context, dsmFilePath string, longitude, latitude float64) (float64, error) // CalculateArea 计算多边形面积 CalculateArea(ctx context.Context, coordinates float64) (float64, error) // ProcessImage 处理单张图片,返回处理结果 ProcessImage(ctx context.Context, dsmFilePath string, imagePath string) (*ImageData, error) // ProcessImages 处理图片目录中的所有图片,返回处理结果 ProcessImages(ctx context.Context, dsmFilePath string, ImageDirPath string) ([]ImageData, error) // MuEffectiveArea 计算亩有效穗面积,返回处理结果 MuEffectiveArea(ctx context.Context, count, earGrainCount, area, thousandGrainWeight float64) (float64, error) // DatasetAnomalyHand 对数据集进行异常处理,返回处理结果 DatasetAnomalyHand(ctx context.Context, calculateYield []CalculateYield) ([]CalculateYield, error) ``` ## 📖 依赖插件 - go get gopkg.in/yaml.v3 (废弃) - go get github.com/spf13/viper - go get github.com/google/uuid - go get github.com/rwcarlsen/goexif/exif - go get github.com/airbusgeo/godal ## 🐳 安全建议 ### 生产环境部署 1. **设置强加密密钥**: ```bash export DRONE_ENCRYPTION_KEY="your-very-secure-32-character-key" ``` 2. **启用HTTPS验证**: ```go // 在生产环境中设置 InsecureSkipVerify: false ``` 3. **限制网络访问**: - 配置防火墙规则 - 使用VPN或专网 4. **定期更新密钥**: - 定期轮换API密钥 - 监控异常访问 ### 监控和告警 1. **日志监控**: 监控错误日志和异常访问 2. **性能监控**: 监控API响应时间 3. **安全告警**: 配置安全事件告警 ## 迁移步骤 ### 1. 更新依赖 ```bash go mod tidy ``` ### 2. 配置环境变量 ```bash export DRONE_ENCRYPTION_KEY="your-32-character-encryption-key" ``` ### 3. 更新配置文件 将敏感信息从配置文件中移除,使用环境变量或加密存储。 ### 4. 测试验证 ```bash go test ./... go run main.go ```