From 40d6ccbb61e2e38bf106fb566ddd491a1f652031 Mon Sep 17 00:00:00 2001
From: Graham
Date: Sat, 3 Apr 2021 13:31:26 +0100
Subject: [PATCH] Add ent's output to the keys page
Signed-off-by: Graham
---
.../org/openrs2/archive/key/EntCommand.kt | 23 +--------------
.../org/openrs2/archive/key/KeyExporter.kt | 28 +++++++++++++++++++
.../org/openrs2/archive/web/KeysController.kt | 3 +-
.../openrs2/archive/templates/keys/index.html | 19 +++++++++++--
4 files changed, 48 insertions(+), 25 deletions(-)
diff --git a/archive/src/main/kotlin/org/openrs2/archive/key/EntCommand.kt b/archive/src/main/kotlin/org/openrs2/archive/key/EntCommand.kt
index 2b328eb5..ac1f1519 100644
--- a/archive/src/main/kotlin/org/openrs2/archive/key/EntCommand.kt
+++ b/archive/src/main/kotlin/org/openrs2/archive/key/EntCommand.kt
@@ -5,33 +5,12 @@ import com.google.inject.Guice
import kotlinx.coroutines.runBlocking
import org.openrs2.archive.ArchiveModule
import org.openrs2.inject.CloseableInjector
-import java.io.BufferedOutputStream
-import java.io.DataOutputStream
public class EntCommand : CliktCommand(name = "ent") {
override fun run(): Unit = runBlocking {
CloseableInjector(Guice.createInjector(ArchiveModule)).use { injector ->
val exporter = injector.getInstance(KeyExporter::class.java)
- val keys = exporter.exportValid()
-
- val process = ProcessBuilder("ent")
- .redirectOutput(ProcessBuilder.Redirect.INHERIT)
- .redirectError(ProcessBuilder.Redirect.INHERIT)
- .start()
-
- DataOutputStream(BufferedOutputStream(process.outputStream)).use { out ->
- for (key in keys) {
- out.writeInt(key.k0)
- out.writeInt(key.k1)
- out.writeInt(key.k2)
- out.writeInt(key.k3)
- }
- }
-
- val status = process.waitFor()
- if (status != 0) {
- throw Exception("ent failed: $status")
- }
+ println(exporter.analyse())
}
}
}
diff --git a/archive/src/main/kotlin/org/openrs2/archive/key/KeyExporter.kt b/archive/src/main/kotlin/org/openrs2/archive/key/KeyExporter.kt
index f41b0d65..5d7526d4 100644
--- a/archive/src/main/kotlin/org/openrs2/archive/key/KeyExporter.kt
+++ b/archive/src/main/kotlin/org/openrs2/archive/key/KeyExporter.kt
@@ -2,6 +2,8 @@ package org.openrs2.archive.key
import org.openrs2.crypto.XteaKey
import org.openrs2.db.Database
+import java.io.BufferedOutputStream
+import java.io.DataOutputStream
import javax.inject.Inject
import javax.inject.Singleton
@@ -77,6 +79,32 @@ public class KeyExporter @Inject constructor(
return export(validOnly = true)
}
+ public suspend fun analyse(): String {
+ val keys = exportValid()
+
+ val process = ProcessBuilder("ent")
+ .redirectError(ProcessBuilder.Redirect.INHERIT)
+ .start()
+
+ DataOutputStream(BufferedOutputStream(process.outputStream)).use { out ->
+ for (key in keys) {
+ out.writeInt(key.k0)
+ out.writeInt(key.k1)
+ out.writeInt(key.k2)
+ out.writeInt(key.k3)
+ }
+ }
+
+ val analysis = process.inputStream.readAllBytes().toString(Charsets.UTF_8)
+
+ val status = process.waitFor()
+ if (status != 0) {
+ throw Exception("ent failed: $status")
+ }
+
+ return analysis
+ }
+
private suspend fun export(validOnly: Boolean): List {
return database.execute { connection ->
val query = if (validOnly) {
diff --git a/archive/src/main/kotlin/org/openrs2/archive/web/KeysController.kt b/archive/src/main/kotlin/org/openrs2/archive/web/KeysController.kt
index 6025f0c5..88ab3bbf 100644
--- a/archive/src/main/kotlin/org/openrs2/archive/web/KeysController.kt
+++ b/archive/src/main/kotlin/org/openrs2/archive/web/KeysController.kt
@@ -13,7 +13,8 @@ public class KeysController @Inject constructor(
) {
public suspend fun index(call: ApplicationCall) {
val stats = exporter.count()
- call.respond(ThymeleafContent("keys/index.html", mapOf("stats" to stats)))
+ val analysis = exporter.analyse()
+ call.respond(ThymeleafContent("keys/index.html", mapOf("stats" to stats, "analysis" to analysis)))
}
public suspend fun exportAll(call: ApplicationCall) {
diff --git a/archive/src/main/resources/org/openrs2/archive/templates/keys/index.html b/archive/src/main/resources/org/openrs2/archive/templates/keys/index.html
index 7ebf7017..c67d7cf5 100644
--- a/archive/src/main/resources/org/openrs2/archive/templates/keys/index.html
+++ b/archive/src/main/resources/org/openrs2/archive/templates/keys/index.html
@@ -29,6 +29,7 @@
have a validated key. This is equal to the total number of
validated keys if and only if keys are not re-used.
+
Download
This page allows all raw keys in the database to be exported in
@@ -37,12 +38,26 @@
the cache, use the download link on the
caches page instead.
-
+
+
+ Analysis
+
+ The output of piping all validated keys in binary format into
+ ent
+ is:
+
+
+
+
+ The keys are sorted in import order, which does not match the
+ order they were generated in. This could influence portions of
+ ent
's output.
+