Files
portainer/api/license/sync.go
T
Chaim Lev-Ari cec0ef17e0 feat(licenses): sync between portainer and license-server (#41)
* 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>
2020-11-04 14:07:45 +13:00

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
}