This is an automated email from the ASF dual-hosted git repository.

shuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/master by this push:
     new 850982b  UNOMI-226 Allow for ranges of ip addresses or CIDR masks for 
secure event sources
850982b is described below

commit 850982b50c5fc240e55d4de9ff677c9b81602d86
Author: Serge Huber <[email protected]>
AuthorDate: Tue Apr 9 20:46:58 2019 +0200

    UNOMI-226 Allow for ranges of ip addresses or CIDR masks for secure event 
sources
    
    Signed-off-by: Serge Huber <[email protected]>
---
 services/pom.xml                                   |  7 ++++++
 .../unomi/services/services/EventServiceImpl.java  | 29 +++++++++++-----------
 .../unomi/services/services/ThirdPartyServer.java  |  9 ++++---
 3 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/services/pom.xml b/services/pom.xml
index 77ad1fc..38d14f8 100644
--- a/services/pom.xml
+++ b/services/pom.xml
@@ -132,6 +132,13 @@
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
+
+        <dependency>
+            <groupId>com.github.seancfoley</groupId>
+            <artifactId>ipaddress</artifactId>
+            <version>4.3.0</version>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git 
a/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
 
b/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
index 7c5f147..e547022 100644
--- 
a/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
+++ 
b/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
@@ -17,6 +17,8 @@
 
 package org.apache.unomi.services.services;
 
+import inet.ipaddr.IPAddress;
+import inet.ipaddr.IPAddressString;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.unomi.api.Event;
 import org.apache.unomi.api.EventProperty;
@@ -34,8 +36,6 @@ import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.*;
 
 public class EventServiceImpl implements EventService {
@@ -80,15 +80,12 @@ public class EventServiceImpl implements EventService {
                 } else if (keys[2].equals("key")) {
                     thirdPartyServer.setKey(entry.getValue());
                 } else if (keys[2].equals("ipAddresses")) {
-                    Set<InetAddress> inetAddresses = new HashSet<>();
+                    Set<IPAddress> ipAddresses = new HashSet<>();
                     for (String ip : StringUtils.split(entry.getValue(), ',')) 
{
-                        try {
-                            
inetAddresses.add(InetAddress.getByName(ip.trim()));
-                        } catch (UnknownHostException e) {
-                            logger.error("Cannot resolve address",e);
-                        }
+                        IPAddress ipAddress = new 
IPAddressString(ip.trim()).getAddress();
+                        ipAddresses.add(ipAddress);
                     }
-                    thirdPartyServer.setIpAddresses(inetAddresses);
+                    thirdPartyServer.setIpAddresses(ipAddresses);
                 }
             }
         }
@@ -126,12 +123,16 @@ public class EventServiceImpl implements EventService {
         if (key != null) {
             for (Map.Entry<String, ThirdPartyServer> entry : 
thirdPartyServers.entrySet()) {
                 ThirdPartyServer server = entry.getValue();
-                try {
-                    if (server.getKey().equals(key) && 
server.getIpAddresses().contains(InetAddress.getByName(ip))) {
-                        return server.getId();
+                IPAddress ipAddress = new IPAddressString(ip).getAddress();
+                boolean matched = false;
+                for (IPAddress serverIpAddress : server.getIpAddresses()) {
+                    if (serverIpAddress.contains(ipAddress)) {
+                        matched = true;
+                        break;
                     }
-                } catch (UnknownHostException e) {
-                    logger.error("Cannot resolve address",e);
+                }
+                if (server.getKey().equals(key) && matched) {
+                    return server.getId();
                 }
             }
             logger.debug("Could not authenticate any third party servers");
diff --git 
a/services/src/main/java/org/apache/unomi/services/services/ThirdPartyServer.java
 
b/services/src/main/java/org/apache/unomi/services/services/ThirdPartyServer.java
index c4587d7..05366e0 100644
--- 
a/services/src/main/java/org/apache/unomi/services/services/ThirdPartyServer.java
+++ 
b/services/src/main/java/org/apache/unomi/services/services/ThirdPartyServer.java
@@ -17,7 +17,8 @@
 
 package org.apache.unomi.services.services;
 
-import java.net.InetAddress;
+import inet.ipaddr.IPAddress;
+
 import java.util.HashSet;
 import java.util.Set;
 
@@ -29,7 +30,7 @@ public class ThirdPartyServer {
 
     private String key;
 
-    private Set<InetAddress> ipAddresses;
+    private Set<IPAddress> ipAddresses;
 
     private Set<String> allowedEvents = new HashSet<>();
 
@@ -45,7 +46,7 @@ public class ThirdPartyServer {
         return key;
     }
 
-    public Set<InetAddress> getIpAddresses() {
+    public Set<IPAddress> getIpAddresses() {
         return ipAddresses;
     }
 
@@ -57,7 +58,7 @@ public class ThirdPartyServer {
         this.key = key;
     }
 
-    public void setIpAddresses(Set<InetAddress> ipAddresses) {
+    public void setIpAddresses(Set<IPAddress> ipAddresses) {
         this.ipAddresses = ipAddresses;
     }
 

Reply via email to