func bootstrapRemove(r repo.Repo, cfg *config.Config, toRemove []config.BootstrapPeer) ([]config.BootstrapPeer, error) { removed := make([]config.BootstrapPeer, 0, len(toRemove)) keep := make([]config.BootstrapPeer, 0, len(cfg.Bootstrap)) peers, err := cfg.BootstrapPeers() if err != nil { return nil, err } for _, peer := range peers { found := false for _, peer2 := range toRemove { if peer.Equal(peer2) { found = true removed = append(removed, peer) break } } if !found { keep = append(keep, peer) } } cfg.SetBootstrapPeers(keep) if err := r.SetConfig(cfg); err != nil { return nil, err } return removed, nil }
func setConfig(r repo.Repo, key string, value interface{}) (*ConfigField, error) { err := r.SetConfigKey(key, value) if err != nil { return nil, fmt.Errorf("Failed to set config value: %s (maybe use --json?)", err) } return getConfig(r, key) }
func filtersRemove(r repo.Repo, cfg *config.Config, toRemoveFilters []string) ([]string, error) { removed := make([]string, 0, len(toRemoveFilters)) keep := make([]string, 0, len(cfg.Swarm.AddrFilters)) oldFilters := cfg.Swarm.AddrFilters for _, oldFilter := range oldFilters { found := false for _, toRemoveFilter := range toRemoveFilters { if oldFilter == toRemoveFilter { found = true removed = append(removed, toRemoveFilter) break } } if !found { keep = append(keep, oldFilter) } } cfg.Swarm.AddrFilters = keep if err := r.SetConfig(cfg); err != nil { return nil, err } return removed, nil }
func filtersAdd(r repo.Repo, cfg *config.Config, filters []string) ([]string, error) { addedMap := map[string]struct{}{} addedList := make([]string, 0, len(filters)) // re-add cfg swarm filters to rm dupes oldFilters := cfg.Swarm.AddrFilters cfg.Swarm.AddrFilters = nil // add new filters for _, filter := range filters { if _, found := addedMap[filter]; found { continue } cfg.Swarm.AddrFilters = append(cfg.Swarm.AddrFilters, filter) addedList = append(addedList, filter) addedMap[filter] = struct{}{} } // add back original filters. in this order so that we output them. for _, filter := range oldFilters { if _, found := addedMap[filter]; found { continue } cfg.Swarm.AddrFilters = append(cfg.Swarm.AddrFilters, filter) addedMap[filter] = struct{}{} } if err := r.SetConfig(cfg); err != nil { return nil, err } return addedList, nil }
func replaceConfig(r repo.Repo, file io.Reader) error { var cfg config.Config if err := json.NewDecoder(file).Decode(&cfg); err != nil { return errors.New("Failed to decode file as config") } return r.SetConfig(&cfg) }
func getConfig(r repo.Repo, key string) (*ConfigField, error) { value, err := r.GetConfigKey(key) if err != nil { return nil, fmt.Errorf("Failed to get config value: %q", err) } return &ConfigField{ Key: key, Value: value, }, nil }
func filtersRemoveAll(r repo.Repo, cfg *config.Config) ([]string, error) { removed := cfg.Swarm.AddrFilters cfg.Swarm.AddrFilters = nil if err := r.SetConfig(cfg); err != nil { return nil, err } return removed, nil }
func bootstrapRemoveAll(r repo.Repo, cfg *config.Config) ([]config.BootstrapPeer, error) { removed, err := cfg.BootstrapPeers() if err != nil { return nil, err } cfg.Bootstrap = nil if err := r.SetConfig(cfg); err != nil { return nil, err } return removed, nil }
func setConfig(r repo.Repo, key string, value interface{}) (*ConfigField, error) { keyF, err := getConfig(r, "Identity.PrivKey") if err != nil { return nil, errors.New("failed to get PrivKey") } privkey := keyF.Value err = r.SetConfigKey(key, value) if err != nil { return nil, fmt.Errorf("failed to set config value: %s (maybe use --json?)", err) } err = r.SetConfigKey("Identity.PrivKey", privkey) if err != nil { return nil, errors.New("failed to set PrivKey") } return getConfig(r, key) }
func replaceConfig(r repo.Repo, file io.Reader) error { var cfg config.Config if err := json.NewDecoder(file).Decode(&cfg); err != nil { return errors.New("failed to decode file as config") } if len(cfg.Identity.PrivKey) != 0 { return errors.New("setting private key with API is not supported") } keyF, err := getConfig(r, "Identity.PrivKey") if err != nil { return fmt.Errorf("Failed to get PrivKey") } pkstr, ok := keyF.Value.(string) if !ok { return fmt.Errorf("private key in config was not a string") } cfg.Identity.PrivKey = pkstr return r.SetConfig(&cfg) }
func bootstrapAdd(r repo.Repo, cfg *config.Config, peers []config.BootstrapPeer) ([]config.BootstrapPeer, error) { addedMap := map[string]struct{}{} addedList := make([]config.BootstrapPeer, 0, len(peers)) // re-add cfg bootstrap peers to rm dupes bpeers := cfg.Bootstrap cfg.Bootstrap = nil // add new peers for _, peer := range peers { s := peer.String() if _, found := addedMap[s]; found { continue } cfg.Bootstrap = append(cfg.Bootstrap, s) addedList = append(addedList, peer) addedMap[s] = struct{}{} } // add back original peers. in this order so that we output them. for _, s := range bpeers { if _, found := addedMap[s]; found { continue } cfg.Bootstrap = append(cfg.Bootstrap, s) addedMap[s] = struct{}{} } if err := r.SetConfig(cfg); err != nil { return nil, err } return addedList, nil }
func extendConfigFile(r repo.Repo, key string, value interface{}) error { if err := r.SetConfigKey(key, value); err != nil { return err } return nil }