diff --git a/src/main/java/osu/serverlist/Cache/ClientKeys.java b/src/main/java/osu/serverlist/Cache/ClientKeys.java new file mode 100644 index 0000000..5bdee22 --- /dev/null +++ b/src/main/java/osu/serverlist/Cache/ClientKeys.java @@ -0,0 +1,33 @@ +package osu.serverlist.Cache; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; + +import commons.marcandreher.Cache.Action.DatabaseAction; +import commons.marcandreher.Commons.Flogger; + +public class ClientKeys extends DatabaseAction { + + private final String KEY_SQL = "SELECT * FROM `un_clients`"; + + public static ArrayList keys = new ArrayList<>(); + + @Override + public void executeAction(Flogger logger) { + ArrayList keys = new ArrayList<>(); + super.executeAction(logger); + + ResultSet keyResultSet = mysql.Query(KEY_SQL); + try { + while (keyResultSet.next()) { + keys.add(keyResultSet.getString("key")); + } + + ClientKeys.keys = keys; + } catch (SQLException e) { + logger.error(e); + } + } + +} diff --git a/src/main/java/osu/serverlist/Main/Api.java b/src/main/java/osu/serverlist/Main/Api.java index 996cde5..1e6934b 100644 --- a/src/main/java/osu/serverlist/Main/Api.java +++ b/src/main/java/osu/serverlist/Main/Api.java @@ -13,6 +13,7 @@ import commons.marcandreher.Commons.WebServer; import commons.marcandreher.Input.CommandHandler; import freemarker.template.Configuration; +import osu.serverlist.Cache.ClientKeys; import osu.serverlist.Cache.RefreshHeatmap; import osu.serverlist.Sites.Endpoints.BanchoPyStatsRoute; import osu.serverlist.Sites.Endpoints.CategoriesRoute; @@ -22,6 +23,7 @@ import osu.serverlist.Sites.Endpoints.ChartTypesRoute; import osu.serverlist.Sites.Endpoints.ServerRoute; import osu.serverlist.Sites.Endpoints.ServersRoute; +import osu.serverlist.Sites.Endpoints.client.ClientServersRoute; import osu.serverlist.Sites.Models.Config; import spark.Spark; @@ -64,9 +66,12 @@ public static void main(String[] args) { router.get("/api/v1/chart/data", new ChartDataRoute()); router.get("/api/v1/chart/votes/data", new ChartDataVoteRoute()); + router.get("/api/v2/client/servers", new ClientServersRoute()); + CacheTimer ct = new CacheTimer(30, 1, TimeUnit.MINUTES); + ct.addAction(new ClientKeys()); ct.addAction(new RefreshHeatmap()); - + router.get("/api/v1/heatmap", new ChartHeatMapRoute()); cmd.registerCommand(new ExceptionManager()); cmd.initialize(); diff --git a/src/main/java/osu/serverlist/Sites/Endpoints/client/ClientServersRoute.java b/src/main/java/osu/serverlist/Sites/Endpoints/client/ClientServersRoute.java new file mode 100644 index 0000000..50d4a11 --- /dev/null +++ b/src/main/java/osu/serverlist/Sites/Endpoints/client/ClientServersRoute.java @@ -0,0 +1,56 @@ +package osu.serverlist.Sites.Endpoints.client; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; + + +import commons.marcandreher.Engine.JsonProcessingRoute; +import commons.marcandreher.Utils.TimestampConverter; +import osu.serverlist.Cache.ClientKeys; +import osu.serverlist.Sites.Models.ClientServer; +import osu.serverlist.Sites.Models.ServerHelper; +import spark.Request; +import spark.Response; + +public class ClientServersRoute extends JsonProcessingRoute { + + private final String SQL_QUERY = "SELECT * FROM `un_servers` WHERE `visible` = 1"; + + @Override + public Object handle(Request request, Response response) { + Object ob = super.handle(request, response); + if(ob != null) return ob; + + if(request.queryParams("key") == null) return customError("No key provided"); + + if(!(ClientKeys.keys.contains(request.queryParams("key")))) return customError("Invalid key"); + + ArrayList serverList = new ArrayList<>(); + + ResultSet serverResultSet = mysql.Query(SQL_QUERY); + try { + while (serverResultSet.next()) { + ClientServer v = new ClientServer(); + v.setName(serverResultSet.getString("name")); + v.setId(serverResultSet.getInt("id")); + v.setImage(ServerHelper.repairLogo(serverResultSet.getString("logo_loc"))); + v.setPlayers(serverResultSet.getInt("players")); + v.setVotes(serverResultSet.getInt("votes")); + v.setTimestamp(TimestampConverter.getDiffString(serverResultSet.getString("created"))); + v.setDevserver(serverResultSet.getString("devserver")); + v.setUrl("https://" + serverResultSet.getString("url")); + + v.setSafe_name(v.getName().toLowerCase().replaceAll(" ", "")); + + serverList.add(v); + } + return returnResponse(serverList); + } catch (SQLException e) { + return internalDbError(); + } catch (Exception e) { + e.printStackTrace(); + return internalError(); + } + } +} diff --git a/src/main/java/osu/serverlist/Sites/Models/ClientServer.java b/src/main/java/osu/serverlist/Sites/Models/ClientServer.java new file mode 100644 index 0000000..d1b618d --- /dev/null +++ b/src/main/java/osu/serverlist/Sites/Models/ClientServer.java @@ -0,0 +1,89 @@ +package osu.serverlist.Sites.Models; + +public class ClientServer { + + private int id; + private String name; + private String safe_name; + private String url; + private String devserver; + + private String image; + private int players; + private int votes; + + private String timestamp; + + public int getId() { + return this.id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSafe_name() { + return this.safe_name; + } + + public void setSafe_name(String safe_name) { + this.safe_name = safe_name; + } + + public String getUrl() { + return this.url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getDevserver() { + return this.devserver; + } + + public void setDevserver(String devserver) { + this.devserver = devserver; + } + + public String getImage() { + return this.image; + } + + public void setImage(String image) { + this.image = image; + } + + public int getPlayers() { + return this.players; + } + + public void setPlayers(int players) { + this.players = players; + } + + public int getVotes() { + return this.votes; + } + + public void setVotes(int votes) { + this.votes = votes; + } + + public String getTimestamp() { + return this.timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + +} diff --git a/src/main/java/osu/serverlist/Sites/Models/ServerHelper.java b/src/main/java/osu/serverlist/Sites/Models/ServerHelper.java index c52cff3..1b00789 100644 --- a/src/main/java/osu/serverlist/Sites/Models/ServerHelper.java +++ b/src/main/java/osu/serverlist/Sites/Models/ServerHelper.java @@ -12,4 +12,5 @@ public static String repairLogo(String logo) { return Api.configObj.getDomain() + logo; } } + }