mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-09-20 00:06:21 +00:00
65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
|
package core
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"errors"
|
||
|
)
|
||
|
|
||
|
type VPN interface {
|
||
|
Setup(privKey []byte) ([]byte, error)
|
||
|
GetPublicKey(privKey []byte) ([]byte, error)
|
||
|
GetInterfaceIP() (string, error)
|
||
|
SetInterfaceIP(ip string) error
|
||
|
AddPeer(pubKey []byte, publicIP string, vpnIP string) error
|
||
|
RemovePeer(pubKey []byte) error
|
||
|
}
|
||
|
|
||
|
type stubVPN struct {
|
||
|
peers []stubVPNPeer
|
||
|
interfaceIP string
|
||
|
addPeerErr error
|
||
|
removePeerErr error
|
||
|
getInterfaceIPErr error
|
||
|
}
|
||
|
|
||
|
func (*stubVPN) Setup(privKey []byte) ([]byte, error) {
|
||
|
return []byte{2, 3, 4}, nil
|
||
|
}
|
||
|
|
||
|
func (*stubVPN) GetPublicKey(privKey []byte) ([]byte, error) {
|
||
|
if bytes.Equal(privKey, []byte{2, 3, 4}) {
|
||
|
return []byte{3, 4, 5}, nil
|
||
|
}
|
||
|
return nil, errors.New("unexpected privKey")
|
||
|
}
|
||
|
|
||
|
func (v *stubVPN) GetInterfaceIP() (string, error) {
|
||
|
return v.interfaceIP, v.getInterfaceIPErr
|
||
|
}
|
||
|
|
||
|
func (*stubVPN) SetInterfaceIP(ip string) error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (v *stubVPN) AddPeer(pubKey []byte, publicIP string, vpnIP string) error {
|
||
|
v.peers = append(v.peers, stubVPNPeer{pubKey, publicIP, vpnIP})
|
||
|
return v.addPeerErr
|
||
|
}
|
||
|
|
||
|
func (v *stubVPN) RemovePeer(pubKey []byte) error {
|
||
|
newPeerList := make([]stubVPNPeer, 0, len(v.peers))
|
||
|
for _, v := range v.peers {
|
||
|
if !bytes.Equal(v.pubKey, pubKey) {
|
||
|
newPeerList = append(newPeerList, v)
|
||
|
}
|
||
|
}
|
||
|
v.peers = newPeerList
|
||
|
return v.removePeerErr
|
||
|
}
|
||
|
|
||
|
type stubVPNPeer struct {
|
||
|
pubKey []byte
|
||
|
publicIP string
|
||
|
vpnIP string
|
||
|
}
|