mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-08-03 12:36:09 -04:00
peer: save PublicIP instead of publicEndpoint / add multi-coord gRPCs
This commit is contained in:
parent
55a1aa783f
commit
f0e35a43d4
31 changed files with 1216 additions and 666 deletions
|
@ -28,7 +28,6 @@ const (
|
|||
keyVPNPubKey = "vpnKey"
|
||||
keyKEKID = "kekID"
|
||||
prefixFreeCoordinatorIPs = "freeCoordinatorVPNIPs"
|
||||
prefixAdminLocation = "externalAdminsData"
|
||||
prefixPeerLocation = "peerPrefix"
|
||||
prefixFreeNodeIPs = "freeNodeVPNIPs"
|
||||
)
|
||||
|
@ -98,17 +97,6 @@ func (s StoreWrapper) RemovePeer(peer peer.Peer) error {
|
|||
return s.Store.Delete(prefixPeerLocation + peer.VPNIP)
|
||||
}
|
||||
|
||||
// GetPeer returns a peer requested by the given VPN IP address.
|
||||
func (s StoreWrapper) GetPeer(vpnIP string) (peer.Peer, error) {
|
||||
bytePeer, err := s.Store.Get(prefixPeerLocation + vpnIP)
|
||||
if err != nil {
|
||||
return peer.Peer{}, err
|
||||
}
|
||||
var peer peer.Peer
|
||||
err = json.Unmarshal(bytePeer, &peer)
|
||||
return peer, err
|
||||
}
|
||||
|
||||
// GetPeers returns all peers in the store.
|
||||
func (s StoreWrapper) GetPeers() ([]peer.Peer, error) {
|
||||
return s.getPeersByPrefix(prefixPeerLocation)
|
||||
|
@ -169,7 +157,7 @@ func (s StoreWrapper) UpdatePeers(peers []peer.Peer) (added, removed []peer.Peer
|
|||
}
|
||||
|
||||
if updPeer, ok := updatedPeers[storedPeer.VPNIP]; ok {
|
||||
if updPeer.PublicEndpoint != storedPeer.PublicEndpoint || !bytes.Equal(updPeer.VPNPubKey, storedPeer.VPNPubKey) {
|
||||
if updPeer.PublicIP != storedPeer.PublicIP || !bytes.Equal(updPeer.VPNPubKey, storedPeer.VPNPubKey) {
|
||||
// stored peer must be updated, so mark for addition AND removal
|
||||
added = append(added, updPeer)
|
||||
removed = append(removed, storedPeer)
|
||||
|
@ -205,37 +193,6 @@ func (s StoreWrapper) UpdatePeers(peers []peer.Peer) (added, removed []peer.Peer
|
|||
return added, removed, nil
|
||||
}
|
||||
|
||||
// PutAdmin puts a single admin in the store, with a unique key derived form the VPNIP.
|
||||
func (s StoreWrapper) PutAdmin(peer peer.AdminData) error {
|
||||
jsonPeer, err := json.Marshal(peer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return s.Store.Put(prefixAdminLocation+peer.VPNIP, jsonPeer)
|
||||
}
|
||||
|
||||
// GetAdmin gets a single admin from the store.
|
||||
// TODO: extend if we want to have multiple admins.
|
||||
func (s StoreWrapper) GetAdmin() (peer.AdminData, error) {
|
||||
iter, err := s.Store.Iterator(prefixAdminLocation)
|
||||
if err != nil {
|
||||
return peer.AdminData{}, err
|
||||
}
|
||||
key, err := iter.GetNext()
|
||||
if err != nil {
|
||||
return peer.AdminData{}, err
|
||||
}
|
||||
value, err := s.Store.Get(key)
|
||||
if err != nil {
|
||||
return peer.AdminData{}, err
|
||||
}
|
||||
var adminData peer.AdminData
|
||||
if err := json.Unmarshal(value, &adminData); err != nil {
|
||||
return peer.AdminData{}, err
|
||||
}
|
||||
return adminData, nil
|
||||
}
|
||||
|
||||
func (s StoreWrapper) getPeersByPrefix(prefix string) ([]peer.Peer, error) {
|
||||
peerKeys, err := s.Store.Iterator(prefix)
|
||||
if err != nil {
|
||||
|
|
|
@ -123,22 +123,22 @@ func TestStoreWrapperPeerInterface(t *testing.T) {
|
|||
internalIP := "10.118.2.0"
|
||||
|
||||
validPeer := peer.Peer{
|
||||
PublicEndpoint: ip,
|
||||
VPNPubKey: key[:],
|
||||
VPNIP: internalIP,
|
||||
PublicIP: ip,
|
||||
VPNPubKey: key[:],
|
||||
VPNIP: internalIP,
|
||||
}
|
||||
require.NoError(stwrapper.PutPeer(validPeer))
|
||||
data, err := stwrapper.GetPeers()
|
||||
require.NoError(err)
|
||||
require.Equal(1, len(data))
|
||||
assert.Equal(ip, data[0].PublicEndpoint)
|
||||
assert.Equal(ip, data[0].PublicIP)
|
||||
assert.Equal(key[:], data[0].VPNPubKey)
|
||||
assert.Equal(internalIP, data[0].VPNIP)
|
||||
|
||||
invalidPeer := peer.Peer{
|
||||
PublicEndpoint: ip,
|
||||
VPNPubKey: key[:],
|
||||
VPNIP: "",
|
||||
PublicIP: ip,
|
||||
VPNPubKey: key[:],
|
||||
VPNIP: "",
|
||||
}
|
||||
assert.Error(stwrapper.PutPeer(invalidPeer))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue