From 10e78ab00b2cba11d7913a2241926408ac358986 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 13 Mar 2019 15:37:40 +0100 Subject: [PATCH] openvidu-server: GeoLocation --- .../server/cdr/CDREventParticipant.java | 3 +- .../io/openvidu/server/core/FinalUser.java | 7 ++-- .../io/openvidu/server/core/Participant.java | 13 ++++--- .../openvidu/server/core/SessionManager.java | 3 +- .../io/openvidu/server/rpc/RpcHandler.java | 7 ++-- .../server/summary/SessionSummary.java | 6 ++- .../io/openvidu/server/utils/GeoLocation.java | 39 +++++++++++++++++++ .../server/utils/GeoLocationByIp.java | 2 +- .../server/utils/GeoLocationByIpDummy.java | 5 ++- 9 files changed, 67 insertions(+), 18 deletions(-) create mode 100644 openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocation.java diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventParticipant.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventParticipant.java index 8bb8527a..fc637529 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventParticipant.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventParticipant.java @@ -41,7 +41,8 @@ public class CDREventParticipant extends CDREventEnd { public JsonObject toJson() { JsonObject json = super.toJson(); json.addProperty("participantId", this.participant.getParticipantPublicId()); - json.addProperty("location", this.participant.getLocation()); + json.addProperty("location", + this.participant.getLocation() != null ? this.participant.getLocation().toString() : "unknown"); json.addProperty("platform", this.participant.getPlatform()); return json; } diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/FinalUser.java b/openvidu-server/src/main/java/io/openvidu/server/core/FinalUser.java index 3b310c3a..7c6deef4 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/FinalUser.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/FinalUser.java @@ -25,12 +25,13 @@ import com.google.gson.JsonObject; import io.openvidu.server.cdr.CDREventParticipant; import io.openvidu.server.summary.ParticipantSummary; +import io.openvidu.server.utils.GeoLocation; public class FinalUser { private String id; private String sessionId; - private String location; + private GeoLocation location; private String platform; private Map connections = new ConcurrentHashMap<>(); @@ -51,7 +52,7 @@ public class FinalUser { return sessionId; } - public String getLocation() { + public GeoLocation getLocation() { return location; } @@ -76,7 +77,7 @@ public class FinalUser { public JsonObject toJson() { JsonObject json = new JsonObject(); json.addProperty("id", id); - json.addProperty("location", location); + json.addProperty("location", this.location != null ? this.location.toString() : "unknown"); json.addProperty("platform", platform); JsonObject connectionsJson = new JsonObject(); diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java b/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java index 838b5b61..3bdff710 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/Participant.java @@ -19,6 +19,8 @@ package io.openvidu.server.core; import com.google.gson.JsonObject; +import io.openvidu.server.utils.GeoLocation; + public class Participant { protected String finalUserId; // ID to match this connection with a final user (HttpSession id) @@ -29,7 +31,7 @@ public class Participant { protected String clientMetadata = ""; // Metadata provided on client side protected String serverMetadata = ""; // Metadata provided on server side protected Token token; // Token associated to this participant - protected String location; // Remote IP of the participant + protected GeoLocation location; // Location of the participant protected String platform; // Platform used by the participant to connect to the session protected boolean streaming = false; @@ -38,7 +40,7 @@ public class Participant { private final String METADATA_SEPARATOR = "%/%"; public Participant(String finalUserId, String participantPrivatetId, String participantPublicId, String sessionId, - Token token, String clientMetadata, String location, String platform, Long createdAt) { + Token token, String clientMetadata, GeoLocation location, String platform, Long createdAt) { this.finalUserId = finalUserId; this.participantPrivatetId = participantPrivatetId; this.participantPublicId = participantPublicId; @@ -108,11 +110,11 @@ public class Participant { this.token = token; } - public String getLocation() { + public GeoLocation getLocation() { return this.location; } - public void setLocation(String location) { + public void setLocation(GeoLocation location) { this.location = location; } @@ -209,8 +211,7 @@ public class Participant { public JsonObject toJson() { JsonObject json = new JsonObject(); json.addProperty("connectionId", this.participantPublicId); - json.addProperty("createdAt", this.createdAt); - json.addProperty("location", this.location); + json.addProperty("location", this.location != null ? this.location.toString() : "unknown"); json.addProperty("platform", this.platform); json.addProperty("token", this.token.getToken()); json.addProperty("role", this.token.getRole().name()); diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java index 4ec5af7b..8d7231bf 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java @@ -47,6 +47,7 @@ import io.openvidu.server.coturn.CoturnCredentialsService; import io.openvidu.server.kurento.core.KurentoTokenOptions; import io.openvidu.server.recording.service.RecordingManager; import io.openvidu.server.utils.FormatChecker; +import io.openvidu.server.utils.GeoLocation; import io.openvidu.server.utils.RandomStringGenerator; public abstract class SessionManager { @@ -335,7 +336,7 @@ public abstract class SessionManager { } public Participant newParticipant(String sessionId, String participantPrivatetId, Token token, - String clientMetadata, String location, String platform, String finalUserId) { + String clientMetadata, GeoLocation location, String platform, String finalUserId) { if (this.sessionidParticipantpublicidParticipant.get(sessionId) != null) { String participantPublicId = RandomStringGenerator.generateRandomChain(); Participant p = new Participant(finalUserId, participantPrivatetId, participantPublicId, sessionId, token, diff --git a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java index d28175e7..d4058b06 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java @@ -49,6 +49,7 @@ import io.openvidu.server.core.MediaOptions; import io.openvidu.server.core.Participant; import io.openvidu.server.core.SessionManager; import io.openvidu.server.core.Token; +import io.openvidu.server.utils.GeoLocation; import io.openvidu.server.utils.GeoLocationByIp; import io.openvidu.server.utils.RandomStringGenerator; @@ -174,7 +175,7 @@ public class RpcHandler extends DefaultJsonRpcHandler { String participantPrivatetId = rpcConnection.getParticipantPrivateId(); InetAddress remoteAddress = null; - String location = ""; + GeoLocation location = null; Object obj = rpcConnection.getSession().getAttributes().get("remoteAddress"); if (obj != null && obj instanceof InetAddress) { remoteAddress = (InetAddress) obj; @@ -182,10 +183,10 @@ public class RpcHandler extends DefaultJsonRpcHandler { location = this.geoLocationByIp.getLocationByIp(remoteAddress); } catch (IOException e) { e.printStackTrace(); - location = "error"; + location = null; } catch (Exception e) { log.warn("Error getting address location: {}", e.getMessage()); - location = "unknown"; + location = null; } } diff --git a/openvidu-server/src/main/java/io/openvidu/server/summary/SessionSummary.java b/openvidu-server/src/main/java/io/openvidu/server/summary/SessionSummary.java index 94619032..348e95ee 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/summary/SessionSummary.java +++ b/openvidu-server/src/main/java/io/openvidu/server/summary/SessionSummary.java @@ -78,9 +78,13 @@ public class SessionSummary { return json; } - + public CDREventSession getEventSessionEnd() { return this.eventSessionEnd; } + public Map getUsers() { + return this.users; + } + } diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocation.java b/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocation.java new file mode 100644 index 00000000..e8ac2a8e --- /dev/null +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocation.java @@ -0,0 +1,39 @@ +package io.openvidu.server.utils; + +public class GeoLocation { + + private String country; + private String city; + private Double latitude; + private Double longitude; + + public GeoLocation(String country, String city, Double latitude, Double longitude) { + super(); + this.country = country; + this.city = city; + this.latitude = latitude; + this.longitude = longitude; + } + + public String getCountry() { + return country; + } + + public String getCity() { + return city; + } + + public Double getLatitude() { + return latitude; + } + + public Double getLongitude() { + return longitude; + } + + @Override + public String toString() { + return this.city + ", " + this.country; + } + +} diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocationByIp.java b/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocationByIp.java index b2a26694..84873130 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocationByIp.java +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocationByIp.java @@ -21,6 +21,6 @@ import java.net.InetAddress; public interface GeoLocationByIp { - public String getLocationByIp(InetAddress ipAddress) throws Exception; + public GeoLocation getLocationByIp(InetAddress ipAddress) throws Exception; } diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocationByIpDummy.java b/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocationByIpDummy.java index 5a890ee8..601717ea 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocationByIpDummy.java +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/GeoLocationByIpDummy.java @@ -7,8 +7,9 @@ import org.springframework.stereotype.Service; @Service public class GeoLocationByIpDummy implements GeoLocationByIp { - public String getLocationByIp(InetAddress ipAddress) throws Exception { - return ""; + @Override + public GeoLocation getLocationByIp(InetAddress ipAddress) throws Exception { + return null; } }