Merge branch 'vpn' of github.com-giolekva:giolekva/pcloud into vpn
diff --git a/core/vpn/in_memory_manager.go b/core/vpn/in_memory_manager.go
index 85f9a5b..5efbfda 100644
--- a/core/vpn/in_memory_manager.go
+++ b/core/vpn/in_memory_manager.go
@@ -41,11 +41,18 @@
 	m.keyToDevices[d.PublicKey] = &d
 	m.devices = append(m.devices, &d)
 	m.callbacks[d.PublicKey] = make([]NetworkMapChangeCallback, 0)
-	ret := m.genNetworkMap(&d)
+	ret, err := m.genNetworkMap(&d)
+	if err != nil {
+		return nil, err
+	}
 	// TODO(giolekva): run this in a goroutine
 	for _, peer := range m.devices {
 		if peer.PublicKey != d.PublicKey {
-			netMap := m.genNetworkMap(peer)
+			netMap, err := m.genNetworkMap(peer)
+			if err != nil {
+				// TODO(giolekva): maybe return netmap of requested device anyways?
+				return nil, err
+			}
 			for _, cb := range m.callbacks[peer.PublicKey] {
 				cb(netMap)
 			}
@@ -68,7 +75,10 @@
 		}
 	}
 	for _, peer := range m.devices {
-		netMap := m.genNetworkMap(peer)
+		netMap, err := m.genNetworkMap(peer)
+		if err != nil {
+			return err
+		}
 		for _, cb := range m.callbacks[peer.PublicKey] {
 			cb(netMap)
 		}
@@ -80,7 +90,7 @@
 	m.lock.Lock()
 	defer m.lock.Unlock()
 	if d, ok := m.keyToDevices[pubKey]; ok {
-		return m.genNetworkMap(d), nil
+		return m.genNetworkMap(d)
 	}
 	return nil, errorDeviceNotFound(pubKey)
 }
@@ -94,12 +104,12 @@
 	return errorDeviceNotFound(pubKey)
 }
 
-func (m *InMemoryManager) genNetworkMap(d *types.DeviceInfo) *types.NetworkMap {
+func (m *InMemoryManager) genNetworkMap(d *types.DeviceInfo) (*types.NetworkMap, error) {
 	vpnIP, err := m.ipm.Get(d.PublicKey)
 	// NOTE(giolekva): Should not happen as devices must have been already registered and assigned IP address.
 	// Maybe should return error anyways instead of panic?
 	if err != nil {
-		panic(err)
+		return nil, err
 	}
 	ret := types.NetworkMap{
 		Self: types.Node{
@@ -116,7 +126,7 @@
 		}
 		vpnIP, err := m.ipm.Get(peer.PublicKey)
 		if err != nil {
-			panic(err)
+			return nil, err
 		}
 		ret.Peers = append(ret.Peers, types.Node{
 			PublicKey:     peer.PublicKey,
@@ -126,5 +136,5 @@
 			VPNIP:         vpnIP,
 		})
 	}
-	return &ret
+	return &ret, nil
 }