|
@@ -53,17 +53,18 @@ type databaseImport struct {
|
53
|
53
|
Channels map[string]channelImport
|
54
|
54
|
}
|
55
|
55
|
|
56
|
|
-func serializeAmodes(raw map[string]string) (result []byte, err error) {
|
|
56
|
+func serializeAmodes(raw map[string]string, validCfUsernames utils.StringSet) (result []byte, err error) {
|
57
|
57
|
processed := make(map[string]int, len(raw))
|
58
|
58
|
for accountName, mode := range raw {
|
59
|
59
|
if len(mode) != 1 {
|
60
|
60
|
return nil, fmt.Errorf("invalid mode %s for account %s", mode, accountName)
|
61
|
61
|
}
|
62
|
62
|
cfname, err := CasefoldName(accountName)
|
63
|
|
- if err != nil {
|
64
|
|
- return nil, fmt.Errorf("invalid amode recipient %s: %w", accountName, err)
|
|
63
|
+ if err != nil || !validCfUsernames.Has(cfname) {
|
|
64
|
+ log.Printf("skipping invalid amode recipient %s\n", accountName)
|
|
65
|
+ } else {
|
|
66
|
+ processed[cfname] = int(mode[0])
|
65
|
67
|
}
|
66
|
|
- processed[cfname] = int(mode[0])
|
67
|
68
|
}
|
68
|
69
|
result, err = json.Marshal(processed)
|
69
|
70
|
return
|
|
@@ -78,6 +79,8 @@ func doImportDBGeneric(config *Config, dbImport databaseImport, credsType Creden
|
78
|
79
|
tx.Set(keySchemaVersion, strconv.Itoa(importDBSchemaVersion), nil)
|
79
|
80
|
tx.Set(keyCloakSecret, utils.GenerateSecretKey(), nil)
|
80
|
81
|
|
|
82
|
+ cfUsernames := make(utils.StringSet)
|
|
83
|
+
|
81
|
84
|
for username, userInfo := range dbImport.Users {
|
82
|
85
|
cfUsername, err := CasefoldName(username)
|
83
|
86
|
if err != nil {
|
|
@@ -118,6 +121,7 @@ func doImportDBGeneric(config *Config, dbImport databaseImport, credsType Creden
|
118
|
121
|
for _, certfp := range certfps {
|
119
|
122
|
tx.Set(fmt.Sprintf(keyCertToAccount, certfp), cfUsername, nil)
|
120
|
123
|
}
|
|
124
|
+ cfUsernames.Add(cfUsername)
|
121
|
125
|
}
|
122
|
126
|
|
123
|
127
|
for chname, chInfo := range dbImport.Channels {
|
|
@@ -149,7 +153,7 @@ func doImportDBGeneric(config *Config, dbImport databaseImport, credsType Creden
|
149
|
153
|
tx.Set(fmt.Sprintf(keyChannelTopicSetBy, cfchname), chInfo.TopicSetBy, nil)
|
150
|
154
|
}
|
151
|
155
|
if len(chInfo.Amode) != 0 {
|
152
|
|
- m, err := serializeAmodes(chInfo.Amode)
|
|
156
|
+ m, err := serializeAmodes(chInfo.Amode, cfUsernames)
|
153
|
157
|
if err == nil {
|
154
|
158
|
tx.Set(fmt.Sprintf(keyChannelAccountToUMode, cfchname), string(m), nil)
|
155
|
159
|
} else {
|