summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/models/GatewayJson.java61
-rw-r--r--app/src/test/java/se/leap/bitmaskclient/base/models/GatewayJsonTest.java29
2 files changed, 90 insertions, 0 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/models/GatewayJson.java b/app/src/main/java/se/leap/bitmaskclient/base/models/GatewayJson.java
new file mode 100644
index 00000000..8aca58c6
--- /dev/null
+++ b/app/src/main/java/se/leap/bitmaskclient/base/models/GatewayJson.java
@@ -0,0 +1,61 @@
+package se.leap.bitmaskclient.base.models;
+
+import androidx.annotation.NonNull;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.annotations.SerializedName;
+
+import org.json.JSONObject;
+
+public class GatewayJson {
+ private String location;
+ @SerializedName(value = "ip_address")
+ private String ipAddress;
+ @SerializedName(value = "ip_address6")
+ private String ipAddress6;
+ private String host;
+ private Capabilities capabilities;
+
+ public GatewayJson(String location, String ipAddress, String ipAddress6, String host, Capabilities capabilities) {
+ this.location = location;
+ this.ipAddress = ipAddress;
+ this.ipAddress6 = ipAddress6;
+ this.host = host;
+ this.capabilities = capabilities;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return new Gson().toJson(this);
+ }
+
+ public static GatewayJson fromJson(JSONObject json) {
+ GsonBuilder builder = new GsonBuilder();
+ return builder.create().fromJson(json.toString(), GatewayJson.class);
+ }
+
+ public static class Capabilities {
+ private Boolean adblock;
+ @SerializedName(value = "filter_dns")
+ private Boolean filterDns;
+ private Boolean limited;
+ private Transport[] transport;
+ @SerializedName(value = "user_ips")
+ private Boolean userIps;
+
+ public Capabilities(Boolean adblock, Boolean filterDns, Boolean limited, Transport[] transport, Boolean userIps) {
+ this.adblock = adblock;
+ this.filterDns = filterDns;
+ this.limited = limited;
+ this.transport = transport;
+ this.userIps = userIps;
+ }
+ @NonNull
+ @Override
+ public String toString() {
+ return new Gson().toJson(this);
+ }
+ }
+}
diff --git a/app/src/test/java/se/leap/bitmaskclient/base/models/GatewayJsonTest.java b/app/src/test/java/se/leap/bitmaskclient/base/models/GatewayJsonTest.java
new file mode 100644
index 00000000..61275378
--- /dev/null
+++ b/app/src/test/java/se/leap/bitmaskclient/base/models/GatewayJsonTest.java
@@ -0,0 +1,29 @@
+package se.leap.bitmaskclient.base.models;
+
+import static org.junit.Assert.assertEquals;
+import static de.blinkt.openvpn.core.connection.Connection.TransportType.OBFS4;
+import static se.leap.bitmaskclient.eip.GatewaysManager.PINNED_OBFUSCATION_PROXY;
+
+import org.junit.Test;
+
+import de.blinkt.openvpn.core.connection.Connection;
+
+public class GatewayJsonTest {
+
+ @Test
+ public void testToString() {
+ String gatewayJSON = "{\"location\":\"Unknown Location\",\"ip_address\":\"1.2.3.4\",\"host\":\"pinned.obfuscation.proxy\",\"capabilities\":{\"adblock\":false,\"filter_dns\":false,\"limited\":false,\"transport\":[{\"type\":\"obfs4\",\"protocols\":[\"tcp\"],\"ports\":[\"1194\"],\"options\":{\"cert\":\"xxxxxxx\",\"iatMode\":\"0\"}}],\"user_ips\":false}}";
+
+ Connection.TransportType transportType = OBFS4;
+ Transport[] transports = new Transport[]{
+ new Transport(transportType.toString(),
+ new String[]{"tcp"},
+ new String[]{"1194"},
+ "xxxxxxx")};
+ GatewayJson.Capabilities capabilities = new GatewayJson.Capabilities(false, false, false, transports, false);
+ GatewayJson gatewayJson = new GatewayJson("Unknown Location", "1.2.3.4", null, PINNED_OBFUSCATION_PROXY, capabilities);
+
+ assertEquals(gatewayJSON, gatewayJson.toString());
+ }
+
+} \ No newline at end of file