client: add otl token requester

This commit is contained in:
Adam
2022-03-04 14:35:55 -05:00
parent babe279997
commit db96e9dcef

View File

@@ -27,9 +27,12 @@ package net.runelite.client;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.jagex.oldscape.pub.OAuthApi;
import com.jagex.oldscape.pub.OtlTokenResponse;
import java.applet.Applet;
import java.io.File;
import java.io.IOException;
@@ -45,6 +48,7 @@ import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
import javax.annotation.Nullable;
@@ -81,6 +85,8 @@ import net.runelite.client.ui.overlay.tooltip.TooltipOverlay;
import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay;
import net.runelite.http.api.RuneLiteAPI;
import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
@@ -105,6 +111,9 @@ public class RuneLite
@Getter
private static Injector injector;
@Inject
private OkHttpClient okHttpClient;
@Inject
private PluginManager pluginManager;
@@ -314,6 +323,11 @@ public class RuneLite
}
applet.start();
if (applet instanceof OAuthApi)
{
setupJxAuth((OAuthApi) applet);
}
}
SplashScreen.stage(.57, null, "Loading configuration");
@@ -536,4 +550,83 @@ public class RuneLite
System.setProperty(key, value);
}
}
private void setupJxAuth(OAuthApi oAuthApi)
{
String accessToken = System.getenv("JX_ACCESS_TOKEN");
if (Strings.isNullOrEmpty(accessToken))
{
return;
}
try
{
log.info("Initializing OTL token requester with access token");
oAuthApi.setOtlTokenRequester(url ->
{
CompletableFuture<OtlTokenResponse> f = new CompletableFuture<>();
okHttpClient.newCall(new Request.Builder()
.url(url)
.header("Authorization", "Bearer " + accessToken)
.get()
.build())
.enqueue(new Callback()
{
private void complete(boolean success, String token)
{
f.complete(new OtlTokenResponse()
{
@Override
public boolean isSuccess()
{
return success;
}
@Override
public String getToken()
{
return token;
}
});
}
@Override
public void onFailure(Call call, IOException e)
{
log.error("HTTP error while performing OTL request", e);
complete(false, null);
}
@Override
public void onResponse(Call call, Response response) throws IOException
{
if (response.code() != 200)
{
log.error("Non-OK response performing OTL request: {}", response.code());
complete(false, null);
response.close();
return;
}
if (response.body() == null)
{
log.error("OK response with empty body from OTL request");
complete(false, null);
response.close();
return;
}
log.debug("Successful OTL response");
complete(true, response.body().string());
response.close();
}
});
return f;
});
}
catch (LinkageError ex)
{
log.error("error setting up OTL requester", ex);
}
}
}