cec0ef17e0
* feat(license): add sync service * feat(licenses): check license server * chore(deps): update liblicense * feat(license): revoke license if invalid * feat(license): log revokation * - removed retry logics - removed license sync logging * revert liblicense version * - remove not used field Co-authored-by: yi-portainer <yi.chen@portainer.io>
65 lines
1022 B
Go
65 lines
1022 B
Go
package license
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/portainer/liblicense/master"
|
|
)
|
|
|
|
const (
|
|
syncInterval = 5 * time.Minute
|
|
)
|
|
|
|
func (service *Service) startSyncLoop() error {
|
|
if service.stopSignal != nil {
|
|
return nil
|
|
}
|
|
|
|
err := service.syncLicenses()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
service.stopSignal = make(chan struct{})
|
|
ticker := time.NewTicker(syncInterval)
|
|
|
|
go (func() {
|
|
for {
|
|
select {
|
|
case <-service.stopSignal:
|
|
ticker.Stop()
|
|
return
|
|
case <-ticker.C:
|
|
service.syncLicenses()
|
|
}
|
|
}
|
|
})()
|
|
|
|
return nil
|
|
}
|
|
|
|
func (service *Service) syncLicenses() error {
|
|
licenses, err := service.Licenses()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
licensesToRemove := []string{}
|
|
|
|
for _, license := range licenses {
|
|
valid, err := master.ValidateLicense(&license)
|
|
if err != nil || !valid {
|
|
licensesToRemove = append(licensesToRemove, license.LicenseKey)
|
|
}
|
|
}
|
|
|
|
for _, licenseKey := range licensesToRemove {
|
|
err := service.revokeLicense(licenseKey)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|