feat: Add iup-tool for testing the internal update platform#298
Merged
electricface merged 1 commit intoJan 23, 2026
Merged
Conversation
41ae2a9 to
185a54d
Compare
Accelerate issue debugging
185a54d to
abebbf6
Compare
deepin pr auto reviewGit Diff 代码审查报告我已对提供的 git diff 进行了详细审查,以下是关于语法逻辑、代码质量、性能和安全方面的分析和改进建议。 1. Makefile 修改审查意见
改进建议.PHONY: dev-tools bin/iup-tool2. cmd_get_current_packages.go审查意见
改进建议
// 建议改进的代码
var httpClient = &http.Client{
Timeout: 40 * time.Second,
}
func genCurrentPkgListsResponse(requestUrl, token, baseline string) (*http.Response, error) {
policyUrl := requestUrl + Urls[GetCurrentPkgLists].path
values := url.Values{}
values.Add("baseline", baseline)
policyUrl = policyUrl + "?" + values.Encode()
request, err := http.NewRequest(Urls[GetCurrentPkgLists].method, policyUrl, nil)
if err != nil {
return nil, fmt.Errorf("%v new request failed: %v", GetCurrentPkgLists.string(), err)
}
request.Header.Set("X-Repo-Token", base64.RawStdEncoding.EncodeToString([]byte(token)))
logRequestHeaders(request)
return httpClient.Do(request)
}3. cmd_get_cve_info.go审查意见
改进建议
// 建议提取的公共函数
func makeRequest(requestUrl, token, method string, queryParams url.Values) (*http.Response, error) {
policyUrl := requestUrl + queryParams.Encode()
request, err := http.NewRequest(method, policyUrl, nil)
if err != nil {
return nil, fmt.Errorf("new request failed: %v", err)
}
request.Header.Set("X-Repo-Token", base64.RawStdEncoding.EncodeToString([]byte(token)))
logRequestHeaders(request)
return httpClient.Do(request)
}4. cmd_get_update_log.go审查意见
改进建议
// 建议改进的代码
if globalDebug {
logger.Debugf("Update Log Data: %v", spew.Sdump(logs))
}5. cmd_get_version.go审查意见
改进建议
// 建议改进的代码
func (m *UpdatePlatformManager) genUpdatePolicyByToken() error {
response, err := m.genVersionResponse()
if err != nil {
return fmt.Errorf("failed get version data %v", err)
}
defer response.Body.Close() // 添加这一行
logger.Debugf("response: %v", response)
data, err := getResponseData(response, GetVersion)
if err != nil {
return fmt.Errorf("failed get version data %v", err)
}
msg := getVersionData(data)
logger.Infof("msg: %s", spew.Sdump(msg))
return nil
}6. cmd_post_process.go审查意见
改进建议
// 建议改进的代码
// 从安全配置中获取 secret
func getSecret() string {
// 实现从安全配置中获取 secret 的逻辑
// 可以考虑从环境变量或安全存储中获取
secret := os.Getenv("IUP_TOOL_SECRET")
if secret == "" {
logger.Warning("IUP_TOOL_SECRET not set, using default")
return "DflXyFwTmaoGmbDkVj8uD62XGb01pkJn"
}
return secret
}
// 使用系统临时目录
func runPostProcess(cmd *cobra.Command, args []string) {
// ...
filePath := filepath.Join(os.TempDir(), fmt.Sprintf("%s_%s.xz", "update", time.Now().Format("20060102150405")))
// ...
}7. cmd_post_process_event.go审查意见
改进建议
// 建议提取的函数
func validateEventType(eventType ProcessEventType) error {
if !eventType.IsValid() {
var validTypes []string
for i := CheckEnv; i < MaxProcessEventType; i++ {
validTypes = append(validTypes, fmt.Sprintf("%d=%s", i, i.String()))
}
return fmt.Errorf("invalid event type: %d, must be between %d and %d. Valid types: %s",
eventType, CheckEnv, MaxProcessEventType-1, strings.Join(validTypes, ", "))
}
return nil
}
// 使用提取的函数
func runPostProcessEvent(cmd *cobra.Command, args []string) {
// ...
if err := validateEventType(eventType); err != nil {
logger.Warningf("%v", err)
os.Exit(1)
}
// ...
}8. cmd_post_result.go审查意见
改进建议
// 建议改进的加密部分
func EncryptMsg(data []byte) ([]byte, error) {
// 获取 16 字节随机字符串并添加到明文前
replyMsgBytes, err := GetRandomBytes(randomLen)
if err != nil {
return nil, err
}
replyMsgBytes = append(replyMsgBytes, data...)
// 生成随机 IV
iv, err := GetRandomBytes(16)
if err != nil {
return nil, err
}
// 生成密文
block, err := aes.NewCipher([]byte(encodingAesKey))
if err != nil {
logger.Warningf("[encrypt] aes-cbc encrypt data failed, error:%v", err)
return nil, err
}
encodeBytes := replyMsgBytes
encodeBytes = PKCS7Encode(encodeBytes, BlockSize)
blockMode := cipher.NewCBCEncrypter(block, iv)
crypted := make([]byte, len(encodeBytes))
if len(crypted)%block.BlockSize() != 0 {
return nil, errors.New("encrypt failed, input not full blocks")
}
blockMode.CryptBlocks(crypted, encodeBytes)
// 将 IV 添加到密文前,以便解密时使用
result := append(iv, crypted...)
return result, nil
}9. iup-tool.go审查意见
改进建议
// 建议改进的日志初始化
var rootCmd = &cobra.Command{
Use: "iup-tool",
Short: "tool for intranet update platform operations",
Long: "A tool for interacting with the IUP (Intranet Update Platform)",
PersistentPreRun: func(cmd *cobra.Command, args []string) {
// 设置日志级别和输出
if globalDebug {
logger.SetLogLevel(log.LevelDebug)
} else {
logger.SetLogLevel(log.LevelInfo)
}
// 如果需要,可以添加日志文件输出
if logFile := os.Getenv("IUP_TOOL_LOG_FILE"); logFile != "" {
file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil {
logger.SetOutput(file)
defer file.Close()
}
}
logger.Debug("Starting iup-tool")
// 初始化更新平台管理器
initUpdatePlatform()
},
}10. types.go审查意见
改进建议
// 建议添加的验证方法
func (r UpgradeResult) IsValid() bool {
switch r {
case UpgradeSucceed, UpgradeFailed, CheckFailed:
return true
default:
return false
}
}
// 在 runPostResult 中使用
func runPostResult(cmd *cobra.Command, args []string) {
var result *UpgradePostMsg
// 从文件读取或从命令行参数构建
if resultDataFile != "" {
// ...
} else {
// ...
result = &UpgradePostMsg{
// ...
UpgradeStatus: UpgradeResult(resultStatus),
// ...
}
}
// 验证升级结果状态
if !result.UpgradeStatus.IsValid() {
logger.Warningf("invalid upgrade status: %d", resultStatus)
os.Exit(1)
}
logger.Debugf("Result: %s", spew.Sdump(result))
// ...
}11. utils.go审查意见
改进建议
// 建议改进的 Token 提取逻辑
func extractMachineIDFromToken(token string) string {
if token == "" {
return ""
}
// Token 格式: a=value;b=value;i=machineID;...
fields := strings.Split(token, ";")
for _, field := range fields {
field = strings.TrimSpace(field)
parts := strings.SplitN(field, "=", 2)
if len(parts) == 2 && parts[0] == "i" {
machineID := strings.TrimSpace(parts[1])
if machineID != "" {
logger.Debugf("Machine ID extracted from token: %s", machineID)
return machineID
}
}
}
logger.Warning("Machine ID (i=) not found in token")
return ""
}
// 建议改进的字符串处理函数
func Substr(str string, start int, length int) string {
if start < 0 {
start = 0
}
if length < 0 {
length = 0
}
runeStr := []rune(str)
runeLen := len(runeStr)
if start >= runeLen {
return ""
}
end := start + length
if end > runeLen {
end = runeLen
}
return string(runeStr[start:end])
}总体建议
安全性特别关注
这些改进建议旨在提高代码的安全性、性能和可维护性,同时保持代码的功能完整性。 |
zhaohuiw42
approved these changes
Jan 23, 2026
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: electricface, zhaohuiw42 The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
444d743
into
linuxdeepin:intranet_update
15 of 16 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Accelerate issue debugging