diff --git a/core/commands/config.go b/core/commands/config.go index 24875c3ea..a5011f258 100644 --- a/core/commands/config.go +++ b/core/commands/config.go @@ -319,7 +319,7 @@ var configProfileApplyCmd = &cmds.Command{ return } - err := transformConfig(req.InvocContext().ConfigRoot, profile.Apply) + err := transformConfig(req.InvocContext().ConfigRoot, "apply-"+req.Arguments()[0], profile.Apply) if err != nil { res.SetError(err, cmdkit.ErrNormal) return @@ -346,7 +346,7 @@ Backing up the config before running this command is advised.`, return } - err := transformConfig(req.InvocContext().ConfigRoot, profile.Revert) + err := transformConfig(req.InvocContext().ConfigRoot, "revert-"+req.Arguments()[0], profile.Revert) if err != nil { res.SetError(err, cmdkit.ErrNormal) return @@ -355,7 +355,7 @@ Backing up the config before running this command is advised.`, }, } -func transformConfig(configRoot string, transformer config.Transformer) error { +func transformConfig(configRoot string, backupName string, transformer config.Transformer) error { r, err := fsrepo.Open(configRoot) if err != nil { return err @@ -372,7 +372,7 @@ func transformConfig(configRoot string, transformer config.Transformer) error { return err } - _, err = r.BackupConfig("profile-") + _, err = r.BackupConfig(backupName + "-") if err != nil { return err } diff --git a/docs/config.md b/docs/config.md index e4cff76f8..1376414bf 100644 --- a/docs/config.md +++ b/docs/config.md @@ -12,8 +12,8 @@ command. Available profiles: - `server` - Recommended for nodes with public IPv4 address, disables host and content - discovery in local networks. + Recommended for nodes with public IPv4 address (servers, VPSes, etc.), + disables host and content discovery in local networks. - `test` @@ -27,7 +27,7 @@ Available profiles: If you apply this profile after `ipfs init`, you will need to convert your datastore to the new configuration. You can do this using [ipfs-ds-convert](https://github.com/ipfs/ipfs-ds-convert) - WARNING: badger datastore is experimantal. Make sure to backup your data + WARNING: badger datastore is experimental. Make sure to backup your data frequently diff --git a/repo/config/profile.go b/repo/config/profile.go index 529cf3a97..87668357f 100644 --- a/repo/config/profile.go +++ b/repo/config/profile.go @@ -9,39 +9,38 @@ type Profile struct { Revert Transformer } +// defaultServerFilters has a list of non-routable IPv4 prefixes +// according to http://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml +var defaultServerFilters = []string{ + "/ip4/10.0.0.0/ipcidr/8", + "/ip4/100.64.0.0/ipcidr/10", + "/ip4/169.254.0.0/ipcidr/16", + "/ip4/172.16.0.0/ipcidr/12", + "/ip4/192.0.0.0/ipcidr/24", + "/ip4/192.0.0.0/ipcidr/29", + "/ip4/192.0.0.8/ipcidr/32", + "/ip4/192.0.0.170/ipcidr/32", + "/ip4/192.0.0.171/ipcidr/32", + "/ip4/192.0.2.0/ipcidr/24", + "/ip4/192.168.0.0/ipcidr/16", + "/ip4/198.18.0.0/ipcidr/15", + "/ip4/198.51.100.0/ipcidr/24", + "/ip4/203.0.113.0/ipcidr/24", + "/ip4/240.0.0.0/ipcidr/4", +} + // Profiles is a map holding configuration transformers. Docs are in docs/config.md var Profiles = map[string]*Profile{ "server": { Apply: func(c *Config) error { - - // defaultServerFilters has a list of non-routable IPv4 prefixes - // according to http://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml - defaultServerFilters := []string{ - "/ip4/10.0.0.0/ipcidr/8", - "/ip4/100.64.0.0/ipcidr/10", - "/ip4/169.254.0.0/ipcidr/16", - "/ip4/172.16.0.0/ipcidr/12", - "/ip4/192.0.0.0/ipcidr/24", - "/ip4/192.0.0.0/ipcidr/29", - "/ip4/192.0.0.8/ipcidr/32", - "/ip4/192.0.0.170/ipcidr/32", - "/ip4/192.0.0.171/ipcidr/32", - "/ip4/192.0.2.0/ipcidr/24", - "/ip4/192.168.0.0/ipcidr/16", - "/ip4/198.18.0.0/ipcidr/15", - "/ip4/198.51.100.0/ipcidr/24", - "/ip4/203.0.113.0/ipcidr/24", - "/ip4/240.0.0.0/ipcidr/4", - } - - c.Addresses.NoAnnounce = append(c.Addresses.NoAnnounce, defaultServerFilters...) - c.Swarm.AddrFilters = append(c.Swarm.AddrFilters, defaultServerFilters...) + c.Addresses.NoAnnounce = appendSingle(c.Addresses.NoAnnounce, defaultServerFilters) + c.Swarm.AddrFilters = appendSingle(c.Swarm.AddrFilters, defaultServerFilters) c.Discovery.MDNS.Enabled = false return nil }, Revert: func(c *Config) error { - c.Addresses.NoAnnounce = []string{} - c.Swarm.AddrFilters = []string{} + c.Addresses.NoAnnounce = deleteEntries(c.Addresses.NoAnnounce, defaultServerFilters) + c.Swarm.AddrFilters = deleteEntries(c.Swarm.AddrFilters, defaultServerFilters) c.Discovery.MDNS.Enabled = true return nil }, @@ -87,3 +86,33 @@ var Profiles = map[string]*Profile{ }, }, } + +func appendSingle(a []string, b []string) []string { + m := map[string]struct{}{} + for _, f := range a { + m[f] = struct{}{} + } + for _, f := range b { + m[f] = struct{}{} + } + return mapKeys(m) +} + +func deleteEntries(arr []string, del []string) []string { + m := map[string]struct{}{} + for _, f := range arr { + m[f] = struct{}{} + } + for _, f := range del { + delete(m, f) + } + return mapKeys(m) +} + +func mapKeys(m map[string]struct{}) []string { + out := make([]string, 0, len(m)) + for f := range m { + out = append(out, f) + } + return out +}