Files
2025-12-06 11:26:05 +08:00

65 lines
2.0 KiB
Go

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
}