diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 409947d3..f5cc7c9d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -32,7 +32,6 @@ build: - LaunchServer/*.jar - ServerWrapper/*.jar - modules/*.jar - expire_in: 1 week test: stage: test script: diff --git a/LaunchServer/build.gradle b/LaunchServer/build.gradle index 8288f840..1b0cb5e7 100644 --- a/LaunchServer/build.gradle +++ b/LaunchServer/build.gradle @@ -177,7 +177,7 @@ task dumpClientLibs(type: Copy) { from parent.childProjects.Launcher.tasks.dumpLibs.destinationDir } -build.dependsOn tasks.dumpLibs, tasks.dumpCompileOnlyLibs, tasks.dumpClientLibs, tasks.bundle, tasks.cleanjar +assemble.dependsOn tasks.dumpLibs, tasks.dumpCompileOnlyLibs, tasks.dumpClientLibs, tasks.bundle, tasks.cleanjar publishing { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java index 18516038..d5eee7fe 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java @@ -38,7 +38,6 @@ import pro.gravit.launcher.hasher.HashedDir; import pro.gravit.launcher.managers.ConfigManager; import pro.gravit.launcher.managers.GarbageManager; -import pro.gravit.launcher.modules.LauncherModulesManager; import pro.gravit.launcher.modules.events.ClosePhase; import pro.gravit.launcher.profiles.ClientProfile; import pro.gravit.launchserver.auth.AuthProviderPair; @@ -50,7 +49,10 @@ import pro.gravit.launchserver.binary.SimpleEXELauncherBinary; import pro.gravit.launchserver.config.LaunchServerConfig; import pro.gravit.launchserver.config.LaunchServerRuntimeConfig; -import pro.gravit.launchserver.manangers.*; +import pro.gravit.launchserver.manangers.CertificateManager; +import pro.gravit.launchserver.manangers.MirrorManager; +import pro.gravit.launchserver.manangers.ReconfigurableManager; +import pro.gravit.launchserver.manangers.SessionManager; import pro.gravit.launchserver.manangers.hook.AuthHookManager; import pro.gravit.launchserver.manangers.hook.BuildHookManager; import pro.gravit.launchserver.modules.events.LaunchServerFullInitEvent; @@ -59,7 +61,9 @@ import pro.gravit.launchserver.modules.events.NewLaunchServerInstanceEvent; import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager; import pro.gravit.launchserver.socket.handlers.NettyServerSocketHandler; -import pro.gravit.utils.command.*; +import pro.gravit.utils.command.Command; +import pro.gravit.utils.command.CommandHandler; +import pro.gravit.utils.command.SubCommand; import pro.gravit.utils.helper.CommonHelper; import pro.gravit.utils.helper.IOHelper; import pro.gravit.utils.helper.JVMHelper; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerBuilder.java b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerBuilder.java index 4a42c70b..310ac179 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerBuilder.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerBuilder.java @@ -1,14 +1,14 @@ package pro.gravit.launchserver; +import java.nio.file.Path; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; + import pro.gravit.launchserver.config.LaunchServerConfig; import pro.gravit.launchserver.config.LaunchServerRuntimeConfig; import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager; import pro.gravit.utils.command.CommandHandler; -import java.nio.file.Path; -import java.security.interfaces.RSAPrivateKey; -import java.security.interfaces.RSAPublicKey; - public class LaunchServerBuilder { private LaunchServerConfig config; private LaunchServerRuntimeConfig runtimeConfig; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerStarter.java b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerStarter.java index 132f8d6f..c019adec 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerStarter.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerStarter.java @@ -1,5 +1,15 @@ package pro.gravit.launchserver; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.Writer; +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.KeyPair; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; + import pro.gravit.launcher.Launcher; import pro.gravit.launcher.hwid.HWIDProvider; import pro.gravit.launcher.modules.events.PreConfigPhase; @@ -24,16 +34,6 @@ import pro.gravit.utils.helper.LogHelper; import pro.gravit.utils.helper.SecurityHelper; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.Writer; -import java.nio.file.Files; -import java.nio.file.Path; -import java.security.KeyPair; -import java.security.interfaces.RSAPrivateKey; -import java.security.interfaces.RSAPublicKey; - public class LaunchServerStarter { public static void main(String[] args) throws Exception { JVMHelper.checkStackTrace(LaunchServerStarter.class); diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/Reconfigurable.java b/LaunchServer/src/main/java/pro/gravit/launchserver/Reconfigurable.java index 07c5cde0..181ad476 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/Reconfigurable.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/Reconfigurable.java @@ -1,9 +1,9 @@ package pro.gravit.launchserver; -import pro.gravit.utils.command.Command; - import java.util.Map; +import pro.gravit.utils.command.Command; + /** * Allows calling commands using the config command */ diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/PostgreSQLSourceConfig.java b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/PostgreSQLSourceConfig.java index 7a852f03..643aaf6a 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/PostgreSQLSourceConfig.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/PostgreSQLSourceConfig.java @@ -1,16 +1,17 @@ package pro.gravit.launchserver.auth; +import java.sql.Connection; +import java.sql.SQLException; + +import javax.sql.DataSource; + +import org.postgresql.ds.PGSimpleDataSource; + import com.zaxxer.hikari.HikariDataSource; import pro.gravit.utils.helper.LogHelper; import pro.gravit.utils.helper.VerifyHelper; -import org.postgresql.ds.PGSimpleDataSource; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.SQLException; - public final class PostgreSQLSourceConfig implements AutoCloseable { public static final int TIMEOUT = VerifyHelper.verifyInt( Integer.parseUnsignedInt(System.getProperty("launcher.postgresql.idleTimeout", Integer.toString(5000))), diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/handler/CachedAuthHandler.java b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/handler/CachedAuthHandler.java index 0a63054d..1639727a 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/handler/CachedAuthHandler.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/handler/CachedAuthHandler.java @@ -15,7 +15,11 @@ import pro.gravit.launchserver.auth.provider.AuthProviderResult; import pro.gravit.utils.command.Command; import pro.gravit.utils.command.SubCommand; -import pro.gravit.utils.helper.*; +import pro.gravit.utils.helper.CommonHelper; +import pro.gravit.utils.helper.IOHelper; +import pro.gravit.utils.helper.LogHelper; +import pro.gravit.utils.helper.SecurityHelper; +import pro.gravit.utils.helper.VerifyHelper; public abstract class CachedAuthHandler extends AuthHandler implements NeedGarbageCollection, Reconfigurable { public static final class Entry { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/handler/PostgreSQLAuthHandler.java b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/handler/PostgreSQLAuthHandler.java index 697ee53b..2d794b1b 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/handler/PostgreSQLAuthHandler.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/handler/PostgreSQLAuthHandler.java @@ -1,13 +1,16 @@ package pro.gravit.launchserver.auth.handler; +import java.io.IOException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + import org.postgresql.util.PGobject; import pro.gravit.launchserver.auth.PostgreSQLSourceConfig; -import java.io.IOException; -import java.sql.*; -import java.util.UUID; - public final class PostgreSQLAuthHandler extends CachedAuthHandler { private PostgreSQLSourceConfig postgreSQLHolder; private String uuidColumn; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/hwid/JsonFileHWIDHandler.java b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/hwid/JsonFileHWIDHandler.java index b181da50..d48868e5 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/hwid/JsonFileHWIDHandler.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/hwid/JsonFileHWIDHandler.java @@ -12,8 +12,8 @@ import com.google.gson.reflect.TypeToken; -import pro.gravit.launcher.hwid.HWID; import pro.gravit.launcher.Launcher; +import pro.gravit.launcher.hwid.HWID; import pro.gravit.utils.helper.IOHelper; import pro.gravit.utils.helper.LogHelper; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/JARLauncherBinary.java b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/JARLauncherBinary.java index 179dadd1..724bcb16 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/JARLauncherBinary.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/JARLauncherBinary.java @@ -9,7 +9,13 @@ import pro.gravit.launcher.Launcher; import pro.gravit.launchserver.LaunchServer; -import pro.gravit.launchserver.binary.tasks.*; +import pro.gravit.launchserver.binary.tasks.AdditionalFixesApplyTask; +import pro.gravit.launchserver.binary.tasks.AttachJarsTask; +import pro.gravit.launchserver.binary.tasks.CompressBuildTask; +import pro.gravit.launchserver.binary.tasks.LauncherBuildTask; +import pro.gravit.launchserver.binary.tasks.MainBuildTask; +import pro.gravit.launchserver.binary.tasks.PrepareBuildTask; +import pro.gravit.launchserver.binary.tasks.ProGuardBuildTask; import pro.gravit.utils.helper.CommonHelper; import pro.gravit.utils.helper.IOHelper; import pro.gravit.utils.helper.LogHelper; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/LauncherConfigurator.java b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/LauncherConfigurator.java index d555ce64..56b5e6c8 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/LauncherConfigurator.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/LauncherConfigurator.java @@ -2,6 +2,7 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.FieldInsnNode; import org.objectweb.asm.tree.InsnList; @@ -12,15 +13,10 @@ import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.TypeInsnNode; import org.objectweb.asm.tree.VarInsnNode; -import org.objectweb.asm.Type; import pro.gravit.launcher.AutogenConfig; -import pro.gravit.launcher.Launcher; import pro.gravit.launcher.LauncherConfig; import pro.gravit.launcher.modules.LauncherModule; -import pro.gravit.launcher.modules.LauncherModulesManager; -import pro.gravit.launcher.modules.Module; -import pro.gravit.launcher.modules.ModulesManager; import pro.gravit.launchserver.asm.ClassMetadataReader; import pro.gravit.launchserver.asm.SafeClassWriter; @@ -66,36 +62,33 @@ public String getZipEntryPath() { } public void setAddress(String address) { - constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); - constructor.instructions.add(new LdcInsnNode(address)); - constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "address", stringDesc)); + setStringField("address", address); } public void setProjectName(String name) { - constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); - constructor.instructions.add(new LdcInsnNode(name)); - constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "projectname", stringDesc)); + setStringField("projectname", name); } public void setSecretKey(String key) { - constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); - constructor.instructions.add(new LdcInsnNode(key)); - constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "secretKeyClient", stringDesc)); + setStringField("secretKeyClient", key); } public void setOemUnlockKey(String key) { + setStringField("oemUnlockKey", key); + } + + private void setStringField(String name, String value) + { constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); - constructor.instructions.add(new LdcInsnNode(key)); - constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "oemUnlockKey", stringDesc)); + constructor.instructions.add(new LdcInsnNode(value)); + constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, name, stringDesc)); } public void setGuardType(String key) { - constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); - constructor.instructions.add(new LdcInsnNode(key)); - constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "guardType", stringDesc)); + setStringField("guardType", key); } - public void push(final int value) { + private void push(final int value) { if (value >= -1 && value <= 5) constructor.instructions.add(new InsnNode(Opcodes.ICONST_0 + value)); else if (value >= Byte.MIN_VALUE && value <= Byte.MAX_VALUE) @@ -129,15 +122,25 @@ public void setEnv(LauncherConfig.LauncherEnvironment env) { } public void setClientPort(int port) { + setIntegerField("clientPort", port); + } + + public void setIntegerField(String name, int value) + { constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); - push(port); - constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "clientPort", Type.INT_TYPE.getInternalName())); + push(value); + constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, name, Type.INT_TYPE.getInternalName())); } public void setWarningMissArchJava(boolean b) { + setBooleanField("isWarningMissArchJava", b); + } + + private void setBooleanField(String name, boolean b) + { constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); constructor.instructions.add(new InsnNode(b ? Opcodes.ICONST_1 : Opcodes.ICONST_0)); - constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "isWarningMissArchJava", Type.BOOLEAN_TYPE.getInternalName())); + constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, name, Type.BOOLEAN_TYPE.getInternalName())); } public void setGuardLicense(String name, String key, String encryptKey) { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/ProguardConf.java b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/ProguardConf.java index 78246022..a5286aec 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/ProguardConf.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/ProguardConf.java @@ -19,11 +19,12 @@ public class ProguardConf { private static final String chars = "1aAbBcC2dDeEfF3gGhHiI4jJkKl5mMnNoO6pPqQrR7sStT8uUvV9wWxX0yYzZ"; private static String generateString(SecureRandom rand, String lowString, String upString, int il) { - StringBuilder sb = new StringBuilder(il + lowString.length()); + StringBuilder sb = new StringBuilder(Math.max(il, lowString.length())); for (int i = 0; i < lowString.length(); ++i) { sb.append(rand.nextBoolean() ? lowString.charAt(i) : upString.charAt(i)); } - for (int i = 0; i < il - 1; i++) sb.append(chars.charAt(rand.nextInt(chars.length()))); + int toI = il - lowString.length(); + for (int i = 0; i < toI; i++) sb.append(chars.charAt(rand.nextInt(chars.length()))); return sb.toString(); } @@ -74,7 +75,7 @@ public void genWords(boolean force) throws IOException { String projectName = srv.config.projectName.replaceAll("\\W", ""); String lowName = projectName.toLowerCase(); String upName = projectName.toUpperCase(); - for (int i = 0; i < Short.MAX_VALUE; i++) out.println(generateString(rand, lowName, upName, 3)); + for (int i = 0; i < Short.MAX_VALUE; i++) out.println(generateString(rand, lowName, upName, 14)); } } diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/SimpleEXELauncherBinary.java b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/SimpleEXELauncherBinary.java index 1bbac5cd..006c9fb0 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/SimpleEXELauncherBinary.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/SimpleEXELauncherBinary.java @@ -1,13 +1,13 @@ package pro.gravit.launchserver.binary; -import pro.gravit.launchserver.LaunchServer; -import pro.gravit.utils.helper.IOHelper; -import pro.gravit.utils.helper.LogHelper; - import java.io.IOException; import java.io.OutputStream; import java.nio.file.Path; +import pro.gravit.launchserver.LaunchServer; +import pro.gravit.utils.helper.IOHelper; +import pro.gravit.utils.helper.LogHelper; + public class SimpleEXELauncherBinary extends LauncherBinary { public Path exeTemplate; public SimpleEXELauncherBinary(LaunchServer server) { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/tasks/CompressBuildTask.java b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/tasks/CompressBuildTask.java index b8d1c194..9766a1b6 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/tasks/CompressBuildTask.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/tasks/CompressBuildTask.java @@ -1,8 +1,5 @@ package pro.gravit.launchserver.binary.tasks; -import pro.gravit.launchserver.LaunchServer; -import pro.gravit.utils.helper.IOHelper; - import java.io.IOException; import java.nio.file.Path; import java.util.zip.Deflater; @@ -10,6 +7,9 @@ import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; +import pro.gravit.launchserver.LaunchServer; +import pro.gravit.utils.helper.IOHelper; + public class CompressBuildTask implements LauncherBuildTask { public transient final LaunchServer server; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/command/Command.java b/LaunchServer/src/main/java/pro/gravit/launchserver/command/Command.java index 32ed911e..ef48ce08 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/command/Command.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/command/Command.java @@ -1,9 +1,9 @@ package pro.gravit.launchserver.command; -import pro.gravit.launchserver.LaunchServer; - import java.util.Map; +import pro.gravit.launchserver.LaunchServer; + public abstract class Command extends pro.gravit.utils.command.Command { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/command/handler/CommandHandler.java b/LaunchServer/src/main/java/pro/gravit/launchserver/command/handler/CommandHandler.java index 98c9ea7b..ec3f0c2d 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/command/handler/CommandHandler.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/command/handler/CommandHandler.java @@ -28,7 +28,13 @@ import pro.gravit.launchserver.command.install.MultiCommand; import pro.gravit.launchserver.command.modules.LoadModuleCommand; import pro.gravit.launchserver.command.modules.ModulesCommand; -import pro.gravit.launchserver.command.service.*; +import pro.gravit.launchserver.command.service.ClientsCommand; +import pro.gravit.launchserver.command.service.ComponentCommand; +import pro.gravit.launchserver.command.service.ConfigCommand; +import pro.gravit.launchserver.command.service.GetModulusCommand; +import pro.gravit.launchserver.command.service.GetPermissionsCommand; +import pro.gravit.launchserver.command.service.GivePermissionsCommand; +import pro.gravit.launchserver.command.service.ServerStatusCommand; import pro.gravit.utils.command.BaseCommandCategory; import pro.gravit.utils.command.basic.ClearCommand; import pro.gravit.utils.command.basic.DebugCommand; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/command/modules/LoadModuleCommand.java b/LaunchServer/src/main/java/pro/gravit/launchserver/command/modules/LoadModuleCommand.java index 7c9b5e83..78ce06ea 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/command/modules/LoadModuleCommand.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/command/modules/LoadModuleCommand.java @@ -1,6 +1,5 @@ package pro.gravit.launchserver.command.modules; -import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/components/AuthLimiterComponent.java b/LaunchServer/src/main/java/pro/gravit/launchserver/components/AuthLimiterComponent.java index 1e7ca11a..5b01de0e 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/components/AuthLimiterComponent.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/components/AuthLimiterComponent.java @@ -1,8 +1,5 @@ package pro.gravit.launchserver.components; -import java.util.ArrayList; -import java.util.List; - import pro.gravit.launcher.NeedGarbageCollection; import pro.gravit.launchserver.LaunchServer; import pro.gravit.launchserver.socket.Client; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java b/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java index fbcdf705..a3e5aa04 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java @@ -1,5 +1,11 @@ package pro.gravit.launchserver.config; +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + import io.netty.channel.epoll.Epoll; import io.netty.handler.logging.LogLevel; import pro.gravit.launcher.Launcher; @@ -24,12 +30,6 @@ import pro.gravit.utils.helper.JVMHelper; import pro.gravit.utils.helper.LogHelper; -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - public final class LaunchServerConfig { private transient LaunchServer server = null; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/dao/User.java b/LaunchServer/src/main/java/pro/gravit/launchserver/dao/User.java index 0573c2c3..6dedae53 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/dao/User.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/dao/User.java @@ -30,6 +30,7 @@ public class User { private long id; @Column(unique = true) public String username; + public String email; @Column(unique = true) public UUID uuid; @Column(name = "password") @@ -66,8 +67,6 @@ public boolean verifyPassword(String password) return false; } byte[] enpassword = digest.digest(password.concat(password_salt).getBytes(StandardCharsets.UTF_8)); - LogHelper.info(Arrays.toString(enpassword)); - LogHelper.info(Arrays.toString(this.password)); return Arrays.equals(enpassword, this.password); } public ClientPermissions getPermissions() diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/dao/provider/HibernateDaoProvider.java b/LaunchServer/src/main/java/pro/gravit/launchserver/dao/provider/HibernateDaoProvider.java index 541f43ed..c9483916 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/dao/provider/HibernateDaoProvider.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/dao/provider/HibernateDaoProvider.java @@ -1,6 +1,9 @@ package pro.gravit.launchserver.dao.provider; +import java.nio.file.Paths; + import org.hibernate.cfg.Configuration; + import pro.gravit.launchserver.LaunchServer; import pro.gravit.launchserver.dao.User; import pro.gravit.launchserver.dao.UserHWID; @@ -8,13 +11,12 @@ import pro.gravit.launchserver.dao.impl.HibernateUserDAOImpl; import pro.gravit.utils.helper.CommonHelper; -import java.nio.file.Paths; - public class HibernateDaoProvider extends DaoProvider { public String driver; public String url; public String username; public String password; + public String dialect; public String pool_size; public String hibernateConfig; public boolean parallelHibernateInit; @@ -30,6 +32,8 @@ public void init(LaunchServer server) { .setProperty("hibernate.connection.username", username) .setProperty("hibernate.connection.password", password) .setProperty("hibernate.connection.pool_size", pool_size); + if(dialect != null) + cfg.setProperty("hibernate.dialect", dialect); if(hibernateConfig != null) cfg.configure(Paths.get(hibernateConfig).toFile()); userDAO = new HibernateUserDAOImpl(cfg.buildSessionFactory()); diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/CoreModule.java b/LaunchServer/src/main/java/pro/gravit/launchserver/modules/CoreModule.java deleted file mode 100644 index 5590aaf8..00000000 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/CoreModule.java +++ /dev/null @@ -1,43 +0,0 @@ -package pro.gravit.launchserver.modules; - -import pro.gravit.launcher.modules.Module; -import pro.gravit.launcher.modules.ModuleContext; -import pro.gravit.utils.Version; - -public class CoreModule implements Module { - @Override - public void close() { - // nothing to do - } - - @Override - public String getName() { - return "LaunchServer"; - } - - @Override - public Version getVersion() { - return Version.getVersion(); - } - - @Override - public int getPriority() { - return 0; - } - - @Override - public void init(ModuleContext context) { - // nothing to do - } - - @Override - public void postInit(ModuleContext context) { - // nothing to do - } - - - @Override - public void preInit(ModuleContext context) { - // nothing to do - } -} diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/LaunchServerModuleContext.java b/LaunchServer/src/main/java/pro/gravit/launchserver/modules/LaunchServerModuleContext.java deleted file mode 100644 index b753032a..00000000 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/LaunchServerModuleContext.java +++ /dev/null @@ -1,35 +0,0 @@ -package pro.gravit.launchserver.modules; - -import pro.gravit.launcher.managers.SimpleModulesConfigManager; -import pro.gravit.launcher.modules.ModuleContext; -import pro.gravit.launcher.modules.ModulesConfigManager; -import pro.gravit.launcher.modules.ModulesManager; -import pro.gravit.launchserver.LaunchServer; -import pro.gravit.utils.PublicURLClassLoader; - -public class LaunchServerModuleContext implements ModuleContext { - public final LaunchServer launchServer; - public final PublicURLClassLoader classloader; - public final SimpleModulesConfigManager modulesConfigManager; - - public LaunchServerModuleContext(LaunchServer server, PublicURLClassLoader classloader, SimpleModulesConfigManager modulesConfigManager) { - launchServer = server; - this.classloader = classloader; - this.modulesConfigManager = modulesConfigManager; - } - - @Override - public Type getType() { - return Type.LAUNCHSERVER; - } - - @Override - public ModulesManager getModulesManager() { - return null; - } - - @Override - public ModulesConfigManager getModulesConfigManager() { - return modulesConfigManager; - } -} diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/SimpleModule.java b/LaunchServer/src/main/java/pro/gravit/launchserver/modules/SimpleModule.java deleted file mode 100644 index 6495cfd6..00000000 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/SimpleModule.java +++ /dev/null @@ -1,43 +0,0 @@ -package pro.gravit.launchserver.modules; - -import pro.gravit.launcher.modules.Module; -import pro.gravit.launcher.modules.ModuleContext; -import pro.gravit.utils.Version; - -public class SimpleModule implements Module { - @Override - public void close() { - // on stop - } - - @Override - public String getName() { - return "SimpleModule"; - } - - @Override - public Version getVersion() { - return new Version(1, 0, 0, 0, Version.Type.UNKNOWN); - } - - @Override - public int getPriority() { - return 0; - } - - @Override - public void init(ModuleContext context) { - - } - - @Override - public void postInit(ModuleContext context) { - - } - - - @Override - public void preInit(ModuleContext context) { - - } -} diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/events/LaunchServerPostInitPhase.java b/LaunchServer/src/main/java/pro/gravit/launchserver/modules/events/LaunchServerPostInitPhase.java index 9c131c85..e582bdf0 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/events/LaunchServerPostInitPhase.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/modules/events/LaunchServerPostInitPhase.java @@ -1,6 +1,5 @@ package pro.gravit.launchserver.modules.events; -import pro.gravit.launcher.modules.events.InitPhase; import pro.gravit.launcher.modules.events.PostInitPhase; import pro.gravit.launchserver.LaunchServer; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/impl/LaunchServerCoreModule.java b/LaunchServer/src/main/java/pro/gravit/launchserver/modules/impl/LaunchServerCoreModule.java index c816d073..88557e35 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/impl/LaunchServerCoreModule.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/modules/impl/LaunchServerCoreModule.java @@ -5,7 +5,6 @@ import pro.gravit.launcher.modules.LauncherModuleInfo; import pro.gravit.launcher.modules.events.InitPhase; import pro.gravit.utils.Version; -import pro.gravit.utils.helper.LogHelper; public class LaunchServerCoreModule extends LauncherModule { public LaunchServerCoreModule() { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/impl/LaunchServerModulesManager.java b/LaunchServer/src/main/java/pro/gravit/launchserver/modules/impl/LaunchServerModulesManager.java index 4b7e1af3..0cc68190 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/modules/impl/LaunchServerModulesManager.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/modules/impl/LaunchServerModulesManager.java @@ -1,14 +1,14 @@ package pro.gravit.launchserver.modules.impl; +import java.nio.file.Path; +import java.util.Arrays; + import pro.gravit.launcher.modules.LauncherModule; import pro.gravit.launcher.modules.LauncherModuleInfo; import pro.gravit.launcher.modules.impl.SimpleModuleManager; import pro.gravit.launchserver.LaunchServer; import pro.gravit.utils.helper.LogHelper; -import java.nio.file.Path; -import java.util.Arrays; - public class LaunchServerModulesManager extends SimpleModuleManager { public LaunchServerCoreModule coreModule; public LaunchServerModulesManager(Path modulesDir, Path configDir) { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/socket/WebSocketService.java b/LaunchServer/src/main/java/pro/gravit/launchserver/socket/WebSocketService.java index dedf17da..6749d352 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/socket/WebSocketService.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/socket/WebSocketService.java @@ -1,7 +1,6 @@ package pro.gravit.launchserver.socket; import java.lang.reflect.Type; -import java.util.HashMap; import com.google.gson.Gson; @@ -21,14 +20,7 @@ import pro.gravit.launchserver.socket.response.WebSocketServerResponse; import pro.gravit.launchserver.socket.response.admin.AddLogListenerResponse; import pro.gravit.launchserver.socket.response.admin.ExecCommandResponse; -import pro.gravit.launchserver.socket.response.auth.AuthResponse; -import pro.gravit.launchserver.socket.response.auth.CheckServerResponse; -import pro.gravit.launchserver.socket.response.auth.GetAvailabilityAuthResponse; -import pro.gravit.launchserver.socket.response.auth.JoinServerResponse; -import pro.gravit.launchserver.socket.response.auth.ProfilesResponse; -import pro.gravit.launchserver.socket.response.auth.RegisterResponse; -import pro.gravit.launchserver.socket.response.auth.RestoreSessionResponse; -import pro.gravit.launchserver.socket.response.auth.SetProfileResponse; +import pro.gravit.launchserver.socket.response.auth.*; import pro.gravit.launchserver.socket.response.profile.BatchProfileByUsername; import pro.gravit.launchserver.socket.response.profile.ProfileByUUIDResponse; import pro.gravit.launchserver.socket.response.profile.ProfileByUsername; @@ -42,7 +34,6 @@ import pro.gravit.utils.helper.IOHelper; import pro.gravit.utils.helper.LogHelper; -@SuppressWarnings("rawtypes") public class WebSocketService { public final ChannelGroup channels; public static ProviderMap providers = new ProviderMap<>(); @@ -132,6 +123,7 @@ public static void registerResponses() { providers.register("verifySecureToken", VerifySecureTokenResponse.class); providers.register("getAvailabilityAuth", GetAvailabilityAuthResponse.class); providers.register("register", RegisterResponse.class); + providers.register("setPassword", SetPasswordResponse.class); } public void sendObject(ChannelHandlerContext ctx, Object obj) { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/AuthResponse.java b/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/AuthResponse.java index 84cc20be..7b0afcd8 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/AuthResponse.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/AuthResponse.java @@ -9,9 +9,9 @@ import javax.crypto.IllegalBlockSizeException; import io.netty.channel.ChannelHandlerContext; +import pro.gravit.launcher.events.request.AuthRequestEvent; import pro.gravit.launcher.hwid.HWID; import pro.gravit.launcher.hwid.OshiHWID; -import pro.gravit.launcher.events.request.AuthRequestEvent; import pro.gravit.launcher.profiles.ClientProfile; import pro.gravit.launchserver.auth.AuthException; import pro.gravit.launchserver.auth.AuthProviderPair; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/RegisterResponse.java b/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/RegisterResponse.java index b5fae77e..1db67efd 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/RegisterResponse.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/RegisterResponse.java @@ -1,19 +1,20 @@ package pro.gravit.launchserver.socket.response.auth; -import io.netty.channel.ChannelHandlerContext; -import pro.gravit.launchserver.dao.User; -import pro.gravit.launchserver.socket.Client; -import pro.gravit.launchserver.socket.response.SimpleResponse; - import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.UUID; +import io.netty.channel.ChannelHandlerContext; +import pro.gravit.launchserver.dao.User; +import pro.gravit.launchserver.socket.Client; +import pro.gravit.launchserver.socket.response.SimpleResponse; + public class RegisterResponse extends SimpleResponse { public String login; public String password; + public String email; public byte[] verifyHash; @Override public void execute(ChannelHandlerContext ctx, Client client) throws Exception @@ -32,6 +33,7 @@ public void execute(ChannelHandlerContext ctx, Client client) throws Exception } User user = new User(); user.username = login; + user.email = email; user.setPassword(password); user.uuid = UUID.randomUUID(); server.config.dao.userService.saveUser(user); diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/SetPasswordResponse.java b/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/SetPasswordResponse.java new file mode 100644 index 00000000..93f2fb26 --- /dev/null +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/SetPasswordResponse.java @@ -0,0 +1,55 @@ +package pro.gravit.launchserver.socket.response.auth; + +import io.netty.channel.ChannelHandlerContext; +import pro.gravit.launcher.events.request.SetPasswordRequestEvent; +import pro.gravit.launchserver.dao.User; +import pro.gravit.launchserver.socket.Client; +import pro.gravit.launchserver.socket.response.SimpleResponse; + +public class SetPasswordResponse extends SimpleResponse { + public String oldPassword; + public String newPassword; + public String username; + @Override + public String getType() { + return "setPassword"; + } + + @Override + public void execute(ChannelHandlerContext ctx, Client client) throws Exception { + if(( oldPassword == null && username == null ) || newPassword == null) + { + sendError("Request invalid"); + return; + } + if(!client.isAuth) + { + sendError("You not authorized"); + return; + } + if(username != null && !client.permissions.canAdmin) + { + sendError("You not admin"); + return; + } + if(username != null) + { + User user = server.config.dao.userService.findUserByUsername(username); + user.setPassword(newPassword); + sendResult(new SetPasswordRequestEvent()); + } + else + { + User user = server.config.dao.userService.findUserByUsername(client.username); + if(user.verifyPassword(oldPassword)) + { + user.setPassword(newPassword); + sendResult(new SetPasswordRequestEvent()); + } + else + { + sendError("Old password incorrect"); + } + } + } +} diff --git a/LaunchServer/src/test/java/pro/gravit/launchserver/StartLaunchServerTest.java b/LaunchServer/src/test/java/pro/gravit/launchserver/StartLaunchServerTest.java index d0dc375f..4af453ca 100644 --- a/LaunchServer/src/test/java/pro/gravit/launchserver/StartLaunchServerTest.java +++ b/LaunchServer/src/test/java/pro/gravit/launchserver/StartLaunchServerTest.java @@ -1,23 +1,23 @@ package pro.gravit.launchserver; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import pro.gravit.launcher.Launcher; -import pro.gravit.launcher.managers.SimpleModulesConfigManager; -import pro.gravit.launchserver.config.LaunchServerConfig; -import pro.gravit.launchserver.config.LaunchServerRuntimeConfig; -import pro.gravit.launchserver.manangers.LaunchServerGsonManager; -import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager; -import pro.gravit.utils.command.StdCommandHandler; -import pro.gravit.utils.helper.SecurityHelper; - import java.io.IOException; import java.nio.file.Path; import java.security.KeyPair; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import pro.gravit.launcher.Launcher; +import pro.gravit.launchserver.config.LaunchServerConfig; +import pro.gravit.launchserver.config.LaunchServerRuntimeConfig; +import pro.gravit.launchserver.manangers.LaunchServerGsonManager; +import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager; +import pro.gravit.utils.command.StdCommandHandler; +import pro.gravit.utils.helper.SecurityHelper; + public class StartLaunchServerTest { @TempDir public static Path modulesDir; @@ -30,7 +30,6 @@ public class StartLaunchServerTest { public static void prepare() throws Exception { LaunchServerModulesManager modulesManager = new LaunchServerModulesManager(modulesDir, configDir); - SimpleModulesConfigManager configManager = new SimpleModulesConfigManager(configDir); LaunchServerConfig config = LaunchServerConfig.getDefault(LaunchServer.LaunchServerEnv.TEST); Launcher.gsonManager = new LaunchServerGsonManager(modulesManager); Launcher.gsonManager.initGson(); diff --git a/Launcher/build.gradle b/Launcher/build.gradle index 2cc9e3cb..4d368664 100644 --- a/Launcher/build.gradle +++ b/Launcher/build.gradle @@ -66,7 +66,7 @@ task dumpLibs(type: Copy) { } -build.dependsOn tasks.genRuntimeJS, tasks.dumpLibs, tasks.shadowJar +assemble.dependsOn tasks.genRuntimeJS, tasks.dumpLibs, tasks.shadowJar publishing { publications { diff --git a/Launcher/runtime/config.js b/Launcher/runtime/config.js index 28f92dba..1f1f81b4 100644 --- a/Launcher/runtime/config.js +++ b/Launcher/runtime/config.js @@ -4,12 +4,20 @@ var config = { title: "GravitLauncher", // Заголовок окна icons: ["favicon.png"], // Путь/Пути до иконки окна - //*** Меню авторизации ***// - linkText: "GravitLauncher", // Текст ссылки - linkURL: new java.net.URL("https://gravit.pro"), // Ссылка - - //*** Меню выбора серверов ***// - discord: new java.net.URL("https://discord.gg/aJK6nMN"), // Ссылка + links: [ + //*** Ссылки ***// + { + id: "link", + text: "GravitLauncher", + url: "https://gravit.pro", + }, + + { + id: "discord", + text: "", + url: "https://discord.gg/aJK6nMN", + } + ], //*** Стандартные настройки клиента ***// autoEnterDefault: false, // Автоматический вход на выбранный сервер diff --git a/Launcher/runtime/dialog/dialog.js b/Launcher/runtime/dialog/dialog.js index 1173456b..cb99d0a0 100644 --- a/Launcher/runtime/dialog/dialog.js +++ b/Launcher/runtime/dialog/dialog.js @@ -37,7 +37,6 @@ function initLoginScene() { bar = pane; loginPane.lookup("#close").setOnAction(function(event) { javafx.application.Platform.exit() }); loginPane.lookup("#hide").setOnAction(function(event) { stage.setIconified(true) }); - loginPane.lookup("#discord").setOnAction(function() { openURL(config.discord); }); var pane = loginPane.lookup("#authPane"); authPane = pane; @@ -63,13 +62,23 @@ function initLoginScene() { savePasswordBox = pane.lookup("#rememberchb"); savePasswordBox.setSelected(settings.login === null || settings.rsaPassword !== null); - var link = pane.lookup("#link"); - link.setText(config.linkText); - link.setOnAction(function(event) app.getHostServices().showDocument(config.linkURL.toURI())); - authOptions = pane.lookup("#authOptions"); pane.lookup("#goAuth").setOnAction(goAuth); + + var pane = loginPane; + config.links.forEach(function(link) { + var el = pane.lookup("#link_" + link.id); + if (el === null) return; + + el.setOnAction(function() { + openURL(new java.net.URL(link.url)); + }); + + if (link.text === "") return; + + el.setText(link.text); + }); } /* ======== init Menu window======== */ @@ -88,7 +97,6 @@ function initMenuScene() { bar = pane; pane.lookup("#close").setOnAction(function(event) { javafx.application.Platform.exit() }); pane.lookup("#hide").setOnAction(function(event) { stage.setIconified(true) }); - pane.lookup("#discord").setOnAction(function() { openURL(config.discord); }); pane.lookup("#settings").setOnAction(goSettings); pane.lookup("#goConsole").setOnAction(goConsole); @@ -112,6 +120,19 @@ function initMenuScene() { setCurrentScene(loginScene); }); + var pane = menuPane; + config.links.forEach(function(link) { + var el = pane.lookup("#link_" + link.id); + if (el === null) return; + + el.setOnAction(function() { + openURL(new java.net.URL(link.url)); + }); + + if (link.text === "") return; + + el.setText(link.text); + }); } /* ======== init Console window======== */ diff --git a/Launcher/runtime/dialog/scenes/login/login.fxml b/Launcher/runtime/dialog/scenes/login/login.fxml index b1e94c9e..43f83937 100644 --- a/Launcher/runtime/dialog/scenes/login/login.fxml +++ b/Launcher/runtime/dialog/scenes/login/login.fxml @@ -32,7 +32,7 @@ - + @@ -57,7 +57,7 @@ - -