diff --git a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/VaroApi.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/VaroApi.java similarity index 95% rename from varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/VaroApi.java rename to common/src/main/java/eu/mhsl/craftattack/spawn/common/api/VaroApi.java index 7a445db..9a93cdf 100644 --- a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/VaroApi.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/VaroApi.java @@ -1,4 +1,4 @@ -package eu.mhsl.craftattack.spawn.varo.api; +package eu.mhsl.craftattack.spawn.common.api; import eu.mhsl.craftattack.spawn.core.config.Configuration; import org.bukkit.configuration.ConfigurationSection; diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/CraftAttackReportRepository.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/CraftAttackReportRepository.java new file mode 100644 index 0000000..e2bc7b7 --- /dev/null +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/CraftAttackReportRepository.java @@ -0,0 +1,27 @@ +package eu.mhsl.craftattack.spawn.common.api.repositories; + +import eu.mhsl.craftattack.spawn.core.api.client.ReqResp; +import eu.mhsl.craftattack.spawn.common.api.CraftAttackApi; +import java.util.UUID; + +public class CraftAttackReportRepository extends ReportRepository { + public CraftAttackReportRepository() { + super(CraftAttackApi.getBaseUri(), new RequestModifier(CraftAttackApi::withAuthorizationSecret, null)); + } + + public ReqResp queryReports(UUID player) { + return this.get( + "report", + (parameters) -> parameters.addParameter("uuid", player.toString()), + PlayerReports.class + ); + } + + public ReqResp createReport(ReportCreationInfo data) { + return this.post( + "report", + data, + ReportUrl.class + ); + } +} diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java index f885df0..4ed05cb 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java @@ -1,17 +1,18 @@ package eu.mhsl.craftattack.spawn.common.api.repositories; import eu.mhsl.craftattack.spawn.core.api.client.HttpRepository; -import eu.mhsl.craftattack.spawn.core.api.client.ReqResp; -import eu.mhsl.craftattack.spawn.common.api.CraftAttackApi; +import eu.mhsl.craftattack.spawn.core.api.client.RepositoryLoader; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.net.URI; import java.util.List; import java.util.UUID; -public class ReportRepository extends HttpRepository { - public ReportRepository() { - super(CraftAttackApi.getBaseUri(), new RequestModifier(CraftAttackApi::withAuthorizationSecret, null)); +@RepositoryLoader.Abstraction +public abstract class ReportRepository extends HttpRepository { + public ReportRepository(URI basePath, RequestModifier... baseRequestModifier) { + super(basePath, baseRequestModifier); } public record ReportCreationInfo(@NotNull UUID reporter, @Nullable UUID reported, String reason) { @@ -38,20 +39,4 @@ public class ReportRepository extends HttpRepository { } } } - - public ReqResp queryReports(UUID player) { - return this.get( - "report", - (parameters) -> parameters.addParameter("uuid", player.toString()), - PlayerReports.class - ); - } - - public ReqResp createReport(ReportCreationInfo data) { - return this.post( - "report", - data, - ReportUrl.class - ); - } } diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/VaroReportRepository.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/VaroReportRepository.java new file mode 100644 index 0000000..8db4e4a --- /dev/null +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/VaroReportRepository.java @@ -0,0 +1,45 @@ +package eu.mhsl.craftattack.spawn.common.api.repositories; + +import eu.mhsl.craftattack.spawn.common.api.VaroApi; +import eu.mhsl.craftattack.spawn.core.api.client.ReqResp; +import org.apache.commons.lang3.NotImplementedException; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.UUID; + +public class VaroReportRepository extends ReportRepository { + public VaroReportRepository() { + super(VaroApi.getBaseUri(), new RequestModifier(null, VaroApi::authorizationHeader)); + } + + public ReqResp queryReports(UUID player) { + throw new NotImplementedException("Report querying is not supported in Varo!"); + } + + public ReqResp createReport(ReportCreationInfo data) { + return this.post( + "report", + data, + ReportUrl.class + ); + } + + public record StrikeCreationInfo( + @Nullable UUID reporter, // null for automatic creations + @NotNull UUID reported, + @NotNull String reason, + @Nullable String body, + @Nullable String notice, + @Nullable String statement, + int strike_reason_id // internal strike mapping + ) { + } + public ReqResp createStrike(StrikeCreationInfo data) { + return this.put( + "report", + data, + Void.class + ); + } +} diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java index 3329d70..499a33f 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java @@ -1,8 +1,10 @@ package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report; +import eu.mhsl.craftattack.spawn.common.api.repositories.ReportRepository; +import eu.mhsl.craftattack.spawn.common.api.repositories.VaroReportRepository; import eu.mhsl.craftattack.spawn.core.Main; import eu.mhsl.craftattack.spawn.core.api.client.ReqResp; -import eu.mhsl.craftattack.spawn.common.api.repositories.ReportRepository; +import eu.mhsl.craftattack.spawn.common.api.repositories.CraftAttackReportRepository; import eu.mhsl.craftattack.spawn.core.appliance.Appliance; import eu.mhsl.craftattack.spawn.core.appliance.ApplianceCommand; import net.kyori.adventure.text.Component; @@ -36,7 +38,7 @@ public class Report extends Appliance { } public void reportToUnknown(@NotNull Player issuer) { - ReportRepository.ReportCreationInfo request = new ReportRepository.ReportCreationInfo(issuer.getUniqueId(), null, ""); + CraftAttackReportRepository.ReportCreationInfo request = new CraftAttackReportRepository.ReportCreationInfo(issuer.getUniqueId(), null, ""); Bukkit.getScheduler().runTaskAsynchronously( Main.instance(), () -> this.createReport(issuer, request) @@ -62,10 +64,11 @@ public class Report extends Appliance { } private void createReport(Player issuer, ReportRepository.ReportCreationInfo reportRequest) { - ReqResp createdReport = this.queryRepository(ReportRepository.class) + ReqResp createdReport = this.queryRepository(VaroReportRepository.class) .createReport(reportRequest); switch(createdReport.status()) { + case 200: // varo-endpoint specific case 201: issuer.sendMessage( Component.text() @@ -112,7 +115,7 @@ public class Report extends Appliance { } public void queryReports(Player issuer) { - ReqResp userReports = this.queryRepository(ReportRepository.class) + ReqResp userReports = this.queryRepository(VaroReportRepository.class) .queryReports(issuer.getUniqueId()); if(userReports.status() != 200) { diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/HttpRepository.java b/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/HttpRepository.java index ebf8a94..502f2f4 100644 --- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/HttpRepository.java +++ b/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/HttpRepository.java @@ -48,6 +48,19 @@ public abstract class HttpRepository extends Repository { return this.execute(request, outputType); } + protected ReqResp put(String command, TInput data, Class outputType) { + return this.put(command, parameters -> { + }, data, outputType); + } + + protected ReqResp put(String command, Consumer parameters, TInput data, Class outputType) { + HttpRequest request = this.getRequestBuilder(this.getUri(command, parameters)) + .PUT(HttpRequest.BodyPublishers.ofString(this.gson.toJson(data))) + .build(); + + return this.execute(request, outputType); + } + protected ReqResp get(String command, Class outputType) { return this.get(command, parameters -> { }, outputType); diff --git a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/TeamRepository.java b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/TeamRepository.java index e4b414f..9208ea2 100644 --- a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/TeamRepository.java +++ b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/TeamRepository.java @@ -3,7 +3,7 @@ package eu.mhsl.craftattack.spawn.varo.api.repositories; import com.google.common.reflect.TypeToken; import eu.mhsl.craftattack.spawn.core.api.client.HttpRepository; import eu.mhsl.craftattack.spawn.core.api.client.ReqResp; -import eu.mhsl.craftattack.spawn.varo.api.VaroApi; +import eu.mhsl.craftattack.spawn.common.api.VaroApi; import java.util.List; import java.util.UUID; diff --git a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/VaroPlayerRepository.java b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/VaroPlayerRepository.java index 58aa882..7f8b750 100644 --- a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/VaroPlayerRepository.java +++ b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/VaroPlayerRepository.java @@ -2,7 +2,7 @@ package eu.mhsl.craftattack.spawn.varo.api.repositories; import eu.mhsl.craftattack.spawn.core.api.client.HttpRepository; import eu.mhsl.craftattack.spawn.core.api.client.ReqResp; -import eu.mhsl.craftattack.spawn.varo.api.VaroApi; +import eu.mhsl.craftattack.spawn.common.api.VaroApi; import org.jetbrains.annotations.Nullable; import java.util.UUID;