memberships: Return user public keys from /api/users
Change-Id: I82ffc7d396c2775aee07e04aeaab757615a258b0
diff --git a/core/installer/server/dodo-app/server.go b/core/installer/server/dodo-app/server.go
index 2bbbb7c..5e0e2e0 100644
--- a/core/installer/server/dodo-app/server.go
+++ b/core/installer/server/dodo-app/server.go
@@ -1709,7 +1709,7 @@
fmt.Println(err)
return
}
- keyToUser := make(map[string]string)
+ existingPublicKeys := make(map[string]struct{})
for _, clientUser := range allClientUsers {
if clientUser == "admin" || clientUser == "fluxcd" {
continue
@@ -1728,15 +1728,19 @@
}
for _, existingKey := range existingKeys {
cleanKey := soft.CleanKey(existingKey)
- keyOk := slices.ContainsFunc(userData.SSHPublicKeys, func(key string) bool {
+ found := slices.ContainsFunc(userData.SSHPublicKeys, func(key string) bool {
return cleanKey == soft.CleanKey(key)
})
- if !keyOk {
+ if !found {
if err := s.client.RemovePublicKey(clientUser, existingKey); err != nil {
fmt.Println(err)
}
} else {
- keyToUser[cleanKey] = clientUser
+ if _, ok := existingPublicKeys[cleanKey]; ok {
+ fmt.Println(fmt.Errorf("duplicate key: %s", cleanKey))
+ return
+ }
+ existingPublicKeys[cleanKey] = struct{}{}
}
}
}
@@ -1762,15 +1766,11 @@
} else {
for _, key := range u.SSHPublicKeys {
cleanKey := soft.CleanKey(key)
- if user, ok := keyToUser[cleanKey]; ok {
- if u.Username != user {
- panic("MUST NOT REACH! IMPOSSIBLE KEY USER RECORD")
+ if _, ok := existingPublicKeys[cleanKey]; !ok {
+ if err := s.client.AddPublicKey(u.Username, cleanKey); err != nil {
+ fmt.Println(err)
+ return
}
- continue
- }
- if err := s.client.AddPublicKey(u.Username, cleanKey); err != nil {
- fmt.Println(err)
- return
}
}
}
@@ -1785,7 +1785,7 @@
}
for _, u := range users {
if err := s.client.AddReadWriteCollaborator(r, u.Username); err != nil {
- fmt.Println(err)
+ fmt.Printf("%s %s\n", u.Username, err)
continue
}
}