Added Whitelist checks
This commit is contained in:
parent
b72a5947b4
commit
0ea9738867
@ -24,7 +24,7 @@ repositories {
|
|||||||
dependencies {
|
dependencies {
|
||||||
compileOnly "io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT"
|
compileOnly "io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT"
|
||||||
compileOnly 'org.geysermc.floodgate:api:2.2.2-SNAPSHOT'
|
compileOnly 'org.geysermc.floodgate:api:2.2.2-SNAPSHOT'
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
|
compileOnly 'org.apache.httpcomponents:httpclient:4.5.14'
|
||||||
}
|
}
|
||||||
|
|
||||||
def targetJavaVersion = 17
|
def targetJavaVersion = 17
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.whitelist;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class LoginException extends Exception {
|
||||||
|
public String title;
|
||||||
|
public String error;
|
||||||
|
public UUID user;
|
||||||
|
public String solution;
|
||||||
|
|
||||||
|
public LoginException(String title, String error, UUID user, String solution) {
|
||||||
|
super(error);
|
||||||
|
this.title = title;
|
||||||
|
this.error = error;
|
||||||
|
this.user = user;
|
||||||
|
this.solution = solution;
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,27 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.whitelist;
|
package eu.mhsl.craftattack.spawn.appliances.whitelist;
|
||||||
|
|
||||||
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||||
|
|
||||||
public class PlayerJoinListener extends ApplianceListener<Whitelist> {
|
public class PlayerJoinListener extends ApplianceListener<Whitelist> {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void preLoginEvent(AsyncPlayerPreLoginEvent preLoginEvent) {
|
public void preLoginEvent(AsyncPlayerPreLoginEvent preLoginEvent) {
|
||||||
|
try {
|
||||||
|
getAppliance().login(preLoginEvent);
|
||||||
|
} catch (LoginException e) {
|
||||||
|
preLoginEvent.disallow(
|
||||||
|
AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST,
|
||||||
|
Component.text()
|
||||||
|
.appendNewline().appendNewline()
|
||||||
|
.append(Component.text(e.title, NamedTextColor.DARK_RED)).appendNewline()
|
||||||
|
.append(Component.text(e.error, NamedTextColor.RED)).appendNewline().appendNewline()
|
||||||
|
.append(Component.text(e.solution, NamedTextColor.GRAY)).appendNewline().appendNewline()
|
||||||
|
.append(Component.text(e.user.toString(), NamedTextColor.DARK_GRAY)).appendNewline()
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,83 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.whitelist;
|
package eu.mhsl.craftattack.spawn.appliances.whitelist;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
|
import org.apache.http.client.utils.URIBuilder;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.http.HttpClient;
|
||||||
|
import java.net.http.HttpRequest;
|
||||||
|
import java.net.http.HttpResponse;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public class Whitelist extends Appliance {
|
public class Whitelist extends Appliance {
|
||||||
|
private record UserData(UUID uuid, String username, String firstname, String lastname) {}
|
||||||
|
|
||||||
|
private final URI apiEndpoint = URI.create(Objects.requireNonNull(localConfig().getString("api")));
|
||||||
|
|
||||||
|
public Whitelist() {
|
||||||
|
super("whitelist");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void login(AsyncPlayerPreLoginEvent login) throws LoginException {
|
||||||
|
try {
|
||||||
|
UserData data = this.fetchUserData(login.getUniqueId());
|
||||||
|
|
||||||
|
if(!data.username.equalsIgnoreCase(login.getName()))
|
||||||
|
throw new LoginException(
|
||||||
|
"Nutzername geändert",
|
||||||
|
String.format("Der Name '%s' stimmt nicht mit '%s' überein.", data.username, login.getName()),
|
||||||
|
login.getUniqueId(),
|
||||||
|
"Bitte kontaktiere einen Admin, um Deine Anmeldedaten zu aktualisieren!"
|
||||||
|
);
|
||||||
|
|
||||||
|
} catch (LoginException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new LoginException(
|
||||||
|
"Interner Serverfehler",
|
||||||
|
"Deine Zugangsdaten konnten nicht abgerufen werden.",
|
||||||
|
login.getUniqueId(),
|
||||||
|
"Versuche es später erneut oder kontaktiere einen Admin!"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private UserData fetchUserData(UUID uuid) throws LoginException {
|
||||||
|
URIBuilder uriBuilder = new URIBuilder(apiEndpoint);
|
||||||
|
uriBuilder.addParameter("uuid", uuid.toString());
|
||||||
|
|
||||||
|
try {
|
||||||
|
HttpClient client = HttpClient.newHttpClient();
|
||||||
|
HttpRequest httpRequest = HttpRequest.newBuilder()
|
||||||
|
.uri(uriBuilder.build())
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.GET()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
|
if(httpResponse.statusCode() == 400)
|
||||||
|
throw new LoginException(
|
||||||
|
"Nicht angemeldet",
|
||||||
|
"Du bist derzeit nicht als Teilnehmer des CraftAttack-Projektes registriert!",
|
||||||
|
uuid,
|
||||||
|
"Melde Dich bei einem Admin für eine nachträgliche Anmeldung."
|
||||||
|
);
|
||||||
|
|
||||||
|
return new Gson().fromJson(httpResponse.body(), UserData.class);
|
||||||
|
|
||||||
|
} catch (IOException | InterruptedException | URISyntaxException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected @NotNull List<Listener> eventHandlers() {
|
protected @NotNull List<Listener> eventHandlers() {
|
||||||
|
@ -21,7 +21,7 @@ countdown:
|
|||||||
worldborder-after: 0
|
worldborder-after: 0
|
||||||
|
|
||||||
report:
|
report:
|
||||||
api: https://mhsl.eu/craftattack/report
|
api: https://mhsl.eu/craftattack/api/report
|
||||||
|
|
||||||
event:
|
event:
|
||||||
api: http://10.20.6.5:8080/
|
api: http://10.20.6.5:8080/
|
||||||
@ -42,4 +42,7 @@ help:
|
|||||||
spawn: "Der Weltspawn befindet sich bei x:0 y:0 z:0"
|
spawn: "Der Weltspawn befindet sich bei x:0 y:0 z:0"
|
||||||
|
|
||||||
playerLimit:
|
playerLimit:
|
||||||
maxPlayers: 0
|
maxPlayers: 0
|
||||||
|
|
||||||
|
whitelist:
|
||||||
|
api: https://mhsl.eu/craftattack/api/user
|
Loading…
x
Reference in New Issue
Block a user