mirror of
https://github.com/safing/portmaster
synced 2025-09-02 10:39:22 +00:00
58 lines
1 KiB
Go
58 lines
1 KiB
Go
package geoip
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/safing/portbase/modules"
|
|
)
|
|
|
|
var (
|
|
module *modules.Module
|
|
)
|
|
|
|
func init() {
|
|
module = modules.Register("geoip", nil, start, nil, "updates")
|
|
}
|
|
|
|
func start() error {
|
|
err := prepDatabaseForUse()
|
|
if err != nil {
|
|
return fmt.Errorf("goeip: failed to load databases: %s", err)
|
|
}
|
|
|
|
module.RegisterEventHook(
|
|
"updates",
|
|
"resource update",
|
|
"upgrade databases",
|
|
upgradeDatabases,
|
|
)
|
|
|
|
// TODO: replace with update subscription
|
|
module.NewTask("update databases", func(ctx context.Context, task *modules.Task) {
|
|
|
|
dbFileLock.Lock()
|
|
defer dbFileLock.Unlock()
|
|
|
|
}).Repeat(10 * time.Minute).MaxDelay(1 * time.Hour)
|
|
|
|
return nil
|
|
}
|
|
|
|
func upgradeDatabases(_ context.Context, _ interface{}) error {
|
|
dbFileLock.Lock()
|
|
reload := false
|
|
if dbCityFile != nil && dbCityFile.UpgradeAvailable() {
|
|
reload = true
|
|
}
|
|
if dbASNFile != nil && dbASNFile.UpgradeAvailable() {
|
|
reload = true
|
|
}
|
|
dbFileLock.Unlock()
|
|
|
|
if reload {
|
|
return ReloadDatabases()
|
|
}
|
|
return nil
|
|
}
|