forked from openrs2/openrs2
parent
5da59135ea
commit
c260548d73
@ -0,0 +1,14 @@ |
|||||||
|
package org.openrs2.archive.key |
||||||
|
|
||||||
|
import com.github.ajalt.clikt.core.CliktCommand |
||||||
|
import com.google.inject.Guice |
||||||
|
import kotlinx.coroutines.runBlocking |
||||||
|
import org.openrs2.archive.ArchiveModule |
||||||
|
|
||||||
|
public class DownloadCommand : CliktCommand(name = "download") { |
||||||
|
override fun run(): Unit = runBlocking { |
||||||
|
val injector = Guice.createInjector(ArchiveModule) |
||||||
|
val importer = injector.getInstance(KeyImporter::class.java) |
||||||
|
importer.download() |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
package org.openrs2.archive.key |
||||||
|
|
||||||
|
import org.openrs2.crypto.XteaKey |
||||||
|
|
||||||
|
public interface KeyDownloader { |
||||||
|
public suspend fun download(): Sequence<XteaKey> |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
package org.openrs2.archive.key |
||||||
|
|
||||||
|
import kotlinx.coroutines.Dispatchers |
||||||
|
import kotlinx.coroutines.future.await |
||||||
|
import kotlinx.coroutines.withContext |
||||||
|
import org.openrs2.crypto.XteaKey |
||||||
|
import org.openrs2.http.checkStatusCode |
||||||
|
import java.net.URI |
||||||
|
import java.net.http.HttpClient |
||||||
|
import java.net.http.HttpRequest |
||||||
|
import java.net.http.HttpResponse |
||||||
|
import javax.inject.Inject |
||||||
|
import javax.inject.Singleton |
||||||
|
|
||||||
|
@Singleton |
||||||
|
public class OpenOsrsKeyDownloader @Inject constructor( |
||||||
|
private val client: HttpClient, |
||||||
|
private val jsonKeyReader: JsonKeyReader |
||||||
|
) : KeyDownloader { |
||||||
|
override suspend fun download(): Sequence<XteaKey> { |
||||||
|
val request = HttpRequest.newBuilder(ENDPOINT) |
||||||
|
.GET() |
||||||
|
.build() |
||||||
|
|
||||||
|
val response = client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream()).await() |
||||||
|
response.checkStatusCode() |
||||||
|
|
||||||
|
return withContext(Dispatchers.IO) { |
||||||
|
response.body().use { input -> |
||||||
|
jsonKeyReader.read(input) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private companion object { |
||||||
|
private val ENDPOINT = URI("https://xtea.openosrs.dev/get") |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,65 @@ |
|||||||
|
package org.openrs2.archive.key |
||||||
|
|
||||||
|
import kotlinx.coroutines.Dispatchers |
||||||
|
import kotlinx.coroutines.future.await |
||||||
|
import kotlinx.coroutines.withContext |
||||||
|
import org.jdom2.input.SAXBuilder |
||||||
|
import org.openrs2.crypto.XteaKey |
||||||
|
import org.openrs2.http.checkStatusCode |
||||||
|
import java.net.URI |
||||||
|
import java.net.http.HttpClient |
||||||
|
import java.net.http.HttpRequest |
||||||
|
import java.net.http.HttpResponse |
||||||
|
import javax.inject.Inject |
||||||
|
import javax.inject.Singleton |
||||||
|
|
||||||
|
@Singleton |
||||||
|
public class RuneLiteKeyDownloader @Inject constructor( |
||||||
|
private val client: HttpClient, |
||||||
|
private val jsonKeyReader: JsonKeyReader |
||||||
|
) : KeyDownloader { |
||||||
|
override suspend fun download(): Sequence<XteaKey> { |
||||||
|
val version = getVersion() |
||||||
|
|
||||||
|
val request = HttpRequest.newBuilder(getXteaEndpoint(version)) |
||||||
|
.GET() |
||||||
|
.build() |
||||||
|
|
||||||
|
val response = client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream()).await() |
||||||
|
response.checkStatusCode() |
||||||
|
|
||||||
|
return withContext(Dispatchers.IO) { |
||||||
|
response.body().use { input -> |
||||||
|
jsonKeyReader.read(input) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private suspend fun getVersion(): String { |
||||||
|
val request = HttpRequest.newBuilder(VERSION_ENDPOINT) |
||||||
|
.GET() |
||||||
|
.build() |
||||||
|
|
||||||
|
val response = client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream()).await() |
||||||
|
response.checkStatusCode() |
||||||
|
|
||||||
|
val document = withContext(Dispatchers.IO) { |
||||||
|
response.body().use { input -> |
||||||
|
SAXBuilder().build(input) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return document.rootElement |
||||||
|
.getChild("versioning") |
||||||
|
.getChild("release") |
||||||
|
.textTrim |
||||||
|
} |
||||||
|
|
||||||
|
private companion object { |
||||||
|
private val VERSION_ENDPOINT = URI("https://repo.runelite.net/net/runelite/runelite-parent/maven-metadata.xml") |
||||||
|
|
||||||
|
private fun getXteaEndpoint(version: String): URI { |
||||||
|
return URI("https://api.runelite.net/runelite-$version/xtea") |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue