mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-23 00:51:01 +03:00
[FEATURE] JsonHWIDProvider + [FIX] Больше запросы JsonAuthHandler не pretty-print. Closes #410
This commit is contained in:
parent
e3da81bc85
commit
d98c6c39c5
5 changed files with 116 additions and 18 deletions
|
@ -11,25 +11,26 @@ public class JsonAuthHandler extends CachedAuthHandler {
|
||||||
public URL getUrl;
|
public URL getUrl;
|
||||||
public URL updateAuthUrl;
|
public URL updateAuthUrl;
|
||||||
public URL updateServerIdUrl;
|
public URL updateServerIdUrl;
|
||||||
|
public String apiKey;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Entry fetchEntry(String username) throws IOException {
|
protected Entry fetchEntry(String username) throws IOException {
|
||||||
return Launcher.gsonManager.configGson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.configGson.toJsonTree(new EntryRequestByUsername(username)), getUrl), Entry.class);
|
return Launcher.gsonManager.gson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(new EntryRequestByUsername(username, apiKey)), getUrl), Entry.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Entry fetchEntry(UUID uuid) throws IOException {
|
protected Entry fetchEntry(UUID uuid) throws IOException {
|
||||||
return Launcher.gsonManager.configGson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.configGson.toJsonTree(new EntryRequestByUUID(uuid)), getUrl), Entry.class);
|
return Launcher.gsonManager.gson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(new EntryRequestByUUID(uuid, apiKey)), getUrl), Entry.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean updateAuth(UUID uuid, String username, String accessToken) throws IOException {
|
protected boolean updateAuth(UUID uuid, String username, String accessToken) throws IOException {
|
||||||
return Launcher.gsonManager.configGson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.configGson.toJsonTree(new UpdateAuthRequest(uuid, username, accessToken)), updateAuthUrl), SuccessResponse.class).success;
|
return Launcher.gsonManager.gson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(new UpdateAuthRequest(uuid, username, accessToken, apiKey)), updateAuthUrl), SuccessResponse.class).success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean updateServerID(UUID uuid, String serverID) throws IOException {
|
protected boolean updateServerID(UUID uuid, String serverID) throws IOException {
|
||||||
return Launcher.gsonManager.configGson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.configGson.toJsonTree(new UpdateServerIDRequest(uuid, serverID)), updateServerIdUrl), SuccessResponse.class).success;
|
return Launcher.gsonManager.gson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(new UpdateServerIDRequest(uuid, serverID, apiKey)), updateServerIdUrl), SuccessResponse.class).success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -39,17 +40,20 @@ public void close() {
|
||||||
|
|
||||||
public static class EntryRequestByUsername {
|
public static class EntryRequestByUsername {
|
||||||
public final String username;
|
public final String username;
|
||||||
|
public final String apiKey;
|
||||||
|
|
||||||
public EntryRequestByUsername(String username) {
|
public EntryRequestByUsername(String username, String apiKey) {
|
||||||
this.username = username;
|
this.username = username;
|
||||||
|
this.apiKey = apiKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class EntryRequestByUUID {
|
public static class EntryRequestByUUID {
|
||||||
public final UUID uuid;
|
public final UUID uuid;
|
||||||
|
public final String apiKey;
|
||||||
public EntryRequestByUUID(UUID uuid) {
|
public EntryRequestByUUID(UUID uuid, String apiKey) {
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
|
this.apiKey = apiKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,21 +61,25 @@ public static class UpdateAuthRequest {
|
||||||
public final UUID uuid;
|
public final UUID uuid;
|
||||||
public final String username;
|
public final String username;
|
||||||
public final String accessToken;
|
public final String accessToken;
|
||||||
|
public final String apiKey;
|
||||||
|
|
||||||
public UpdateAuthRequest(UUID uuid, String username, String accessToken) {
|
public UpdateAuthRequest(UUID uuid, String username, String accessToken, String apiKey) {
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.accessToken = accessToken;
|
this.accessToken = accessToken;
|
||||||
|
this.apiKey = apiKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class UpdateServerIDRequest {
|
public static class UpdateServerIDRequest {
|
||||||
public final UUID uuid;
|
public final UUID uuid;
|
||||||
public final String serverID;
|
public final String serverID;
|
||||||
|
public final String apiKey;
|
||||||
|
|
||||||
public UpdateServerIDRequest(UUID uuid, String serverID) {
|
public UpdateServerIDRequest(UUID uuid, String serverID, String apiKey) {
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.serverID = serverID;
|
this.serverID = serverID;
|
||||||
|
this.apiKey = apiKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ public static void registerProviders() {
|
||||||
{
|
{
|
||||||
providers.register("memory", MemoryHWIDProvider.class);
|
providers.register("memory", MemoryHWIDProvider.class);
|
||||||
providers.register("mysql", MysqlHWIDProvider.class);
|
providers.register("mysql", MysqlHWIDProvider.class);
|
||||||
|
providers.register("json", JsonHWIDProvider.class);
|
||||||
registredProv = true;
|
registredProv = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
package pro.gravit.launchserver.auth.protect.hwid;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.HTTPRequest;
|
||||||
|
import pro.gravit.launcher.Launcher;
|
||||||
|
import pro.gravit.launcher.request.secure.HardwareReportRequest;
|
||||||
|
import pro.gravit.launchserver.socket.Client;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
public class JsonHWIDProvider extends HWIDProvider {
|
||||||
|
public URL findHardwareInfoByPublicKeyRequest;
|
||||||
|
public URL createHardwareInfoRequest;
|
||||||
|
public URL addPublicKeyToHardwareInfoRequest;
|
||||||
|
public String apiKey;
|
||||||
|
public static class RequestFind {
|
||||||
|
public byte[] publicKey;
|
||||||
|
public Client client;
|
||||||
|
public String apiKey;
|
||||||
|
}
|
||||||
|
public static class ResultFind {
|
||||||
|
public String error;
|
||||||
|
public HardwareReportRequest.HardwareInfo info;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public HardwareReportRequest.HardwareInfo findHardwareInfoByPublicKey(byte[] publicKey, Client client) throws HWIDException {
|
||||||
|
try {
|
||||||
|
RequestFind req = new RequestFind();
|
||||||
|
req.publicKey = publicKey;
|
||||||
|
req.client = client;
|
||||||
|
req.apiKey = apiKey;
|
||||||
|
ResultFind r = Launcher.gsonManager.gson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(req), findHardwareInfoByPublicKeyRequest), ResultFind.class);
|
||||||
|
if (r.error != null) throw new HWIDException(r.error);
|
||||||
|
return r.info;
|
||||||
|
} catch (HWIDException t) {
|
||||||
|
throw t;
|
||||||
|
} catch (Throwable t) {
|
||||||
|
throw new HWIDException(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static class RequestCreate {
|
||||||
|
public byte[] publicKey;
|
||||||
|
public Client client;
|
||||||
|
public HardwareReportRequest.HardwareInfo hardwareInfo;
|
||||||
|
public String apiKey;
|
||||||
|
}
|
||||||
|
public static class ResultCreate {
|
||||||
|
public String error;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void createHardwareInfo(HardwareReportRequest.HardwareInfo hardwareInfo, byte[] publicKey, Client client) throws HWIDException {
|
||||||
|
try {
|
||||||
|
RequestCreate req = new RequestCreate();
|
||||||
|
req.publicKey = publicKey;
|
||||||
|
req.client = client;
|
||||||
|
req.hardwareInfo = hardwareInfo;
|
||||||
|
req.apiKey = apiKey;
|
||||||
|
ResultCreate r = Launcher.gsonManager.gson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(req), createHardwareInfoRequest), ResultCreate.class);
|
||||||
|
if (r.error != null) throw new HWIDException(r.error);
|
||||||
|
} catch (HWIDException t) {
|
||||||
|
throw t;
|
||||||
|
} catch (Throwable t) {
|
||||||
|
throw new HWIDException(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static class RequestAddKey {
|
||||||
|
public byte[] publicKey;
|
||||||
|
public Client client;
|
||||||
|
public HardwareReportRequest.HardwareInfo hardwareInfo;
|
||||||
|
public String apiKey;
|
||||||
|
}
|
||||||
|
public static class ResultAddKey {
|
||||||
|
public String error;
|
||||||
|
public boolean success;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean addPublicKeyToHardwareInfo(HardwareReportRequest.HardwareInfo hardwareInfo, byte[] publicKey, Client client) throws HWIDException {
|
||||||
|
try {
|
||||||
|
RequestAddKey req = new RequestAddKey();
|
||||||
|
req.publicKey = publicKey;
|
||||||
|
req.client = client;
|
||||||
|
req.hardwareInfo = hardwareInfo;
|
||||||
|
req.apiKey = apiKey;
|
||||||
|
ResultAddKey r = Launcher.gsonManager.gson.fromJson(HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(req), addPublicKeyToHardwareInfoRequest), ResultAddKey.class);
|
||||||
|
if (r.error != null) throw new HWIDException(r.error);
|
||||||
|
return r.success;
|
||||||
|
} catch (HWIDException t) {
|
||||||
|
throw t;
|
||||||
|
} catch (Throwable t) {
|
||||||
|
throw new HWIDException(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import pro.gravit.launcher.ClientPermissions;
|
import pro.gravit.launcher.ClientPermissions;
|
||||||
import pro.gravit.launcher.HTTPRequest;
|
import pro.gravit.launcher.HTTPRequest;
|
||||||
|
import pro.gravit.launcher.Launcher;
|
||||||
import pro.gravit.launcher.request.auth.AuthRequest;
|
import pro.gravit.launcher.request.auth.AuthRequest;
|
||||||
import pro.gravit.launcher.request.auth.password.AuthPlainPassword;
|
import pro.gravit.launcher.request.auth.password.AuthPlainPassword;
|
||||||
import pro.gravit.launchserver.auth.AuthException;
|
import pro.gravit.launchserver.auth.AuthException;
|
||||||
|
@ -13,20 +14,16 @@
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
public final class JsonAuthProvider extends AuthProvider {
|
public final class JsonAuthProvider extends AuthProvider {
|
||||||
private static final Gson gson = new Gson();
|
public URL url;
|
||||||
private URL url;
|
public String apiKey;
|
||||||
private String apiKey;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AuthProviderResult auth(String login, AuthRequest.AuthPasswordInterface password, String ip) throws IOException {
|
public AuthProviderResult auth(String login, AuthRequest.AuthPasswordInterface password, String ip) throws IOException {
|
||||||
if (!(password instanceof AuthPlainPassword)) throw new AuthException("This password type not supported");
|
if (!(password instanceof AuthPlainPassword)) throw new AuthException("This password type not supported");
|
||||||
authRequest authRequest = new authRequest(login, ((AuthPlainPassword) password).password, ip, apiKey);
|
JsonElement content = HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(new authRequest(login, ((AuthPlainPassword) password).password, ip, apiKey)), url);
|
||||||
JsonElement request = gson.toJsonTree(authRequest);
|
|
||||||
JsonElement content = HTTPRequest.jsonRequest(request, url);
|
|
||||||
if (!content.isJsonObject())
|
if (!content.isJsonObject())
|
||||||
return authError("Authentication server response is malformed");
|
return authError("Authentication server response is malformed");
|
||||||
|
authResult result = Launcher.gsonManager.gson.fromJson(content, authResult.class);
|
||||||
authResult result = gson.fromJson(content, authResult.class);
|
|
||||||
if (result.username != null)
|
if (result.username != null)
|
||||||
return new AuthProviderResult(result.username, SecurityHelper.randomStringToken(), new ClientPermissions(result.permissions, result.flags));
|
return new AuthProviderResult(result.username, SecurityHelper.randomStringToken(), new ClientPermissions(result.permissions, result.flags));
|
||||||
else if (result.error != null)
|
else if (result.error != null)
|
||||||
|
|
2
modules
2
modules
|
@ -1 +1 @@
|
||||||
Subproject commit ddca1c9d23fe72d3929cd5416fbceeb2edcb41bc
|
Subproject commit 42538b3f13e6b70df1bfdc0692d989c097cf4dea
|
Loading…
Reference in a new issue