package services import ( "cmii-uav-watchdog-common/models" "cmii-uav-watchdog-common/totp_tier_one" "cmii-uav-watchdog-common/utils" "cmii-uav-watchdog-common/wdd_log" ) func ProcessAuthorizationFile(authFile models.AuthorizationFile) (models.AuthorizationCode, error) { // 解密项目NameSpace projectNamespace, err := totp_tier_one.Decrypt(authFile.EncryptedNamespace, authFile.ProjectNamespace) if err != nil { wdd_log.Error("解密项目Name失败: %v", err) return models.AuthorizationCode{}, err } // 获取项目信息 projectInfo, err := GetProjectInfo(projectNamespace) if err != nil { wdd_log.Error("获取项目信息失败: %v", err) return models.AuthorizationCode{}, err } // 验证TOTP验证码 if !totp_tier_one.VerifyTierOneTOTPCode(authFile.TOTPCode, projectInfo.TierOneSecret) { wdd_log.Warn("TOTP验证失败: %s", authFile.TOTPCode) return models.AuthorizationCode{}, err } // 处理加密的主机信息 // 一级TOTP密钥 key := projectInfo.TierOneSecret // 注意:由于我们无法解密主机信息(我们只需要验证其有效性),所以直接使用 authorizedHostMap := make(map[string]models.HostInfo) for encryptedInfo, hostInfo := range authFile.EncryptedHostMap { // 使用 DecryptHostInfo 验证主机信息是否被篡改 isOK, err := totp_tier_one.DecryptHostInfo(encryptedInfo, hostInfo, key) if !isOK || err != nil { wdd_log.Error("主机信息验证失败: %v", err) continue } // 验证通过,将主机信息添加到授权列表 authorizedHostMap[encryptedInfo] = hostInfo } // 生成新的TOTP验证码 newTOTPCode, err := totp_tier_one.GenerateTierOneTOTPCode(projectInfo.TierOneSecret) if err != nil { wdd_log.Error("生成TOTP验证码失败: %v", err) return models.AuthorizationCode{}, err } return models.AuthorizationCode{ TOTPCode: newTOTPCode, CurrentTime: utils.CurentTimeString(), EncryptedHostMap: authorizedHostMap, ProjectNamespace: projectNamespace, EncryptedNamespace: authFile.EncryptedNamespace, }, nil }