Skip to content

Commit deedcad

Browse files
committed
basic adding / removing / listing via uuid, auth via bearer_token config var
1 parent e847cec commit deedcad

5 files changed

Lines changed: 91 additions & 2 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Whitelist HTTP API
22

3-
Enable whitelist management from an exposed HTTP endpoint
3+
Enable Minecraft whitelist management from an exposed HTTP endpoint
44

55
_wip_

pom.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,5 +107,20 @@
107107
<version>${kotlin.version}</version>
108108
<scope>test</scope>
109109
</dependency>
110+
<dependency>
111+
<groupId>io.javalin</groupId>
112+
<artifactId>javalin</artifactId>
113+
<version>3.4.1</version>
114+
</dependency>
115+
<dependency>
116+
<groupId>com.fasterxml.jackson.core</groupId>
117+
<artifactId>jackson-databind</artifactId>
118+
<version>2.10.0.pr1</version>
119+
</dependency>
120+
<dependency>
121+
<groupId>com.fasterxml.jackson.module</groupId>
122+
<artifactId>jackson-module-kotlin</artifactId>
123+
<version>2.10.0.pr1</version>
124+
</dependency>
110125
</dependencies>
111126
</project>
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.jackharrhy.whitelist
2+
3+
import io.javalin.Javalin
4+
import io.javalin.http.BadRequestResponse
5+
import io.javalin.http.UnauthorizedResponse
6+
import org.bukkit.Bukkit
7+
import java.util.*
8+
import kotlin.collections.HashSet
9+
10+
class WebServer(plugin: Whitelist, bearerToken: String) {
11+
private data class User(val uuid: UUID)
12+
13+
init {
14+
val port = 7500
15+
16+
val classLoader = Thread.currentThread().contextClassLoader
17+
Thread.currentThread().contextClassLoader = Whitelist::class.java.classLoader
18+
val app = Javalin.create().start(port)
19+
Thread.currentThread().contextClassLoader = classLoader
20+
21+
app.before { ctx ->
22+
val auth = ctx.header("authorization")
23+
24+
if (auth.isNullOrBlank()) {
25+
throw UnauthorizedResponse()
26+
} else {
27+
if (!(auth.startsWith("WHA") && auth.endsWith(bearerToken))) {
28+
throw UnauthorizedResponse("Invalid Token")
29+
}
30+
}
31+
}
32+
33+
app.get("/") { ctx ->
34+
val players = HashSet<UUID>()
35+
for (player in Bukkit.getWhitelistedPlayers()) {
36+
players.add(player.uniqueId)
37+
}
38+
ctx.json(players)
39+
}
40+
41+
app.post("/") { ctx ->
42+
val uuid = ctx.body<User>().uuid
43+
val player = Bukkit.getOfflinePlayer(uuid)
44+
if (player.isWhitelisted) {
45+
throw BadRequestResponse("Already whitelisted!")
46+
} else {
47+
player.isWhitelisted = true
48+
ctx.status(201).result("")
49+
}
50+
}
51+
52+
app.delete("/") { ctx ->
53+
val uuid = ctx.body<User>().uuid
54+
val player = Bukkit.getOfflinePlayer(uuid)
55+
if (player.isWhitelisted) {
56+
player.isWhitelisted = false
57+
ctx.status(201).result("")
58+
} else {
59+
throw BadRequestResponse("Not whitelisted!")
60+
}
61+
}
62+
63+
plugin.logger.info("WebServer now running on port $port")
64+
}
65+
}

src/main/kotlin/com/jackharrhy/whitelist/Whitelist.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,17 @@ import org.bukkit.plugin.java.JavaPlugin
55
class Whitelist : JavaPlugin() {
66
override fun onEnable() {
77
logger.info(description.name + " has been enabled")
8+
9+
this.saveDefaultConfig()
10+
val bearerToken = this.config.getString("bearer_token")
11+
if (bearerToken.isNullOrEmpty() || bearerToken.equals("unset")) {
12+
logger.warning("bearer_token is unset, plugin useless!")
13+
} else {
14+
WebServer(this, bearerToken)
15+
}
816
}
917

1018
override fun onDisable() {
11-
logger.info(description.name + " has been enabled")
19+
logger.info(description.name + " has been disabled")
1220
}
1321
}

src/main/resources/config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
bearer_token: unset

0 commit comments

Comments
 (0)