From 5fa73879272a53d623515e4b28187c4a1abcf3cf Mon Sep 17 00:00:00 2001 From: Bryson Date: Sun, 18 Jul 2021 09:38:31 -0400 Subject: [PATCH 1/5] corrected invalid sql queries --- .../antivpn/database/sql/MySqlVPN.java | 122 +++++++++++------- 1 file changed, 78 insertions(+), 44 deletions(-) diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index 3a28783..0540a4c 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -8,9 +8,7 @@ import dev.brighten.antivpn.database.sql.utils.Query; import dev.brighten.antivpn.utils.VPNResponse; import lombok.SneakyThrows; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Timestamp; +import java.sql.*; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -26,9 +24,9 @@ public class MySqlVPN implements VPNDatabase { } catch (InterruptedException e) { e.printStackTrace(); } - while(true) { - //Updating from database - if(AntiVPN.getInstance().getConfig().isDatabaseEnabled()) { + while (true) { + // Updating from database + if (AntiVPN.getInstance().getConfig().isDatabaseEnabled()) { AntiVPN.getInstance().getExecutor().getWhitelisted().clear(); AntiVPN.getInstance().getExecutor().getWhitelisted() .addAll(AntiVPN.getInstance().getDatabase().getAllWhitelisted()); @@ -41,22 +39,22 @@ public class MySqlVPN implements VPNDatabase { } }); - whitelistedThread.start();; + whitelistedThread.start(); + ; } + @Override public Optional getStoredResponse(String ip) { - if(!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) return Optional.empty(); - ResultSet rs = Query.prepare("select * from `responses` where `ip` = ? limit 1") - .append(ip).executeQuery(); + if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) + return Optional.empty(); + ResultSet rs = Query.prepare("select * from `responses` where `ip` = ? limit 1").append(ip).executeQuery(); try { - if(rs != null && !rs.wasNull() && rs.next()) { + if (rs != null && !rs.wasNull() && rs.next()) { VPNResponse response = new VPNResponse(rs.getString("asn"), rs.getString("ip"), - rs.getString("countryName"), rs.getString("countryCode"), - rs.getString("city"), rs.getString("timeZone"), - rs.getString("method"), rs.getString("isp"), - rs.getBoolean("proxy"), rs.getBoolean("cached"), true, - rs.getDouble("latitude"), rs.getDouble("longitude"), + rs.getString("countryName"), rs.getString("countryCode"), rs.getString("city"), + rs.getString("timeZone"), rs.getString("method"), rs.getString("isp"), rs.getBoolean("proxy"), + rs.getBoolean("cached"), true, rs.getDouble("latitude"), rs.getDouble("longitude"), System.currentTimeMillis(), -1); return Optional.of(response); } @@ -67,37 +65,43 @@ public class MySqlVPN implements VPNDatabase { return Optional.empty(); } - /*Query.prepare("create table if not exists `responses` (`ip` varchar(45) not null, " + - "`countryName` varchar(64), `countryCode` varchar(10), `city` varchar(64), `timeZone` varchar(64), " + - "`method` varchar(32), `isp` varchar(32), `proxy` boolean, `cached` boolean " + - "`latitude` double, `longitude` double)");*/ + /* + * Query. + * prepare("create table if not exists `responses` (`ip` varchar(45) not null, " + * + + * "`countryName` varchar(64), `countryCode` varchar(10), `city` varchar(64), `timeZone` varchar(64), " + * + + * "`method` varchar(32), `isp` varchar(32), `proxy` boolean, `cached` boolean " + * + "`latitude` double, `longitude` double)"); + */ @Override public void cacheResponse(VPNResponse toCache) { - if(!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) return; - Query.prepare("insert into `responses` (`ip`,`asn`,`countryName`,`countryCode`,`city`,`timeZone`," + - "`method`,`isp`,`proxy`,`cached`,`inserted`,`latitude`,`longitude`) values (?,?,?,?,?,?,?,?,?,?,?,?,?)") + if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) + return; + Query.prepare("insert into `responses` (`ip`,`asn`,`countryName`,`countryCode`,`city`,`timeZone`," + + "`method`,`isp`,`proxy`,`cached`,`inserted`,`latitude`,`longitude`) values (?,?,?,?,?,?,?,?,?,?,?,?,?)") .append(toCache.getIp()).append(toCache.getAsn()).append(toCache.getCountryName()) - .append(toCache.getCountryCode()).append(toCache.getCity()) - .append(toCache.getTimeZone()).append(toCache.getMethod()).append(toCache.getIsp()) - .append(toCache.isProxy()).append(toCache.isCached()).append(new Timestamp(System.currentTimeMillis())) + .append(toCache.getCountryCode()).append(toCache.getCity()).append(toCache.getTimeZone()) + .append(toCache.getMethod()).append(toCache.getIsp()).append(toCache.isProxy()) + .append(toCache.isCached()).append(new Timestamp(System.currentTimeMillis())) .append(toCache.getLatitude()).append(toCache.getLongitude()).execute(); } @SneakyThrows @Override public boolean isWhitelisted(UUID uuid) { - if(!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) return false; - ResultSet set = Query.prepare("select uuid from `whitelisted` where `uuid` = ? limit 1") - .append(uuid.toString()).executeQuery(); - + if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) + return false; + ResultSet set = Query.prepare("select uuid from `whitelisted` where `uuid` = ? limit 1").append(uuid.toString()) + .executeQuery(); return set != null && !set.wasNull() && set.next() && set.getString("uuid") != null; } @Override public void setWhitelisted(UUID uuid, boolean whitelisted) { - if(whitelisted) { - if(!isWhitelisted(uuid)) { + if (whitelisted) { + if (!isWhitelisted(uuid)) { Query.prepare("insert into `whitelisted` (`uuid`) values (?)").append(uuid.toString()).execute(); } AntiVPN.getInstance().getExecutor().getWhitelisted().add(uuid); @@ -113,10 +117,10 @@ public class MySqlVPN implements VPNDatabase { ResultSet set = Query.prepare("select uuid from `whitelisted`").executeQuery(); try { - while(set.next()) { + while (set.next()) { uuids.add(UUID.fromString(set.getString("uuid"))); } - } catch(SQLException e) { + } catch (SQLException e) { e.printStackTrace(); } return uuids; @@ -134,27 +138,57 @@ public class MySqlVPN implements VPNDatabase { @Override public void init() { - if(!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) return; + if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) + return; System.out.println("Initializing MySQL..."); MySQL.init(); System.out.println("Creating tables..."); Query.prepare("create table if not exists `whitelisted` (`uuid` varchar(36) not null)").execute(); - Query.prepare("create table if not exists `responses` (`ip` varchar(45) not null, `asn` varchar(12)," + - "`countryName` varchar(64), `countryCode` varchar(10), `city` varchar(64), `timeZone` varchar(64), " + - "`method` varchar(32), `isp` varchar(64), `proxy` boolean, `cached` boolean, `inserted` timestamp," + - "`latitude` double, `longitude` double)").execute(); + Query.prepare("create table if not exists `responses` (`ip` varchar(45) not null, `asn` varchar(12)," + + "`countryName` varchar(64), `countryCode` varchar(10), `city` varchar(64), `timeZone` varchar(64), " + + "`method` varchar(32), `isp` varchar(64), `proxy` boolean, `cached` boolean, `inserted` timestamp," + + "`latitude` double, `longitude` double)").execute(); System.out.println("Creating indexes..."); - Query.prepare("create index if not exists `uuid_1` on `whitelisted` (`uuid`)").execute(); - Query.prepare("create index if not exists `ip_1` on `responses` (`ip`)").execute(); - Query.prepare("create index if not exists `proxy_1` on `responses` (`proxy`)").execute(); - Query.prepare("create index if not exists `inserted_1` on `responses` (`inserted`)").execute(); + try { + // Ref: + // https://dba.stackexchange.com/questions/24531/mysql-create-index-if-not-exists + String query = "SELECT COUNT(1) IndexExists FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema=DATABASE() AND table_name='whitelisted' AND index_name='uuid_1';"; + Statement st = conn.createStatement(); + ResultSet rs = st.executeQuery(query); + int id = rs.getInt("IndexExists"); + if (id == 0) { + Query.prepare("create index `uuid_1` on `whitelisted` (`uuid`)").execute(); + } + query = "SELECT COUNT(1) IndexExists FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema=DATABASE() AND table_name='responses' AND index_name='ip_1';"; + rs = st.executeQuery(query); + id = rs.getInt("IndexExists"); + if (id == 0) { + Query.prepare("create index `ip_1` on `responses` (`ip`)").execute(); + } + query = "SELECT COUNT(1) IndexExists FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema=DATABASE() AND table_name='responses' AND index_name='proxy_1';"; + rs = st.executeQuery(query); + id = rs.getInt("IndexExists"); + if (id == 0) { + Query.prepare("create index `proxy_1` on `responses` (`proxy`)").execute(); + } + query = "SELECT COUNT(1) IndexExists FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema=DATABASE() AND table_name='responses' AND index_name='inserted_1';"; + rs = st.executeQuery(query); + id = rs.getInt("IndexExists"); + if (id == 0) { + Query.prepare("create index `inserted_1` on `responses` (`inserted`)").execute(); + } + } catch (Exception e) { + System.err.println("mySQL Excepton created"); + System.err.println(e.getMessage()); + } } @Override public void shutdown() { - if(!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) return; + if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) + return; MySQL.shutdown(); } } From a60c1b23603bbcb38a7c11af7274eca3575b8fb0 Mon Sep 17 00:00:00 2001 From: Bryson Date: Sun, 18 Jul 2021 11:49:44 -0400 Subject: [PATCH 2/5] updated to non-deprecated class --- .../java/dev/brighten/antivpn/database/sql/utils/MySQL.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java index 90febde..7c2667b 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java @@ -11,7 +11,7 @@ public class MySQL { public static void init() { try { if (conn == null || conn.isClosed()) { - Class.forName("com.mysql.jdbc.Driver"); + Class.forName("com.mysql.cj.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://" + AntiVPN.getInstance().getConfig().getIp() + ":" + AntiVPN.getInstance().getConfig().getPort() + "/?useSSL=true&autoReconnect=true", From 1f6043c20d5f2ad58a99c1883af1286453896b99 Mon Sep 17 00:00:00 2001 From: Bryson Date: Sun, 18 Jul 2021 11:50:03 -0400 Subject: [PATCH 3/5] Corrected some mistakes to get it working --- .../antivpn/database/sql/MySqlVPN.java | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index 0540a4c..fccb280 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -155,33 +155,47 @@ public class MySqlVPN implements VPNDatabase { // Ref: // https://dba.stackexchange.com/questions/24531/mysql-create-index-if-not-exists String query = "SELECT COUNT(1) IndexExists FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema=DATABASE() AND table_name='whitelisted' AND index_name='uuid_1';"; - Statement st = conn.createStatement(); - ResultSet rs = st.executeQuery(query); - int id = rs.getInt("IndexExists"); + ResultSet rs = Query.prepare(query).executeQuery(); + int id = 0; + while (rs.next()) { + id = rs.getInt("IndexExists"); + System.err.println(id); + } if (id == 0) { Query.prepare("create index `uuid_1` on `whitelisted` (`uuid`)").execute(); } + id = 0; query = "SELECT COUNT(1) IndexExists FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema=DATABASE() AND table_name='responses' AND index_name='ip_1';"; - rs = st.executeQuery(query); - id = rs.getInt("IndexExists"); + rs = Query.prepare(query).executeQuery(); + while (rs.next()) { + id = rs.getInt("IndexExists"); + System.err.println(id); + } if (id == 0) { Query.prepare("create index `ip_1` on `responses` (`ip`)").execute(); } + id = 0; query = "SELECT COUNT(1) IndexExists FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema=DATABASE() AND table_name='responses' AND index_name='proxy_1';"; - rs = st.executeQuery(query); - id = rs.getInt("IndexExists"); + rs = Query.prepare(query).executeQuery(); + while (rs.next()) { + id = rs.getInt("IndexExists"); + System.err.println(id); + } if (id == 0) { Query.prepare("create index `proxy_1` on `responses` (`proxy`)").execute(); } + id = 0; query = "SELECT COUNT(1) IndexExists FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema=DATABASE() AND table_name='responses' AND index_name='inserted_1';"; - rs = st.executeQuery(query); - id = rs.getInt("IndexExists"); + rs = Query.prepare(query).executeQuery(); + while (rs.next()) { + id = rs.getInt("IndexExists"); + System.err.println(id); + } if (id == 0) { Query.prepare("create index `inserted_1` on `responses` (`inserted`)").execute(); } } catch (Exception e) { - System.err.println("mySQL Excepton created"); - System.err.println(e.getMessage()); + System.err.println("MySQL Excepton created" + e.getMessage()); } } From d04c33c676d8e5ce0084cf95e5ab2b558e2800ee Mon Sep 17 00:00:00 2001 From: Bryson Date: Sun, 18 Jul 2021 11:50:55 -0400 Subject: [PATCH 4/5] removed debug prints --- .../main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index fccb280..9dcb349 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -159,7 +159,6 @@ public class MySqlVPN implements VPNDatabase { int id = 0; while (rs.next()) { id = rs.getInt("IndexExists"); - System.err.println(id); } if (id == 0) { Query.prepare("create index `uuid_1` on `whitelisted` (`uuid`)").execute(); @@ -169,7 +168,6 @@ public class MySqlVPN implements VPNDatabase { rs = Query.prepare(query).executeQuery(); while (rs.next()) { id = rs.getInt("IndexExists"); - System.err.println(id); } if (id == 0) { Query.prepare("create index `ip_1` on `responses` (`ip`)").execute(); @@ -179,7 +177,6 @@ public class MySqlVPN implements VPNDatabase { rs = Query.prepare(query).executeQuery(); while (rs.next()) { id = rs.getInt("IndexExists"); - System.err.println(id); } if (id == 0) { Query.prepare("create index `proxy_1` on `responses` (`proxy`)").execute(); @@ -189,7 +186,6 @@ public class MySqlVPN implements VPNDatabase { rs = Query.prepare(query).executeQuery(); while (rs.next()) { id = rs.getInt("IndexExists"); - System.err.println(id); } if (id == 0) { Query.prepare("create index `inserted_1` on `responses` (`inserted`)").execute(); From 88dfcc33498fb77d4b2eb07a4b95a9624fab946f Mon Sep 17 00:00:00 2001 From: Bryson Date: Sun, 18 Jul 2021 12:15:23 -0400 Subject: [PATCH 5/5] removed redundant check that causes exception --- .../main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index 9dcb349..3a762e7 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -50,7 +50,7 @@ public class MySqlVPN implements VPNDatabase { ResultSet rs = Query.prepare("select * from `responses` where `ip` = ? limit 1").append(ip).executeQuery(); try { - if (rs != null && !rs.wasNull() && rs.next()) { + if (rs != null && rs.next()) { VPNResponse response = new VPNResponse(rs.getString("asn"), rs.getString("ip"), rs.getString("countryName"), rs.getString("countryCode"), rs.getString("city"), rs.getString("timeZone"), rs.getString("method"), rs.getString("isp"), rs.getBoolean("proxy"),