fix: extract token initialization into getToken method#397
fix: extract token initialization into getToken method#397qiuzhiqian merged 1 commit intodevelop/intranet-updatefrom
Conversation
|
CLA Assistant Lite bot: |
Ensure token is initialized before use by encapsulating the lazy initialization logic in a dedicated getToken method. Bug: https://pms.uniontech.com/bug-view-358591.html
5e433b7 to
7f04032
Compare
deepin pr auto reviewGit Diff 代码审查报告整体评估这段代码主要做了以下修改:
代码质量与逻辑分析优点
潜在问题
改进建议1. 解决线程安全问题var tokenOnce sync.Once
func (m *UpdatePlatformManager) getToken() (string, error) {
var err error
tokenOnce.Do(func() {
if len(m.Token) == 0 {
m.Token, err = UpdateTokenConfigFile(m.config.IncludeDiskInfo, m.config.GetHardwareIdByHelper)
}
})
return m.Token, err
}2. 改进错误处理func (m *UpdatePlatformManager) genVersionResponse() (*http.Response, error) {
policyUrl := m.requestUrl + Urls[GetVersion].path
client := &http.Client{
Timeout: time.Duration(m.config.HttpTimeout) * time.Second,
}
request, err := http.NewRequest("GET", policyUrl, nil)
if err != nil {
return nil, fmt.Errorf("%v new request failed: %v ", GetVersion.string(), err.Error())
}
token, err := m.getToken()
if err != nil {
return nil, fmt.Errorf("failed to get token: %v", err)
}
request.Header.Set("X-Repo-Token", base64.RawStdEncoding.EncodeToString([]byte(token)))
request.Header.Set("X-Packages", base64.RawStdEncoding.EncodeToString([]byte(getClientPackageInfo(m.config.ClientPackageName))))
return client.Do(request)
}3. 安全性改进将硬编码的 secret 移至配置文件或环境变量: // 从环境变量获取 secret
secret := os.Getenv("UPDATE_PLATFORM_SECRET")
if secret == "" {
return nil, errors.New("UPDATE_PLATFORM_SECRET environment variable is not set")
}4. 性能优化考虑在 func NewUpdatePlatformManager(config *Config) (*UpdatePlatformManager, error) {
manager := &UpdatePlatformManager{
config: config,
}
// 初始化时获取 Token
token, err := UpdateTokenConfigFile(config.IncludeDiskInfo, config.GetHardwareIdByHelper)
if err != nil {
return nil, fmt.Errorf("failed to initialize token: %v", err)
}
manager.Token = token
return manager, nil
}总结这次代码修改提高了代码的复用性和可维护性,但需要考虑线程安全、错误处理和安全性问题。建议按照上述建议进行改进,以提高代码的健壮性和安全性。 |
|
[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. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
Ensure token is initialized before use by encapsulating the lazy initialization logic in a dedicated getToken method.