mirror of
https://github.com/GravitLauncher/Launcher
synced 2025-02-02 04:25:27 +03:00
Merge branch 'release/5.0.8'
This commit is contained in:
commit
3ee33b3207
76 changed files with 396 additions and 483 deletions
|
@ -32,7 +32,6 @@ build:
|
||||||
- LaunchServer/*.jar
|
- LaunchServer/*.jar
|
||||||
- ServerWrapper/*.jar
|
- ServerWrapper/*.jar
|
||||||
- modules/*.jar
|
- modules/*.jar
|
||||||
expire_in: 1 week
|
|
||||||
test:
|
test:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
|
|
|
@ -177,7 +177,7 @@ task dumpClientLibs(type: Copy) {
|
||||||
from parent.childProjects.Launcher.tasks.dumpLibs.destinationDir
|
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 {
|
publishing {
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
import pro.gravit.launcher.hasher.HashedDir;
|
import pro.gravit.launcher.hasher.HashedDir;
|
||||||
import pro.gravit.launcher.managers.ConfigManager;
|
import pro.gravit.launcher.managers.ConfigManager;
|
||||||
import pro.gravit.launcher.managers.GarbageManager;
|
import pro.gravit.launcher.managers.GarbageManager;
|
||||||
import pro.gravit.launcher.modules.LauncherModulesManager;
|
|
||||||
import pro.gravit.launcher.modules.events.ClosePhase;
|
import pro.gravit.launcher.modules.events.ClosePhase;
|
||||||
import pro.gravit.launcher.profiles.ClientProfile;
|
import pro.gravit.launcher.profiles.ClientProfile;
|
||||||
import pro.gravit.launchserver.auth.AuthProviderPair;
|
import pro.gravit.launchserver.auth.AuthProviderPair;
|
||||||
|
@ -50,7 +49,10 @@
|
||||||
import pro.gravit.launchserver.binary.SimpleEXELauncherBinary;
|
import pro.gravit.launchserver.binary.SimpleEXELauncherBinary;
|
||||||
import pro.gravit.launchserver.config.LaunchServerConfig;
|
import pro.gravit.launchserver.config.LaunchServerConfig;
|
||||||
import pro.gravit.launchserver.config.LaunchServerRuntimeConfig;
|
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.AuthHookManager;
|
||||||
import pro.gravit.launchserver.manangers.hook.BuildHookManager;
|
import pro.gravit.launchserver.manangers.hook.BuildHookManager;
|
||||||
import pro.gravit.launchserver.modules.events.LaunchServerFullInitEvent;
|
import pro.gravit.launchserver.modules.events.LaunchServerFullInitEvent;
|
||||||
|
@ -59,7 +61,9 @@
|
||||||
import pro.gravit.launchserver.modules.events.NewLaunchServerInstanceEvent;
|
import pro.gravit.launchserver.modules.events.NewLaunchServerInstanceEvent;
|
||||||
import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager;
|
import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager;
|
||||||
import pro.gravit.launchserver.socket.handlers.NettyServerSocketHandler;
|
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.CommonHelper;
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
import pro.gravit.utils.helper.JVMHelper;
|
import pro.gravit.utils.helper.JVMHelper;
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
package pro.gravit.launchserver;
|
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.LaunchServerConfig;
|
||||||
import pro.gravit.launchserver.config.LaunchServerRuntimeConfig;
|
import pro.gravit.launchserver.config.LaunchServerRuntimeConfig;
|
||||||
import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager;
|
import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager;
|
||||||
import pro.gravit.utils.command.CommandHandler;
|
import pro.gravit.utils.command.CommandHandler;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.security.interfaces.RSAPrivateKey;
|
|
||||||
import java.security.interfaces.RSAPublicKey;
|
|
||||||
|
|
||||||
public class LaunchServerBuilder {
|
public class LaunchServerBuilder {
|
||||||
private LaunchServerConfig config;
|
private LaunchServerConfig config;
|
||||||
private LaunchServerRuntimeConfig runtimeConfig;
|
private LaunchServerRuntimeConfig runtimeConfig;
|
||||||
|
|
|
@ -1,5 +1,15 @@
|
||||||
package pro.gravit.launchserver;
|
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.Launcher;
|
||||||
import pro.gravit.launcher.hwid.HWIDProvider;
|
import pro.gravit.launcher.hwid.HWIDProvider;
|
||||||
import pro.gravit.launcher.modules.events.PreConfigPhase;
|
import pro.gravit.launcher.modules.events.PreConfigPhase;
|
||||||
|
@ -24,16 +34,6 @@
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
import pro.gravit.utils.helper.SecurityHelper;
|
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 class LaunchServerStarter {
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
JVMHelper.checkStackTrace(LaunchServerStarter.class);
|
JVMHelper.checkStackTrace(LaunchServerStarter.class);
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package pro.gravit.launchserver;
|
package pro.gravit.launchserver;
|
||||||
|
|
||||||
import pro.gravit.utils.command.Command;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import pro.gravit.utils.command.Command;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows calling commands using the config command
|
* Allows calling commands using the config command
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
package pro.gravit.launchserver.auth;
|
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 com.zaxxer.hikari.HikariDataSource;
|
||||||
|
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
import pro.gravit.utils.helper.VerifyHelper;
|
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 final class PostgreSQLSourceConfig implements AutoCloseable {
|
||||||
public static final int TIMEOUT = VerifyHelper.verifyInt(
|
public static final int TIMEOUT = VerifyHelper.verifyInt(
|
||||||
Integer.parseUnsignedInt(System.getProperty("launcher.postgresql.idleTimeout", Integer.toString(5000))),
|
Integer.parseUnsignedInt(System.getProperty("launcher.postgresql.idleTimeout", Integer.toString(5000))),
|
||||||
|
|
|
@ -15,7 +15,11 @@
|
||||||
import pro.gravit.launchserver.auth.provider.AuthProviderResult;
|
import pro.gravit.launchserver.auth.provider.AuthProviderResult;
|
||||||
import pro.gravit.utils.command.Command;
|
import pro.gravit.utils.command.Command;
|
||||||
import pro.gravit.utils.command.SubCommand;
|
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 abstract class CachedAuthHandler extends AuthHandler implements NeedGarbageCollection, Reconfigurable {
|
||||||
public static final class Entry {
|
public static final class Entry {
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
package pro.gravit.launchserver.auth.handler;
|
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 org.postgresql.util.PGobject;
|
||||||
|
|
||||||
import pro.gravit.launchserver.auth.PostgreSQLSourceConfig;
|
import pro.gravit.launchserver.auth.PostgreSQLSourceConfig;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.sql.*;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public final class PostgreSQLAuthHandler extends CachedAuthHandler {
|
public final class PostgreSQLAuthHandler extends CachedAuthHandler {
|
||||||
private PostgreSQLSourceConfig postgreSQLHolder;
|
private PostgreSQLSourceConfig postgreSQLHolder;
|
||||||
private String uuidColumn;
|
private String uuidColumn;
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
|
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
import pro.gravit.launcher.hwid.HWID;
|
|
||||||
import pro.gravit.launcher.Launcher;
|
import pro.gravit.launcher.Launcher;
|
||||||
|
import pro.gravit.launcher.hwid.HWID;
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,13 @@
|
||||||
|
|
||||||
import pro.gravit.launcher.Launcher;
|
import pro.gravit.launcher.Launcher;
|
||||||
import pro.gravit.launchserver.LaunchServer;
|
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.CommonHelper;
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
import org.objectweb.asm.ClassWriter;
|
import org.objectweb.asm.ClassWriter;
|
||||||
import org.objectweb.asm.Opcodes;
|
import org.objectweb.asm.Opcodes;
|
||||||
|
import org.objectweb.asm.Type;
|
||||||
import org.objectweb.asm.tree.ClassNode;
|
import org.objectweb.asm.tree.ClassNode;
|
||||||
import org.objectweb.asm.tree.FieldInsnNode;
|
import org.objectweb.asm.tree.FieldInsnNode;
|
||||||
import org.objectweb.asm.tree.InsnList;
|
import org.objectweb.asm.tree.InsnList;
|
||||||
|
@ -12,15 +13,10 @@
|
||||||
import org.objectweb.asm.tree.MethodNode;
|
import org.objectweb.asm.tree.MethodNode;
|
||||||
import org.objectweb.asm.tree.TypeInsnNode;
|
import org.objectweb.asm.tree.TypeInsnNode;
|
||||||
import org.objectweb.asm.tree.VarInsnNode;
|
import org.objectweb.asm.tree.VarInsnNode;
|
||||||
import org.objectweb.asm.Type;
|
|
||||||
|
|
||||||
import pro.gravit.launcher.AutogenConfig;
|
import pro.gravit.launcher.AutogenConfig;
|
||||||
import pro.gravit.launcher.Launcher;
|
|
||||||
import pro.gravit.launcher.LauncherConfig;
|
import pro.gravit.launcher.LauncherConfig;
|
||||||
import pro.gravit.launcher.modules.LauncherModule;
|
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.ClassMetadataReader;
|
||||||
import pro.gravit.launchserver.asm.SafeClassWriter;
|
import pro.gravit.launchserver.asm.SafeClassWriter;
|
||||||
|
|
||||||
|
@ -66,36 +62,33 @@ public String getZipEntryPath() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAddress(String address) {
|
public void setAddress(String address) {
|
||||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
setStringField("address", address);
|
||||||
constructor.instructions.add(new LdcInsnNode(address));
|
|
||||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "address", stringDesc));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setProjectName(String name) {
|
public void setProjectName(String name) {
|
||||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
setStringField("projectname", name);
|
||||||
constructor.instructions.add(new LdcInsnNode(name));
|
|
||||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "projectname", stringDesc));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSecretKey(String key) {
|
public void setSecretKey(String key) {
|
||||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
setStringField("secretKeyClient", key);
|
||||||
constructor.instructions.add(new LdcInsnNode(key));
|
|
||||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "secretKeyClient", stringDesc));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOemUnlockKey(String 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 VarInsnNode(Opcodes.ALOAD, 0));
|
||||||
constructor.instructions.add(new LdcInsnNode(key));
|
constructor.instructions.add(new LdcInsnNode(value));
|
||||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "oemUnlockKey", stringDesc));
|
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, name, stringDesc));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGuardType(String key) {
|
public void setGuardType(String key) {
|
||||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
setStringField("guardType", key);
|
||||||
constructor.instructions.add(new LdcInsnNode(key));
|
|
||||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "guardType", stringDesc));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void push(final int value) {
|
private void push(final int value) {
|
||||||
if (value >= -1 && value <= 5)
|
if (value >= -1 && value <= 5)
|
||||||
constructor.instructions.add(new InsnNode(Opcodes.ICONST_0 + value));
|
constructor.instructions.add(new InsnNode(Opcodes.ICONST_0 + value));
|
||||||
else if (value >= Byte.MIN_VALUE && value <= Byte.MAX_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) {
|
public void setClientPort(int port) {
|
||||||
|
setIntegerField("clientPort", port);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIntegerField(String name, int value)
|
||||||
|
{
|
||||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||||
push(port);
|
push(value);
|
||||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "clientPort", Type.INT_TYPE.getInternalName()));
|
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, name, Type.INT_TYPE.getInternalName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWarningMissArchJava(boolean b) {
|
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 VarInsnNode(Opcodes.ALOAD, 0));
|
||||||
constructor.instructions.add(new InsnNode(b ? Opcodes.ICONST_1 : Opcodes.ICONST_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) {
|
public void setGuardLicense(String name, String key, String encryptKey) {
|
||||||
|
|
|
@ -19,11 +19,12 @@ public class ProguardConf {
|
||||||
private static final String chars = "1aAbBcC2dDeEfF3gGhHiI4jJkKl5mMnNoO6pPqQrR7sStT8uUvV9wWxX0yYzZ";
|
private static final String chars = "1aAbBcC2dDeEfF3gGhHiI4jJkKl5mMnNoO6pPqQrR7sStT8uUvV9wWxX0yYzZ";
|
||||||
|
|
||||||
private static String generateString(SecureRandom rand, String lowString, String upString, int il) {
|
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) {
|
for (int i = 0; i < lowString.length(); ++i) {
|
||||||
sb.append(rand.nextBoolean() ? lowString.charAt(i) : upString.charAt(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();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +75,7 @@ public void genWords(boolean force) throws IOException {
|
||||||
String projectName = srv.config.projectName.replaceAll("\\W", "");
|
String projectName = srv.config.projectName.replaceAll("\\W", "");
|
||||||
String lowName = projectName.toLowerCase();
|
String lowName = projectName.toLowerCase();
|
||||||
String upName = projectName.toUpperCase();
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
package pro.gravit.launchserver.binary;
|
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.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.nio.file.Path;
|
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 class SimpleEXELauncherBinary extends LauncherBinary {
|
||||||
public Path exeTemplate;
|
public Path exeTemplate;
|
||||||
public SimpleEXELauncherBinary(LaunchServer server) {
|
public SimpleEXELauncherBinary(LaunchServer server) {
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
package pro.gravit.launchserver.binary.tasks;
|
package pro.gravit.launchserver.binary.tasks;
|
||||||
|
|
||||||
import pro.gravit.launchserver.LaunchServer;
|
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.zip.Deflater;
|
import java.util.zip.Deflater;
|
||||||
|
@ -10,6 +7,9 @@
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
import pro.gravit.launchserver.LaunchServer;
|
||||||
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
|
|
||||||
public class CompressBuildTask implements LauncherBuildTask {
|
public class CompressBuildTask implements LauncherBuildTask {
|
||||||
public transient final LaunchServer server;
|
public transient final LaunchServer server;
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package pro.gravit.launchserver.command;
|
package pro.gravit.launchserver.command;
|
||||||
|
|
||||||
import pro.gravit.launchserver.LaunchServer;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import pro.gravit.launchserver.LaunchServer;
|
||||||
|
|
||||||
public abstract class Command extends pro.gravit.utils.command.Command {
|
public abstract class Command extends pro.gravit.utils.command.Command {
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,13 @@
|
||||||
import pro.gravit.launchserver.command.install.MultiCommand;
|
import pro.gravit.launchserver.command.install.MultiCommand;
|
||||||
import pro.gravit.launchserver.command.modules.LoadModuleCommand;
|
import pro.gravit.launchserver.command.modules.LoadModuleCommand;
|
||||||
import pro.gravit.launchserver.command.modules.ModulesCommand;
|
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.BaseCommandCategory;
|
||||||
import pro.gravit.utils.command.basic.ClearCommand;
|
import pro.gravit.utils.command.basic.ClearCommand;
|
||||||
import pro.gravit.utils.command.basic.DebugCommand;
|
import pro.gravit.utils.command.basic.DebugCommand;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package pro.gravit.launchserver.command.modules;
|
package pro.gravit.launchserver.command.modules;
|
||||||
|
|
||||||
import java.net.URI;
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
package pro.gravit.launchserver.components;
|
package pro.gravit.launchserver.components;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import pro.gravit.launcher.NeedGarbageCollection;
|
import pro.gravit.launcher.NeedGarbageCollection;
|
||||||
import pro.gravit.launchserver.LaunchServer;
|
import pro.gravit.launchserver.LaunchServer;
|
||||||
import pro.gravit.launchserver.socket.Client;
|
import pro.gravit.launchserver.socket.Client;
|
||||||
|
|
|
@ -1,5 +1,11 @@
|
||||||
package pro.gravit.launchserver.config;
|
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.channel.epoll.Epoll;
|
||||||
import io.netty.handler.logging.LogLevel;
|
import io.netty.handler.logging.LogLevel;
|
||||||
import pro.gravit.launcher.Launcher;
|
import pro.gravit.launcher.Launcher;
|
||||||
|
@ -24,12 +30,6 @@
|
||||||
import pro.gravit.utils.helper.JVMHelper;
|
import pro.gravit.utils.helper.JVMHelper;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
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 {
|
public final class LaunchServerConfig {
|
||||||
private transient LaunchServer server = null;
|
private transient LaunchServer server = null;
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ public class User {
|
||||||
private long id;
|
private long id;
|
||||||
@Column(unique = true)
|
@Column(unique = true)
|
||||||
public String username;
|
public String username;
|
||||||
|
public String email;
|
||||||
@Column(unique = true)
|
@Column(unique = true)
|
||||||
public UUID uuid;
|
public UUID uuid;
|
||||||
@Column(name = "password")
|
@Column(name = "password")
|
||||||
|
@ -66,8 +67,6 @@ public boolean verifyPassword(String password)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
byte[] enpassword = digest.digest(password.concat(password_salt).getBytes(StandardCharsets.UTF_8));
|
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);
|
return Arrays.equals(enpassword, this.password);
|
||||||
}
|
}
|
||||||
public ClientPermissions getPermissions()
|
public ClientPermissions getPermissions()
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package pro.gravit.launchserver.dao.provider;
|
package pro.gravit.launchserver.dao.provider;
|
||||||
|
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
|
|
||||||
import pro.gravit.launchserver.LaunchServer;
|
import pro.gravit.launchserver.LaunchServer;
|
||||||
import pro.gravit.launchserver.dao.User;
|
import pro.gravit.launchserver.dao.User;
|
||||||
import pro.gravit.launchserver.dao.UserHWID;
|
import pro.gravit.launchserver.dao.UserHWID;
|
||||||
|
@ -8,13 +11,12 @@
|
||||||
import pro.gravit.launchserver.dao.impl.HibernateUserDAOImpl;
|
import pro.gravit.launchserver.dao.impl.HibernateUserDAOImpl;
|
||||||
import pro.gravit.utils.helper.CommonHelper;
|
import pro.gravit.utils.helper.CommonHelper;
|
||||||
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
|
|
||||||
public class HibernateDaoProvider extends DaoProvider {
|
public class HibernateDaoProvider extends DaoProvider {
|
||||||
public String driver;
|
public String driver;
|
||||||
public String url;
|
public String url;
|
||||||
public String username;
|
public String username;
|
||||||
public String password;
|
public String password;
|
||||||
|
public String dialect;
|
||||||
public String pool_size;
|
public String pool_size;
|
||||||
public String hibernateConfig;
|
public String hibernateConfig;
|
||||||
public boolean parallelHibernateInit;
|
public boolean parallelHibernateInit;
|
||||||
|
@ -30,6 +32,8 @@ public void init(LaunchServer server) {
|
||||||
.setProperty("hibernate.connection.username", username)
|
.setProperty("hibernate.connection.username", username)
|
||||||
.setProperty("hibernate.connection.password", password)
|
.setProperty("hibernate.connection.password", password)
|
||||||
.setProperty("hibernate.connection.pool_size", pool_size);
|
.setProperty("hibernate.connection.pool_size", pool_size);
|
||||||
|
if(dialect != null)
|
||||||
|
cfg.setProperty("hibernate.dialect", dialect);
|
||||||
if(hibernateConfig != null)
|
if(hibernateConfig != null)
|
||||||
cfg.configure(Paths.get(hibernateConfig).toFile());
|
cfg.configure(Paths.get(hibernateConfig).toFile());
|
||||||
userDAO = new HibernateUserDAOImpl(cfg.buildSessionFactory());
|
userDAO = new HibernateUserDAOImpl(cfg.buildSessionFactory());
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,6 +1,5 @@
|
||||||
package pro.gravit.launchserver.modules.events;
|
package pro.gravit.launchserver.modules.events;
|
||||||
|
|
||||||
import pro.gravit.launcher.modules.events.InitPhase;
|
|
||||||
import pro.gravit.launcher.modules.events.PostInitPhase;
|
import pro.gravit.launcher.modules.events.PostInitPhase;
|
||||||
import pro.gravit.launchserver.LaunchServer;
|
import pro.gravit.launchserver.LaunchServer;
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||||
import pro.gravit.launcher.modules.events.InitPhase;
|
import pro.gravit.launcher.modules.events.InitPhase;
|
||||||
import pro.gravit.utils.Version;
|
import pro.gravit.utils.Version;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
|
||||||
|
|
||||||
public class LaunchServerCoreModule extends LauncherModule {
|
public class LaunchServerCoreModule extends LauncherModule {
|
||||||
public LaunchServerCoreModule() {
|
public LaunchServerCoreModule() {
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
package pro.gravit.launchserver.modules.impl;
|
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.LauncherModule;
|
||||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||||
import pro.gravit.launchserver.LaunchServer;
|
import pro.gravit.launchserver.LaunchServer;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class LaunchServerModulesManager extends SimpleModuleManager {
|
public class LaunchServerModulesManager extends SimpleModuleManager {
|
||||||
public LaunchServerCoreModule coreModule;
|
public LaunchServerCoreModule coreModule;
|
||||||
public LaunchServerModulesManager(Path modulesDir, Path configDir) {
|
public LaunchServerModulesManager(Path modulesDir, Path configDir) {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package pro.gravit.launchserver.socket;
|
package pro.gravit.launchserver.socket;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
@ -21,14 +20,7 @@
|
||||||
import pro.gravit.launchserver.socket.response.WebSocketServerResponse;
|
import pro.gravit.launchserver.socket.response.WebSocketServerResponse;
|
||||||
import pro.gravit.launchserver.socket.response.admin.AddLogListenerResponse;
|
import pro.gravit.launchserver.socket.response.admin.AddLogListenerResponse;
|
||||||
import pro.gravit.launchserver.socket.response.admin.ExecCommandResponse;
|
import pro.gravit.launchserver.socket.response.admin.ExecCommandResponse;
|
||||||
import pro.gravit.launchserver.socket.response.auth.AuthResponse;
|
import pro.gravit.launchserver.socket.response.auth.*;
|
||||||
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.profile.BatchProfileByUsername;
|
import pro.gravit.launchserver.socket.response.profile.BatchProfileByUsername;
|
||||||
import pro.gravit.launchserver.socket.response.profile.ProfileByUUIDResponse;
|
import pro.gravit.launchserver.socket.response.profile.ProfileByUUIDResponse;
|
||||||
import pro.gravit.launchserver.socket.response.profile.ProfileByUsername;
|
import pro.gravit.launchserver.socket.response.profile.ProfileByUsername;
|
||||||
|
@ -42,7 +34,6 @@
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
|
||||||
public class WebSocketService {
|
public class WebSocketService {
|
||||||
public final ChannelGroup channels;
|
public final ChannelGroup channels;
|
||||||
public static ProviderMap<WebSocketServerResponse> providers = new ProviderMap<>();
|
public static ProviderMap<WebSocketServerResponse> providers = new ProviderMap<>();
|
||||||
|
@ -132,6 +123,7 @@ public static void registerResponses() {
|
||||||
providers.register("verifySecureToken", VerifySecureTokenResponse.class);
|
providers.register("verifySecureToken", VerifySecureTokenResponse.class);
|
||||||
providers.register("getAvailabilityAuth", GetAvailabilityAuthResponse.class);
|
providers.register("getAvailabilityAuth", GetAvailabilityAuthResponse.class);
|
||||||
providers.register("register", RegisterResponse.class);
|
providers.register("register", RegisterResponse.class);
|
||||||
|
providers.register("setPassword", SetPasswordResponse.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendObject(ChannelHandlerContext ctx, Object obj) {
|
public void sendObject(ChannelHandlerContext ctx, Object obj) {
|
||||||
|
|
|
@ -9,9 +9,9 @@
|
||||||
import javax.crypto.IllegalBlockSizeException;
|
import javax.crypto.IllegalBlockSizeException;
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
||||||
import pro.gravit.launcher.hwid.HWID;
|
import pro.gravit.launcher.hwid.HWID;
|
||||||
import pro.gravit.launcher.hwid.OshiHWID;
|
import pro.gravit.launcher.hwid.OshiHWID;
|
||||||
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
|
||||||
import pro.gravit.launcher.profiles.ClientProfile;
|
import pro.gravit.launcher.profiles.ClientProfile;
|
||||||
import pro.gravit.launchserver.auth.AuthException;
|
import pro.gravit.launchserver.auth.AuthException;
|
||||||
import pro.gravit.launchserver.auth.AuthProviderPair;
|
import pro.gravit.launchserver.auth.AuthProviderPair;
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
package pro.gravit.launchserver.socket.response.auth;
|
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.nio.charset.StandardCharsets;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.UUID;
|
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 class RegisterResponse extends SimpleResponse {
|
||||||
public String login;
|
public String login;
|
||||||
public String password;
|
public String password;
|
||||||
|
public String email;
|
||||||
public byte[] verifyHash;
|
public byte[] verifyHash;
|
||||||
@Override
|
@Override
|
||||||
public void execute(ChannelHandlerContext ctx, Client client) throws Exception
|
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 user = new User();
|
||||||
user.username = login;
|
user.username = login;
|
||||||
|
user.email = email;
|
||||||
user.setPassword(password);
|
user.setPassword(password);
|
||||||
user.uuid = UUID.randomUUID();
|
user.uuid = UUID.randomUUID();
|
||||||
server.config.dao.userService.saveUser(user);
|
server.config.dao.userService.saveUser(user);
|
||||||
|
|
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,23 +1,23 @@
|
||||||
package pro.gravit.launchserver;
|
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.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.security.KeyPair;
|
import java.security.KeyPair;
|
||||||
import java.security.interfaces.RSAPrivateKey;
|
import java.security.interfaces.RSAPrivateKey;
|
||||||
import java.security.interfaces.RSAPublicKey;
|
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 {
|
public class StartLaunchServerTest {
|
||||||
@TempDir
|
@TempDir
|
||||||
public static Path modulesDir;
|
public static Path modulesDir;
|
||||||
|
@ -30,7 +30,6 @@ public class StartLaunchServerTest {
|
||||||
public static void prepare() throws Exception
|
public static void prepare() throws Exception
|
||||||
{
|
{
|
||||||
LaunchServerModulesManager modulesManager = new LaunchServerModulesManager(modulesDir, configDir);
|
LaunchServerModulesManager modulesManager = new LaunchServerModulesManager(modulesDir, configDir);
|
||||||
SimpleModulesConfigManager configManager = new SimpleModulesConfigManager(configDir);
|
|
||||||
LaunchServerConfig config = LaunchServerConfig.getDefault(LaunchServer.LaunchServerEnv.TEST);
|
LaunchServerConfig config = LaunchServerConfig.getDefault(LaunchServer.LaunchServerEnv.TEST);
|
||||||
Launcher.gsonManager = new LaunchServerGsonManager(modulesManager);
|
Launcher.gsonManager = new LaunchServerGsonManager(modulesManager);
|
||||||
Launcher.gsonManager.initGson();
|
Launcher.gsonManager.initGson();
|
||||||
|
|
|
@ -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 {
|
publishing {
|
||||||
publications {
|
publications {
|
||||||
|
|
|
@ -4,12 +4,20 @@ var config = {
|
||||||
title: "GravitLauncher", // Заголовок окна
|
title: "GravitLauncher", // Заголовок окна
|
||||||
icons: ["favicon.png"], // Путь/Пути до иконки окна
|
icons: ["favicon.png"], // Путь/Пути до иконки окна
|
||||||
|
|
||||||
//*** Меню авторизации ***//
|
links: [
|
||||||
linkText: "GravitLauncher", // Текст ссылки
|
//*** Ссылки ***//
|
||||||
linkURL: new java.net.URL("https://gravit.pro"), // Ссылка
|
{
|
||||||
|
id: "link",
|
||||||
//*** Меню выбора серверов ***//
|
text: "GravitLauncher",
|
||||||
discord: new java.net.URL("https://discord.gg/aJK6nMN"), // Ссылка
|
url: "https://gravit.pro",
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
id: "discord",
|
||||||
|
text: "",
|
||||||
|
url: "https://discord.gg/aJK6nMN",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
//*** Стандартные настройки клиента ***//
|
//*** Стандартные настройки клиента ***//
|
||||||
autoEnterDefault: false, // Автоматический вход на выбранный сервер
|
autoEnterDefault: false, // Автоматический вход на выбранный сервер
|
||||||
|
|
|
@ -37,7 +37,6 @@ function initLoginScene() {
|
||||||
bar = pane;
|
bar = pane;
|
||||||
loginPane.lookup("#close").setOnAction(function(event) { javafx.application.Platform.exit() });
|
loginPane.lookup("#close").setOnAction(function(event) { javafx.application.Platform.exit() });
|
||||||
loginPane.lookup("#hide").setOnAction(function(event) { stage.setIconified(true) });
|
loginPane.lookup("#hide").setOnAction(function(event) { stage.setIconified(true) });
|
||||||
loginPane.lookup("#discord").setOnAction(function() { openURL(config.discord); });
|
|
||||||
|
|
||||||
var pane = loginPane.lookup("#authPane");
|
var pane = loginPane.lookup("#authPane");
|
||||||
authPane = pane;
|
authPane = pane;
|
||||||
|
@ -63,13 +62,23 @@ function initLoginScene() {
|
||||||
savePasswordBox = pane.lookup("#rememberchb");
|
savePasswordBox = pane.lookup("#rememberchb");
|
||||||
savePasswordBox.setSelected(settings.login === null || settings.rsaPassword !== null);
|
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");
|
authOptions = pane.lookup("#authOptions");
|
||||||
|
|
||||||
pane.lookup("#goAuth").setOnAction(goAuth);
|
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======== */
|
/* ======== init Menu window======== */
|
||||||
|
@ -88,7 +97,6 @@ function initMenuScene() {
|
||||||
bar = pane;
|
bar = pane;
|
||||||
pane.lookup("#close").setOnAction(function(event) { javafx.application.Platform.exit() });
|
pane.lookup("#close").setOnAction(function(event) { javafx.application.Platform.exit() });
|
||||||
pane.lookup("#hide").setOnAction(function(event) { stage.setIconified(true) });
|
pane.lookup("#hide").setOnAction(function(event) { stage.setIconified(true) });
|
||||||
pane.lookup("#discord").setOnAction(function() { openURL(config.discord); });
|
|
||||||
pane.lookup("#settings").setOnAction(goSettings);
|
pane.lookup("#settings").setOnAction(goSettings);
|
||||||
pane.lookup("#goConsole").setOnAction(goConsole);
|
pane.lookup("#goConsole").setOnAction(goConsole);
|
||||||
|
|
||||||
|
@ -112,6 +120,19 @@ function initMenuScene() {
|
||||||
setCurrentScene(loginScene);
|
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======== */
|
/* ======== init Console window======== */
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
<String fx:value="combologin-popup" />
|
<String fx:value="combologin-popup" />
|
||||||
</styleClass>
|
</styleClass>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
<Hyperlink id="link" fx:id="link" layoutX="94.0" layoutY="422.0" prefHeight="19.0" prefWidth="81.0" textAlignment="CENTER" />
|
<Hyperlink id="link_link" fx:id="link" layoutX="94.0" layoutY="422.0" prefHeight="19.0" prefWidth="81.0" textAlignment="CENTER" />
|
||||||
</children>
|
</children>
|
||||||
</Pane>
|
</Pane>
|
||||||
<Pane fx:id="news" prefHeight="432.0" prefWidth="423.0" styleClass="news" />
|
<Pane fx:id="news" prefHeight="432.0" prefWidth="423.0" styleClass="news" />
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic></Button>
|
</graphic></Button>
|
||||||
<Button id="discord" alignment="CENTER" contentDisplay="CENTER" layoutY="370.0" minHeight="-Infinity" minWidth="-Infinity" text="" textAlignment="CENTER">
|
<Button id="link_discord" alignment="CENTER" contentDisplay="CENTER" layoutY="370.0" minHeight="-Infinity" minWidth="-Infinity" text="" textAlignment="CENTER">
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView>
|
<ImageView>
|
||||||
<image>
|
<image>
|
||||||
|
|
|
@ -94,7 +94,7 @@
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic></Button>
|
</graphic></Button>
|
||||||
<Button id="discord" alignment="CENTER" contentDisplay="CENTER" layoutY="380.0" minHeight="-Infinity" minWidth="-Infinity" text="" textAlignment="CENTER">
|
<Button id="link_discord" alignment="CENTER" contentDisplay="CENTER" layoutY="380.0" minHeight="-Infinity" minWidth="-Infinity" text="" textAlignment="CENTER">
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView>
|
<ImageView>
|
||||||
<image>
|
<image>
|
||||||
|
|
|
@ -129,7 +129,7 @@ #hide,
|
||||||
#back,
|
#back,
|
||||||
#goConsole,
|
#goConsole,
|
||||||
#settings,
|
#settings,
|
||||||
#discord {
|
#link_discord {
|
||||||
-fx-background-position: center;
|
-fx-background-position: center;
|
||||||
-fx-background-radius: 0;
|
-fx-background-radius: 0;
|
||||||
-fx-pref-width: 46px;
|
-fx-pref-width: 46px;
|
||||||
|
@ -218,7 +218,7 @@ .text-input {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Hyperlink **/
|
/** Hyperlink **/
|
||||||
#link {
|
#link_link {
|
||||||
-fx-font-weight: bold;
|
-fx-font-weight: bold;
|
||||||
-fx-font-size: 7pt;
|
-fx-font-size: 7pt;
|
||||||
-fx-opacity: 0.5;
|
-fx-opacity: 0.5;
|
||||||
|
@ -227,8 +227,8 @@ #link {
|
||||||
-fx-pref-height: 17px;
|
-fx-pref-height: 17px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#link:hover,
|
#link_link:hover,
|
||||||
#link:pressed {
|
#link_link:pressed {
|
||||||
-fx-opacity: 0.8;
|
-fx-opacity: 0.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,7 @@
|
||||||
import pro.gravit.launcher.managers.ClientGsonManager;
|
import pro.gravit.launcher.managers.ClientGsonManager;
|
||||||
import pro.gravit.launcher.managers.ClientHookManager;
|
import pro.gravit.launcher.managers.ClientHookManager;
|
||||||
import pro.gravit.launcher.managers.ConsoleManager;
|
import pro.gravit.launcher.managers.ConsoleManager;
|
||||||
import pro.gravit.launcher.modules.LauncherModulesManager;
|
|
||||||
import pro.gravit.launcher.modules.events.PreConfigPhase;
|
import pro.gravit.launcher.modules.events.PreConfigPhase;
|
||||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
|
||||||
import pro.gravit.launcher.request.Request;
|
import pro.gravit.launcher.request.Request;
|
||||||
import pro.gravit.launcher.request.RequestException;
|
import pro.gravit.launcher.request.RequestException;
|
||||||
import pro.gravit.launcher.request.auth.RestoreSessionRequest;
|
import pro.gravit.launcher.request.auth.RestoreSessionRequest;
|
||||||
|
@ -113,13 +111,13 @@ public void start(String... args) throws Throwable {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
LauncherGuardManager.initGuard(false);
|
|
||||||
if(UpdateRequest.getController() == null) UpdateRequest.setController(new LauncherUpdateController());
|
if(UpdateRequest.getController() == null) UpdateRequest.setController(new LauncherUpdateController());
|
||||||
Objects.requireNonNull(args, "args");
|
Objects.requireNonNull(args, "args");
|
||||||
if (started.getAndSet(true))
|
if (started.getAndSet(true))
|
||||||
throw new IllegalStateException("Launcher has been already started");
|
throw new IllegalStateException("Launcher has been already started");
|
||||||
LauncherEngine.modulesManager.invokeEvent(new ClientEngineInitPhase(this));
|
LauncherEngine.modulesManager.invokeEvent(new ClientEngineInitPhase(this));
|
||||||
runtimeProvider.preLoad();
|
runtimeProvider.preLoad();
|
||||||
|
LauncherGuardManager.initGuard(false);
|
||||||
FunctionalBridge.getHWID = CommonHelper.newThread("GetHWID Thread", true, FunctionalBridge::getHWID);
|
FunctionalBridge.getHWID = CommonHelper.newThread("GetHWID Thread", true, FunctionalBridge::getHWID);
|
||||||
FunctionalBridge.getHWID.start();
|
FunctionalBridge.getHWID.start();
|
||||||
LogHelper.debug("Dir: %s", DirBridge.dir);
|
LogHelper.debug("Dir: %s", DirBridge.dir);
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
package pro.gravit.launcher.client;
|
package pro.gravit.launcher.client;
|
||||||
|
|
||||||
import pro.gravit.launcher.modules.LauncherModule;
|
|
||||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.modules.LauncherModule;
|
||||||
|
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||||
|
|
||||||
public class ClientModuleManager extends SimpleModuleManager {
|
public class ClientModuleManager extends SimpleModuleManager {
|
||||||
public ClientModuleManager() {
|
public ClientModuleManager() {
|
||||||
super(null, null);
|
super(null, null);
|
||||||
|
|
|
@ -6,19 +6,19 @@
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
import pro.gravit.launcher.hwid.HWID;
|
|
||||||
import pro.gravit.launcher.LauncherAPI;
|
import pro.gravit.launcher.LauncherAPI;
|
||||||
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
||||||
import pro.gravit.launcher.guard.LauncherGuardManager;
|
import pro.gravit.launcher.guard.LauncherGuardManager;
|
||||||
import pro.gravit.launcher.hasher.FileNameMatcher;
|
import pro.gravit.launcher.hasher.FileNameMatcher;
|
||||||
import pro.gravit.launcher.hasher.HashedDir;
|
import pro.gravit.launcher.hasher.HashedDir;
|
||||||
|
import pro.gravit.launcher.hwid.HWID;
|
||||||
import pro.gravit.launcher.hwid.OshiHWIDProvider;
|
import pro.gravit.launcher.hwid.OshiHWIDProvider;
|
||||||
import pro.gravit.launcher.managers.ConsoleManager;
|
import pro.gravit.launcher.managers.ConsoleManager;
|
||||||
import pro.gravit.launcher.managers.HasherManager;
|
import pro.gravit.launcher.managers.HasherManager;
|
||||||
import pro.gravit.launcher.managers.HasherStore;
|
import pro.gravit.launcher.managers.HasherStore;
|
||||||
import pro.gravit.launcher.request.Request;
|
import pro.gravit.launcher.request.Request;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
|
||||||
import pro.gravit.utils.Version;
|
import pro.gravit.utils.Version;
|
||||||
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
public class FunctionalBridge {
|
public class FunctionalBridge {
|
||||||
@LauncherAPI
|
@LauncherAPI
|
||||||
|
|
|
@ -11,7 +11,12 @@
|
||||||
import javax.script.ScriptEngine;
|
import javax.script.ScriptEngine;
|
||||||
import javax.script.ScriptException;
|
import javax.script.ScriptException;
|
||||||
|
|
||||||
import pro.gravit.launcher.*;
|
import pro.gravit.launcher.JSApplication;
|
||||||
|
import pro.gravit.launcher.Launcher;
|
||||||
|
import pro.gravit.launcher.LauncherAPI;
|
||||||
|
import pro.gravit.launcher.LauncherConfig;
|
||||||
|
import pro.gravit.launcher.LauncherEngine;
|
||||||
|
import pro.gravit.launcher.NewLauncherSettings;
|
||||||
import pro.gravit.launcher.client.ClientLauncher;
|
import pro.gravit.launcher.client.ClientLauncher;
|
||||||
import pro.gravit.launcher.client.DirBridge;
|
import pro.gravit.launcher.client.DirBridge;
|
||||||
import pro.gravit.launcher.client.FunctionalBridge;
|
import pro.gravit.launcher.client.FunctionalBridge;
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import pro.gravit.launcher.managers.GsonManager;
|
import pro.gravit.launcher.managers.GsonManager;
|
||||||
import pro.gravit.launcher.modules.ModulesManager;
|
|
||||||
import pro.gravit.launcher.profiles.ClientProfile;
|
import pro.gravit.launcher.profiles.ClientProfile;
|
||||||
import pro.gravit.launcher.serialize.HInput;
|
import pro.gravit.launcher.serialize.HInput;
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
|
|
|
@ -8,9 +8,15 @@
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.*;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
import java.util.concurrent.ThreadFactory;
|
||||||
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
|
@ -22,7 +28,10 @@
|
||||||
import org.apache.http.impl.client.HttpClients;
|
import org.apache.http.impl.client.HttpClients;
|
||||||
import org.apache.http.impl.client.LaxRedirectStrategy;
|
import org.apache.http.impl.client.LaxRedirectStrategy;
|
||||||
|
|
||||||
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.VerifyHelper;
|
||||||
|
|
||||||
public class ListDownloader {
|
public class ListDownloader {
|
||||||
private static final AtomicInteger COUNTER_THR = new AtomicInteger(0);
|
private static final AtomicInteger COUNTER_THR = new AtomicInteger(0);
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
package pro.gravit.launcher.events;
|
package pro.gravit.launcher.events;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.LauncherNetworkAPI;
|
||||||
|
|
||||||
public class ExceptionEvent extends RequestEvent {
|
public class ExceptionEvent extends RequestEvent {
|
||||||
public ExceptionEvent(Exception e) {
|
public ExceptionEvent(Exception e) {
|
||||||
this.message = e.getMessage();
|
this.message = e.getMessage();
|
||||||
this.clazz = e.getClass().getName();
|
this.clazz = e.getClass().getName();
|
||||||
}
|
}
|
||||||
|
@LauncherNetworkAPI
|
||||||
public final String message;
|
public final String message;
|
||||||
|
@LauncherNetworkAPI
|
||||||
public final String clazz;
|
public final String clazz;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -2,8 +2,16 @@
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.LauncherNetworkAPI;
|
||||||
import pro.gravit.launcher.request.WebSocketEvent;
|
import pro.gravit.launcher.request.WebSocketEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class of all request events sent by the server to the client
|
||||||
|
*/
|
||||||
public abstract class RequestEvent implements WebSocketEvent {
|
public abstract class RequestEvent implements WebSocketEvent {
|
||||||
|
/**
|
||||||
|
* UUID sent in request
|
||||||
|
*/
|
||||||
|
@LauncherNetworkAPI
|
||||||
public UUID requestUUID;
|
public UUID requestUUID;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
package pro.gravit.launcher.events;
|
package pro.gravit.launcher.events;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.LauncherNetworkAPI;
|
||||||
|
|
||||||
//Используется, что бы послать короткое сообщение, которое вмещается в int
|
//Используется, что бы послать короткое сообщение, которое вмещается в int
|
||||||
public class SignalEvent {
|
public class SignalEvent {
|
||||||
|
@LauncherNetworkAPI
|
||||||
public int signal;
|
public int signal;
|
||||||
|
|
||||||
public SignalEvent(int signal) {
|
public SignalEvent(int signal) {
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package pro.gravit.launcher.events.request;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.events.RequestEvent;
|
||||||
|
|
||||||
|
public class SetPasswordRequestEvent extends RequestEvent {
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return "setPassword";
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,8 @@
|
||||||
public abstract class LauncherModule {
|
public abstract class LauncherModule {
|
||||||
private LauncherModulesContext context;
|
private LauncherModulesContext context;
|
||||||
|
|
||||||
private Map<Class<? extends Event>, EventHandler> eventMap = new HashMap<>();
|
@SuppressWarnings("rawtypes")
|
||||||
|
private Map<Class<? extends Event>, EventHandler> eventMap = new HashMap<>();
|
||||||
protected LauncherModulesManager modulesManager;
|
protected LauncherModulesManager modulesManager;
|
||||||
protected final LauncherModuleInfo moduleInfo;
|
protected final LauncherModuleInfo moduleInfo;
|
||||||
protected ModulesConfigManager modulesConfigManager;
|
protected ModulesConfigManager modulesConfigManager;
|
||||||
|
@ -27,16 +28,28 @@ public LauncherModuleInfo getModuleInfo() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module initialization status at the current time
|
* Module initialization status at the current time
|
||||||
* CREATED - Module status immediately after loading
|
|
||||||
* INIT - The state of the module during the execution of the method init()
|
|
||||||
* FINISH - Status of the module after initialization
|
|
||||||
*/
|
*/
|
||||||
public enum InitStatus
|
public enum InitStatus
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* When creating an object
|
||||||
|
*/
|
||||||
CREATED(false),
|
CREATED(false),
|
||||||
|
/**
|
||||||
|
* After setting the context
|
||||||
|
*/
|
||||||
PRE_INIT_WAIT(true),
|
PRE_INIT_WAIT(true),
|
||||||
|
/**
|
||||||
|
* During the pre-initialization phase
|
||||||
|
*/
|
||||||
PRE_INIT(false),
|
PRE_INIT(false),
|
||||||
|
/**
|
||||||
|
* Awaiting initialization phase
|
||||||
|
*/
|
||||||
INIT_WAIT(true),
|
INIT_WAIT(true),
|
||||||
|
/**
|
||||||
|
* During the initialization phase
|
||||||
|
*/
|
||||||
INIT(false),
|
INIT(false),
|
||||||
FINISH(true);
|
FINISH(true);
|
||||||
|
|
||||||
|
@ -95,13 +108,13 @@ public void setContext(LauncherModulesContext context)
|
||||||
/**
|
/**
|
||||||
* This method is called before initializing all modules and resolving dependencies.
|
* This method is called before initializing all modules and resolving dependencies.
|
||||||
* <b>You can</b>:
|
* <b>You can</b>:
|
||||||
* Use to Module Manager
|
* - Use to Module Manager
|
||||||
* Add custom modules not described in the manifest
|
* - Add custom modules not described in the manifest
|
||||||
* Change information about your module or modules you control
|
* - Change information about your module or modules you control
|
||||||
* <b>You can not</b>:
|
* <b>You can not</b>:
|
||||||
* Use your dependencies
|
* - Use your dependencies
|
||||||
* Use API Launcher, LaunchServer, ServerWrapper
|
* - Use Launcher, LaunchServer, ServerWrapper API
|
||||||
* Change the names of any modules
|
* - Change the names of any modules
|
||||||
*/
|
*/
|
||||||
public void preInitAction() {
|
public void preInitAction() {
|
||||||
//NOP
|
//NOP
|
||||||
|
@ -118,14 +131,14 @@ public LauncherModule preInit()
|
||||||
/**
|
/**
|
||||||
* Basic module initialization method
|
* Basic module initialization method
|
||||||
* <b>You can</b>:
|
* <b>You can</b>:
|
||||||
* Subscribe to events
|
* - Subscribe to events
|
||||||
* Use your dependencies
|
* - Use your dependencies
|
||||||
* Use provided initContext
|
* - Use provided initContext
|
||||||
* Receive modules and access the module’s internal methods
|
* - Receive modules and access the module’s internal methods
|
||||||
* <b>You can not</b>:
|
* <b>You can not</b>:
|
||||||
* Modify module description, dependencies
|
* - Modify module description, dependencies
|
||||||
* Add modules
|
* - Add modules
|
||||||
* Read configuration
|
* - Read configuration
|
||||||
* @param initContext <b>null</b> on module initialization during boot or startup
|
* @param initContext <b>null</b> on module initialization during boot or startup
|
||||||
* Not <b>null</b> during module initialization while running
|
* Not <b>null</b> during module initialization while running
|
||||||
*/
|
*/
|
||||||
|
@ -154,7 +167,7 @@ protected <T extends Event> boolean registerEvent(EventHandler<T> handle, Class<
|
||||||
public final <T extends Event> void callEvent(T event)
|
public final <T extends Event> void callEvent(T event)
|
||||||
{
|
{
|
||||||
Class<? extends Event> tClass = event.getClass();
|
Class<? extends Event> tClass = event.getClass();
|
||||||
for(Map.Entry<Class<? extends Event>, EventHandler> e : eventMap.entrySet())
|
for(@SuppressWarnings("rawtypes") Map.Entry<Class<? extends Event>, EventHandler> e : eventMap.entrySet())
|
||||||
{
|
{
|
||||||
|
|
||||||
if(e.getKey().isAssignableFrom(tClass))
|
if(e.getKey().isAssignableFrom(tClass))
|
||||||
|
|
|
@ -7,13 +7,16 @@ public class LauncherModuleInfo {
|
||||||
public final Version version;
|
public final Version version;
|
||||||
public final int priority;
|
public final int priority;
|
||||||
public final String[] dependencies;
|
public final String[] dependencies;
|
||||||
|
/**
|
||||||
|
* Alternative module names
|
||||||
|
*/
|
||||||
public final String[] providers;
|
public final String[] providers;
|
||||||
|
|
||||||
public LauncherModuleInfo(String name, Version version) {
|
public LauncherModuleInfo(String name, Version version) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.version = version;
|
this.version = version;
|
||||||
this.priority = 0;
|
this.priority = 0;
|
||||||
this.dependencies = new String[]{};
|
this.dependencies = new String[0];
|
||||||
providers = new String[0];
|
providers = new String[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +24,7 @@ public LauncherModuleInfo(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.version = new Version(1,0,0);
|
this.version = new Version(1,0,0);
|
||||||
this.priority = 0;
|
this.priority = 0;
|
||||||
this.dependencies = new String[]{};
|
this.dependencies = new String[0];
|
||||||
providers = new String[0];
|
providers = new String[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
package pro.gravit.launcher.modules;
|
package pro.gravit.launcher.modules;
|
||||||
|
|
||||||
import pro.gravit.utils.Version;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import pro.gravit.utils.Version;
|
||||||
|
|
||||||
public interface LauncherModulesManager {
|
public interface LauncherModulesManager {
|
||||||
|
|
||||||
LauncherModule loadModule(LauncherModule module);
|
LauncherModule loadModule(LauncherModule module);
|
||||||
|
@ -23,6 +23,7 @@ default <T extends LauncherModule> boolean containsModule(Class<? extends T> cl
|
||||||
return getModule(clazz) != null;
|
return getModule(clazz) != null;
|
||||||
}
|
}
|
||||||
ClassLoader getModuleClassLoader();
|
ClassLoader getModuleClassLoader();
|
||||||
|
ModulesConfigManager getConfigManager();
|
||||||
<T extends LauncherModule> T getModule(Class<? extends T> clazz);
|
<T extends LauncherModule> T getModule(Class<? extends T> clazz);
|
||||||
<T> T getModuleByInterface(Class<T> clazz);
|
<T> T getModuleByInterface(Class<T> clazz);
|
||||||
<T> List<T> getModulesByInterface(Class<T> clazz);
|
<T> List<T> getModulesByInterface(Class<T> clazz);
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
package pro.gravit.launcher.modules;
|
|
||||||
|
|
||||||
import pro.gravit.utils.Version;
|
|
||||||
@Deprecated
|
|
||||||
public interface Module extends AutoCloseable {
|
|
||||||
|
|
||||||
String getName();
|
|
||||||
|
|
||||||
Version getVersion();
|
|
||||||
|
|
||||||
int getPriority();
|
|
||||||
|
|
||||||
void init(ModuleContext context);
|
|
||||||
|
|
||||||
void postInit(ModuleContext context);
|
|
||||||
|
|
||||||
void preInit(ModuleContext context);
|
|
||||||
|
|
||||||
default void finish(ModuleContext context) {
|
|
||||||
// NOP
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
package pro.gravit.launcher.modules;
|
|
||||||
@Deprecated
|
|
||||||
public interface ModuleContext {
|
|
||||||
enum Type {
|
|
||||||
SERVER, CLIENT, LAUNCHSERVER
|
|
||||||
}
|
|
||||||
|
|
||||||
Type getType();
|
|
||||||
|
|
||||||
ModulesManager getModulesManager();
|
|
||||||
|
|
||||||
ModulesConfigManager getModulesConfigManager();
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
package pro.gravit.launcher.modules;
|
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
@Deprecated
|
|
||||||
public interface ModulesManager extends AutoCloseable {
|
|
||||||
void initModules();
|
|
||||||
|
|
||||||
void load(Module module);
|
|
||||||
|
|
||||||
void loadModule(URL jarpath) throws Exception;
|
|
||||||
|
|
||||||
void loadModule(URL jarpath, String classname) throws Exception;
|
|
||||||
|
|
||||||
void postInitModules();
|
|
||||||
|
|
||||||
void preInitModules();
|
|
||||||
|
|
||||||
void finishModules();
|
|
||||||
|
|
||||||
void printModules();
|
|
||||||
|
|
||||||
void sort();
|
|
||||||
|
|
||||||
void registerModule(Module module);
|
|
||||||
}
|
|
|
@ -1,6 +1,7 @@
|
||||||
package pro.gravit.launcher.modules.events;
|
package pro.gravit.launcher.modules.events;
|
||||||
|
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
import pro.gravit.launcher.modules.LauncherModule;
|
import pro.gravit.launcher.modules.LauncherModule;
|
||||||
|
|
||||||
public class PreGsonPhase extends LauncherModule.Event {
|
public class PreGsonPhase extends LauncherModule.Event {
|
||||||
|
|
|
@ -1,12 +1,5 @@
|
||||||
package pro.gravit.launcher.modules.impl;
|
package pro.gravit.launcher.modules.impl;
|
||||||
|
|
||||||
import pro.gravit.launcher.managers.SimpleModulesConfigManager;
|
|
||||||
import pro.gravit.launcher.modules.*;
|
|
||||||
import pro.gravit.utils.PublicURLClassLoader;
|
|
||||||
import pro.gravit.utils.Version;
|
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.file.FileVisitResult;
|
import java.nio.file.FileVisitResult;
|
||||||
|
@ -20,6 +13,17 @@
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.managers.SimpleModulesConfigManager;
|
||||||
|
import pro.gravit.launcher.modules.LauncherInitContext;
|
||||||
|
import pro.gravit.launcher.modules.LauncherModule;
|
||||||
|
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||||
|
import pro.gravit.launcher.modules.LauncherModulesManager;
|
||||||
|
import pro.gravit.launcher.modules.ModulesConfigManager;
|
||||||
|
import pro.gravit.utils.PublicURLClassLoader;
|
||||||
|
import pro.gravit.utils.Version;
|
||||||
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
public class SimpleModuleManager implements LauncherModulesManager {
|
public class SimpleModuleManager implements LauncherModulesManager {
|
||||||
protected final List<LauncherModule> modules = new ArrayList<>();
|
protected final List<LauncherModule> modules = new ArrayList<>();
|
||||||
protected final List<String> moduleNames = new ArrayList<>();
|
protected final List<String> moduleNames = new ArrayList<>();
|
||||||
|
@ -219,4 +223,9 @@ public <T extends LauncherModule.Event> void invokeEvent(T event) {
|
||||||
if(event.isCancel()) return;
|
if(event.isCancel()) return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModulesConfigManager getConfigManager() {
|
||||||
|
return modulesConfigManager;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
import pro.gravit.utils.TypeSerializeInterface;
|
import pro.gravit.utils.TypeSerializeInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The interface of all events sent by the server to the client
|
||||||
|
*/
|
||||||
public interface WebSocketEvent extends TypeSerializeInterface {
|
public interface WebSocketEvent extends TypeSerializeInterface {
|
||||||
String getType();
|
String getType();
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,25 +12,7 @@
|
||||||
|
|
||||||
import pro.gravit.launcher.Launcher;
|
import pro.gravit.launcher.Launcher;
|
||||||
import pro.gravit.launcher.events.ExceptionEvent;
|
import pro.gravit.launcher.events.ExceptionEvent;
|
||||||
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
import pro.gravit.launcher.events.request.*;
|
||||||
import pro.gravit.launcher.events.request.BatchProfileByUsernameRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.CheckServerRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.ErrorRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.ExecCommandRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.GetAvailabilityAuthRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.GetSecureTokenRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.JoinServerRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.LauncherRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.LogEvent;
|
|
||||||
import pro.gravit.launcher.events.request.ProfileByUUIDRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.ProfileByUsernameRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.ProfilesRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.RegisterRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.RestoreSessionRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.SetProfileRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.UpdateListRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.UpdateRequestEvent;
|
|
||||||
import pro.gravit.launcher.events.request.VerifySecureTokenRequestEvent;
|
|
||||||
import pro.gravit.launcher.hasher.HashedEntry;
|
import pro.gravit.launcher.hasher.HashedEntry;
|
||||||
import pro.gravit.launcher.hasher.HashedEntryAdapter;
|
import pro.gravit.launcher.hasher.HashedEntryAdapter;
|
||||||
import pro.gravit.launcher.request.WebSocketEvent;
|
import pro.gravit.launcher.request.WebSocketEvent;
|
||||||
|
@ -126,6 +108,7 @@ public void registerResults() {
|
||||||
results.register("getAvailabilityAuth", GetAvailabilityAuthRequestEvent.class);
|
results.register("getAvailabilityAuth", GetAvailabilityAuthRequestEvent.class);
|
||||||
results.register("exception", ExceptionEvent.class);
|
results.register("exception", ExceptionEvent.class);
|
||||||
results.register("register", RegisterRequestEvent.class);
|
results.register("register", RegisterRequestEvent.class);
|
||||||
|
results.register("setpassword", SetPasswordRequestEvent.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerHandler(EventHandler eventHandler) {
|
public void registerHandler(EventHandler eventHandler) {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import javax.net.ssl.SSLException;
|
import javax.net.ssl.SSLException;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.events.ExceptionEvent;
|
||||||
import pro.gravit.launcher.events.request.ErrorRequestEvent;
|
import pro.gravit.launcher.events.request.ErrorRequestEvent;
|
||||||
import pro.gravit.launcher.request.Request;
|
import pro.gravit.launcher.request.Request;
|
||||||
import pro.gravit.launcher.request.RequestException;
|
import pro.gravit.launcher.request.RequestException;
|
||||||
|
@ -67,6 +68,10 @@ public WebSocketEvent get() throws InterruptedException, ExecutionException {
|
||||||
ErrorRequestEvent errorRequestEvent = (ErrorRequestEvent) event.result;
|
ErrorRequestEvent errorRequestEvent = (ErrorRequestEvent) event.result;
|
||||||
throw new ExecutionException(new RequestException(errorRequestEvent.error));
|
throw new ExecutionException(new RequestException(errorRequestEvent.error));
|
||||||
}
|
}
|
||||||
|
if (event.result.getType().equals("exception")) {
|
||||||
|
ExceptionEvent error = (ExceptionEvent) event.result;
|
||||||
|
throw new ExecutionException(new RequestException(String.format("LaunchServer fatal error: %s: %s", error.clazz, error.message)));
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,10 +85,14 @@ public WebSocketEvent get(long timeout, TimeUnit unit) throws InterruptedExcepti
|
||||||
}
|
}
|
||||||
WebSocketEvent result = event.result;
|
WebSocketEvent result = event.result;
|
||||||
waitEventHandler.requests.remove(event);
|
waitEventHandler.requests.remove(event);
|
||||||
if (event.result.getType().equals("error") || event.result.getType().equals("exception")) {
|
if (event.result.getType().equals("error")) {
|
||||||
ErrorRequestEvent errorRequestEvent = (ErrorRequestEvent) event.result;
|
ErrorRequestEvent errorRequestEvent = (ErrorRequestEvent) event.result;
|
||||||
throw new ExecutionException(new RequestException(errorRequestEvent.error));
|
throw new ExecutionException(new RequestException(errorRequestEvent.error));
|
||||||
}
|
}
|
||||||
|
if (event.result.getType().equals("exception")) {
|
||||||
|
ExceptionEvent error = (ExceptionEvent) event.result;
|
||||||
|
throw new ExecutionException(new RequestException(String.format("LaunchServer fatal error: %s: %s", error.clazz, error.message)));
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,24 @@
|
||||||
package pro.gravit.launcher;
|
package pro.gravit.launcher;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import pro.gravit.launcher.impl.*;
|
|
||||||
|
import pro.gravit.launcher.impl.Cyclic2DependModule;
|
||||||
|
import pro.gravit.launcher.impl.CyclicDependModule;
|
||||||
|
import pro.gravit.launcher.impl.Depend1Module;
|
||||||
|
import pro.gravit.launcher.impl.Depend2Module;
|
||||||
|
import pro.gravit.launcher.impl.Depend3Module;
|
||||||
|
import pro.gravit.launcher.impl.MainModule;
|
||||||
|
import pro.gravit.launcher.impl.TestModule;
|
||||||
import pro.gravit.launcher.impl.event.CancelEvent;
|
import pro.gravit.launcher.impl.event.CancelEvent;
|
||||||
import pro.gravit.launcher.impl.event.NormalEvent;
|
import pro.gravit.launcher.impl.event.NormalEvent;
|
||||||
import pro.gravit.launcher.modules.LauncherModule;
|
import pro.gravit.launcher.modules.LauncherModule;
|
||||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
|
||||||
|
|
||||||
public class ModulesTest {
|
public class ModulesTest {
|
||||||
@TempDir
|
@TempDir
|
||||||
public static Path configDir;
|
public static Path configDir;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package pro.gravit.launcher.impl;
|
package pro.gravit.launcher.impl;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
|
||||||
import pro.gravit.launcher.modules.LauncherInitContext;
|
import pro.gravit.launcher.modules.LauncherInitContext;
|
||||||
import pro.gravit.launcher.modules.LauncherModule;
|
import pro.gravit.launcher.modules.LauncherModule;
|
||||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package pro.gravit.launcher.impl;
|
package pro.gravit.launcher.impl;
|
||||||
|
|
||||||
import pro.gravit.launcher.ModulesTest;
|
|
||||||
import pro.gravit.launcher.modules.LauncherInitContext;
|
import pro.gravit.launcher.modules.LauncherInitContext;
|
||||||
import pro.gravit.launcher.modules.LauncherModule;
|
import pro.gravit.launcher.modules.LauncherModule;
|
||||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package pro.gravit.launcher.impl;
|
package pro.gravit.launcher.impl;
|
||||||
|
|
||||||
import pro.gravit.launcher.ModulesTest;
|
|
||||||
import pro.gravit.launcher.modules.LauncherInitContext;
|
import pro.gravit.launcher.modules.LauncherInitContext;
|
||||||
import pro.gravit.launcher.modules.LauncherModule;
|
import pro.gravit.launcher.modules.LauncherModule;
|
||||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package pro.gravit.launcher.impl;
|
package pro.gravit.launcher.impl;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import pro.gravit.launcher.ModulesTest;
|
|
||||||
import pro.gravit.launcher.modules.LauncherInitContext;
|
import pro.gravit.launcher.modules.LauncherInitContext;
|
||||||
import pro.gravit.launcher.modules.LauncherModule;
|
import pro.gravit.launcher.modules.LauncherModule;
|
||||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||||
|
|
|
@ -22,7 +22,7 @@ public final class Version {
|
||||||
public final Type release;
|
public final Type release;
|
||||||
public static final int MAJOR = 5;
|
public static final int MAJOR = 5;
|
||||||
public static final int MINOR = 0;
|
public static final int MINOR = 0;
|
||||||
public static final int PATCH = 7;
|
public static final int PATCH = 8;
|
||||||
public static final int BUILD = 1;
|
public static final int BUILD = 1;
|
||||||
public static final Version.Type RELEASE = Type.STABLE;
|
public static final Version.Type RELEASE = Type.STABLE;
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
package pro.gravit.utils.command;
|
package pro.gravit.utils.command;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.jline.reader.Candidate;
|
import org.jline.reader.Candidate;
|
||||||
|
|
||||||
import pro.gravit.utils.helper.VerifyHelper;
|
import pro.gravit.utils.helper.VerifyHelper;
|
||||||
|
|
||||||
public abstract class Command {
|
public abstract class Command {
|
||||||
|
|
|
@ -32,9 +32,6 @@ public Category(CommandCategory category, String name, String description) {
|
||||||
|
|
||||||
public void eval(String line, boolean bell) {
|
public void eval(String line, boolean bell) {
|
||||||
LogHelper.info("Command '%s'", line);
|
LogHelper.info("Command '%s'", line);
|
||||||
|
|
||||||
// Parse line to tokens
|
|
||||||
String[] args;
|
|
||||||
try {
|
try {
|
||||||
evalNative(line, bell);
|
evalNative(line, bell);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -2,8 +2,9 @@
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import pro.gravit.utils.helper.JVMHelper;
|
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
|
import pro.gravit.utils.helper.JVMHelper;
|
||||||
|
|
||||||
public class StdCommandHandler extends CommandHandler {
|
public class StdCommandHandler extends CommandHandler {
|
||||||
private final BufferedReader reader;
|
private final BufferedReader reader;
|
||||||
|
|
|
@ -3,9 +3,14 @@
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import pro.gravit.launcher.impl.Test2Command;
|
import pro.gravit.launcher.impl.Test2Command;
|
||||||
import pro.gravit.launcher.impl.TestCommand;
|
import pro.gravit.launcher.impl.TestCommand;
|
||||||
import pro.gravit.utils.command.*;
|
import pro.gravit.utils.command.BaseCommandCategory;
|
||||||
|
import pro.gravit.utils.command.Command;
|
||||||
|
import pro.gravit.utils.command.CommandException;
|
||||||
|
import pro.gravit.utils.command.CommandHandler;
|
||||||
|
import pro.gravit.utils.command.StdCommandHandler;
|
||||||
|
|
||||||
|
|
||||||
public class CommandHandlerTest {
|
public class CommandHandlerTest {
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
package pro.gravit.launcher;
|
package pro.gravit.launcher;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.GsonBuilder;
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
import pro.gravit.utils.ProviderMap;
|
import pro.gravit.utils.ProviderMap;
|
||||||
import pro.gravit.utils.UniversalJsonAdapter;
|
import pro.gravit.utils.UniversalJsonAdapter;
|
||||||
|
|
||||||
|
|
|
@ -95,5 +95,4 @@ pack project(':LauncherAuthlib')
|
||||||
sign publishing.publications.serverwrapperapi
|
sign publishing.publications.serverwrapperapi
|
||||||
}
|
}
|
||||||
|
|
||||||
build.dependsOn tasks.shadowJar
|
assemble.dependsOn tasks.shadowJar
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package pro.gravit.launcher.server;
|
package pro.gravit.launcher.server;
|
||||||
|
|
||||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||||
|
|
||||||
public class ServerWrapperModulesManager extends SimpleModuleManager {
|
public class ServerWrapperModulesManager extends SimpleModuleManager {
|
||||||
public ServerWrapperModulesManager(Path modulesDir, Path configDir) {
|
public ServerWrapperModulesManager(Path modulesDir, Path configDir) {
|
||||||
super(modulesDir, configDir);
|
super(modulesDir, configDir);
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
id 'signing'
|
id 'signing'
|
||||||
}
|
}
|
||||||
group = 'pro.gravit.launcher'
|
group = 'pro.gravit.launcher'
|
||||||
version = '5.0.7'
|
version = '5.0.8'
|
||||||
|
|
||||||
configure(subprojects.findAll { it.name != 'modules' }) {
|
configure(subprojects.findAll { it.name != 'modules' }) {
|
||||||
apply plugin: 'idea'
|
apply plugin: 'idea'
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
//Секретный ключ. Внимание! должен совпадать с ключем в лаунчсервере. Пожалуйста, смените его, иначе это ставит под угрозу проект.
|
|
||||||
$secretkey = '12345678';
|
|
||||||
//Настройки связи с базой данных
|
|
||||||
$link = mysqli_connect(
|
|
||||||
'localhost', // Хост
|
|
||||||
'root', // Пользователь
|
|
||||||
'', // Пароль
|
|
||||||
'test' // База данных
|
|
||||||
);
|
|
||||||
|
|
||||||
// Настройка таблицы
|
|
||||||
$settings = [
|
|
||||||
'table' => "dle_users", // Название таблицы
|
|
||||||
'usernameColumn' => "name", // Столбец с именами пользователей
|
|
||||||
'uuidColumn' => "uuid", // Столбец с uuid
|
|
||||||
'accessTokenColumn' => "accessToken", // Столбец с accessToken
|
|
||||||
'ServerIDColumn' => "serverID" // Столбец с serverID
|
|
||||||
];
|
|
||||||
|
|
||||||
// Не трогать
|
|
||||||
// Можно повредить скрипт
|
|
||||||
$AuthHandler = [
|
|
||||||
'type' => filter_input(INPUT_GET, 'type', FILTER_SANITIZE_STRING),
|
|
||||||
'username' => filter_input(INPUT_GET, 'username', FILTER_SANITIZE_STRING),
|
|
||||||
'uuid' => filter_input(INPUT_GET, 'uuid', FILTER_SANITIZE_STRING),
|
|
||||||
'accessToken' => filter_input(INPUT_GET, 'accessToken', FILTER_SANITIZE_STRING),
|
|
||||||
'ServerID' => filter_input(INPUT_GET, 'ServerID', FILTER_SANITIZE_STRING),
|
|
||||||
'secretKey' => filter_input(INPUT_GET, 'secretKey', FILTER_SANITIZE_STRING)
|
|
||||||
];
|
|
||||||
|
|
||||||
if (!isset($AuthHandler['secretKey'])) {
|
|
||||||
die('Не указан ключ!');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($secretkey != $AuthHandler['secretKey']) {
|
|
||||||
die('Неверный ключ!');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$link) {
|
|
||||||
die('Ошибка подключения к базе данных');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isset($AuthHandler['type'])) {
|
|
||||||
if($AuthHandler['type'] == "FetchByUUID") {
|
|
||||||
if(isset($AuthHandler['uuid'])) {
|
|
||||||
$result = mysqli_query($link, 'SELECT '.$settings['usernameColumn'].','.$settings['accessTokenColumn'].','.$settings['serverID'].' FROM '.$settings['table'].' WHERE '.$settings['uuidColumn'].'="'.$AuthHandler['uuid'].'" LIMIT 1') or die($link->error);
|
|
||||||
$row = $result->fetch_assoc();
|
|
||||||
mysqli_free_result($result);
|
|
||||||
mysqli_close($link);
|
|
||||||
die($row[$settings['usernameColumn']] + ':' + $row[$settings['accessTokenColumn']] + ':' + $row[$settings['serverID']]);
|
|
||||||
}
|
|
||||||
if($AuthHandler['type'] == "FetchByUsername") {
|
|
||||||
if(isset($AuthHandler['uuid'])) {
|
|
||||||
$result = mysqli_query($link, 'SELECT '.$settings['uuidColumn'].','.$settings['accessTokenColumn'].','.$settings['serverID'].' FROM '.$settings['table'].' WHERE '.$settings['usernameColumn'].'="'.$AuthHandler['username'].'" LIMIT 1') or die($link->error);
|
|
||||||
$row = $result->fetch_assoc();
|
|
||||||
mysqli_free_result($result);
|
|
||||||
mysqli_close($link);
|
|
||||||
die($row[$settings['uuidColumn']] + ':' + $row[$settings['accessTokenColumn']] + ':' + $row[$settings['serverID']]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Обновление строк
|
|
||||||
|
|
||||||
if($AuthHandler['type'] == "SetAccessTokenAndUUID") {
|
|
||||||
$result = mysqli_query($link, 'UPDATE '.$settings['table'].' SET '.$settings['accessTokenColumn'].'="'.$AuthHandler['accessToken'].'" WHERE '.$settings['usernameColumn'].'="'.$AuthHandler['username'].'"') or die($link->error);
|
|
||||||
$result1 = mysqli_query($link, 'UPDATE '.$settings['table'].' SET '.$settings['uuidColumn'].'="'.$AuthHandler['uuid'].'" WHERE '.$settings['usernameColumn'].'="'.$AuthHandler['username'].'"') or die($link->error);
|
|
||||||
mysqli_close($link);
|
|
||||||
die('OK');
|
|
||||||
}
|
|
||||||
if($AuthHandler['type'] == "SetServerID") {
|
|
||||||
$result = mysqli_query($link, 'UPDATE '.$settings['table'].' SET '.$settings['ServerIDColumn'].'="'.$AuthHandler['serverID'].'" WHERE '.$settings['uuidColumn'].'="'.$AuthHandler['uuid'].'"') or die($link->error);
|
|
||||||
mysqli_close($link);
|
|
||||||
die('OK');
|
|
||||||
}
|
|
||||||
die('FAIL!');
|
|
||||||
} else {
|
|
||||||
die('Type not set!');
|
|
||||||
}
|
|
||||||
?>
|
|
2
modules
2
modules
|
@ -1 +1 @@
|
||||||
Subproject commit 1d8b759f6fdda6e9ae6306886a75d8ddd1e5c159
|
Subproject commit 88bd03c38a2681e997a305e376eb63e446c99a7f
|
Loading…
Reference in a new issue