diff --git a/src/main/java/eu/crushedpixel/replaymod/ReplayMod.java b/src/main/java/eu/crushedpixel/replaymod/ReplayMod.java index 28f75288..99c70ff3 100755 --- a/src/main/java/eu/crushedpixel/replaymod/ReplayMod.java +++ b/src/main/java/eu/crushedpixel/replaymod/ReplayMod.java @@ -4,6 +4,7 @@ import eu.crushedpixel.replaymod.api.client.ApiClient; import eu.crushedpixel.replaymod.chat.ChatMessageHandler; import eu.crushedpixel.replaymod.events.*; import eu.crushedpixel.replaymod.localization.LocalizedResourcePack; +import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler; import eu.crushedpixel.replaymod.recording.ConnectionEventHandler; import eu.crushedpixel.replaymod.reflection.MCPNames; import eu.crushedpixel.replaymod.registry.KeybindRegistry; @@ -83,6 +84,7 @@ public class ReplayMod { public void preInit(FMLPreInitializationEvent event) { config = new Configuration(event.getSuggestedConfigurationFile()); config.load(); + AuthenticationHandler.loadAuthkeyFromConfig(); uploadedFileHandler = new UploadedFileHandler(event.getModConfigurationDirectory()); diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/ApiClient.java b/src/main/java/eu/crushedpixel/replaymod/api/client/ApiClient.java index 6a462411..078779dd 100755 --- a/src/main/java/eu/crushedpixel/replaymod/api/client/ApiClient.java +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/ApiClient.java @@ -25,6 +25,7 @@ public class ApiClient { QueryBuilder builder = new QueryBuilder(ApiMethods.login); builder.put("user", username); builder.put("pw", password); + builder.put("mod", true); AuthKey auth = invokeAndReturn(builder, AuthKey.class); return auth; } @@ -38,9 +39,21 @@ public class ApiClient { return auth; } + public boolean checkAuthkey(String auth) { + try { + QueryBuilder builder = new QueryBuilder(ApiMethods.check_authkey); + builder.put("auth", auth); + Success succ = invokeAndReturn(builder, Success.class); + return succ.isSuccess(); + } catch(Exception e) { + return false; + } + } + public boolean logout(String auth) throws IOException, ApiException { QueryBuilder builder = new QueryBuilder(ApiMethods.logout); builder.put("auth", auth); + builder.put("mod", true); Success succ = invokeAndReturn(builder, Success.class); return succ.isSuccess(); } diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/ApiMethods.java b/src/main/java/eu/crushedpixel/replaymod/api/client/ApiMethods.java index b22bd7c1..ea917ee7 100755 --- a/src/main/java/eu/crushedpixel/replaymod/api/client/ApiMethods.java +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/ApiMethods.java @@ -3,6 +3,7 @@ package eu.crushedpixel.replaymod.api.client; public class ApiMethods { public static final String register = "register"; + public static final String check_authkey = "check_authkey"; public static final String login = "login"; public static final String logout = "logout"; public static final String replay_files = "replay_files"; diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/holders/ApiError.java b/src/main/java/eu/crushedpixel/replaymod/api/client/holders/ApiError.java index 18e61333..464e9dd4 100755 --- a/src/main/java/eu/crushedpixel/replaymod/api/client/holders/ApiError.java +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/holders/ApiError.java @@ -31,6 +31,6 @@ public class ApiError { } public String getTranslatedDesc() { - return I18n.format(key, objects); + return I18n.format(key, (Object[])objects); } } diff --git a/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java b/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java index d88fe160..3cd623cd 100755 --- a/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java @@ -65,8 +65,10 @@ public class GuiEventHandler { if(event.gui instanceof GuiMainMenu) { if(ReplayMod.firstMainMenu) { ReplayMod.firstMainMenu = false; - event.gui = new GuiLoginPrompt(event.gui, event.gui); - return; + if(!AuthenticationHandler.isAuthenticated()) { + event.gui = new GuiLoginPrompt(event.gui, event.gui); + return; + } } else { try { MCTimerHandler.setTimerSpeed(1); diff --git a/src/main/java/eu/crushedpixel/replaymod/online/authentication/AuthenticationHandler.java b/src/main/java/eu/crushedpixel/replaymod/online/authentication/AuthenticationHandler.java index 7eb343df..b5048933 100755 --- a/src/main/java/eu/crushedpixel/replaymod/online/authentication/AuthenticationHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/online/authentication/AuthenticationHandler.java @@ -4,6 +4,7 @@ import eu.crushedpixel.replaymod.ReplayMod; import eu.crushedpixel.replaymod.api.client.ApiClient; import eu.crushedpixel.replaymod.api.client.ApiException; import eu.crushedpixel.replaymod.api.client.holders.AuthKey; +import net.minecraftforge.common.config.Property; import java.io.IOException; @@ -32,12 +33,33 @@ public class AuthenticationHandler { public static void register(String username, String mail, String password) throws IOException, ApiException { AuthKey auth = apiClient.register(username, mail, password); authkey = auth.getAuthkey(); + saveAuthkey(authkey); } + public static boolean loadAuthkeyFromConfig() { + Property p = ReplayMod.instance.config.get("authkey", "authkey", "null"); + + String key = null; + if(!(p.getString().equals("null"))) { + key = p.getString(); + } + + if(key != null) { + boolean succ = apiClient.checkAuthkey(key); + if(succ) { + authkey = key; + } else { + saveAuthkey("null"); + } + return succ; + } + return false; + } public static int authenticate(String username, String password) { try { authkey = ReplayMod.apiClient.getLogin(username, password).getAuthkey(); + saveAuthkey(authkey); return SUCCESS; } catch(ApiException e) { return INVALID; @@ -50,6 +72,7 @@ public class AuthenticationHandler { try { ReplayMod.apiClient.logout(authkey); authkey = null; + saveAuthkey("null"); return SUCCESS; } catch(ApiException e) { return INVALID; @@ -57,4 +80,10 @@ public class AuthenticationHandler { return NO_CONNECTION; } } + + private static void saveAuthkey(String authkey) { + ReplayMod.instance.config.removeCategory(ReplayMod.config.getCategory("authkey")); + ReplayMod.instance.config.get("authkey", "authkey", authkey); + ReplayMod.instance.config.save(); + } } diff --git a/src/main/java/eu/crushedpixel/replaymod/settings/ReplaySettings.java b/src/main/java/eu/crushedpixel/replaymod/settings/ReplaySettings.java index 37daa94d..62398404 100755 --- a/src/main/java/eu/crushedpixel/replaymod/settings/ReplaySettings.java +++ b/src/main/java/eu/crushedpixel/replaymod/settings/ReplaySettings.java @@ -18,8 +18,12 @@ public class ReplaySettings { return enums; } + private static final String[] CATEGORIES = new String[]{"recording", "replay", "render", "advanced"}; + public void readValues() { - Configuration config = ReplayMod.config; + Configuration config = ReplayMod.instance.config; + + config.load(); for(RecordingOptions o : RecordingOptions.values()) { Property p = getConfigSetting(config, o.name(), o.getValue(), "recording", false); @@ -146,7 +150,7 @@ public class ReplaySettings { public void rewriteSettings() { ReplayMod.instance.config.load(); - for(String cat : ReplayMod.instance.config.getCategoryNames()) { + for(String cat : CATEGORIES) { ReplayMod.instance.config.removeCategory(ReplayMod.instance.config.getCategory(cat)); }