Allow node IDs with spaces/dashes in config. Use dashes in GUI. (ref #230)
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"reflect"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"code.google.com/p/go.crypto/bcrypt"
|
||||
"github.com/calmh/syncthing/logger"
|
||||
@@ -181,6 +182,14 @@ func Load(rd io.Reader, myID string) (Configuration, error) {
|
||||
cfg.Repositories = []RepositoryConfiguration{}
|
||||
}
|
||||
|
||||
// Sanitize node IDs
|
||||
for i := range cfg.Nodes {
|
||||
node := &cfg.Nodes[i]
|
||||
// Strip spaces and dashes
|
||||
node.NodeID = strings.Replace(node.NodeID, "-", "", -1)
|
||||
node.NodeID = strings.Replace(node.NodeID, " ", "", -1)
|
||||
}
|
||||
|
||||
// Check for missing, bad or duplicate repository ID:s
|
||||
var seenRepos = map[string]*RepositoryConfiguration{}
|
||||
var uniqueCounter int
|
||||
@@ -196,6 +205,13 @@ func Load(rd io.Reader, myID string) (Configuration, error) {
|
||||
repo.ID = "default"
|
||||
}
|
||||
|
||||
for i := range repo.Nodes {
|
||||
node := &repo.Nodes[i]
|
||||
// Strip spaces and dashes
|
||||
node.NodeID = strings.Replace(node.NodeID, "-", "", -1)
|
||||
node.NodeID = strings.Replace(node.NodeID, " ", "", -1)
|
||||
}
|
||||
|
||||
if seen, ok := seenRepos[repo.ID]; ok {
|
||||
l.Warnf("Multiple repositories with ID %q; disabling", repo.ID)
|
||||
|
||||
|
||||
@@ -224,3 +224,53 @@ func TestNodeAddresses(t *testing.T) {
|
||||
t.Errorf("Nodes differ;\n E: %#v\n A: %#v", expected, cfg.Nodes)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStripNodeIs(t *testing.T) {
|
||||
data := []byte(`
|
||||
<configuration version="2">
|
||||
<node id="AAAA-BBBB-CCCC">
|
||||
<address>dynamic</address>
|
||||
</node>
|
||||
<node id="AAAA BBBB DDDD">
|
||||
<address></address>
|
||||
</node>
|
||||
<node id="AAAABBBBEEEE">
|
||||
<address></address>
|
||||
</node>
|
||||
<repository directory="~/Sync">
|
||||
<node id="AAA ABBB-BCC CC" name=""></node>
|
||||
<node id="AA-AAB BBBD-DDD" name=""></node>
|
||||
<node id="AAA AB-BBB EEE-E" name=""></node>
|
||||
</repository>
|
||||
</configuration>
|
||||
`)
|
||||
|
||||
expected := []NodeConfiguration{
|
||||
{
|
||||
NodeID: "AAAABBBBCCCC",
|
||||
Addresses: []string{"dynamic"},
|
||||
},
|
||||
{
|
||||
NodeID: "AAAABBBBDDDD",
|
||||
Addresses: []string{"dynamic"},
|
||||
},
|
||||
{
|
||||
NodeID: "AAAABBBBEEEE",
|
||||
Addresses: []string{"dynamic"},
|
||||
},
|
||||
}
|
||||
|
||||
cfg, err := Load(bytes.NewReader(data), "n4")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
for i := range expected {
|
||||
if !reflect.DeepEqual(cfg.Nodes[i], expected[i]) {
|
||||
t.Errorf("Nodes[%d] differ;\n E: %#v\n A: %#v", i, expected[i], cfg.Nodes[i])
|
||||
}
|
||||
if cfg.Repositories[0].Nodes[i].NodeID != expected[i].NodeID {
|
||||
t.Errorf("Repo nodes[%d] differ;\n E: %#v\n A: %#v", i, expected[i].NodeID, cfg.Repositories[0].Nodes[i].NodeID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user