-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f075a14
commit cd29729
Showing
32 changed files
with
1,388 additions
and
1,274 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package confmigrate | ||
|
||
import ( | ||
"os" | ||
"path/filepath" | ||
|
||
"github.com/AdguardTeam/golibs/errors" | ||
"github.com/AdguardTeam/golibs/log" | ||
) | ||
|
||
// migrateTo1 performs the following changes: | ||
// | ||
// # BEFORE: | ||
// # … | ||
// | ||
// # AFTER: | ||
// 'schema_version': 1 | ||
// | ||
// It also deletes the unused dnsfilter.txt file, since the following versions | ||
// store filters in data/filters/. | ||
func (m *Migrator) migrateTo1(diskConf yobj) (err error) { | ||
log.Printf("Upgrade yaml: 0 to 1") | ||
diskConf["schema_version"] = 1 | ||
|
||
dnsFilterPath := filepath.Join(m.workingDir, "dnsfilter.txt") | ||
log.Printf("deleting %s as we don't need it anymore", dnsFilterPath) | ||
err = os.Remove(dnsFilterPath) | ||
if err != nil && !errors.Is(err, os.ErrNotExist) { | ||
log.Info("warning: %s", err) | ||
|
||
// Go on. | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
package confmigrate | ||
|
||
import ( | ||
"fmt" | ||
"net/url" | ||
"strconv" | ||
"strings" | ||
|
||
"github.com/AdguardTeam/golibs/log" | ||
"github.com/AdguardTeam/golibs/netutil" | ||
) | ||
|
||
// addQUICPort inserts a port into QUIC upstream's hostname if it is missing. | ||
func addQUICPort(ups string, port int) (withPort string) { | ||
if ups == "" || ups[0] == '#' { | ||
return ups | ||
} | ||
|
||
var doms string | ||
withPort = ups | ||
if strings.HasPrefix(ups, "[/") { | ||
domsAndUps := strings.Split(strings.TrimPrefix(ups, "[/"), "/]") | ||
if len(domsAndUps) != 2 { | ||
return ups | ||
} | ||
|
||
doms, withPort = "[/"+domsAndUps[0]+"/]", domsAndUps[1] | ||
} | ||
|
||
if !strings.Contains(withPort, ":https://") { | ||
return ups | ||
} | ||
|
||
upsURL, err := url.Parse(withPort) | ||
if err != nil || upsURL.Scheme != "quic" { | ||
return ups | ||
} | ||
|
||
var host string | ||
host, err = netutil.SplitHost(upsURL.Host) | ||
if err != nil || host != upsURL.Host { | ||
return ups | ||
} | ||
|
||
upsURL.Host = strings.Join([]string{host, strconv.Itoa(port)}, ":") | ||
|
||
return doms + upsURL.String() | ||
} | ||
|
||
// migrateTo10 performs the following changes: | ||
// | ||
// # BEFORE: | ||
// 'schema_version': 9 | ||
// 'dns': | ||
// 'upstream_dns': | ||
// - 'quic:https://some-upstream.com' | ||
// 'local_ptr_upstreams': | ||
// - 'quic:https://some-upstream.com' | ||
// | ||
// # AFTER: | ||
// 'schema_version': 10 | ||
// 'dns': | ||
// 'upstream_dns': | ||
// - 'quic:https://some-upstream.com:784' | ||
// 'local_ptr_upstreams': | ||
// - 'quic:https://some-upstream.com:784' | ||
func migrateTo10(diskConf yobj) (err error) { | ||
log.Printf("Upgrade yaml: 9 to 10") | ||
diskConf["schema_version"] = 10 | ||
|
||
dns, ok, err := fieldVal[yobj](diskConf, "dns") | ||
if err != nil { | ||
return err | ||
} else if !ok { | ||
return nil | ||
} | ||
|
||
const quicPort = 784 | ||
|
||
for _, upsField := range []string{ | ||
"upstream_dns", | ||
"local_ptr_upstreams", | ||
} { | ||
var ups yarr | ||
ups, ok, err = fieldVal[yarr](dns, upsField) | ||
if err != nil { | ||
return err | ||
} else if !ok { | ||
continue | ||
} | ||
|
||
var u string | ||
for i, uVal := range ups { | ||
u, ok = uVal.(string) | ||
if !ok { | ||
return fmt.Errorf("unexpected type of upstream field: %T", uVal) | ||
} | ||
|
||
ups[i] = addQUICPort(u, quicPort) | ||
} | ||
dns[upsField] = ups | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package confmigrate | ||
|
||
import "github.com/AdguardTeam/golibs/log" | ||
|
||
// migrateTo11 performs the following changes: | ||
// | ||
// # BEFORE: | ||
// 'schema_version': 10 | ||
// 'rlimit_nofile': 42 | ||
// | ||
// # AFTER: | ||
// 'schema_version': 11 | ||
// 'os': | ||
// 'group': '' | ||
// 'rlimit_nofile': 42 | ||
// 'user': '' | ||
func migrateTo11(diskConf yobj) (err error) { | ||
log.Printf("Upgrade yaml: 10 to 11") | ||
diskConf["schema_version"] = 11 | ||
|
||
rlimit, _, err := fieldVal[int](diskConf, "rlimit_nofile") | ||
if err != nil { | ||
return err | ||
} | ||
|
||
delete(diskConf, "rlimit_nofile") | ||
diskConf["os"] = yobj{ | ||
"group": "", | ||
"rlimit_nofile": rlimit, | ||
"user": "", | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package confmigrate | ||
|
||
import ( | ||
"time" | ||
|
||
"github.com/AdguardTeam/golibs/log" | ||
"github.com/AdguardTeam/golibs/timeutil" | ||
) | ||
|
||
// migrateTo12 performs the following changes: | ||
// | ||
// # BEFORE: | ||
// 'schema_version': 11 | ||
// 'querylog_interval': 90 | ||
// | ||
// # AFTER: | ||
// 'schema_version': 12 | ||
// 'querylog_interval': '2160h' | ||
func migrateTo12(diskConf yobj) (err error) { | ||
log.Printf("Upgrade yaml: 11 to 12") | ||
diskConf["schema_version"] = 12 | ||
|
||
dns, ok, err := fieldVal[yobj](diskConf, "dns") | ||
if err != nil { | ||
return err | ||
} else if !ok { | ||
return nil | ||
} | ||
|
||
const field = "querylog_interval" | ||
|
||
qlogIvl, ok, err := fieldVal[int](dns, field) | ||
if err != nil { | ||
return err | ||
} else if !ok { | ||
// Set the initial value from home.initConfig function. | ||
qlogIvl = 90 | ||
} | ||
|
||
dns[field] = timeutil.Duration{Duration: time.Duration(qlogIvl) * timeutil.Day} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package confmigrate | ||
|
||
import "github.com/AdguardTeam/golibs/log" | ||
|
||
// migrateTo13 performs the following changes: | ||
// | ||
// # BEFORE: | ||
// 'schema_version': 12 | ||
// 'dns': | ||
// # … | ||
// 'local_domain_name': 'lan' | ||
// | ||
// # AFTER: | ||
// 'schema_version': 13 | ||
// 'dhcp': | ||
// # … | ||
// 'local_domain_name': 'lan' | ||
func migrateTo13(diskConf yobj) (err error) { | ||
log.Printf("Upgrade yaml: 12 to 13") | ||
diskConf["schema_version"] = 13 | ||
|
||
dns, ok, err := fieldVal[yobj](diskConf, "dns") | ||
if err != nil { | ||
return err | ||
} else if !ok { | ||
return nil | ||
} | ||
|
||
dhcp, ok, err := fieldVal[yobj](diskConf, "dhcp") | ||
if err != nil { | ||
return err | ||
} else if !ok { | ||
return nil | ||
} | ||
|
||
return moveSameVal[string](dns, dhcp, "local_domain_name") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
package confmigrate | ||
|
||
import "github.com/AdguardTeam/golibs/log" | ||
|
||
// migrateTo14 performs the following changes: | ||
// | ||
// # BEFORE: | ||
// 'schema_version': 13 | ||
// 'clients': | ||
// - 'name': 'client-name' | ||
// # … | ||
// | ||
// # AFTER: | ||
// 'schema_version': 14 | ||
// 'clients': | ||
// 'persistent': | ||
// - 'name': 'client-name' | ||
// # … | ||
// 'runtime_sources': | ||
// 'whois': true | ||
// 'arp': true | ||
// 'rdns': true | ||
// 'dhcp': true | ||
// 'hosts': true | ||
func migrateTo14(diskConf yobj) (err error) { | ||
log.Printf("Upgrade yaml: 13 to 14") | ||
diskConf["schema_version"] = 14 | ||
|
||
persistent, ok, err := fieldVal[yarr](diskConf, "clients") | ||
if err != nil { | ||
return err | ||
} else if !ok { | ||
persistent = yarr{} | ||
} | ||
|
||
var rdnsSrc bool | ||
dns, ok, err := fieldVal[yobj](diskConf, "dns") | ||
if err != nil { | ||
return err | ||
} else if ok { | ||
rdnsSrc, ok, err = fieldVal[bool](dns, "resolve_clients") | ||
if err != nil { | ||
return err | ||
} else if ok { | ||
delete(dns, "resolve_clients") | ||
} | ||
} | ||
|
||
diskConf["clients"] = yobj{ | ||
"persistent": persistent, | ||
"runtime_sources": yobj{ | ||
"whois": true, | ||
"arp": true, | ||
"rdns": rdnsSrc, | ||
"dhcp": true, | ||
"hosts": true, | ||
}, | ||
} | ||
|
||
return nil | ||
} |
Oops, something went wrong.