JsonAuthHandler

This commit is contained in:
Gravit 2018-09-19 19:39:44 +07:00
parent ac2e0935ef
commit 324ab21d35
2 changed files with 35 additions and 41 deletions

View file

@ -45,6 +45,7 @@ public static void registerHandlers() {
registerHandler("binaryFile", BinaryFileAuthHandler::new); registerHandler("binaryFile", BinaryFileAuthHandler::new);
registerHandler("textFile", TextFileAuthHandler::new); registerHandler("textFile", TextFileAuthHandler::new);
registerHandler("mysql", MySQLAuthHandler::new); registerHandler("mysql", MySQLAuthHandler::new);
registerHandler("json",JsonAuthHandler::new);
registredHandl = true; registredHandl = true;
} }
} }

View file

@ -13,13 +13,14 @@
import com.eclipsesource.json.JsonObject; import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue; import com.eclipsesource.json.JsonValue;
import ru.gravit.launchserver.auth.provider.AuthProviderResult;
import ru.gravit.utils.helper.IOHelper; import ru.gravit.utils.helper.IOHelper;
import ru.gravit.utils.helper.VerifyHelper; import ru.gravit.utils.helper.VerifyHelper;
import ru.gravit.launcher.serialize.config.entry.BlockConfigEntry; import ru.gravit.launcher.serialize.config.entry.BlockConfigEntry;
import ru.gravit.launcher.serialize.config.entry.StringConfigEntry; import ru.gravit.launcher.serialize.config.entry.StringConfigEntry;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class JsonAuthHandler extends CachedAuthHandler { public class JsonAuthHandler extends AuthHandler {
private static final int TIMEOUT = 10; private static final int TIMEOUT = 10;
private final URL url; private final URL url;
@ -31,7 +32,6 @@ public class JsonAuthHandler extends CachedAuthHandler {
private final String serverIDKeyName; private final String serverIDKeyName;
private final String accessTokenKeyName; private final String accessTokenKeyName;
private final String uuidKeyName; private final String uuidKeyName;
private final String responseUserKeyName;
private final String responseErrorKeyName; private final String responseErrorKeyName;
protected JsonAuthHandler(BlockConfigEntry block) { protected JsonAuthHandler(BlockConfigEntry block) {
@ -49,8 +49,6 @@ protected JsonAuthHandler(BlockConfigEntry block) {
VerifyHelper.NOT_EMPTY, "UUID key name can't be empty"); VerifyHelper.NOT_EMPTY, "UUID key name can't be empty");
accessTokenKeyName = VerifyHelper.verify(block.getEntryValue("accessTokenKeyName", StringConfigEntry.class), accessTokenKeyName = VerifyHelper.verify(block.getEntryValue("accessTokenKeyName", StringConfigEntry.class),
VerifyHelper.NOT_EMPTY, "AccessToken key name can't be empty"); VerifyHelper.NOT_EMPTY, "AccessToken key name can't be empty");
responseUserKeyName = VerifyHelper.verify(block.getEntryValue("responseUserKeyName", StringConfigEntry.class),
VerifyHelper.NOT_EMPTY, "Response username key can't be empty");
responseErrorKeyName = VerifyHelper.verify(block.getEntryValue("responseErrorKeyName", StringConfigEntry.class), responseErrorKeyName = VerifyHelper.verify(block.getEntryValue("responseErrorKeyName", StringConfigEntry.class),
VerifyHelper.NOT_EMPTY, "Response error key can't be empty"); VerifyHelper.NOT_EMPTY, "Response error key can't be empty");
url = IOHelper.convertToURL(configUrl); url = IOHelper.convertToURL(configUrl);
@ -60,6 +58,16 @@ protected JsonAuthHandler(BlockConfigEntry block) {
urlUUIDToUsername = IOHelper.convertToURL(configUrlUUIDUsername); urlUUIDToUsername = IOHelper.convertToURL(configUrlUUIDUsername);
} }
@Override
public UUID auth(AuthProviderResult authResult) throws IOException {
JsonObject request = Json.object().add(userKeyName, authResult.username).add(accessTokenKeyName, authResult.accessToken);
JsonObject result = jsonRequest(request, url);
String value;
if ((value = result.getString(uuidKeyName, null)) != null)
return UUID.fromString(value);
throw new IOException("Service error");
}
@Override @Override
public UUID checkServer(String username, String serverID) throws IOException { public UUID checkServer(String username, String serverID) throws IOException {
JsonObject request = Json.object().add(userKeyName, username).add(serverIDKeyName, serverID); JsonObject request = Json.object().add(userKeyName, username).add(serverIDKeyName, serverID);
@ -67,43 +75,38 @@ public UUID checkServer(String username, String serverID) throws IOException {
String value; String value;
if ((value = result.getString(uuidKeyName, null)) != null) if ((value = result.getString(uuidKeyName, null)) != null)
return UUID.fromString(value); return UUID.fromString(value);
return super.checkServer(username, serverID); throw new IOException("Service error");
} }
@Override @Override
public void close() { public void close() {
} }
@Override
protected Entry fetchEntry(String username) throws IOException {
JsonObject request = Json.object().add(userKeyName, username);
JsonObject result = jsonRequest(request, urlCheckServer);
UUID uuid = UUID.fromString(result.getString(uuidKeyName, null));
String accessToken = result.getString(accessTokenKeyName, null);
String serverID = result.getString(serverIDKeyName, null);
if (accessToken == null || serverID == null) return null;
return new Entry(uuid, username, accessToken, serverID);
}
@Override
protected Entry fetchEntry(UUID uuid) throws IOException {
JsonObject request = Json.object().add(uuidKeyName, uuid.toString());
JsonObject result = jsonRequest(request, urlCheckServer);
String username = result.getString(userKeyName, null);
String accessToken = result.getString(accessTokenKeyName, null);
String serverID = result.getString(serverIDKeyName, null);
if (username == null || accessToken == null || serverID == null) return null;
return new Entry(uuid, username, accessToken, serverID);
}
@Override @Override
public boolean joinServer(String username, String accessToken, String serverID) throws IOException { public boolean joinServer(String username, String accessToken, String serverID) throws IOException {
JsonObject request = Json.object().add(userKeyName, username).add(serverIDKeyName, serverID).add(accessTokenKeyName, accessToken); JsonObject request = Json.object().add(userKeyName, username).add(serverIDKeyName, serverID).add(accessTokenKeyName, accessToken);
jsonRequest(request, urlJoinServer); jsonRequest(request, urlJoinServer);
return super.joinServer(username, accessToken, serverID); return request.getString(responseErrorKeyName,null).equals("OK");
}
@Override
public UUID usernameToUUID(String username) throws IOException {
JsonObject request = Json.object().add(userKeyName, username);
JsonObject result = jsonRequest(request, urlUsernameToUUID);
String value;
if ((value = result.getString(uuidKeyName, null)) != null)
return UUID.fromString(value);
throw new IOException("Service error");
}
@Override
public String uuidToUsername(UUID uuid) throws IOException {
JsonObject request = Json.object().add(uuidKeyName, uuid.toString());
JsonObject result = jsonRequest(request, urlUUIDToUsername);
String value;
if ((value = result.getString(userKeyName, null)) != null)
return value;
throw new IOException("Service error");
} }
public JsonObject jsonRequest(JsonObject request, URL url) throws IOException { public JsonObject jsonRequest(JsonObject request, URL url) throws IOException {
@ -139,14 +142,4 @@ public JsonObject jsonRequest(JsonObject request, URL url) throws IOException {
authError(value); authError(value);
return response; return response;
} }
@Override
protected boolean updateAuth(UUID uuid, String username, String accessToken) {
return false;
}
@Override
protected boolean updateServerID(UUID uuid, String serverID) {
return false;
}
} }