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
|
||||
- ServerWrapper/*.jar
|
||||
- modules/*.jar
|
||||
expire_in: 1 week
|
||||
test:
|
||||
stage: test
|
||||
script:
|
||||
|
|
|
@ -177,7 +177,7 @@ task dumpClientLibs(type: Copy) {
|
|||
from parent.childProjects.Launcher.tasks.dumpLibs.destinationDir
|
||||
}
|
||||
|
||||
build.dependsOn tasks.dumpLibs, tasks.dumpCompileOnlyLibs, tasks.dumpClientLibs, tasks.bundle, tasks.cleanjar
|
||||
assemble.dependsOn tasks.dumpLibs, tasks.dumpCompileOnlyLibs, tasks.dumpClientLibs, tasks.bundle, tasks.cleanjar
|
||||
|
||||
|
||||
publishing {
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
import pro.gravit.launcher.hasher.HashedDir;
|
||||
import pro.gravit.launcher.managers.ConfigManager;
|
||||
import pro.gravit.launcher.managers.GarbageManager;
|
||||
import pro.gravit.launcher.modules.LauncherModulesManager;
|
||||
import pro.gravit.launcher.modules.events.ClosePhase;
|
||||
import pro.gravit.launcher.profiles.ClientProfile;
|
||||
import pro.gravit.launchserver.auth.AuthProviderPair;
|
||||
|
@ -50,7 +49,10 @@
|
|||
import pro.gravit.launchserver.binary.SimpleEXELauncherBinary;
|
||||
import pro.gravit.launchserver.config.LaunchServerConfig;
|
||||
import pro.gravit.launchserver.config.LaunchServerRuntimeConfig;
|
||||
import pro.gravit.launchserver.manangers.*;
|
||||
import pro.gravit.launchserver.manangers.CertificateManager;
|
||||
import pro.gravit.launchserver.manangers.MirrorManager;
|
||||
import pro.gravit.launchserver.manangers.ReconfigurableManager;
|
||||
import pro.gravit.launchserver.manangers.SessionManager;
|
||||
import pro.gravit.launchserver.manangers.hook.AuthHookManager;
|
||||
import pro.gravit.launchserver.manangers.hook.BuildHookManager;
|
||||
import pro.gravit.launchserver.modules.events.LaunchServerFullInitEvent;
|
||||
|
@ -59,7 +61,9 @@
|
|||
import pro.gravit.launchserver.modules.events.NewLaunchServerInstanceEvent;
|
||||
import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager;
|
||||
import pro.gravit.launchserver.socket.handlers.NettyServerSocketHandler;
|
||||
import pro.gravit.utils.command.*;
|
||||
import pro.gravit.utils.command.Command;
|
||||
import pro.gravit.utils.command.CommandHandler;
|
||||
import pro.gravit.utils.command.SubCommand;
|
||||
import pro.gravit.utils.helper.CommonHelper;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.JVMHelper;
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
package pro.gravit.launchserver;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.security.interfaces.RSAPrivateKey;
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
|
||||
import pro.gravit.launchserver.config.LaunchServerConfig;
|
||||
import pro.gravit.launchserver.config.LaunchServerRuntimeConfig;
|
||||
import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager;
|
||||
import pro.gravit.utils.command.CommandHandler;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.security.interfaces.RSAPrivateKey;
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
|
||||
public class LaunchServerBuilder {
|
||||
private LaunchServerConfig config;
|
||||
private LaunchServerRuntimeConfig runtimeConfig;
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
package pro.gravit.launchserver;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.security.KeyPair;
|
||||
import java.security.interfaces.RSAPrivateKey;
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
|
||||
import pro.gravit.launcher.Launcher;
|
||||
import pro.gravit.launcher.hwid.HWIDProvider;
|
||||
import pro.gravit.launcher.modules.events.PreConfigPhase;
|
||||
|
@ -24,16 +34,6 @@
|
|||
import pro.gravit.utils.helper.LogHelper;
|
||||
import pro.gravit.utils.helper.SecurityHelper;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.security.KeyPair;
|
||||
import java.security.interfaces.RSAPrivateKey;
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
|
||||
public class LaunchServerStarter {
|
||||
public static void main(String[] args) throws Exception {
|
||||
JVMHelper.checkStackTrace(LaunchServerStarter.class);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package pro.gravit.launchserver;
|
||||
|
||||
import pro.gravit.utils.command.Command;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import pro.gravit.utils.command.Command;
|
||||
|
||||
/**
|
||||
* Allows calling commands using the config command
|
||||
*/
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
package pro.gravit.launchserver.auth;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.postgresql.ds.PGSimpleDataSource;
|
||||
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
import pro.gravit.utils.helper.VerifyHelper;
|
||||
|
||||
import org.postgresql.ds.PGSimpleDataSource;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
public final class PostgreSQLSourceConfig implements AutoCloseable {
|
||||
public static final int TIMEOUT = VerifyHelper.verifyInt(
|
||||
Integer.parseUnsignedInt(System.getProperty("launcher.postgresql.idleTimeout", Integer.toString(5000))),
|
||||
|
|
|
@ -15,7 +15,11 @@
|
|||
import pro.gravit.launchserver.auth.provider.AuthProviderResult;
|
||||
import pro.gravit.utils.command.Command;
|
||||
import pro.gravit.utils.command.SubCommand;
|
||||
import pro.gravit.utils.helper.*;
|
||||
import pro.gravit.utils.helper.CommonHelper;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
import pro.gravit.utils.helper.SecurityHelper;
|
||||
import pro.gravit.utils.helper.VerifyHelper;
|
||||
|
||||
public abstract class CachedAuthHandler extends AuthHandler implements NeedGarbageCollection, Reconfigurable {
|
||||
public static final class Entry {
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
package pro.gravit.launchserver.auth.handler;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.postgresql.util.PGobject;
|
||||
|
||||
import pro.gravit.launchserver.auth.PostgreSQLSourceConfig;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.*;
|
||||
import java.util.UUID;
|
||||
|
||||
public final class PostgreSQLAuthHandler extends CachedAuthHandler {
|
||||
private PostgreSQLSourceConfig postgreSQLHolder;
|
||||
private String uuidColumn;
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import pro.gravit.launcher.hwid.HWID;
|
||||
import pro.gravit.launcher.Launcher;
|
||||
import pro.gravit.launcher.hwid.HWID;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
||||
|
|
|
@ -9,7 +9,13 @@
|
|||
|
||||
import pro.gravit.launcher.Launcher;
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.launchserver.binary.tasks.*;
|
||||
import pro.gravit.launchserver.binary.tasks.AdditionalFixesApplyTask;
|
||||
import pro.gravit.launchserver.binary.tasks.AttachJarsTask;
|
||||
import pro.gravit.launchserver.binary.tasks.CompressBuildTask;
|
||||
import pro.gravit.launchserver.binary.tasks.LauncherBuildTask;
|
||||
import pro.gravit.launchserver.binary.tasks.MainBuildTask;
|
||||
import pro.gravit.launchserver.binary.tasks.PrepareBuildTask;
|
||||
import pro.gravit.launchserver.binary.tasks.ProGuardBuildTask;
|
||||
import pro.gravit.utils.helper.CommonHelper;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
import org.objectweb.asm.ClassWriter;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.objectweb.asm.Type;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import org.objectweb.asm.tree.FieldInsnNode;
|
||||
import org.objectweb.asm.tree.InsnList;
|
||||
|
@ -12,15 +13,10 @@
|
|||
import org.objectweb.asm.tree.MethodNode;
|
||||
import org.objectweb.asm.tree.TypeInsnNode;
|
||||
import org.objectweb.asm.tree.VarInsnNode;
|
||||
import org.objectweb.asm.Type;
|
||||
|
||||
import pro.gravit.launcher.AutogenConfig;
|
||||
import pro.gravit.launcher.Launcher;
|
||||
import pro.gravit.launcher.LauncherConfig;
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.LauncherModulesManager;
|
||||
import pro.gravit.launcher.modules.Module;
|
||||
import pro.gravit.launcher.modules.ModulesManager;
|
||||
import pro.gravit.launchserver.asm.ClassMetadataReader;
|
||||
import pro.gravit.launchserver.asm.SafeClassWriter;
|
||||
|
||||
|
@ -66,36 +62,33 @@ public String getZipEntryPath() {
|
|||
}
|
||||
|
||||
public void setAddress(String address) {
|
||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||
constructor.instructions.add(new LdcInsnNode(address));
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "address", stringDesc));
|
||||
setStringField("address", address);
|
||||
}
|
||||
|
||||
public void setProjectName(String name) {
|
||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||
constructor.instructions.add(new LdcInsnNode(name));
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "projectname", stringDesc));
|
||||
setStringField("projectname", name);
|
||||
}
|
||||
|
||||
public void setSecretKey(String key) {
|
||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||
constructor.instructions.add(new LdcInsnNode(key));
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "secretKeyClient", stringDesc));
|
||||
setStringField("secretKeyClient", key);
|
||||
}
|
||||
|
||||
public void setOemUnlockKey(String key) {
|
||||
setStringField("oemUnlockKey", key);
|
||||
}
|
||||
|
||||
private void setStringField(String name, String value)
|
||||
{
|
||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||
constructor.instructions.add(new LdcInsnNode(key));
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "oemUnlockKey", stringDesc));
|
||||
constructor.instructions.add(new LdcInsnNode(value));
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, name, stringDesc));
|
||||
}
|
||||
|
||||
public void setGuardType(String key) {
|
||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||
constructor.instructions.add(new LdcInsnNode(key));
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "guardType", stringDesc));
|
||||
setStringField("guardType", key);
|
||||
}
|
||||
|
||||
public void push(final int value) {
|
||||
private void push(final int value) {
|
||||
if (value >= -1 && value <= 5)
|
||||
constructor.instructions.add(new InsnNode(Opcodes.ICONST_0 + value));
|
||||
else if (value >= Byte.MIN_VALUE && value <= Byte.MAX_VALUE)
|
||||
|
@ -129,15 +122,25 @@ public void setEnv(LauncherConfig.LauncherEnvironment env) {
|
|||
}
|
||||
|
||||
public void setClientPort(int port) {
|
||||
setIntegerField("clientPort", port);
|
||||
}
|
||||
|
||||
public void setIntegerField(String name, int value)
|
||||
{
|
||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||
push(port);
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "clientPort", Type.INT_TYPE.getInternalName()));
|
||||
push(value);
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, name, Type.INT_TYPE.getInternalName()));
|
||||
}
|
||||
|
||||
public void setWarningMissArchJava(boolean b) {
|
||||
setBooleanField("isWarningMissArchJava", b);
|
||||
}
|
||||
|
||||
private void setBooleanField(String name, boolean b)
|
||||
{
|
||||
constructor.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||
constructor.instructions.add(new InsnNode(b ? Opcodes.ICONST_1 : Opcodes.ICONST_0));
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, "isWarningMissArchJava", Type.BOOLEAN_TYPE.getInternalName()));
|
||||
constructor.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, autoGenConfigName, name, Type.BOOLEAN_TYPE.getInternalName()));
|
||||
}
|
||||
|
||||
public void setGuardLicense(String name, String key, String encryptKey) {
|
||||
|
|
|
@ -19,11 +19,12 @@ public class ProguardConf {
|
|||
private static final String chars = "1aAbBcC2dDeEfF3gGhHiI4jJkKl5mMnNoO6pPqQrR7sStT8uUvV9wWxX0yYzZ";
|
||||
|
||||
private static String generateString(SecureRandom rand, String lowString, String upString, int il) {
|
||||
StringBuilder sb = new StringBuilder(il + lowString.length());
|
||||
StringBuilder sb = new StringBuilder(Math.max(il, lowString.length()));
|
||||
for (int i = 0; i < lowString.length(); ++i) {
|
||||
sb.append(rand.nextBoolean() ? lowString.charAt(i) : upString.charAt(i));
|
||||
}
|
||||
for (int i = 0; i < il - 1; i++) sb.append(chars.charAt(rand.nextInt(chars.length())));
|
||||
int toI = il - lowString.length();
|
||||
for (int i = 0; i < toI; i++) sb.append(chars.charAt(rand.nextInt(chars.length())));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
@ -74,7 +75,7 @@ public void genWords(boolean force) throws IOException {
|
|||
String projectName = srv.config.projectName.replaceAll("\\W", "");
|
||||
String lowName = projectName.toLowerCase();
|
||||
String upName = projectName.toUpperCase();
|
||||
for (int i = 0; i < Short.MAX_VALUE; i++) out.println(generateString(rand, lowName, upName, 3));
|
||||
for (int i = 0; i < Short.MAX_VALUE; i++) out.println(generateString(rand, lowName, upName, 14));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package pro.gravit.launchserver.binary;
|
||||
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
||||
public class SimpleEXELauncherBinary extends LauncherBinary {
|
||||
public Path exeTemplate;
|
||||
public SimpleEXELauncherBinary(LaunchServer server) {
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
package pro.gravit.launchserver.binary.tasks;
|
||||
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.zip.Deflater;
|
||||
|
@ -10,6 +7,9 @@
|
|||
import java.util.zip.ZipInputStream;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
|
||||
public class CompressBuildTask implements LauncherBuildTask {
|
||||
public transient final LaunchServer server;
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package pro.gravit.launchserver.command;
|
||||
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
|
||||
public abstract class Command extends pro.gravit.utils.command.Command {
|
||||
|
||||
|
||||
|
|
|
@ -28,7 +28,13 @@
|
|||
import pro.gravit.launchserver.command.install.MultiCommand;
|
||||
import pro.gravit.launchserver.command.modules.LoadModuleCommand;
|
||||
import pro.gravit.launchserver.command.modules.ModulesCommand;
|
||||
import pro.gravit.launchserver.command.service.*;
|
||||
import pro.gravit.launchserver.command.service.ClientsCommand;
|
||||
import pro.gravit.launchserver.command.service.ComponentCommand;
|
||||
import pro.gravit.launchserver.command.service.ConfigCommand;
|
||||
import pro.gravit.launchserver.command.service.GetModulusCommand;
|
||||
import pro.gravit.launchserver.command.service.GetPermissionsCommand;
|
||||
import pro.gravit.launchserver.command.service.GivePermissionsCommand;
|
||||
import pro.gravit.launchserver.command.service.ServerStatusCommand;
|
||||
import pro.gravit.utils.command.BaseCommandCategory;
|
||||
import pro.gravit.utils.command.basic.ClearCommand;
|
||||
import pro.gravit.utils.command.basic.DebugCommand;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package pro.gravit.launchserver.command.modules;
|
||||
|
||||
import java.net.URI;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
package pro.gravit.launchserver.components;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import pro.gravit.launcher.NeedGarbageCollection;
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.launchserver.socket.Client;
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
package pro.gravit.launchserver.config;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import io.netty.channel.epoll.Epoll;
|
||||
import io.netty.handler.logging.LogLevel;
|
||||
import pro.gravit.launcher.Launcher;
|
||||
|
@ -24,12 +30,6 @@
|
|||
import pro.gravit.utils.helper.JVMHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public final class LaunchServerConfig {
|
||||
private transient LaunchServer server = null;
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ public class User {
|
|||
private long id;
|
||||
@Column(unique = true)
|
||||
public String username;
|
||||
public String email;
|
||||
@Column(unique = true)
|
||||
public UUID uuid;
|
||||
@Column(name = "password")
|
||||
|
@ -66,8 +67,6 @@ public boolean verifyPassword(String password)
|
|||
return false;
|
||||
}
|
||||
byte[] enpassword = digest.digest(password.concat(password_salt).getBytes(StandardCharsets.UTF_8));
|
||||
LogHelper.info(Arrays.toString(enpassword));
|
||||
LogHelper.info(Arrays.toString(this.password));
|
||||
return Arrays.equals(enpassword, this.password);
|
||||
}
|
||||
public ClientPermissions getPermissions()
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package pro.gravit.launchserver.dao.provider;
|
||||
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import org.hibernate.cfg.Configuration;
|
||||
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.launchserver.dao.User;
|
||||
import pro.gravit.launchserver.dao.UserHWID;
|
||||
|
@ -8,13 +11,12 @@
|
|||
import pro.gravit.launchserver.dao.impl.HibernateUserDAOImpl;
|
||||
import pro.gravit.utils.helper.CommonHelper;
|
||||
|
||||
import java.nio.file.Paths;
|
||||
|
||||
public class HibernateDaoProvider extends DaoProvider {
|
||||
public String driver;
|
||||
public String url;
|
||||
public String username;
|
||||
public String password;
|
||||
public String dialect;
|
||||
public String pool_size;
|
||||
public String hibernateConfig;
|
||||
public boolean parallelHibernateInit;
|
||||
|
@ -30,6 +32,8 @@ public void init(LaunchServer server) {
|
|||
.setProperty("hibernate.connection.username", username)
|
||||
.setProperty("hibernate.connection.password", password)
|
||||
.setProperty("hibernate.connection.pool_size", pool_size);
|
||||
if(dialect != null)
|
||||
cfg.setProperty("hibernate.dialect", dialect);
|
||||
if(hibernateConfig != null)
|
||||
cfg.configure(Paths.get(hibernateConfig).toFile());
|
||||
userDAO = new HibernateUserDAOImpl(cfg.buildSessionFactory());
|
||||
|
|
|
@ -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;
|
||||
|
||||
import pro.gravit.launcher.modules.events.InitPhase;
|
||||
import pro.gravit.launcher.modules.events.PostInitPhase;
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||
import pro.gravit.launcher.modules.events.InitPhase;
|
||||
import pro.gravit.utils.Version;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
||||
public class LaunchServerCoreModule extends LauncherModule {
|
||||
public LaunchServerCoreModule() {
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
package pro.gravit.launchserver.modules.impl;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class LaunchServerModulesManager extends SimpleModuleManager {
|
||||
public LaunchServerCoreModule coreModule;
|
||||
public LaunchServerModulesManager(Path modulesDir, Path configDir) {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package pro.gravit.launchserver.socket;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
|
@ -21,14 +20,7 @@
|
|||
import pro.gravit.launchserver.socket.response.WebSocketServerResponse;
|
||||
import pro.gravit.launchserver.socket.response.admin.AddLogListenerResponse;
|
||||
import pro.gravit.launchserver.socket.response.admin.ExecCommandResponse;
|
||||
import pro.gravit.launchserver.socket.response.auth.AuthResponse;
|
||||
import pro.gravit.launchserver.socket.response.auth.CheckServerResponse;
|
||||
import pro.gravit.launchserver.socket.response.auth.GetAvailabilityAuthResponse;
|
||||
import pro.gravit.launchserver.socket.response.auth.JoinServerResponse;
|
||||
import pro.gravit.launchserver.socket.response.auth.ProfilesResponse;
|
||||
import pro.gravit.launchserver.socket.response.auth.RegisterResponse;
|
||||
import pro.gravit.launchserver.socket.response.auth.RestoreSessionResponse;
|
||||
import pro.gravit.launchserver.socket.response.auth.SetProfileResponse;
|
||||
import pro.gravit.launchserver.socket.response.auth.*;
|
||||
import pro.gravit.launchserver.socket.response.profile.BatchProfileByUsername;
|
||||
import pro.gravit.launchserver.socket.response.profile.ProfileByUUIDResponse;
|
||||
import pro.gravit.launchserver.socket.response.profile.ProfileByUsername;
|
||||
|
@ -42,7 +34,6 @@
|
|||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class WebSocketService {
|
||||
public final ChannelGroup channels;
|
||||
public static ProviderMap<WebSocketServerResponse> providers = new ProviderMap<>();
|
||||
|
@ -132,6 +123,7 @@ public static void registerResponses() {
|
|||
providers.register("verifySecureToken", VerifySecureTokenResponse.class);
|
||||
providers.register("getAvailabilityAuth", GetAvailabilityAuthResponse.class);
|
||||
providers.register("register", RegisterResponse.class);
|
||||
providers.register("setPassword", SetPasswordResponse.class);
|
||||
}
|
||||
|
||||
public void sendObject(ChannelHandlerContext ctx, Object obj) {
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
import javax.crypto.IllegalBlockSizeException;
|
||||
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
||||
import pro.gravit.launcher.hwid.HWID;
|
||||
import pro.gravit.launcher.hwid.OshiHWID;
|
||||
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
||||
import pro.gravit.launcher.profiles.ClientProfile;
|
||||
import pro.gravit.launchserver.auth.AuthException;
|
||||
import pro.gravit.launchserver.auth.AuthProviderPair;
|
||||
|
|
|
@ -1,19 +1,20 @@
|
|||
package pro.gravit.launchserver.socket.response.auth;
|
||||
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import pro.gravit.launchserver.dao.User;
|
||||
import pro.gravit.launchserver.socket.Client;
|
||||
import pro.gravit.launchserver.socket.response.SimpleResponse;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import pro.gravit.launchserver.dao.User;
|
||||
import pro.gravit.launchserver.socket.Client;
|
||||
import pro.gravit.launchserver.socket.response.SimpleResponse;
|
||||
|
||||
public class RegisterResponse extends SimpleResponse {
|
||||
public String login;
|
||||
public String password;
|
||||
public String email;
|
||||
public byte[] verifyHash;
|
||||
@Override
|
||||
public void execute(ChannelHandlerContext ctx, Client client) throws Exception
|
||||
|
@ -32,6 +33,7 @@ public void execute(ChannelHandlerContext ctx, Client client) throws Exception
|
|||
}
|
||||
User user = new User();
|
||||
user.username = login;
|
||||
user.email = email;
|
||||
user.setPassword(password);
|
||||
user.uuid = UUID.randomUUID();
|
||||
server.config.dao.userService.saveUser(user);
|
||||
|
|
|
@ -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;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import pro.gravit.launcher.Launcher;
|
||||
import pro.gravit.launcher.managers.SimpleModulesConfigManager;
|
||||
import pro.gravit.launchserver.config.LaunchServerConfig;
|
||||
import pro.gravit.launchserver.config.LaunchServerRuntimeConfig;
|
||||
import pro.gravit.launchserver.manangers.LaunchServerGsonManager;
|
||||
import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager;
|
||||
import pro.gravit.utils.command.StdCommandHandler;
|
||||
import pro.gravit.utils.helper.SecurityHelper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.security.KeyPair;
|
||||
import java.security.interfaces.RSAPrivateKey;
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import pro.gravit.launcher.Launcher;
|
||||
import pro.gravit.launchserver.config.LaunchServerConfig;
|
||||
import pro.gravit.launchserver.config.LaunchServerRuntimeConfig;
|
||||
import pro.gravit.launchserver.manangers.LaunchServerGsonManager;
|
||||
import pro.gravit.launchserver.modules.impl.LaunchServerModulesManager;
|
||||
import pro.gravit.utils.command.StdCommandHandler;
|
||||
import pro.gravit.utils.helper.SecurityHelper;
|
||||
|
||||
public class StartLaunchServerTest {
|
||||
@TempDir
|
||||
public static Path modulesDir;
|
||||
|
@ -30,7 +30,6 @@ public class StartLaunchServerTest {
|
|||
public static void prepare() throws Exception
|
||||
{
|
||||
LaunchServerModulesManager modulesManager = new LaunchServerModulesManager(modulesDir, configDir);
|
||||
SimpleModulesConfigManager configManager = new SimpleModulesConfigManager(configDir);
|
||||
LaunchServerConfig config = LaunchServerConfig.getDefault(LaunchServer.LaunchServerEnv.TEST);
|
||||
Launcher.gsonManager = new LaunchServerGsonManager(modulesManager);
|
||||
Launcher.gsonManager.initGson();
|
||||
|
|
|
@ -66,7 +66,7 @@ task dumpLibs(type: Copy) {
|
|||
}
|
||||
|
||||
|
||||
build.dependsOn tasks.genRuntimeJS, tasks.dumpLibs, tasks.shadowJar
|
||||
assemble.dependsOn tasks.genRuntimeJS, tasks.dumpLibs, tasks.shadowJar
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
|
|
|
@ -4,12 +4,20 @@ var config = {
|
|||
title: "GravitLauncher", // Заголовок окна
|
||||
icons: ["favicon.png"], // Путь/Пути до иконки окна
|
||||
|
||||
//*** Меню авторизации ***//
|
||||
linkText: "GravitLauncher", // Текст ссылки
|
||||
linkURL: new java.net.URL("https://gravit.pro"), // Ссылка
|
||||
links: [
|
||||
//*** Ссылки ***//
|
||||
{
|
||||
id: "link",
|
||||
text: "GravitLauncher",
|
||||
url: "https://gravit.pro",
|
||||
},
|
||||
|
||||
//*** Меню выбора серверов ***//
|
||||
discord: new java.net.URL("https://discord.gg/aJK6nMN"), // Ссылка
|
||||
{
|
||||
id: "discord",
|
||||
text: "",
|
||||
url: "https://discord.gg/aJK6nMN",
|
||||
}
|
||||
],
|
||||
|
||||
//*** Стандартные настройки клиента ***//
|
||||
autoEnterDefault: false, // Автоматический вход на выбранный сервер
|
||||
|
|
|
@ -37,7 +37,6 @@ function initLoginScene() {
|
|||
bar = pane;
|
||||
loginPane.lookup("#close").setOnAction(function(event) { javafx.application.Platform.exit() });
|
||||
loginPane.lookup("#hide").setOnAction(function(event) { stage.setIconified(true) });
|
||||
loginPane.lookup("#discord").setOnAction(function() { openURL(config.discord); });
|
||||
|
||||
var pane = loginPane.lookup("#authPane");
|
||||
authPane = pane;
|
||||
|
@ -63,13 +62,23 @@ function initLoginScene() {
|
|||
savePasswordBox = pane.lookup("#rememberchb");
|
||||
savePasswordBox.setSelected(settings.login === null || settings.rsaPassword !== null);
|
||||
|
||||
var link = pane.lookup("#link");
|
||||
link.setText(config.linkText);
|
||||
link.setOnAction(function(event) app.getHostServices().showDocument(config.linkURL.toURI()));
|
||||
|
||||
authOptions = pane.lookup("#authOptions");
|
||||
|
||||
pane.lookup("#goAuth").setOnAction(goAuth);
|
||||
|
||||
var pane = loginPane;
|
||||
config.links.forEach(function(link) {
|
||||
var el = pane.lookup("#link_" + link.id);
|
||||
if (el === null) return;
|
||||
|
||||
el.setOnAction(function() {
|
||||
openURL(new java.net.URL(link.url));
|
||||
});
|
||||
|
||||
if (link.text === "") return;
|
||||
|
||||
el.setText(link.text);
|
||||
});
|
||||
}
|
||||
|
||||
/* ======== init Menu window======== */
|
||||
|
@ -88,7 +97,6 @@ function initMenuScene() {
|
|||
bar = pane;
|
||||
pane.lookup("#close").setOnAction(function(event) { javafx.application.Platform.exit() });
|
||||
pane.lookup("#hide").setOnAction(function(event) { stage.setIconified(true) });
|
||||
pane.lookup("#discord").setOnAction(function() { openURL(config.discord); });
|
||||
pane.lookup("#settings").setOnAction(goSettings);
|
||||
pane.lookup("#goConsole").setOnAction(goConsole);
|
||||
|
||||
|
@ -112,6 +120,19 @@ function initMenuScene() {
|
|||
setCurrentScene(loginScene);
|
||||
});
|
||||
|
||||
var pane = menuPane;
|
||||
config.links.forEach(function(link) {
|
||||
var el = pane.lookup("#link_" + link.id);
|
||||
if (el === null) return;
|
||||
|
||||
el.setOnAction(function() {
|
||||
openURL(new java.net.URL(link.url));
|
||||
});
|
||||
|
||||
if (link.text === "") return;
|
||||
|
||||
el.setText(link.text);
|
||||
});
|
||||
}
|
||||
|
||||
/* ======== init Console window======== */
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<String fx:value="combologin-popup" />
|
||||
</styleClass>
|
||||
</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>
|
||||
</Pane>
|
||||
<Pane fx:id="news" prefHeight="432.0" prefWidth="423.0" styleClass="news" />
|
||||
|
@ -57,7 +57,7 @@
|
|||
</image>
|
||||
</ImageView>
|
||||
</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>
|
||||
<ImageView>
|
||||
<image>
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
</image>
|
||||
</ImageView>
|
||||
</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>
|
||||
<ImageView>
|
||||
<image>
|
||||
|
|
|
@ -129,7 +129,7 @@ #hide,
|
|||
#back,
|
||||
#goConsole,
|
||||
#settings,
|
||||
#discord {
|
||||
#link_discord {
|
||||
-fx-background-position: center;
|
||||
-fx-background-radius: 0;
|
||||
-fx-pref-width: 46px;
|
||||
|
@ -218,7 +218,7 @@ .text-input {
|
|||
}
|
||||
|
||||
/** Hyperlink **/
|
||||
#link {
|
||||
#link_link {
|
||||
-fx-font-weight: bold;
|
||||
-fx-font-size: 7pt;
|
||||
-fx-opacity: 0.5;
|
||||
|
@ -227,8 +227,8 @@ #link {
|
|||
-fx-pref-height: 17px;
|
||||
}
|
||||
|
||||
#link:hover,
|
||||
#link:pressed {
|
||||
#link_link:hover,
|
||||
#link_link:pressed {
|
||||
-fx-opacity: 0.8;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,9 +16,7 @@
|
|||
import pro.gravit.launcher.managers.ClientGsonManager;
|
||||
import pro.gravit.launcher.managers.ClientHookManager;
|
||||
import pro.gravit.launcher.managers.ConsoleManager;
|
||||
import pro.gravit.launcher.modules.LauncherModulesManager;
|
||||
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.RequestException;
|
||||
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());
|
||||
Objects.requireNonNull(args, "args");
|
||||
if (started.getAndSet(true))
|
||||
throw new IllegalStateException("Launcher has been already started");
|
||||
LauncherEngine.modulesManager.invokeEvent(new ClientEngineInitPhase(this));
|
||||
runtimeProvider.preLoad();
|
||||
LauncherGuardManager.initGuard(false);
|
||||
FunctionalBridge.getHWID = CommonHelper.newThread("GetHWID Thread", true, FunctionalBridge::getHWID);
|
||||
FunctionalBridge.getHWID.start();
|
||||
LogHelper.debug("Dir: %s", DirBridge.dir);
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package pro.gravit.launcher.client;
|
||||
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||
|
||||
public class ClientModuleManager extends SimpleModuleManager {
|
||||
public ClientModuleManager() {
|
||||
super(null, null);
|
||||
|
|
|
@ -6,19 +6,19 @@
|
|||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import pro.gravit.launcher.hwid.HWID;
|
||||
import pro.gravit.launcher.LauncherAPI;
|
||||
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
||||
import pro.gravit.launcher.guard.LauncherGuardManager;
|
||||
import pro.gravit.launcher.hasher.FileNameMatcher;
|
||||
import pro.gravit.launcher.hasher.HashedDir;
|
||||
import pro.gravit.launcher.hwid.HWID;
|
||||
import pro.gravit.launcher.hwid.OshiHWIDProvider;
|
||||
import pro.gravit.launcher.managers.ConsoleManager;
|
||||
import pro.gravit.launcher.managers.HasherManager;
|
||||
import pro.gravit.launcher.managers.HasherStore;
|
||||
import pro.gravit.launcher.request.Request;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
import pro.gravit.utils.Version;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
|
||||
public class FunctionalBridge {
|
||||
@LauncherAPI
|
||||
|
|
|
@ -11,7 +11,12 @@
|
|||
import javax.script.ScriptEngine;
|
||||
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.DirBridge;
|
||||
import pro.gravit.launcher.client.FunctionalBridge;
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
import java.util.regex.Pattern;
|
||||
|
||||
import pro.gravit.launcher.managers.GsonManager;
|
||||
import pro.gravit.launcher.modules.ModulesManager;
|
||||
import pro.gravit.launcher.profiles.ClientProfile;
|
||||
import pro.gravit.launcher.serialize.HInput;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
|
|
|
@ -8,9 +8,15 @@
|
|||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
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.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
|
@ -22,7 +28,10 @@
|
|||
import org.apache.http.impl.client.HttpClients;
|
||||
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 {
|
||||
private static final AtomicInteger COUNTER_THR = new AtomicInteger(0);
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
package pro.gravit.launcher.events;
|
||||
|
||||
import pro.gravit.launcher.LauncherNetworkAPI;
|
||||
|
||||
public class ExceptionEvent extends RequestEvent {
|
||||
public ExceptionEvent(Exception e) {
|
||||
this.message = e.getMessage();
|
||||
this.clazz = e.getClass().getName();
|
||||
}
|
||||
|
||||
@LauncherNetworkAPI
|
||||
public final String message;
|
||||
@LauncherNetworkAPI
|
||||
public final String clazz;
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,8 +2,16 @@
|
|||
|
||||
import java.util.UUID;
|
||||
|
||||
import pro.gravit.launcher.LauncherNetworkAPI;
|
||||
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 {
|
||||
/**
|
||||
* UUID sent in request
|
||||
*/
|
||||
@LauncherNetworkAPI
|
||||
public UUID requestUUID;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
package pro.gravit.launcher.events;
|
||||
|
||||
import pro.gravit.launcher.LauncherNetworkAPI;
|
||||
|
||||
//Используется, что бы послать короткое сообщение, которое вмещается в int
|
||||
public class SignalEvent {
|
||||
@LauncherNetworkAPI
|
||||
public 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,6 +6,7 @@
|
|||
public abstract class LauncherModule {
|
||||
private LauncherModulesContext context;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
private Map<Class<? extends Event>, EventHandler> eventMap = new HashMap<>();
|
||||
protected LauncherModulesManager modulesManager;
|
||||
protected final LauncherModuleInfo moduleInfo;
|
||||
|
@ -27,16 +28,28 @@ public LauncherModuleInfo getModuleInfo() {
|
|||
|
||||
/**
|
||||
* 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
|
||||
{
|
||||
/**
|
||||
* When creating an object
|
||||
*/
|
||||
CREATED(false),
|
||||
/**
|
||||
* After setting the context
|
||||
*/
|
||||
PRE_INIT_WAIT(true),
|
||||
/**
|
||||
* During the pre-initialization phase
|
||||
*/
|
||||
PRE_INIT(false),
|
||||
/**
|
||||
* Awaiting initialization phase
|
||||
*/
|
||||
INIT_WAIT(true),
|
||||
/**
|
||||
* During the initialization phase
|
||||
*/
|
||||
INIT(false),
|
||||
FINISH(true);
|
||||
|
||||
|
@ -95,13 +108,13 @@ public void setContext(LauncherModulesContext context)
|
|||
/**
|
||||
* This method is called before initializing all modules and resolving dependencies.
|
||||
* <b>You can</b>:
|
||||
* Use to Module Manager
|
||||
* Add custom modules not described in the manifest
|
||||
* Change information about your module or modules you control
|
||||
* - Use to Module Manager
|
||||
* - Add custom modules not described in the manifest
|
||||
* - Change information about your module or modules you control
|
||||
* <b>You can not</b>:
|
||||
* Use your dependencies
|
||||
* Use API Launcher, LaunchServer, ServerWrapper
|
||||
* Change the names of any modules
|
||||
* - Use your dependencies
|
||||
* - Use Launcher, LaunchServer, ServerWrapper API
|
||||
* - Change the names of any modules
|
||||
*/
|
||||
public void preInitAction() {
|
||||
//NOP
|
||||
|
@ -118,14 +131,14 @@ public LauncherModule preInit()
|
|||
/**
|
||||
* Basic module initialization method
|
||||
* <b>You can</b>:
|
||||
* Subscribe to events
|
||||
* Use your dependencies
|
||||
* Use provided initContext
|
||||
* Receive modules and access the module’s internal methods
|
||||
* - Subscribe to events
|
||||
* - Use your dependencies
|
||||
* - Use provided initContext
|
||||
* - Receive modules and access the module’s internal methods
|
||||
* <b>You can not</b>:
|
||||
* Modify module description, dependencies
|
||||
* Add modules
|
||||
* Read configuration
|
||||
* - Modify module description, dependencies
|
||||
* - Add modules
|
||||
* - Read configuration
|
||||
* @param initContext <b>null</b> on module initialization during boot or startup
|
||||
* 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)
|
||||
{
|
||||
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))
|
||||
|
|
|
@ -7,13 +7,16 @@ public class LauncherModuleInfo {
|
|||
public final Version version;
|
||||
public final int priority;
|
||||
public final String[] dependencies;
|
||||
/**
|
||||
* Alternative module names
|
||||
*/
|
||||
public final String[] providers;
|
||||
|
||||
public LauncherModuleInfo(String name, Version version) {
|
||||
this.name = name;
|
||||
this.version = version;
|
||||
this.priority = 0;
|
||||
this.dependencies = new String[]{};
|
||||
this.dependencies = new String[0];
|
||||
providers = new String[0];
|
||||
}
|
||||
|
||||
|
@ -21,7 +24,7 @@ public LauncherModuleInfo(String name) {
|
|||
this.name = name;
|
||||
this.version = new Version(1,0,0);
|
||||
this.priority = 0;
|
||||
this.dependencies = new String[]{};
|
||||
this.dependencies = new String[0];
|
||||
providers = new String[0];
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package pro.gravit.launcher.modules;
|
||||
|
||||
import pro.gravit.utils.Version;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import pro.gravit.utils.Version;
|
||||
|
||||
public interface LauncherModulesManager {
|
||||
|
||||
LauncherModule loadModule(LauncherModule module);
|
||||
|
@ -23,6 +23,7 @@ default <T extends LauncherModule> boolean containsModule(Class<? extends T> cl
|
|||
return getModule(clazz) != null;
|
||||
}
|
||||
ClassLoader getModuleClassLoader();
|
||||
ModulesConfigManager getConfigManager();
|
||||
<T extends LauncherModule> T getModule(Class<? extends T> clazz);
|
||||
<T> T getModuleByInterface(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;
|
||||
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
|
||||
public class PreGsonPhase extends LauncherModule.Event {
|
||||
|
|
|
@ -1,12 +1,5 @@
|
|||
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.net.URL;
|
||||
import java.nio.file.FileVisitResult;
|
||||
|
@ -20,6 +13,17 @@
|
|||
import java.util.function.Predicate;
|
||||
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 {
|
||||
protected final List<LauncherModule> modules = 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;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModulesConfigManager getConfigManager() {
|
||||
return modulesConfigManager;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
import pro.gravit.utils.TypeSerializeInterface;
|
||||
|
||||
/**
|
||||
* The interface of all events sent by the server to the client
|
||||
*/
|
||||
public interface WebSocketEvent extends TypeSerializeInterface {
|
||||
String getType();
|
||||
}
|
||||
|
|
|
@ -12,25 +12,7 @@
|
|||
|
||||
import pro.gravit.launcher.Launcher;
|
||||
import pro.gravit.launcher.events.ExceptionEvent;
|
||||
import pro.gravit.launcher.events.request.AuthRequestEvent;
|
||||
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.events.request.*;
|
||||
import pro.gravit.launcher.hasher.HashedEntry;
|
||||
import pro.gravit.launcher.hasher.HashedEntryAdapter;
|
||||
import pro.gravit.launcher.request.WebSocketEvent;
|
||||
|
@ -126,6 +108,7 @@ public void registerResults() {
|
|||
results.register("getAvailabilityAuth", GetAvailabilityAuthRequestEvent.class);
|
||||
results.register("exception", ExceptionEvent.class);
|
||||
results.register("register", RegisterRequestEvent.class);
|
||||
results.register("setpassword", SetPasswordRequestEvent.class);
|
||||
}
|
||||
|
||||
public void registerHandler(EventHandler eventHandler) {
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
import javax.net.ssl.SSLException;
|
||||
|
||||
import pro.gravit.launcher.events.ExceptionEvent;
|
||||
import pro.gravit.launcher.events.request.ErrorRequestEvent;
|
||||
import pro.gravit.launcher.request.Request;
|
||||
import pro.gravit.launcher.request.RequestException;
|
||||
|
@ -67,6 +68,10 @@ public WebSocketEvent get() throws InterruptedException, ExecutionException {
|
|||
ErrorRequestEvent errorRequestEvent = (ErrorRequestEvent) event.result;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -80,10 +85,14 @@ public WebSocketEvent get(long timeout, TimeUnit unit) throws InterruptedExcepti
|
|||
}
|
||||
WebSocketEvent result = event.result;
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,24 @@
|
|||
package pro.gravit.launcher;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
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.NormalEvent;
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class ModulesTest {
|
||||
@TempDir
|
||||
public static Path configDir;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package pro.gravit.launcher.impl;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
|
||||
import pro.gravit.launcher.modules.LauncherInitContext;
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package pro.gravit.launcher.impl;
|
||||
|
||||
import pro.gravit.launcher.ModulesTest;
|
||||
import pro.gravit.launcher.modules.LauncherInitContext;
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package pro.gravit.launcher.impl;
|
||||
|
||||
import pro.gravit.launcher.ModulesTest;
|
||||
import pro.gravit.launcher.modules.LauncherInitContext;
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package pro.gravit.launcher.impl;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import pro.gravit.launcher.ModulesTest;
|
||||
|
||||
import pro.gravit.launcher.modules.LauncherInitContext;
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||
|
|
|
@ -22,7 +22,7 @@ public final class Version {
|
|||
public final Type release;
|
||||
public static final int MAJOR = 5;
|
||||
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 Version.Type RELEASE = Type.STABLE;
|
||||
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
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 pro.gravit.utils.helper.VerifyHelper;
|
||||
|
||||
public abstract class Command {
|
||||
|
|
|
@ -32,9 +32,6 @@ public Category(CommandCategory category, String name, String description) {
|
|||
|
||||
public void eval(String line, boolean bell) {
|
||||
LogHelper.info("Command '%s'", line);
|
||||
|
||||
// Parse line to tokens
|
||||
String[] args;
|
||||
try {
|
||||
evalNative(line, bell);
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import pro.gravit.utils.helper.JVMHelper;
|
||||
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.JVMHelper;
|
||||
|
||||
public class StdCommandHandler extends CommandHandler {
|
||||
private final BufferedReader reader;
|
||||
|
|
|
@ -3,9 +3,14 @@
|
|||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import pro.gravit.launcher.impl.Test2Command;
|
||||
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 {
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
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.BeforeAll;
|
||||
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.UniversalJsonAdapter;
|
||||
|
||||
|
|
|
@ -95,5 +95,4 @@ pack project(':LauncherAuthlib')
|
|||
sign publishing.publications.serverwrapperapi
|
||||
}
|
||||
|
||||
build.dependsOn tasks.shadowJar
|
||||
|
||||
assemble.dependsOn tasks.shadowJar
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package pro.gravit.launcher.server;
|
||||
|
||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
import pro.gravit.launcher.modules.impl.SimpleModuleManager;
|
||||
|
||||
public class ServerWrapperModulesManager extends SimpleModuleManager {
|
||||
public ServerWrapperModulesManager(Path modulesDir, Path configDir) {
|
||||
super(modulesDir, configDir);
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
id 'signing'
|
||||
}
|
||||
group = 'pro.gravit.launcher'
|
||||
version = '5.0.7'
|
||||
version = '5.0.8'
|
||||
|
||||
configure(subprojects.findAll { it.name != 'modules' }) {
|
||||
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