fix(backend): license service 小修 (#45-46-48)
- #45 Activate 幂等路径 Update 加错误检查,失败时返回 error 而非静默成功 - #46 Verify 加载 license 加 shop_id 过滤(防御纵深) - #48 删除 ErrDeviceMismatch 死代码(多设备迁移后已无单设备约束) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,6 @@ var (
|
|||||||
ErrLicenseNotFound = errors.New("license not found")
|
ErrLicenseNotFound = errors.New("license not found")
|
||||||
ErrLicenseInactive = errors.New("license is inactive")
|
ErrLicenseInactive = errors.New("license is inactive")
|
||||||
ErrLicenseExpired = errors.New("license has expired")
|
ErrLicenseExpired = errors.New("license has expired")
|
||||||
ErrDeviceMismatch = errors.New("license is bound to another device")
|
|
||||||
ErrDeviceLimitExceed = errors.New("device limit reached — deactivate another device first")
|
ErrDeviceLimitExceed = errors.New("device limit reached — deactivate another device first")
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -67,7 +66,9 @@ func (s *LicenseService) Activate(shopID uint64, licenseKey, deviceID, deviceNam
|
|||||||
err := s.db.Where("license_id = ? AND device_id = ?", lic.ID, deviceID).First(&existing).Error
|
err := s.db.Where("license_id = ? AND device_id = ?", lic.ID, deviceID).First(&existing).Error
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// Device already bound — just touch last_seen_at (handled by autoUpdateTime)
|
// Device already bound — just touch last_seen_at (handled by autoUpdateTime)
|
||||||
s.db.Model(&existing).Update("device_name", deviceName)
|
if err := s.db.Model(&existing).Update("device_name", deviceName).Error; err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
return &lic, nil
|
return &lic, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +100,7 @@ func (s *LicenseService) Verify(shopID uint64, deviceID string) (*model.License,
|
|||||||
return nil, ErrLicenseNotFound
|
return nil, ErrLicenseNotFound
|
||||||
}
|
}
|
||||||
var lic model.License
|
var lic model.License
|
||||||
if err := s.db.Where("id = ? AND is_active = 1", dev.LicenseID).First(&lic).Error; err != nil {
|
if err := s.db.Where("id = ? AND shop_id = ? AND is_active = 1", dev.LicenseID, shopID).First(&lic).Error; err != nil {
|
||||||
return nil, ErrLicenseNotFound
|
return nil, ErrLicenseNotFound
|
||||||
}
|
}
|
||||||
if lic.ExpiresAt != nil && time.Now().After(*lic.ExpiresAt) {
|
if lic.ExpiresAt != nil && time.Now().After(*lic.ExpiresAt) {
|
||||||
|
|||||||
Reference in New Issue
Block a user