| giolekva | d12813b | 2021-05-01 19:58:44 +0400 | [diff] [blame] | 1 | package vpn |
| 2 | |
| 3 | import ( |
| 4 | "github.com/giolekva/pcloud/core/vpn/types" |
| 5 | ) |
| 6 | |
| 7 | type 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. |
| 11 | type Manager interface { |
| giolekva | c643949 | 2021-05-02 20:49:39 +0400 | [diff] [blame] | 12 | // Registers new device. |
| giolekva | d12813b | 2021-05-01 19:58:44 +0400 | [diff] [blame] | 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. |
| giolekva | a748ff9 | 2021-05-02 22:00:34 +0400 | [diff] [blame] | 16 | RegisterDevice(d types.DeviceInfo) error |
| giolekva | d12813b | 2021-05-01 19:58:44 +0400 | [diff] [blame] | 17 | // Completely removes device with given public key from the network. |
| 18 | RemoveDevice(pubKey types.PublicKey) error |
| giolekva | 66e2efa | 2021-05-01 23:58:58 +0400 | [diff] [blame] | 19 | // Creates new group with given name and returns it's id. |
| 20 | // Name does not have to be unique. |
| 21 | CreateGroup(name string) (types.GroupID, error) |
| 22 | // Deletes group with given id. |
| 23 | DeleteGroup(id types.GroupID) error |
| 24 | // Adds device with given public key to the group and returns updated network configuration. |
| 25 | AddDeviceToGroup(pubKey types.PublicKey, id types.GroupID) (*types.NetworkMap, error) |
| 26 | // Removes device from the group and returns updated network configuration. |
| 27 | RemoveDeviceFromGroup(pubKey types.PublicKey, id types.GroupID) (*types.NetworkMap, error) |
| Giorgi Lekveishvili | 93c6aa5 | 2021-05-09 12:59:09 +0400 | [diff] [blame] | 28 | // Returns network configuration for a device with a given public key. |
| giolekva | d12813b | 2021-05-01 19:58:44 +0400 | [diff] [blame] | 29 | // Result of this call must be encrypted with the same public key before |
| 30 | // sending it back to the client, so only the owner of it's corresponding |
| 31 | // private key is able to decrypt and use it. |
| 32 | GetNetworkMap(pubKey types.PublicKey) (*types.NetworkMap, error) |
| 33 | // AddNetworkMapChangeCallback can be used to receive new network configurations |
| 34 | // for a device with given public key. |
| 35 | AddNetworkMapChangeCallback(pubKey types.PublicKey, cb NetworkMapChangeCallback) error |
| 36 | } |