Verify/src/main/java/de/mviper/verify/Verify.java gelöscht
This commit is contained in:
@@ -1,146 +0,0 @@
|
|||||||
package de.mviper.verify;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
|
|
||||||
import javax.crypto.Mac;
|
|
||||||
import javax.crypto.spec.SecretKeySpec;
|
|
||||||
import java.net.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.nio.charset.Charset;
|
|
||||||
|
|
||||||
public class Verify extends JavaPlugin implements CommandExecutor {
|
|
||||||
|
|
||||||
private String wpVerifyUrl;
|
|
||||||
private String sharedSecret;
|
|
||||||
private int serverId;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEnable() {
|
|
||||||
saveDefaultConfig();
|
|
||||||
wpVerifyUrl = getConfig().getString("wp_verify_url", "http://deine-wp-domain.tld");
|
|
||||||
sharedSecret = getConfig().getString("shared_secret", "ChangeMe");
|
|
||||||
serverId = getConfig().getInt("server_id", 0);
|
|
||||||
getCommand("verify").setExecutor(this);
|
|
||||||
getLogger().info("Verify enabled for server ID: " + serverId + " | WP URL: " + wpVerifyUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Nur Spieler können diesen Befehl benutzen.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Player p = (Player) sender;
|
|
||||||
if (args.length != 1) {
|
|
||||||
p.sendMessage(ChatColor.YELLOW + "Benutzung: /verify <token>");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
String token = args[0].trim();
|
|
||||||
String playerName = p.getName();
|
|
||||||
|
|
||||||
HttpURLConnection conn = null;
|
|
||||||
try {
|
|
||||||
// FIX: Explizit UTF-8 für die Signatur
|
|
||||||
Charset utf8 = Charset.forName("UTF-8");
|
|
||||||
String signature = hmacSHA256(playerName + token, sharedSecret, utf8);
|
|
||||||
|
|
||||||
// FIX: Explizit UTF-8 für den Payload
|
|
||||||
String payload = "{\"player\":\"" + escapeJson(playerName) + "\",\"token\":\"" + escapeJson(token) + "\",\"server_id\":" + serverId + ",\"signature\":\"" + signature + "\"}";
|
|
||||||
|
|
||||||
URL url = new URL(wpVerifyUrl + "/wp-json/mc-gallery/v1/verify");
|
|
||||||
conn = (HttpURLConnection) url.openConnection();
|
|
||||||
conn.setConnectTimeout(5000);
|
|
||||||
conn.setReadTimeout(7000);
|
|
||||||
conn.setDoOutput(true);
|
|
||||||
conn.setRequestMethod("POST");
|
|
||||||
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
|
|
||||||
|
|
||||||
try (OutputStream os = conn.getOutputStream()) {
|
|
||||||
os.write(payload.getBytes(utf8));
|
|
||||||
}
|
|
||||||
|
|
||||||
int code = conn.getResponseCode();
|
|
||||||
String resp;
|
|
||||||
|
|
||||||
// FIX: Antwort immer als UTF-8 lesen, egal ob 200 oder 403
|
|
||||||
if (code >= 200 && code < 300) {
|
|
||||||
InputStream is = conn.getInputStream();
|
|
||||||
resp = streamToString(is, utf8);
|
|
||||||
} else {
|
|
||||||
InputStream es = conn.getErrorStream();
|
|
||||||
resp = streamToString(es, utf8);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Antwort parsen
|
|
||||||
if (resp != null && !resp.isEmpty() && resp.trim().startsWith("{")) {
|
|
||||||
// Erfolgreiche Übertragung, nun JSON parsen
|
|
||||||
|
|
||||||
// Checken ob success true ist
|
|
||||||
boolean isSuccess = resp.contains("\"success\":true");
|
|
||||||
|
|
||||||
// Die message auslesen
|
|
||||||
String message = "Ein unbekannter Fehler ist aufgetreten.";
|
|
||||||
int keyIndex = resp.indexOf("\"message\":\"");
|
|
||||||
if (keyIndex != -1) {
|
|
||||||
int startIndex = keyIndex + 11;
|
|
||||||
int endIndex = resp.indexOf("\"", startIndex);
|
|
||||||
if (endIndex != -1) {
|
|
||||||
message = resp.substring(startIndex, endIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Nachricht senden (mit Farbcodes)
|
|
||||||
if (isSuccess) {
|
|
||||||
p.sendMessage(ChatColor.GREEN + "✓ " + message);
|
|
||||||
p.sendMessage(ChatColor.GRAY + "Du kannst nun Bilder hochladen!");
|
|
||||||
} else {
|
|
||||||
// Hier landen Fehler wie "Name stimmt nicht überein" oder 403
|
|
||||||
// Durch die UTF-8 Lesung sollten Umlaute jetzt korrekt sein
|
|
||||||
p.sendMessage(ChatColor.RED + "✗ " + message);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.sendMessage(ChatColor.RED + "✗ Fehler beim Verbinden mit der Webseite (Code: " + code + ")");
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
p.sendMessage(ChatColor.RED + "✗ Ein interner Fehler ist aufgetreten.");
|
|
||||||
getLogger().warning("Verify error: " + ex.getMessage());
|
|
||||||
ex.printStackTrace();
|
|
||||||
} finally {
|
|
||||||
if (conn != null) {
|
|
||||||
conn.disconnect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIX: UTF-8 als Parameter übergeben
|
|
||||||
private static String hmacSHA256(String data, String key, Charset charset) throws Exception {
|
|
||||||
Mac mac = Mac.getInstance("HmacSHA256");
|
|
||||||
mac.init(new SecretKeySpec(key.getBytes(charset), "HmacSHA256"));
|
|
||||||
byte[] raw = mac.doFinal(data.getBytes(charset));
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
for (byte b : raw) sb.append(String.format("%02x", b));
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIX: UTF-8 als Parameter übergeben
|
|
||||||
private static String streamToString(InputStream in, Charset charset) throws IOException {
|
|
||||||
if (in == null) return "";
|
|
||||||
try (BufferedReader br = new BufferedReader(new InputStreamReader(in, charset))) {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
String line;
|
|
||||||
while ((line = br.readLine()) != null) sb.append(line);
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String escapeJson(String s) {
|
|
||||||
return s.replace("\\", "\\\\").replace("\"","\\\"").replace("\n","\\n").replace("\r","\\r");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user