[FIX] ExitResponse, update SimpleModuleManager

This commit is contained in:
Gravita 2023-12-29 16:37:14 +07:00
parent 64635cbb9b
commit f321b8bd27
10 changed files with 61 additions and 76 deletions

View file

@ -43,6 +43,10 @@ public void execute(ChannelHandlerContext ctx, Client client) {
return; return;
} }
if (username == null) { if (username == null) {
if(!client.isAuth || client.auth == null) {
sendError("You are not authorized");
return;
}
{ {
WebSocketFrameHandler handler = ctx.pipeline().get(WebSocketFrameHandler.class); WebSocketFrameHandler handler = ctx.pipeline().get(WebSocketFrameHandler.class);
if (handler == null) { if (handler == null) {
@ -65,7 +69,6 @@ public void execute(ChannelHandlerContext ctx, Client client) {
} }
sendResult(new ExitRequestEvent(ExitRequestEvent.ExitReason.CLIENT)); sendResult(new ExitRequestEvent(ExitRequestEvent.ExitReason.CLIENT));
} }
sendResult(new ExitRequestEvent(ExitRequestEvent.ExitReason.CLIENT));
} else { } else {
service.forEachActiveChannels(((channel, webSocketFrameHandler) -> { service.forEachActiveChannels(((channel, webSocketFrameHandler) -> {
Client client1 = webSocketFrameHandler.getClient(); Client client1 = webSocketFrameHandler.getClient();

View file

@ -83,6 +83,10 @@ protected final <T extends LauncherModule> T requireModule(Class<? extends T> cl
return module; return module;
} }
protected LauncherModulesContext getContext() {
return context;
}
private void requireModule(LauncherModule module, Version minVersion, String requiredModuleName) { private void requireModule(LauncherModule module, Version minVersion, String requiredModuleName) {
if (module == null) if (module == null)
throw new RuntimeException(String.format("Module %s required %s v%s or higher", moduleInfo.name, requiredModuleName, minVersion.getVersionString())); throw new RuntimeException(String.format("Module %s required %s v%s or higher", moduleInfo.name, requiredModuleName, minVersion.getVersionString()));

View file

@ -1,7 +1,11 @@
package pro.gravit.launcher.base.modules; package pro.gravit.launcher.base.modules;
import java.net.URL;
public interface LauncherModulesContext { public interface LauncherModulesContext {
LauncherModulesManager getModulesManager(); LauncherModulesManager getModulesManager();
ModulesConfigManager getModulesConfigManager(); ModulesConfigManager getModulesConfigManager();
void addURL(URL url);
} }

View file

@ -4,6 +4,8 @@
import pro.gravit.launcher.base.modules.LauncherModulesManager; import pro.gravit.launcher.base.modules.LauncherModulesManager;
import pro.gravit.launcher.base.modules.ModulesConfigManager; import pro.gravit.launcher.base.modules.ModulesConfigManager;
import java.net.URL;
public class SimpleModuleContext implements LauncherModulesContext { public class SimpleModuleContext implements LauncherModulesContext {
public final LauncherModulesManager modulesManager; public final LauncherModulesManager modulesManager;
public final ModulesConfigManager configManager; public final ModulesConfigManager configManager;
@ -13,6 +15,15 @@ public SimpleModuleContext(LauncherModulesManager modulesManager, ModulesConfigM
this.configManager = configManager; this.configManager = configManager;
} }
@Override
public void addURL(URL url) {
if(modulesManager instanceof SimpleModuleManager s) {
s.addUrlToClassLoader(url);
} else {
throw new UnsupportedOperationException();
}
}
@Override @Override
public LauncherModulesManager getModulesManager() { public LauncherModulesManager getModulesManager() {
return modulesManager; return modulesManager;

View file

@ -11,6 +11,7 @@
import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType; import java.lang.invoke.MethodType;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.FileVisitResult; import java.nio.file.FileVisitResult;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
@ -32,9 +33,13 @@ public class SimpleModuleManager implements LauncherModulesManager {
protected final ModulesConfigManager modulesConfigManager; protected final ModulesConfigManager modulesConfigManager;
protected final Path modulesDir; protected final Path modulesDir;
protected final LauncherTrustManager trustManager; protected final LauncherTrustManager trustManager;
protected final PublicURLClassLoader classLoader = new PublicURLClassLoader(new URL[]{}, SimpleModuleManager.class.getClassLoader()); protected final ModulesClassLoader classLoader = createClassLoader();
protected LauncherInitContext initContext; protected LauncherInitContext initContext;
protected ModulesClassLoader createClassLoader() {
return new ModulesClassLoader(new URL[]{}, SimpleModuleManager.class.getClassLoader());
}
public SimpleModuleManager(Path modulesDir, Path configDir) { public SimpleModuleManager(Path modulesDir, Path configDir) {
modulesConfigManager = new SimpleModulesConfigManager(configDir); modulesConfigManager = new SimpleModulesConfigManager(configDir);
context = new SimpleModuleContext(this, modulesConfigManager); context = new SimpleModuleContext(this, modulesConfigManager);
@ -268,6 +273,10 @@ public ModulesConfigManager getConfigManager() {
return modulesConfigManager; return modulesConfigManager;
} }
void addUrlToClassLoader(URL url) {
classLoader.addURL(url);
}
protected final class ModulesVisitor extends SimpleFileVisitor<Path> { protected final class ModulesVisitor extends SimpleFileVisitor<Path> {
private ModulesVisitor() { private ModulesVisitor() {
} }
@ -279,4 +288,16 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
return super.visitFile(file, attrs); return super.visitFile(file, attrs);
} }
} }
protected static class ModulesClassLoader extends URLClassLoader {
public ModulesClassLoader(URL[] urls, ClassLoader parent) {
super("MODULES", urls, parent);
}
@Override
public void addURL(URL url) {
super.addURL(url);
}
}
} }

View file

@ -14,6 +14,7 @@
import java.security.cert.CertificateException; import java.security.cert.CertificateException;
import java.time.Duration; import java.time.Duration;
import java.util.concurrent.CompletionStage; import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -27,6 +28,7 @@ public abstract class ClientJSONPoint implements WebSocket.Listener {
protected boolean ssl = false; protected boolean ssl = false;
protected int port; protected int port;
private final Object syncObject = new Object(); private final Object syncObject = new Object();
private final Object sendSyncObject = new Object();
private volatile StringBuilder builder = new StringBuilder(); private volatile StringBuilder builder = new StringBuilder();
public ClientJSONPoint(final String uri) throws SSLException { public ClientJSONPoint(final String uri) throws SSLException {

View file

@ -5,6 +5,7 @@
import pro.gravit.launcher.base.modules.LauncherModule; import pro.gravit.launcher.base.modules.LauncherModule;
import pro.gravit.launcher.base.modules.impl.SimpleModuleManager; import pro.gravit.launcher.base.modules.impl.SimpleModuleManager;
import java.net.URL;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -33,6 +34,11 @@ public List<LauncherModule> getModules() {
return Collections.unmodifiableList(modules); return Collections.unmodifiableList(modules);
} }
@Override
protected ModulesClassLoader createClassLoader() {
return null;
}
@Override @Override
public boolean verifyClassCheckResult(LauncherTrustManager.CheckClassResult result) { public boolean verifyClassCheckResult(LauncherTrustManager.CheckClassResult result) {
return result.type == LauncherTrustManager.CheckClassResultType.SUCCESS; return result.type == LauncherTrustManager.CheckClassResultType.SUCCESS;

View file

@ -1,72 +0,0 @@
sourceCompatibility = '17'
targetCompatibility = '17'
dependencies {
api project(':LauncherCore')
}
test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
}
}
jar {
archiveClassifier.set('clean')
manifest.attributes("Multi-Release": "true")
}
tasks.register('sourcesJar', Jar) {
from sourceSets.main.allJava
archiveClassifier.set('sources')
}
tasks.register('javadocJar', Jar) {
from javadoc
archiveClassifier.set('javadoc')
}
publishing {
publications {
launchermoderncore(MavenPublication) {
artifactId = 'launcher-modern-core'
artifact(jar) {
classifier ""
}
artifact sourcesJar
artifact javadocJar
pom {
name = 'GravitLauncher Core Utils with Java 17+'
description = 'GravitLauncher Core Utils'
url = 'https://gravitlauncher.com'
licenses {
license {
name = 'GNU General Public License, Version 3.0'
url = 'https://www.gnu.org/licenses/gpl-3.0.html'
}
}
developers {
developer {
id = 'gravita'
name = 'Gravita'
email = 'gravita@gravit.pro'
}
developer {
id = 'zaxar163'
name = 'Zaxar163'
email = 'zahar.vcherachny@yandex.ru'
}
}
scm {
connection = 'scm:git:https://github.com/GravitLauncher/Launcher.git'
developerConnection = 'scm:git:ssh://git@github.com:GravitLauncher/Launcher.git'
url = 'https://gravitlauncher.com/'
}
}
}
}
}
signing {
sign publishing.publications.launchermoderncore
}

View file

@ -38,6 +38,11 @@ public boolean verifyClassCheckResult(LauncherTrustManager.CheckClassResult resu
return result.type == LauncherTrustManager.CheckClassResultType.SUCCESS; return result.type == LauncherTrustManager.CheckClassResultType.SUCCESS;
} }
@Override
protected ModulesClassLoader createClassLoader() {
return null;
}
public void callWrapper(ClientLauncherWrapper.ClientLauncherWrapperContext context) { public void callWrapper(ClientLauncherWrapper.ClientLauncherWrapperContext context) {
for (LauncherModule module : modules) { for (LauncherModule module : modules) {
if (module instanceof ClientWrapperModule) { if (module instanceof ClientWrapperModule) {

View file

@ -15,6 +15,7 @@
import java.io.IOException; import java.io.IOException;
import java.io.Writer; import java.io.Writer;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
@ -22,7 +23,7 @@
public class ServerWrapperSetup { public class ServerWrapperSetup {
public ServerWrapperCommands commands; public ServerWrapperCommands commands;
public PublicURLClassLoader urlClassLoader; public URLClassLoader urlClassLoader;
public ServerWrapperSetup() throws IOException { public ServerWrapperSetup() throws IOException {
commands = new ServerWrapperCommands(); commands = new ServerWrapperCommands();
@ -37,7 +38,7 @@ public void run() throws Exception {
String agentClassName; String agentClassName;
try (JarFile file = new JarFile(jarPath.toFile())) { try (JarFile file = new JarFile(jarPath.toFile())) {
URL jarURL = jarPath.toUri().toURL(); URL jarURL = jarPath.toUri().toURL();
urlClassLoader = new PublicURLClassLoader(new URL[]{jarURL}); urlClassLoader = new URLClassLoader(new URL[]{jarURL});
LogHelper.info("Check server jar MainClass"); LogHelper.info("Check server jar MainClass");
mainClassName = file.getManifest().getMainAttributes().getValue("Main-Class"); mainClassName = file.getManifest().getMainAttributes().getValue("Main-Class");
agentClassName = file.getManifest().getMainAttributes().getValue("Premain-Class"); agentClassName = file.getManifest().getMainAttributes().getValue("Premain-Class");