Compare commits

16 Commits
2.5.2 ... main

Author SHA1 Message Date
7b7c5e7251 README.md aktualisiert 2026-01-08 15:14:20 +00:00
afa02ef721 Dateien nach "assets/css" hochladen 2026-01-08 15:11:16 +00:00
d4cfc5cbf3 Dateien nach "assets/js" hochladen 2026-01-08 15:11:01 +00:00
9ef317e3ac Dateien nach "includes" hochladen 2026-01-08 15:10:31 +00:00
66ca7919a1 Dateien nach "/" hochladen 2026-01-08 15:09:55 +00:00
80838c3611 mc-multiserver-gallery/assets/js/gallery-pro.js gelöscht 2026-01-08 15:09:38 +00:00
5d6e49e0b6 mc-multiserver-gallery/assets/css/gallery-pro.css gelöscht 2026-01-08 15:09:32 +00:00
c64e277fe6 mc-multiserver-gallery/includes/class-mc-gallery-core.php gelöscht 2026-01-08 15:09:20 +00:00
a16bd5e911 mc-multiserver-gallery/includes/class-mc-gallery-helpers.php gelöscht 2026-01-08 15:09:16 +00:00
824e5a3324 mc-multiserver-gallery/includes/class-mc-gallery-shortcodes.php gelöscht 2026-01-08 15:09:12 +00:00
2160c11c66 mc-multiserver-gallery/mc-multiserver-gallery-pro.php gelöscht 2026-01-08 15:09:05 +00:00
bab8e406a2 README.md aktualisiert 2026-01-08 14:27:38 +00:00
2572ce610e Verify/src/main/resources/config.yml gelöscht 2026-01-08 14:25:18 +00:00
7019c7731f Verify/src/main/resources/plugin.yml gelöscht 2026-01-08 14:25:14 +00:00
e55126c266 Verify/src/main/java/de/mviper/verify/Verify.java gelöscht 2026-01-08 14:25:09 +00:00
cc6d7577ea Verify/pom.xml gelöscht 2026-01-08 14:25:02 +00:00
11 changed files with 13 additions and 218 deletions

View File

@@ -20,7 +20,7 @@ Ein Spieler kann nicht einfach auf "Hochladen" klicken und Bilder laden. Er muss
3. Er muss diesen Code auf dem Minecraft-Server im Chat eingeben (z.B. `/verify [Code]`).
4. Erst dann wird der Upload freigeschaltet.
Dies stellt sicher, dass niemand unter dem Namen eines anderen Spieler Bilder hochlädt.
Dies stellt sicher, dass niemand unter dem Namen eines anderen Spielers Bilder hochlädt.
---
@@ -111,7 +111,7 @@ Erstellt eine dedizierte Seite für einen spezifischen Spieler. Dies ist nützli
**Code:** `[mc_gallery_all_albums]`
Zeigt eine Übersicht aller ersterten Alben an (unabhängig von den einzelnen Bildern). Jedes Album wird als Karte mit einem Titel und einer Vorschau angezeigt. Ideal, um sich einen schnellen Überblick über die Sammlungen zu verschaffen.
Zeigt eine Übersicht aller erstellten Alben an (unabhängig von den einzelnen Bildern). Jedes Album wird als Karte mit einem Titel und einer Vorschau angezeigt. Ideal, um sich einen schnellen Überblick über die Sammlungen zu verschaffen.
**Beispiel:**
```
@@ -128,10 +128,20 @@ Zeigt eine Übersicht aller ersterten Alben an (unabhängig von den einzelnen Bi
---
## 🔗 Voraussetzungen
Für die Verifizierungsfunktion wird die **StatusAPI** benötigt:
**[StatusAPI auf Git](https://git.viper.ipv64.net/M_Viper/StatusAPI)**
Die StatusAPI muss auf deinem Minecraft-Bungeecord laufen, um die Kommunikation zwischen dem Minecraft-Server und dem WordPress-Plugin zu ermöglichen.
---
## Häufige Fragen (FAQ)
**F: Warum können sich Spieler nicht verifizieren?**
A: Du musst sicherstellen, dass auf deinem Minecraft-Server ein Plugin läuft, das mit diesem WordPress-Plugin kommunizieren kann. Der Server muss den Befehl `/verify` entgegennehmen und an deine WordPress-Website melden.
A: Du musst sicherstellen, dass auf deinem Minecraft-Bungeecord die [StatusAPI](https://git.viper.ipv64.net/M_Viper/StatusAPI) läuft, die mit diesem WordPress-Plugin kommunizieren kann. Der Server muss den Befehl `/verify` entgegennehmen und an deine WordPress-Website melden.
**F: Wo finde ich die Server ID?**
A: Gehe im WordPress Dashboard auf "MC Gallery PRO" > "MC Server". Die ID ist die Zahl, die in der URL steht, wenn du einen Server bearbeitest (z.B. `post.php?post=15&action=edit` → ID ist 15).

View File

@@ -1,54 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.mviper</groupId>
<artifactId>Verify</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>Verify</name>
<properties>
<java.version>17</java.version>
<spigot.version>1.20.1-R0.1-SNAPSHOT</spigot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>${spigot.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<mainClass>de.mviper.verify.Verify</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -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");
}
}

View File

@@ -1,8 +0,0 @@
# URL deiner WordPress-Seite (ohne Slash am Ende)
wp_verify_url: "https://deine-wp-domain.tld"
# Shared Secret — muss identisch sein mit dem Secret im WordPress Server-CPT
shared_secret: "TrageHierDasSecretEin"
# server_id: die Post-ID des mc_server-Posts in der jeweiligen WordPress-Installation
server_id: 1

View File

@@ -1,7 +0,0 @@
name: Verify
main: de.mviper.verify.Verify
version: 1.0
api-version: 1.20
commands:
verify:
description: Verifiziere ein Website-Token (Usage /verify <token>)