diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/GameProfile.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/GameProfile.java index 153668cb4..4391bf894 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/GameProfile.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/GameProfile.java @@ -17,7 +17,10 @@ */ package org.jackhuang.hmcl.auth.yggdrasil; +import com.google.gson.JsonParseException; import org.jackhuang.hmcl.util.Immutable; +import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.gson.Validation; import java.util.UUID; @@ -26,7 +29,7 @@ import java.util.UUID; * @author huangyuhui */ @Immutable -public final class GameProfile { +public final class GameProfile implements Validation { private final UUID id; private final String name; @@ -61,4 +64,11 @@ public final class GameProfile { return properties; } + @Override + public void validate() throws JsonParseException { + if (id == null) + throw new JsonParseException("Game profile id cannot be null or malformed"); + if (StringUtils.isBlank(name)) + throw new JsonParseException("Game profile name cannot be null or blank"); + } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilService.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilService.java index 272be3b36..cdd1484f4 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilService.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilService.java @@ -8,6 +8,7 @@ import org.jackhuang.hmcl.auth.ServerDisconnectException; import org.jackhuang.hmcl.auth.ServerResponseMalformedException; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.ValidationTypeAdapterFactory; import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.IOException; @@ -187,6 +188,7 @@ public class YggdrasilService { private static final Gson GSON = new GsonBuilder() .registerTypeAdapter(PropertyMap.class, PropertyMap.Serializer.INSTANCE) .registerTypeAdapter(UUID.class, UUIDTypeAdapter.INSTANCE) + .registerTypeAdapterFactory(ValidationTypeAdapterFactory.INSTANCE) .create(); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/UUIDTypeAdapter.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/UUIDTypeAdapter.java index 09bc336d0..dc73c79b1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/UUIDTypeAdapter.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/UUIDTypeAdapter.java @@ -17,6 +17,7 @@ */ package org.jackhuang.hmcl.util.gson; +import com.google.gson.JsonParseException; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; @@ -50,7 +51,11 @@ public final class UUIDTypeAdapter extends TypeAdapter { } public static UUID fromString(String input) { - return UUID.fromString(input.replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5")); + try { + return UUID.fromString(input.replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5")); + } catch (IllegalArgumentException e) { + throw new JsonParseException("UUID malformed"); + } } }