diff --git a/build.gradle.kts b/build.gradle.kts index da72694..fb1da0b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ import java.nio.file.Files as JFiles buildscript { repositories { mavenCentral() } - dependencies { classpath("com.github.hazendaz:htmlcompressor:1.7.2") } + dependencies { classpath("com.github.hazendaz:htmlcompressor:1.7.3") } } plugins { @@ -58,16 +58,16 @@ dependencies { implementation(kotlin("stdlib-jdk8")) implementation(kotlin("reflect")) - val vvVer = "4.1.2-SNAPSHOT" - val vbVer = "4.1.2-SNAPSHOT" + val vvVer = "4.2.0-22w03a-SNAPSHOT" + val vbVer = "4.2.0-22w03a-SNAPSHOT" val vrVer = "d8bee0a" implementation("com.viaversion:viaversion:$vvVer") { isTransitive = false } implementation("com.viaversion:viabackwards:$vbVer") { isTransitive = false } implementation("com.github.ViaVersion.ViaRewind:viarewind-all:$vrVer") { isTransitive = false } implementation("io.netty:netty-all:4.1.73.Final") - implementation("io.netty:netty-tcnative-boringssl-static:2.0.47.Final") - implementation("io.netty.incubator:netty-incubator-transport-native-io_uring:0.0.11.Final:linux-x86_64") + implementation("io.netty:netty-tcnative-boringssl-static:2.0.48.Final") + implementation("io.netty.incubator:netty-incubator-transport-native-io_uring:0.0.12.Final:linux-x86_64") implementation("com.google.guava:guava:31.0.1-jre") implementation("com.velocitypowered:velocity-native:3.1.0") @@ -76,7 +76,7 @@ dependencies { implementation("org.yaml:snakeyaml:1.30") val log4jVer = "2.17.1" - val slf4jVer = "1.7.33" + val slf4jVer = "1.7.35" implementation("net.minecrell:terminalconsoleappender:1.3.0") implementation("org.apache.logging.log4j:log4j-core:$log4jVer") implementation("org.apache.logging.log4j:log4j-iostreams:$log4jVer") @@ -85,12 +85,20 @@ dependencies { implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("org.slf4j:slf4j-api:$slf4jVer") - val ktorVersion = "1.6.7" + val ktorVersion = "2.0.0-beta-1" implementation("io.ktor:ktor-network-tls-certificates:$ktorVersion") - implementation("io.ktor:ktor-websockets:$ktorVersion") + implementation("io.ktor:ktor-server-websockets:$ktorVersion") implementation("io.ktor:ktor-server-netty:$ktorVersion") - implementation("io.ktor:ktor-client-gson:$ktorVersion") + implementation("io.ktor:ktor-server-caching-headers:$ktorVersion") + implementation("io.ktor:ktor-server-call-logging:$ktorVersion") + implementation("io.ktor:ktor-server-compression:$ktorVersion") + implementation("io.ktor:ktor-server-content-negotiation:$ktorVersion") + implementation("io.ktor:ktor-server-default-headers:$ktorVersion") + implementation("io.ktor:ktor-server-forwarded-header:$ktorVersion") + implementation("io.ktor:ktor-server-partial-content:$ktorVersion") + implementation("io.ktor:ktor-serialization-gson:$ktorVersion") implementation("io.ktor:ktor-client-java:$ktorVersion") + implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion") implementation("io.ktor:ktor-client-logging-jvm:$ktorVersion") testImplementation("io.ktor:ktor-server-test-host:$ktorVersion") diff --git a/src/main/kotlin/com/viaversion/aas/AspirinServer.kt b/src/main/kotlin/com/viaversion/aas/AspirinServer.kt index 4c953e3..021a3cd 100644 --- a/src/main/kotlin/com/viaversion/aas/AspirinServer.kt +++ b/src/main/kotlin/com/viaversion/aas/AspirinServer.kt @@ -7,17 +7,18 @@ import com.viaversion.aas.config.VIAaaSConfig import com.viaversion.aas.handler.FrontEndInit import com.viaversion.aas.handler.MinecraftHandler import com.viaversion.aas.platform.AspirinPlatform -import com.viaversion.aas.web.WebDashboardServer +import com.viaversion.aas.web.WebServer import com.viaversion.viaversion.ViaManagerImpl import com.viaversion.viaversion.api.Via import com.viaversion.viaversion.api.protocol.packet.State import com.viaversion.viaversion.update.Version import io.ktor.client.* +import io.ktor.client.call.* import io.ktor.client.engine.java.* -import io.ktor.client.features.* -import io.ktor.client.features.json.* +import io.ktor.client.plugins.* import io.ktor.client.request.* import io.ktor.network.tls.certificates.* +import io.ktor.serialization.gson.* import io.ktor.server.engine.* import io.ktor.server.netty.* import io.netty.bootstrap.ServerBootstrap @@ -41,7 +42,7 @@ object AspirinServer { .readText() ).asJsonObject["version"].asString val cleanedVer get() = version.substringBefore("+") - var viaWebServer = WebDashboardServer() + var viaWebServer = WebServer() private var serverFinishing = CompletableFuture() private var finishedFuture = CompletableFuture() private val initFuture = CompletableFuture() @@ -74,8 +75,8 @@ object AspirinServer { install(UserAgent) { agent = "VIAaaS/$cleanedVer" } - install(JsonFeature) { - serializer = GsonSerializer() + install(ContentNegotiation) { + gson() } } @@ -146,8 +147,8 @@ object AspirinServer { suspend fun updaterCheckMessage(): String { return try { - val latestData = - httpClient.get("https://api.github.com/repos/viaversion/viaaas/releases/latest") + val latestData = httpClient.get("https://api.github.com/repos/viaversion/viaaas/releases/latest") + .body() val latest = Version(latestData["tag_name"]!!.asString.removePrefix("v")) val current = Version(cleanedVer) when { diff --git a/src/main/kotlin/com/viaversion/aas/Util.kt b/src/main/kotlin/com/viaversion/aas/Util.kt index f3efa57..19b6254 100644 --- a/src/main/kotlin/com/viaversion/aas/Util.kt +++ b/src/main/kotlin/com/viaversion/aas/Util.kt @@ -9,6 +9,7 @@ import com.viaversion.aas.config.VIAaaSConfig import com.viaversion.aas.util.StacklessException import com.viaversion.viaversion.api.protocol.version.ProtocolVersion import com.viaversion.viaversion.api.type.Type +import io.ktor.client.call.* import io.ktor.client.request.* import io.ktor.server.netty.* import io.netty.buffer.ByteBuf @@ -193,7 +194,7 @@ suspend fun hasJoined(username: String, hash: String): JsonObject { AspirinServer.httpClient.get( "https://sessionserver.mojang.com/session/minecraft/hasJoined?username=" + UrlEscapers.urlFormParameterEscaper().escape(username) + "&serverId=$hash" - ) + ).body() } catch (e: Exception) { throw StacklessException("Couldn't authenticate with session servers", e) } diff --git a/src/main/kotlin/com/viaversion/aas/VIAaaS.kt b/src/main/kotlin/com/viaversion/aas/VIAaaS.kt index be1406f..5fedf66 100644 --- a/src/main/kotlin/com/viaversion/aas/VIAaaS.kt +++ b/src/main/kotlin/com/viaversion/aas/VIAaaS.kt @@ -8,7 +8,7 @@ import com.viaversion.aas.protocol.registerAspirinProtocols import com.viaversion.aas.web.ViaWebApp import com.viaversion.viaversion.api.protocol.version.ProtocolVersion import de.gerrygames.viarewind.api.ViaRewindConfigImpl -import io.ktor.application.* +import io.ktor.server.application.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/src/main/kotlin/com/viaversion/aas/codec/packet/PacketRegistry.kt b/src/main/kotlin/com/viaversion/aas/codec/packet/PacketRegistry.kt index 0dce461..579557e 100644 --- a/src/main/kotlin/com/viaversion/aas/codec/packet/PacketRegistry.kt +++ b/src/main/kotlin/com/viaversion/aas/codec/packet/PacketRegistry.kt @@ -61,7 +61,7 @@ object PacketRegistry { ProtocolVersion.v1_16..ProtocolVersion.v1_16_1 to ClientboundPackets1_16.DISCONNECT.id, ProtocolVersion.v1_16_2..ProtocolVersion.v1_16_4 to ClientboundPackets1_16_2.DISCONNECT.id, ProtocolVersion.v1_17..ProtocolVersion.v1_17_1 to ClientboundPackets1_17.DISCONNECT.id, - ProtocolVersion.v1_18.singleton to ClientboundPackets1_18.DISCONNECT.id + ProtocolVersion.v1_18..ProtocolVersion.v1_18_2 to ClientboundPackets1_18.DISCONNECT.id ) ) @@ -75,7 +75,7 @@ object PacketRegistry { ProtocolVersion.v1_16..ProtocolVersion.v1_16_1 to ClientboundPackets1_16.PLUGIN_MESSAGE.id, ProtocolVersion.v1_16_2..ProtocolVersion.v1_16_4 to ClientboundPackets1_16_2.PLUGIN_MESSAGE.id, ProtocolVersion.v1_17..ProtocolVersion.v1_17_1 to ClientboundPackets1_17.PLUGIN_MESSAGE.id, - ProtocolVersion.v1_18.singleton to ClientboundPackets1_18.PLUGIN_MESSAGE.id + ProtocolVersion.v1_18..ProtocolVersion.v1_18_2 to ClientboundPackets1_18.PLUGIN_MESSAGE.id ) ) diff --git a/src/main/kotlin/com/viaversion/aas/handler/state/LoginState.kt b/src/main/kotlin/com/viaversion/aas/handler/state/LoginState.kt index b3f4b8e..510c211 100644 --- a/src/main/kotlin/com/viaversion/aas/handler/state/LoginState.kt +++ b/src/main/kotlin/com/viaversion/aas/handler/state/LoginState.kt @@ -1,6 +1,7 @@ package com.viaversion.aas.handler.state import com.google.common.net.HostAndPort +import com.google.gson.JsonPrimitive import com.viaversion.aas.* import com.viaversion.aas.codec.CryptoCodec import com.viaversion.aas.codec.packet.Packet @@ -13,7 +14,6 @@ import com.viaversion.aas.util.StacklessException import com.viaversion.viaversion.api.protocol.packet.State import com.viaversion.viaversion.api.protocol.version.ProtocolVersion import com.viaversion.viaversion.api.type.Type -import com.viaversion.viaversion.libs.gson.JsonPrimitive import io.netty.buffer.ByteBufAllocator import io.netty.channel.Channel import io.netty.channel.ChannelHandlerContext diff --git a/src/main/kotlin/com/viaversion/aas/web/ViaWebApp.kt b/src/main/kotlin/com/viaversion/aas/web/ViaWebApp.kt index 323c298..bcf7266 100644 --- a/src/main/kotlin/com/viaversion/aas/web/ViaWebApp.kt +++ b/src/main/kotlin/com/viaversion/aas/web/ViaWebApp.kt @@ -1,12 +1,13 @@ package com.viaversion.aas.web -import io.ktor.application.* -import io.ktor.features.* import io.ktor.http.* -import io.ktor.http.cio.websocket.* import io.ktor.http.content.* -import io.ktor.response.* -import io.ktor.routing.* +import io.ktor.server.application.* +import io.ktor.server.http.content.* +import io.ktor.server.plugins.* +import io.ktor.server.response.* +import io.ktor.server.routing.* +import io.ktor.server.websocket.* import io.ktor.util.* import io.ktor.websocket.* import kotlinx.coroutines.channels.consumeEach @@ -16,7 +17,7 @@ import java.nio.channels.ClosedChannelException import java.nio.file.Path import java.time.Duration -class ViaWebApp(val viaWebServer: WebDashboardServer) { +class ViaWebApp(val viaWebServer: WebServer) { fun Application.main() { install(DefaultHeaders) install(ConditionalHeaders) diff --git a/src/main/kotlin/com/viaversion/aas/web/WebClient.kt b/src/main/kotlin/com/viaversion/aas/web/WebClient.kt index b7a27ac..d0e14b8 100644 --- a/src/main/kotlin/com/viaversion/aas/web/WebClient.kt +++ b/src/main/kotlin/com/viaversion/aas/web/WebClient.kt @@ -3,13 +3,13 @@ package com.viaversion.aas.web import com.google.common.collect.Sets import com.google.common.util.concurrent.RateLimiter import com.viaversion.aas.config.VIAaaSConfig -import io.ktor.features.* -import io.ktor.websocket.* +import io.ktor.server.plugins.* +import io.ktor.server.websocket.* import java.util.* import java.util.concurrent.atomic.AtomicInteger data class WebClient( - val server: WebDashboardServer, + val server: WebServer, val ws: WebSocketServerSession, val state: WebState, ) { diff --git a/src/main/kotlin/com/viaversion/aas/web/WebLogin.kt b/src/main/kotlin/com/viaversion/aas/web/WebLogin.kt index ed0e80b..1172048 100644 --- a/src/main/kotlin/com/viaversion/aas/web/WebLogin.kt +++ b/src/main/kotlin/com/viaversion/aas/web/WebLogin.kt @@ -4,9 +4,10 @@ import com.google.gson.JsonObject import com.google.gson.JsonParser import com.viaversion.aas.* import com.viaversion.aas.util.StacklessException +import io.ktor.client.call.* import io.ktor.client.request.forms.* import io.ktor.http.* -import io.ktor.http.cio.websocket.* +import io.ktor.websocket.* import kotlinx.coroutines.future.await import java.net.URLEncoder import java.time.Duration @@ -80,10 +81,10 @@ class WebLogin : WebState { val username = obj["username"].asString val code = obj["code"].asString - val check = AspirinServer.httpClient.submitForm( + val check = AspirinServer.httpClient.submitForm( "https://api.minecraft.id/gateway/verify/${URLEncoder.encode(username, Charsets.UTF_8)}", formParameters = parametersOf("code", code), - ) + ).body() if (check.getAsJsonPrimitive("valid").asBoolean) { val mcIdUser = check["username"].asString diff --git a/src/main/kotlin/com/viaversion/aas/web/WebDashboardServer.kt b/src/main/kotlin/com/viaversion/aas/web/WebServer.kt similarity index 95% rename from src/main/kotlin/com/viaversion/aas/web/WebDashboardServer.kt rename to src/main/kotlin/com/viaversion/aas/web/WebServer.kt index 483445e..8bd87f1 100644 --- a/src/main/kotlin/com/viaversion/aas/web/WebDashboardServer.kt +++ b/src/main/kotlin/com/viaversion/aas/web/WebServer.kt @@ -7,16 +7,17 @@ import com.google.common.cache.CacheBuilder import com.google.common.cache.CacheLoader import com.google.common.collect.MultimapBuilder import com.google.common.collect.Multimaps +import com.google.gson.JsonObject import com.viaversion.aas.AspirinServer import com.viaversion.aas.config.VIAaaSConfig import com.viaversion.aas.parseUndashedId import com.viaversion.aas.reverseLookup import com.viaversion.aas.util.StacklessException import com.viaversion.aas.webLogger -import com.viaversion.viaversion.libs.gson.JsonObject +import io.ktor.client.call.* import io.ktor.client.request.* -import io.ktor.http.cio.websocket.* import io.ktor.server.netty.* +import io.ktor.server.websocket.* import io.ktor.websocket.* import io.netty.handler.codec.dns.DefaultDnsQuestion import io.netty.handler.codec.dns.DnsPtrRecord @@ -34,7 +35,7 @@ import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.TimeUnit import kotlin.coroutines.coroutineContext -class WebDashboardServer { +class WebServer { // I don't think i'll need more than 1k/day val clients = ConcurrentHashMap() val jwtAlgorithm = Algorithm.HMAC256(VIAaaSConfig.jwtSecret) @@ -77,7 +78,7 @@ class WebDashboardServer { .build>(CacheLoader.from { name -> CoroutineScope(Dispatchers.IO).async { AspirinServer.httpClient - .get("https://api.mojang.com/users/profiles/minecraft/$name") + .get("https://api.mojang.com/users/profiles/minecraft/$name").body() ?.get("id")?.asString?.let { parseUndashedId(it) } }.asCompletableFuture() }) @@ -103,7 +104,7 @@ class WebDashboardServer { try { val cleanedIp = address.hostString.substringBefore("%") val ipLookup = async(Dispatchers.IO) { - AspirinServer.httpClient.get("https://ipinfo.io/$cleanedIp") + AspirinServer.httpClient.get("https://ipinfo.io/$cleanedIp").body() } val dnsQuery = AspirinServer.dnsResolver .resolveAll(DefaultDnsQuestion(reverseLookup(address.address), DnsRecordType.PTR))