版本封存
This commit is contained in:
64
cmii-uav-watchdog-center/services/auth_service.go
Normal file
64
cmii-uav-watchdog-center/services/auth_service.go
Normal file
@@ -0,0 +1,64 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user