diff --git a/LaunchServer/source/auth/handler/AuthHandler.java b/LaunchServer/source/auth/handler/AuthHandler.java index 13bb445..bd0dd51 100644 --- a/LaunchServer/source/auth/handler/AuthHandler.java +++ b/LaunchServer/source/auth/handler/AuthHandler.java @@ -11,6 +11,7 @@ import launcher.helper.VerifyHelper; import launcher.serialize.config.ConfigObject; import launcher.serialize.config.entry.BlockConfigEntry; +import launchserver.auth.AuthException; public abstract class AuthHandler extends ConfigObject implements Flushable { private static final Map> AUTH_HANDLERS = new ConcurrentHashMap<>(4); @@ -36,6 +37,11 @@ public abstract String uuidToUsername(UUID uuid) throws IOException; @LauncherAPI + public static UUID authError(String message) throws AuthException { + throw new AuthException(message); + } + + @LauncherAPI public static AuthHandler newHandler(String name, BlockConfigEntry block) { Adapter authHandlerAdapter = VerifyHelper.getMapValue(AUTH_HANDLERS, name, String.format("Unknown auth handler: '%s'", name)); diff --git a/LaunchServer/source/auth/handler/CachedAuthHandler.java b/LaunchServer/source/auth/handler/CachedAuthHandler.java index cd76a83..7d425dd 100644 --- a/LaunchServer/source/auth/handler/CachedAuthHandler.java +++ b/LaunchServer/source/auth/handler/CachedAuthHandler.java @@ -26,7 +26,7 @@ public final synchronized UUID auth(String username, String accessToken) throws IOException { Entry entry = getEntry(username); if (entry == null || !updateAuth(entry.uuid, entry.username, accessToken)) { - return null; // Account doesn't exist + return authError(String.format("Account doesn't exist: '%s'", username)); } // Update cached access token (and username case) diff --git a/LaunchServer/source/response/Response.java b/LaunchServer/source/response/Response.java index 9650693..a493590 100644 --- a/LaunchServer/source/response/Response.java +++ b/LaunchServer/source/response/Response.java @@ -4,6 +4,7 @@ import launcher.LauncherAPI; import launcher.helper.LogHelper; +import launcher.request.RequestException; import launcher.serialize.HInput; import launcher.serialize.HOutput; import launchserver.LaunchServer; @@ -40,6 +41,11 @@ output.writeString("", 0); } + @LauncherAPI + public static void requestError(String message) throws RequestException { + throw new RequestException(message); + } + @FunctionalInterface public interface Factory { @LauncherAPI diff --git a/LaunchServer/source/response/auth/AuthResponse.java b/LaunchServer/source/response/auth/AuthResponse.java index dc31b0f..38c6596 100644 --- a/LaunchServer/source/response/auth/AuthResponse.java +++ b/LaunchServer/source/response/auth/AuthResponse.java @@ -9,11 +9,11 @@ import launcher.helper.LogHelper; import launcher.helper.SecurityHelper; import launcher.helper.VerifyHelper; -import launcher.request.RequestException; import launcher.serialize.HInput; import launcher.serialize.HOutput; import launchserver.LaunchServer; import launchserver.auth.AuthException; +import launchserver.auth.provider.AuthProvider; import launchserver.response.Response; import launchserver.response.profile.ProfileByUUIDResponse; @@ -33,7 +33,8 @@ password = IOHelper.decode(SecurityHelper.newRSADecryptCipher(server.privateKey). doFinal(encryptedPassword)); } catch (IllegalBlockSizeException | BadPaddingException ignored) { - throw new RequestException("Password decryption error"); + requestError("Password decryption error"); + return; } // Authenticate @@ -42,21 +43,26 @@ try { username = server.config.authProvider.auth(login, password); if (!VerifyHelper.isValidUsername(username)) { - throw new AuthException(String.format("Illegal username: '%s'", username)); + AuthProvider.authError(String.format("Illegal username: '%s'", username)); } } catch (AuthException e) { - throw new RequestException(e); + requestError(e.getMessage()); + return; } catch (Exception e) { LogHelper.error(e); - throw new RequestException("Internal auth error", e); + requestError("Internal auth error"); + return; } debug("Auth: '%s' -> '%s'", login, username); // Authenticate on server (and get UUID) String accessToken = SecurityHelper.randomStringToken(); - UUID uuid = server.config.authHandler.auth(username, accessToken); - if (uuid == null) { - throw new RequestException("Can't assign UUID"); + UUID uuid; + try { + uuid =server.config.authHandler.auth(username, accessToken); + } catch (AuthException e) { + requestError(e.getMessage()); + return; } writeNoError(output); diff --git a/LaunchServer/source/response/update/LauncherResponse.java b/LaunchServer/source/response/update/LauncherResponse.java index fa73bc4..13a2be0 100644 --- a/LaunchServer/source/response/update/LauncherResponse.java +++ b/LaunchServer/source/response/update/LauncherResponse.java @@ -5,7 +5,6 @@ import launcher.client.ClientProfile; import launcher.helper.SecurityHelper; -import launcher.request.RequestException; import launcher.serialize.HInput; import launcher.serialize.HOutput; import launcher.serialize.signed.SignedBytesHolder; @@ -23,7 +22,8 @@ // Resolve launcher binary SignedBytesHolder bytes = (input.readBoolean() ? server.launcherEXEBinary : server.launcherBinary).getBytes(); if (bytes == null) { - throw new RequestException("Missing launcher binary"); + requestError("Missing launcher binary"); + return; } writeNoError(output); diff --git a/LaunchServer/source/response/update/UpdateResponse.java b/LaunchServer/source/response/update/UpdateResponse.java index 3e86387..cebf47a 100644 --- a/LaunchServer/source/response/update/UpdateResponse.java +++ b/LaunchServer/source/response/update/UpdateResponse.java @@ -9,7 +9,6 @@ import launcher.hasher.HashedDir; import launcher.hasher.HashedEntry; import launcher.helper.IOHelper; -import launcher.request.RequestException; import launcher.request.update.UpdateRequest; import launcher.serialize.HInput; import launcher.serialize.HOutput; @@ -28,7 +27,8 @@ String updateDirName = IOHelper.verifyFileName(input.readString(255)); SignedObjectHolder hdir = server.getUpdateDir(updateDirName); if (hdir == null) { - throw new RequestException(String.format("Unknown update dir: %s", updateDirName)); + requestError(String.format("Unknown update dir: %s", updateDirName)); + return; } writeNoError(output);