blob: 7919393433d3297d28136aaee0abdf3ab67aa85e [file] [log] [blame]
giolekvad12813b2021-05-01 19:58:44 +04001package vpn
2
3import (
4 "github.com/giolekva/pcloud/core/vpn/types"
5)
6
7type NetworkMapChangeCallback func(*types.NetworkMap)
8
9// Manager interface manages mesh VPN configuration for all the devices registed by all users.
10// It does enforce device to device ACLs but delegates user authorization to the client.
11type Manager interface {
12 // Registers new device with given public key and name.
13 // Returns VPN network configuration on success and error otherwise.
14 // By default new devices have access to other machines owned by the same user
15 // and a PCloud entrypoint.
16 RegisterDevice(name string, pubKey types.PublicKey) (*types.NetworkMap, error)
17 // Completely removes device with given public key from the network.
18 RemoveDevice(pubKey types.PublicKey) error
19 // Returns network configuration for a device with give public key.
20 // Result of this call must be encrypted with the same public key before
21 // sending it back to the client, so only the owner of it's corresponding
22 // private key is able to decrypt and use it.
23 GetNetworkMap(pubKey types.PublicKey) (*types.NetworkMap, error)
24 // AddNetworkMapChangeCallback can be used to receive new network configurations
25 // for a device with given public key.
26 AddNetworkMapChangeCallback(pubKey types.PublicKey, cb NetworkMapChangeCallback) error
27}