113 lines
4.4 KiB
Java
113 lines
4.4 KiB
Java
package fi.flexplex.connect;
|
|
|
|
import java.io.DataOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.URL;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
import java.util.UUID;
|
|
|
|
import com.google.gson.JsonArray;
|
|
import com.google.gson.JsonObject;
|
|
import com.google.gson.JsonParser;
|
|
|
|
import org.bukkit.OfflinePlayer;
|
|
|
|
public final class FlexPlexGraphQLApi {
|
|
|
|
private final String graphqlEndpoint;
|
|
private final FlexConnect flexConnect;
|
|
|
|
public FlexPlexGraphQLApi(final FlexConnect flexConnect, final String graphQLEndpoint) {
|
|
this.flexConnect = flexConnect;
|
|
this.graphqlEndpoint = graphQLEndpoint;
|
|
}
|
|
|
|
public Set<String> getProxyAddresses() {
|
|
final Set<String> output = new HashSet<>();
|
|
try {
|
|
final URL url = new URL(graphqlEndpoint);
|
|
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
|
conn.setDoOutput(true);
|
|
conn.setDoInput(true);
|
|
conn.setConnectTimeout(10000);
|
|
conn.setReadTimeout(10000);
|
|
conn.setRequestMethod("POST");
|
|
conn.setRequestProperty("Content-Type", "application/json");
|
|
|
|
final DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
|
|
|
|
wr.writeBytes("{\"query\":\"query { proxyAddresses }\"}");
|
|
wr.flush();
|
|
wr.close();
|
|
|
|
final JsonObject response = (JsonObject) new JsonParser().parse(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
|
|
|
|
if (response.get("data").getAsJsonObject().has("proxyAddresses")) {
|
|
final JsonArray array = response.get("data").getAsJsonObject().get("proxyAddresses").getAsJsonArray();
|
|
for (int i = 0; i < array.size(); i++) {
|
|
output.add(array.get(i).getAsString());
|
|
}
|
|
}
|
|
|
|
conn.disconnect();
|
|
} catch (final IOException e) {
|
|
this.flexConnect.getLogger().warning("Updating whitelist data failed, propably connection to FlexPlex API server is down.");
|
|
}
|
|
return output;
|
|
}
|
|
|
|
public void updateWhitelist() {
|
|
this.updateWhitelist(this.flexConnect.getServer().hasWhitelist());
|
|
}
|
|
|
|
public void updateWhitelist(final boolean whitelistEnabled) {
|
|
final Set<UUID> whitelist = new HashSet<>();
|
|
for (final OfflinePlayer player : this.flexConnect.getServer().getWhitelistedPlayers()) {
|
|
whitelist.add(player.getUniqueId());
|
|
}
|
|
for (final OfflinePlayer player : this.flexConnect.getServer().getOperators()) {
|
|
whitelist.add(player.getUniqueId());
|
|
}
|
|
this.updateWhitelist(whitelistEnabled, whitelist);
|
|
}
|
|
|
|
private void updateWhitelist(final boolean whitelistEnabled, final Set<UUID> whitelist) {
|
|
final StringBuilder whitelistString = new StringBuilder(" ");
|
|
for (final UUID uuid : whitelist) {
|
|
whitelistString.append("\\\"" + uuid.toString() + "\\\" ");
|
|
}
|
|
|
|
try {
|
|
final URL url = new URL(graphqlEndpoint);
|
|
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
|
conn.setDoOutput(true);
|
|
conn.setDoInput(true);
|
|
conn.setConnectTimeout(10000);
|
|
conn.setReadTimeout(10000);
|
|
conn.setRequestMethod("POST");
|
|
conn.setRequestProperty("Content-Type", "application/json");
|
|
|
|
final DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
|
|
|
|
wr.writeBytes("{\"query\":\"mutation { updateCommunityServerWhitelist ( token: \\\"" + this.flexConnect.getToken() + "\\\" enabled: " + whitelistEnabled + " whitelist: [" + whitelistString + "] )}\"}");
|
|
wr.flush();
|
|
wr.close();
|
|
|
|
final JsonObject response = (JsonObject) new JsonParser().parse(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
|
|
|
|
if (!response.get("data").getAsJsonObject().get("updateCommunityServerWhitelist").getAsBoolean()) {
|
|
this.flexConnect.getLogger().warning("Updating whitelist data failed, propably invalid token.");
|
|
}
|
|
|
|
conn.disconnect();
|
|
} catch (final IOException e) {
|
|
this.flexConnect.getLogger().warning("Updating whitelist data failed, propably connection to FlexPlex API server is down.");
|
|
}
|
|
}
|
|
|
|
}
|