From 3eb230e1a0b6a38dc85adbb7a0b1d10eb2d37709 Mon Sep 17 00:00:00 2001 From: Misha Bragin Date: Sat, 21 May 2022 17:27:04 +0200 Subject: [PATCH] Fix Peer Deletion & HTTP endpoints (#319) --- management/server/file_store.go | 11 +++++++++++ management/server/http/handler/rules.go | 2 +- management/server/http/handler/users.go | 22 +++++++++++++++++++--- management/server/peer.go | 7 ++++++- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/management/server/file_store.go b/management/server/file_store.go index 4648098b1..500a8070f 100644 --- a/management/server/file_store.go +++ b/management/server/file_store.go @@ -181,6 +181,17 @@ func (s *FileStore) DeletePeer(accountId string, peerKey string) (*Peer, error) delete(account.Peers, peerKey) delete(s.PeerKeyId2AccountId, peerKey) + // cleanup groups + var peers []string + for _, g := range account.Groups { + for _, p := range g.Peers { + if p != peerKey { + peers = append(peers, p) + } + } + g.Peers = peers + } + err = s.persist(s.storeFile) if err != nil { return nil, err diff --git a/management/server/http/handler/rules.go b/management/server/http/handler/rules.go index d51ea8ca4..514222f8b 100644 --- a/management/server/http/handler/rules.go +++ b/management/server/http/handler/rules.go @@ -64,7 +64,7 @@ func (h *Rules) GetAllRulesHandler(w http.ResponseWriter, r *http.Request) { return } - var rules []*RuleResponse + rules := []*RuleResponse{} for _, r := range account.Rules { rules = append(rules, toRuleResponse(account, r)) } diff --git a/management/server/http/handler/users.go b/management/server/http/handler/users.go index a156e1f0e..572f59319 100644 --- a/management/server/http/handler/users.go +++ b/management/server/http/handler/users.go @@ -17,8 +17,10 @@ type UserHandler struct { } type UserResponse struct { - Email string - Role string + ID string `json:"id"` + Email string `json:"email"` + Name string `json:"name"` + Role string `json:"role"` } func NewUserHandler(accountManager server.AccountManager, authAudience string) *UserHandler { @@ -59,5 +61,19 @@ func (u *UserHandler) GetUsers(w http.ResponseWriter, r *http.Request) { return } - writeJSONObject(w, data) + users := []*UserResponse{} + for _, r := range data { + users = append(users, toUserResponse(r)) + } + + writeJSONObject(w, users) +} + +func toUserResponse(user *server.UserInfo) *UserResponse { + return &UserResponse{ + ID: user.ID, + Name: user.Name, + Email: user.Email, + Role: user.Role, + } } diff --git a/management/server/peer.go b/management/server/peer.go index 9fda87f91..f517c3aad 100644 --- a/management/server/peer.go +++ b/management/server/peer.go @@ -1,6 +1,7 @@ package server import ( + log "github.com/sirupsen/logrus" "net" "strings" "time" @@ -262,7 +263,11 @@ func (am *DefaultAccountManager) GetNetworkMap(peerKey string) (*NetworkMap, err for _, g := range groups { for _, pid := range g.Peers { - peer := account.Peers[pid] + peer, ok := account.Peers[pid] + if !ok { + log.Warnf("peer %s found in group %s but doesn't belong to account %s", pid, g.ID, account.Id) + continue + } // exclude original peer if peer.Key != peerKey { res = append(res, peer.Copy())