Skip to content

fix: Terminal unregistration process#375

Merged
qiuzhiqian merged 1 commit intodevelop/intranet-updatefrom
fix-unregister
Apr 17, 2026
Merged

fix: Terminal unregistration process#375
qiuzhiqian merged 1 commit intodevelop/intranet-updatefrom
fix-unregister

Conversation

@qiuzhiqian
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 17, 2026

CLA Assistant Lite bot:
提交邮箱中包含我们的合作伙伴,但您似乎并非合作伙伴的成员或对接人,请联系相关对接人将您添加至组织之中,或由其重新发起 Pull Request。
The commit email domain belongs to one of our partners, but it seems you are not yet a member of the current organization, please contact the contact person to add you to the organization or let them submit the Pull Request.

xml seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You can retrigger this bot by commenting recheck in this Pull Request

@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

这份代码变更主要实现了终端的反注册流程,以及相关的配置重置和代码重构。以下是对代码的详细审查和改进建议:

1. 代码逻辑与功能审查

功能实现:

  • 代码实现了当平台返回 code=416 时,终端执行反注册流程。
  • 反注册流程包括:执行卸载脚本、重置 dsettings 配置(检查间隔、检查时间范围)、清理上次检查时间。
  • 增加了 ResetDSettings 方法用于重置 dsettings 配置。

逻辑问题:

  1. Token 空值检查位置
    genVersionResponse 中增加了对 m.Token 为空的检查。这虽然能防止空 Token 发送,但 m.Token 的初始化逻辑似乎被分散了。建议在 UpdatePlatformManager 初始化或 UpdateAllPlatformDataSync 时统一管理 Token 的生成和更新,而不是在每次请求时检查。

  2. 反注册后的行为
    tryToUnRegisterConsole 函数在反注册成功后返回 true,导致 CheckPolicyChanged 返回 true。这会触发更新检查逻辑。

    • 建议:确认这个流程是否符合预期。反注册后通常意味着环境发生了重大变化(如从内网切换到公网),立即触发检查是合理的,但需要确保后续的检查逻辑能正确处理这种状态变化(例如,updateAutoCheckSystemUnit 是否能正确设置新的定时器)。
  3. 配置重置的注释
    代码中有 TODO: 此处只是重置dsettings,合理的做法是恢复到上一次公网的情况

    • 改进:这是一个已知的技术债。目前的实现只是简单地重置为 dsettings 的默认值,这可能与用户在公网环境下的自定义配置不符。建议记录反注册前的公网配置快照,或者在反注册时提示用户配置已被重置。

2. 代码质量与规范

命名与常量:

  1. 常量导出
    dSettingsKeyCheckIntervaldSettingsKeyStartCheckRange 修改为 DSettingsKeyCheckIntervalDSettingsKeyStartCheckRange
    • 审查:这是为了在 message_report.go 中使用这些常量。这是合理的,符合 Go 的导出规则(首字母大写)。
    • 建议:检查 config.go 中其他以 dSettingsKey 开头的常量是否也需要导出,以保持一致性。如果它们只在 config.go 内部使用,保持小写是正确的。

包导入与别名:

  1. 包别名
    import "github.com/linuxdeepin/lastore-daemon/src/internal/config" 修改为 Cfg "github.com/linuxdeepin/lastore-daemon/src/internal/config"
    • 审查:这避免了与 config 变量名冲突,提高了代码可读性。
    • 建议:这是一个好的实践。确保整个项目中对该包的引用都使用了 Cfg. 前缀。

日志记录:

  1. 日志格式
    logger.Warning("failed to write sum:", err) 修改为 logger.Warningf("failed to write sum: %v", err)
    • 审查:使用 Warningf 格式化日志是更好的实践,避免字符串拼接带来的潜在性能问题(虽然这里影响很小),并且格式更统一。
    • 建议:全面检查项目中是否还有使用 logger.Warning("string", err) 的地方,统一改为 Warningf

3. 代码性能

  1. 文件 I/O
    saveCheckPolicyCache 函数中多次调用 WriteFile.WriteString

    • 建议:虽然这里的写入量很小,性能影响可以忽略,但可以使用 fmt.Fprintfstrings.Builder 构建完整内容后一次性写入,减少系统调用。
  2. HTTP 请求
    CheckPolicyChanged 中先读取了 response.Body,然后才检查 StatusCode

    • 改进:代码中已经修正了顺序,先检查状态码,再读取 Body。这是正确的,避免在错误状态下读取不必要的 Body。

4. 代码安全

  1. 命令执行
    tryToUnRegisterConsole 中使用 exec.Command 执行 /usr/lib/iup-daemon/uninstall

    • 风险:虽然路径是硬编码的,但仍需确保该脚本权限正确,且不会被非预期地替换或修改。
    • 建议:在执行前检查脚本文件的权限和哈希值(如果可能),确保它未被篡改。或者,将卸载逻辑集成到 Go 代码中,而不是依赖外部脚本。
  2. 环境变量注入
    cmd.Env = append(os.Environ(), "IMMUTABLE_DISABLE_REMOUNT=false")

    • 审查:这看起来是为了控制某些系统行为。确保这个环境变量的设置是安全的,不会影响其他进程或被恶意利用。
  3. 错误处理
    tryToUnRegisterConsole 中,如果卸载脚本执行失败,只是记录警告并返回错误。

    • 建议:考虑是否需要重试机制,或者更严重的错误处理(如标记反注册失败,以便下次重试)。目前如果失败,下次定时器触发时会再次尝试,这可能是可以接受的。

5. 其他建议

  1. 文档
    新增了 反注册流程.md 文件。

    • 建议:文档中提到了 incremental-updateplatform-update 等配置更新,建议在文档中详细说明这些配置的作用和反注册后的预期值。
  2. 代码注释
    tryToUnRegisterConsole 函数的注释可以更详细,说明 code=416 的具体含义(例如,"终端已被平台移除")。

总结

这份代码变更整体质量较高,逻辑清晰,修复了潜在的问题(如 Token 空值检查、日志格式统一)。主要需要关注的是反注册流程的完整性和安全性,以及配置重置策略的改进。建议在合并前进行充分的测试,特别是在反注册场景下的系统行为。

@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: qiuzhiqian, zhaohuiw42

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@qiuzhiqian qiuzhiqian merged commit e0c3cae into develop/intranet-update Apr 17, 2026
24 of 29 checks passed
@qiuzhiqian qiuzhiqian deleted the fix-unregister branch April 17, 2026 09:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants