mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-22 16:41:46 +03:00
[FEATURE] Окончательный переход на новую систему props (часть 2).
Список props(текущий тип и значение): String launcher.projectName; // Название проекта String launcher.address; // Адрес сервера int launcher.port; // Порт клиента (рандом) используется для передачи параметров запуска String launcher.guardType; // Тип защиты (java, wrapper, no и т. д.) String runtimeconfig.secretKeyClient; // Секретный ключ String runtimeconfig.oemUnlockKey; // Ключ разблокировки консоли ввода команд в лаунчере... String runtimeconfig.secureCheckHash; // Проверки безопасности лаунчера (хеш) String runtimeconfig.secureCheckSalt; // Это же но соль... String runtimeconfig.passwordEncryptKey; // Ключ для шифровки пароля... int launchercore.env; // Среда лаунчсервера (0=DEV,1=DEBUG,2=STD,3=PROD, остальное = так же STD) boolean launcher.isWarningMissArchJava; // Выводить ли предупреждение о os.bits!= java.bits List<byte[]> launchercore.certificates; // EC-сертификаты в формате byte[] List<Class<?>> launcher.modules; // Список классов модулей лаунчера.
This commit is contained in:
parent
554ca54c4a
commit
6b7468e366
5 changed files with 23 additions and 17 deletions
|
@ -2,6 +2,7 @@
|
|||
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.ClassWriter;
|
||||
import org.objectweb.asm.Type;
|
||||
import org.objectweb.asm.tree.AnnotationNode;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import org.objectweb.asm.tree.FieldNode;
|
||||
|
@ -14,7 +15,6 @@
|
|||
import pro.gravit.launchserver.binary.BuildContext;
|
||||
import pro.gravit.utils.HookException;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
import pro.gravit.utils.helper.JarHelper;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
import pro.gravit.utils.helper.SecurityHelper;
|
||||
|
||||
|
@ -170,7 +170,7 @@ public Path process(Path inputJar) throws IOException {
|
|||
//LogHelper.debug("[checkSecure] %s: %s", launcherSalt, Arrays.toString(launcherSecureHash));
|
||||
if (server.runtime.oemUnlockKey == null) server.runtime.oemUnlockKey = SecurityHelper.randomStringToken();
|
||||
properties.put("runtimeconfig.oemUnlockKey", server.runtime.oemUnlockKey);
|
||||
context.clientModules.forEach(launcherConfigurator::addModuleClass);
|
||||
properties.put("launcher.modules", context.clientModules.stream().map(e -> Type.getObjectType(e.replace('.', '/'))).collect(Collectors.toList()));
|
||||
reader.getCp().add(new JarFile(inputJar.toFile()));
|
||||
server.launcherBinary.coreLibs.forEach(e -> {
|
||||
try {
|
||||
|
|
|
@ -31,7 +31,7 @@ public static void main(String[] arguments) throws IOException, InterruptedExcep
|
|||
EnvHelper.checkDangerousParams();
|
||||
LauncherConfig config = Launcher.getConfig();
|
||||
LauncherEngine.modulesManager = new ClientModuleManager();
|
||||
LauncherConfig.initModules();
|
||||
LauncherConfig.initModules(LauncherEngine.modulesManager);
|
||||
|
||||
LogHelper.info("Launcher for project %s", config.projectName);
|
||||
if (config.environment.equals(LauncherConfig.LauncherEnvironment.PROD)) {
|
||||
|
|
|
@ -80,7 +80,7 @@ public static void main(String... args) throws Throwable {
|
|||
LauncherEngine.checkClass(LauncherAgent.class);
|
||||
LauncherEngine.checkClass(ClientLauncher.class);
|
||||
LauncherEngine.modulesManager = new ClientModuleManager();
|
||||
LauncherConfig.initModules();
|
||||
LauncherConfig.initModules(LauncherEngine.modulesManager);
|
||||
LauncherEngine.modulesManager.initModules(null);
|
||||
// Start Launcher
|
||||
initGson(LauncherEngine.modulesManager);
|
||||
|
|
|
@ -443,7 +443,7 @@ public static void main(String... args) throws Throwable {
|
|||
LauncherEngine.checkClass(LauncherAgent.class);
|
||||
LauncherEngine.checkClass(ClientLauncher.class);
|
||||
LauncherEngine.modulesManager = new ClientModuleManager();
|
||||
LauncherConfig.initModules(); //INIT
|
||||
LauncherConfig.initModules(LauncherEngine.modulesManager); //INIT
|
||||
LauncherEngine.modulesManager.initModules(null);
|
||||
initGson(LauncherEngine.modulesManager);
|
||||
LauncherEngine.verifyNoAgent();
|
||||
|
|
|
@ -1,12 +1,17 @@
|
|||
package pro.gravit.launcher;
|
||||
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.LauncherModulesManager;
|
||||
import pro.gravit.launcher.serialize.HInput;
|
||||
import pro.gravit.launcher.serialize.HOutput;
|
||||
import pro.gravit.launcher.serialize.stream.StreamObject;
|
||||
import pro.gravit.utils.helper.LogHelper;
|
||||
import pro.gravit.utils.helper.SecurityHelper;
|
||||
import pro.gravit.utils.helper.VerifyHelper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.lang.invoke.MethodType;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.interfaces.ECPublicKey;
|
||||
import java.security.spec.InvalidKeySpecException;
|
||||
|
@ -17,6 +22,8 @@ public final class LauncherConfig extends StreamObject {
|
|||
private static final int cenv = -1;
|
||||
@LauncherInject("launchercore.certificates")
|
||||
private static final List<byte[]> secureConfigCertificates = null;
|
||||
@LauncherInject("launcher.modules")
|
||||
private static final List<Class<?>> modulesClasses = null;
|
||||
@LauncherInject("launcher.address")
|
||||
public String address;
|
||||
@LauncherInject("launcher.projectName")
|
||||
|
@ -118,17 +125,16 @@ public enum LauncherEnvironment {
|
|||
DEV, DEBUG, STD, PROD
|
||||
}
|
||||
|
||||
public static void initModules() {
|
||||
// TODO Fill
|
||||
/*
|
||||
* Old filler
|
||||
public void addModuleClass(String fullName) {
|
||||
initModuleMethod.instructions.add(new FieldInsnNode(Opcodes.GETSTATIC, launcherName, "modulesManager", modulesManagerDesc));
|
||||
initModuleMethod.instructions.add(new TypeInsnNode(Opcodes.NEW, fullName.replace('.', '/')));
|
||||
initModuleMethod.instructions.add(new InsnNode(Opcodes.DUP));
|
||||
initModuleMethod.instructions.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, fullName.replace('.', '/'), "<init>", "()V"));
|
||||
initModuleMethod.instructions.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, modulesManagerName, "loadModule", registerModDesc));
|
||||
}
|
||||
*/
|
||||
private static final MethodType VOID_TYPE = MethodType.methodType(void.class);
|
||||
|
||||
public static void initModules(LauncherModulesManager modulesManager) {
|
||||
for (Class<?> clazz : modulesClasses)
|
||||
try {
|
||||
modulesManager.loadModule((LauncherModule) MethodHandles.publicLookup().findConstructor(clazz, VOID_TYPE).invokeWithArguments(Collections.emptyList()));
|
||||
} catch (Throwable e) {
|
||||
LogHelper.error(e);
|
||||
}
|
||||
// This method should be called once at exec time.
|
||||
modulesClasses.clear();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue