Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
<dependency>
<groupId>io.javalin</groupId>
<artifactId>javalin</artifactId>
<version>6.7.0</version>
<version>7.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
Expand Down
221 changes: 0 additions & 221 deletions src/main/java/pro/cloudnode/smp/smpcore/REST.java

This file was deleted.

5 changes: 3 additions & 2 deletions src/main/java/pro/cloudnode/smp/smpcore/SMPCore.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import pro.cloudnode.smp.smpcore.api.REST;
import pro.cloudnode.smp.smpcore.command.AltsCommand;
import pro.cloudnode.smp.smpcore.command.BanCommand;
import pro.cloudnode.smp.smpcore.command.CitizensCommand;
Expand Down Expand Up @@ -112,7 +113,7 @@ public void onDisable() {
getLogger().log(Level.SEVERE, "failed to close db connection", e);
}
db.close();
if (rest != null) rest.javalin.stop();
if (rest != null) rest.stop();
}

public void reload() {
Expand All @@ -121,7 +122,7 @@ public void reload() {
if (messages != null) messages.reload();
setupDatabase();
Member.createStaffTeam();
if (rest != null) rest.javalin.stop();
if (rest != null) rest.stop();
rest = new REST(config.apiPort());
}

Expand Down
80 changes: 80 additions & 0 deletions src/main/java/pro/cloudnode/smp/smpcore/api/REST.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package pro.cloudnode.smp.smpcore.api;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import io.javalin.Javalin;
import io.javalin.config.JavalinConfig;
import io.javalin.http.Context;
import io.javalin.json.JsonMapper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import pro.cloudnode.smp.smpcore.SMPCore;
import pro.cloudnode.smp.smpcore.api.routes.Members;
import pro.cloudnode.smp.smpcore.api.routes.Nations;

import java.lang.reflect.Type;

public class REST {
private final @NotNull Javalin javalin;

public REST(final int port) {
javalin = Javalin.create(config -> {
config.jsonMapper(new Mapper());
}).start(port);
}

private static void info(final @NotNull Context ctx) {
final @NotNull JsonObject obj = new JsonObject();
obj.addProperty("version", SMPCore.getInstance().getPluginMeta().getVersion());
obj.addProperty("time", SMPCore.gameTime().getTime());
ctx.json(obj);
}

public void stop() {
javalin.stop();
}

private void configureRoutes(final @NotNull JavalinConfig config) {
config.routes.before(ctx -> {
final @Nullable String origin = ctx.header("Origin");
ctx.header("Access-Control-Allow-Origin", origin == null ? "*" : origin);

Check warning on line 41 in src/main/java/pro/cloudnode/smp/smpcore/api/REST.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

src/main/java/pro/cloudnode/smp/smpcore/api/REST.java#L41

The String "*" appears 2 times in the file.
ctx.header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
ctx.header("Access-Control-Allow-Headers", "*");
ctx.header("Access-Control-Allow-Credentials", "true");
ctx.header("Access-Control-Max-Age", "3600");
});


config.routes.get("/", REST::info);

final var members = new Members(this);
config.routes.get("/members", members::list);
config.routes.get("/members/{uuid}", members::get);

final var nations = new Nations(this);
config.routes.get("/nations", nations::list);
config.routes.get("/nations/{id}", nations::get);
}

public void e404(final @NotNull Context ctx) {
ctx.status(404);
final @NotNull JsonObject obj = new JsonObject();
obj.addProperty("error", "not found");
ctx.json(obj);
}

public static final class Mapper implements JsonMapper {
private final @NotNull Gson gson = new GsonBuilder().serializeNulls().create();

@Override
public @NotNull String toJsonString(final @NotNull Object obj, final @NotNull Type type) {
return gson.toJson(obj, type);
}

@Override
public <T> @NotNull T fromJsonString(final @NotNull String json, final @NotNull Type targetType) {
return gson.fromJson(json, targetType);
}
}
}
Loading
Loading