forked from openrs2/openrs2
The API endpoint isn't always updated immediately, so this is useful for gathering keys semi-manually if they're needed more urgently. Signed-off-by: Graham <gpe@openrs2.org>bzip2
parent
346302fc05
commit
b53149ce6b
@ -0,0 +1,46 @@ |
||||
plugins { |
||||
`java-library` |
||||
`maven-publish` |
||||
} |
||||
|
||||
dependencies { |
||||
annotationProcessor(libs.pf4j) |
||||
|
||||
compileOnly(libs.pf4j) |
||||
compileOnly(libs.runelite.client) |
||||
|
||||
testImplementation(libs.runelite.client) |
||||
} |
||||
|
||||
publishing { |
||||
publications.create<MavenPublication>("maven") { |
||||
from(components["java"]) |
||||
|
||||
pom { |
||||
packaging = "jar" |
||||
name.set("OpenRS2 XTEA Plugin") |
||||
description.set( |
||||
""" |
||||
A RuneLite/OpenOSRS plugin that collects XTEA keys and submits |
||||
them to the OpenRS2 Archive. |
||||
""".trimIndent() |
||||
) |
||||
} |
||||
} |
||||
} |
||||
|
||||
tasks.jar { |
||||
manifest { |
||||
attributes["Plugin-Description"] = "Collects XTEA keys and submits them to the OpenRS2 Archive" |
||||
attributes["Plugin-Id"] = "OpenRS2 XTEA" |
||||
attributes["Plugin-License"] = "ISC" |
||||
attributes["Plugin-Provider"] = "OpenRS2" |
||||
attributes["Plugin-Version"] = project.version |
||||
} |
||||
} |
||||
|
||||
tasks.register<JavaExec>("run") { |
||||
classpath = project.sourceSets.test.get().runtimeClasspath |
||||
mainClass.set("org.openrs2.xtea.XteaPluginTest") |
||||
jvmArgs = listOf("-ea") |
||||
} |
@ -0,0 +1,17 @@ |
||||
package org.openrs2.xtea; |
||||
|
||||
import net.runelite.client.config.Config; |
||||
import net.runelite.client.config.ConfigGroup; |
||||
import net.runelite.client.config.ConfigItem; |
||||
|
||||
@ConfigGroup("openrs2xtea") |
||||
public interface XteaConfig extends Config { |
||||
@ConfigItem( |
||||
keyName = "endpoint", |
||||
name = "API Endpoint", |
||||
description = "The URL the XTEA keys are submitted to" |
||||
) |
||||
default String endpoint() { |
||||
return "https://archive.openrs2.org/keys"; |
||||
} |
||||
} |
@ -0,0 +1,85 @@ |
||||
package org.openrs2.xtea; |
||||
|
||||
import java.io.IOException; |
||||
import javax.inject.Inject; |
||||
|
||||
import com.google.inject.Provides; |
||||
import net.runelite.api.Client; |
||||
import net.runelite.api.GameState; |
||||
import net.runelite.api.events.GameStateChanged; |
||||
import net.runelite.client.config.ConfigManager; |
||||
import net.runelite.client.eventbus.Subscribe; |
||||
import net.runelite.client.plugins.Plugin; |
||||
import net.runelite.client.plugins.PluginDescriptor; |
||||
import net.runelite.http.api.RuneLiteAPI; |
||||
import okhttp3.Call; |
||||
import okhttp3.Callback; |
||||
import okhttp3.OkHttpClient; |
||||
import okhttp3.Request; |
||||
import okhttp3.RequestBody; |
||||
import okhttp3.Response; |
||||
import okhttp3.internal.annotations.EverythingIsNonNull; |
||||
import org.pf4j.Extension; |
||||
import org.pf4j.ExtensionPoint; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
@Extension |
||||
@PluginDescriptor( |
||||
name = "OpenRS2 XTEA", |
||||
description = "Collects XTEA keys and submits them to the OpenRS2 Archive" |
||||
) |
||||
public final class XteaPlugin extends Plugin implements ExtensionPoint { |
||||
private static final Logger log = LoggerFactory.getLogger(XteaPlugin.class); |
||||
|
||||
@Inject |
||||
private XteaConfig config; |
||||
|
||||
@Inject |
||||
private Client client; |
||||
|
||||
@Inject |
||||
private OkHttpClient httpClient; |
||||
|
||||
@Provides |
||||
public XteaConfig provideConfig(ConfigManager configManager) { |
||||
return configManager.getConfig(XteaConfig.class); |
||||
} |
||||
|
||||
@Subscribe |
||||
public void onGameStateChanged(GameStateChanged event) { |
||||
if (event.getGameState() != GameState.LOGGED_IN) { |
||||
return; |
||||
} |
||||
|
||||
int[][] keys = client.getXteaKeys(); |
||||
String url = config.endpoint(); |
||||
|
||||
log.debug("Submitting {} XTEA keys to {}", keys.length, url); |
||||
|
||||
Request request = new Request.Builder() |
||||
.post(RequestBody.create(RuneLiteAPI.JSON, RuneLiteAPI.GSON.toJson(keys))) |
||||
.url(url) |
||||
.build(); |
||||
|
||||
httpClient.newCall(request).enqueue(new Callback() { |
||||
@EverythingIsNonNull |
||||
@Override |
||||
public void onFailure(Call call, IOException ex) { |
||||
log.error("XTEA key submission failed", ex); |
||||
} |
||||
|
||||
@EverythingIsNonNull |
||||
@Override |
||||
public void onResponse(Call call, Response response) { |
||||
try (response) { |
||||
if (response.isSuccessful()) { |
||||
log.debug("XTEA key submission successful"); |
||||
} else { |
||||
log.error("XTEA key submission failed with status code {}", response.code()); |
||||
} |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
} |
@ -0,0 +1,9 @@ |
||||
package org.pf4j; |
||||
|
||||
/** |
||||
* Stub implementation of {@code org.pf4j.ExtensionPoint} so the plugin works |
||||
* in and builds against RuneLite, which doesn't have P4J on its classpath. |
||||
*/ |
||||
public interface ExtensionPoint { |
||||
// empty
|
||||
} |
@ -0,0 +1,16 @@ |
||||
package org.openrs2.xtea; |
||||
|
||||
import net.runelite.client.RuneLite; |
||||
import net.runelite.client.externalplugins.ExternalPluginManager; |
||||
|
||||
public final class XteaPluginTest { |
||||
@SuppressWarnings("unchecked") |
||||
public static void main(String[] args) throws Exception { |
||||
ExternalPluginManager.loadBuiltin(XteaPlugin.class); |
||||
RuneLite.main(args); |
||||
} |
||||
|
||||
private XteaPluginTest() { |
||||
// empty
|
||||
} |
||||
} |
Loading…
Reference in new issue