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;
}