From 0acdcbb74991d9c3c78629da64a2fd12e953c97f Mon Sep 17 00:00:00 2001 From: DuckieTM Date: Thu, 28 Mar 2024 19:52:31 +0100 Subject: [PATCH] Revert buildin Nitro Websocket --- Emulator/.gitignore | 2 - Emulator/plugins/NitroWebsockets-3.1.jar | Bin 0 -> 12062 bytes .../src/main/java/com/eu/habbo/Emulator.java | 26 +----- .../websockets/NetworkChannelInitializer.java | 74 ------------------ .../websockets/codec/WebSocketCodec.java | 22 ------ .../handlers/CustomHTTPHandler.java | 64 --------------- .../websockets/ssl/SSLCertificateLoader.java | 24 ------ .../networking/websockets/utils/Utils.java | 22 ------ 8 files changed, 1 insertion(+), 233 deletions(-) create mode 100644 Emulator/plugins/NitroWebsockets-3.1.jar delete mode 100644 Emulator/src/main/java/com/eu/habbo/networking/websockets/NetworkChannelInitializer.java delete mode 100644 Emulator/src/main/java/com/eu/habbo/networking/websockets/codec/WebSocketCodec.java delete mode 100644 Emulator/src/main/java/com/eu/habbo/networking/websockets/handlers/CustomHTTPHandler.java delete mode 100644 Emulator/src/main/java/com/eu/habbo/networking/websockets/ssl/SSLCertificateLoader.java delete mode 100644 Emulator/src/main/java/com/eu/habbo/networking/websockets/utils/Utils.java diff --git a/Emulator/.gitignore b/Emulator/.gitignore index 94c0cbd..7d36551 100644 --- a/Emulator/.gitignore +++ b/Emulator/.gitignore @@ -5,12 +5,10 @@ compiled-builds/ target/** TODO.txt packet.pkt -plugins/** src/test/ target/ config.ini *.txt -*.jar *.log *.zip .DS_Store diff --git a/Emulator/plugins/NitroWebsockets-3.1.jar b/Emulator/plugins/NitroWebsockets-3.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..32f73ce566eac9560046c8dd395027e6a8205cbe GIT binary patch literal 12062 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 a`k9lJWD$|>Q19LT-M`%#-n~m@F#iYj{P4j5 literal 0 HcmV?d00001 diff --git a/Emulator/src/main/java/com/eu/habbo/Emulator.java b/Emulator/src/main/java/com/eu/habbo/Emulator.java index b8ca710..739b361 100644 --- a/Emulator/src/main/java/com/eu/habbo/Emulator.java +++ b/Emulator/src/main/java/com/eu/habbo/Emulator.java @@ -10,16 +10,13 @@ import com.eu.habbo.habbohotel.GameEnvironment; import com.eu.habbo.networking.camera.CameraClient; import com.eu.habbo.networking.gameserver.GameServer; import com.eu.habbo.networking.rconserver.RCONServer; -import com.eu.habbo.networking.websockets.NetworkChannelInitializer; import com.eu.habbo.plugin.PluginManager; import com.eu.habbo.plugin.events.emulator.EmulatorConfigUpdatedEvent; import com.eu.habbo.plugin.events.emulator.EmulatorLoadedEvent; import com.eu.habbo.plugin.events.emulator.EmulatorStartShutdownEvent; import com.eu.habbo.plugin.events.emulator.EmulatorStoppedEvent; -import com.eu.habbo.plugin.events.users.UserGetIPAddressEvent; import com.eu.habbo.threading.ThreadPooling; import com.eu.habbo.util.imager.badges.BadgeImager; -import io.netty.channel.Channel; import io.netty.util.AttributeKey; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; @@ -145,15 +142,7 @@ public final class Emulator { Emulator.rconServer.initializePipeline(); Emulator.rconServer.connect(); Emulator.badgeImager = new BadgeImager(); - Emulator.getConfig().register("websockets.whitelist", "localhost"); - Emulator.getConfig().register("ws.nitro.host", "0.0.0.0"); - Emulator.getConfig().register("ws.nitro.port", "2096"); - Emulator.getConfig().register("ws.nitro.ip.header", ""); - NetworkChannelInitializer wsChannelHandler = new NetworkChannelInitializer(); - Emulator.getGameServer().getServerBootstrap().childHandler(wsChannelHandler); - Emulator.getGameServer().getServerBootstrap().bind(Emulator.getConfig().getValue("ws.nitro.host", "0.0.0.0"), Emulator.getConfig().getInt("ws.nitro.port", 2096)).sync(); - log.info("Websockets has started!"); - log.info("Websockets Listening on " + (wsChannelHandler.isSSL() ? "wss://" : "ws://") + Emulator.getConfig().getValue("ws.nitro.host", "0.0.0.0") + ":" + Emulator.getConfig().getInt("ws.nitro.port", 2096)); + log.info("Arcturus Morningstar has successfully loaded."); log.info("System launched in: {}ms. Using {} threads!", (System.nanoTime() - startTime) / 1e6, Runtime.getRuntime().availableProcessors() * 2); log.info("Memory: {}/{}MB", (runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024), (runtime.freeMemory()) / (1024 * 1024)); @@ -343,19 +332,6 @@ public final class Emulator { return rconServer; } - public void onUserGetIPEvent(UserGetIPAddressEvent e) { - Channel channel = e.habbo.getClient().getChannel(); - if(channel != null && channel.hasAttr(Emulator.WS_IP)) { - String ip = channel.attr(Emulator.WS_IP).get(); - if(!ip.isEmpty()) { - e.setUpdatedIp(ip); - } - } - } - - /** - * @deprecated Do not use. Please use LoggerFactory.getLogger(YourClass.class) to log. - */ @Deprecated public static Logging getLogging() { return logging; diff --git a/Emulator/src/main/java/com/eu/habbo/networking/websockets/NetworkChannelInitializer.java b/Emulator/src/main/java/com/eu/habbo/networking/websockets/NetworkChannelInitializer.java deleted file mode 100644 index 4902242..0000000 --- a/Emulator/src/main/java/com/eu/habbo/networking/websockets/NetworkChannelInitializer.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.eu.habbo.networking.websockets; - -import com.eu.habbo.messages.PacketManager; -import com.eu.habbo.networking.gameserver.decoders.*; -import com.eu.habbo.networking.gameserver.encoders.GameServerMessageEncoder; -import com.eu.habbo.networking.gameserver.encoders.GameServerMessageLogger; -import com.eu.habbo.networking.gameserver.handlers.IdleTimeoutHandler; -import com.eu.habbo.networking.websockets.codec.WebSocketCodec; -import com.eu.habbo.networking.websockets.handlers.CustomHTTPHandler; -import com.eu.habbo.networking.websockets.ssl.SSLCertificateLoader; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.socket.SocketChannel; -import io.netty.handler.codec.http.HttpObjectAggregator; -import io.netty.handler.codec.http.HttpServerCodec; -import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolConfig; -import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; -import io.netty.handler.logging.LoggingHandler; -import io.netty.handler.ssl.SslContext; - -public class NetworkChannelInitializer extends ChannelInitializer { - private static final int MAX_FRAME_SIZE = 500000; - - private final SslContext context; - private final boolean isSSL; - private final WebSocketServerProtocolConfig config; - - public NetworkChannelInitializer() { - context = SSLCertificateLoader.getContext(); - isSSL = context != null; - config = WebSocketServerProtocolConfig.newBuilder() - .websocketPath("/") - .checkStartsWith(true) - .maxFramePayloadLength(MAX_FRAME_SIZE) - .build(); - } - - @Override - public void initChannel(SocketChannel ch) { - ch.pipeline().addLast("logger", new LoggingHandler()); - - if(isSSL) { - ch.pipeline().addLast(context.newHandler(ch.alloc())); - } - ch.pipeline().addLast("httpCodec", new HttpServerCodec()); - ch.pipeline().addLast("objectAggregator", new HttpObjectAggregator(MAX_FRAME_SIZE)); - ch.pipeline().addLast("customHttpHandler", new CustomHTTPHandler()); - ch.pipeline().addLast("protocolHandler", new WebSocketServerProtocolHandler(config)); - ch.pipeline().addLast("websocketCodec", new WebSocketCodec()); - - // Decoders. - ch.pipeline().addLast(new GamePolicyDecoder()); - ch.pipeline().addLast(new GameByteFrameDecoder()); - ch.pipeline().addLast(new GameByteDecoder()); - - if (PacketManager.DEBUG_SHOW_PACKETS) { - ch.pipeline().addLast(new GameClientMessageLogger()); - } - - ch.pipeline().addLast("idleEventHandler", new IdleTimeoutHandler(30, 60)); - ch.pipeline().addLast(new GameMessageRateLimit()); - ch.pipeline().addLast(new GameMessageHandler()); - - // Encoders. - ch.pipeline().addLast("messageEncoder", new GameServerMessageEncoder()); - - if (PacketManager.DEBUG_SHOW_PACKETS) { - ch.pipeline().addLast(new GameServerMessageLogger()); - } - } - - public boolean isSSL() { - return isSSL; - } -} diff --git a/Emulator/src/main/java/com/eu/habbo/networking/websockets/codec/WebSocketCodec.java b/Emulator/src/main/java/com/eu/habbo/networking/websockets/codec/WebSocketCodec.java deleted file mode 100644 index 6c36f54..0000000 --- a/Emulator/src/main/java/com/eu/habbo/networking/websockets/codec/WebSocketCodec.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.eu.habbo.networking.websockets.codec; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageCodec; -import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame; -import io.netty.handler.codec.http.websocketx.WebSocketFrame; - -import java.util.List; - -public class WebSocketCodec extends MessageToMessageCodec { - @Override - protected void encode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - out.add(new BinaryWebSocketFrame(in).retain()); - } - - @Override - protected void decode(ChannelHandlerContext ctx, WebSocketFrame in, List out) { - out.add(in.content().retain()); - } -} - diff --git a/Emulator/src/main/java/com/eu/habbo/networking/websockets/handlers/CustomHTTPHandler.java b/Emulator/src/main/java/com/eu/habbo/networking/websockets/handlers/CustomHTTPHandler.java deleted file mode 100644 index e77c99c..0000000 --- a/Emulator/src/main/java/com/eu/habbo/networking/websockets/handlers/CustomHTTPHandler.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.eu.habbo.networking.websockets.handlers; - -import com.eu.habbo.Emulator; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelFutureListener; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.handler.codec.http.*; -import io.netty.util.ReferenceCountUtil; -import com.eu.habbo.networking.websockets.utils.Utils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class CustomHTTPHandler extends ChannelInboundHandlerAdapter { - private static final String ORIGIN_HEADER = "Origin"; - private static final Logger LOGGER = LoggerFactory.getLogger(CustomHTTPHandler.class); - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - if(msg instanceof HttpMessage) { - if(!handleHttpRequest(ctx, (HttpMessage) msg)) - { - ReferenceCountUtil.release(msg);//discard message - return; - } - } - super.channelRead(ctx, msg); - ctx.pipeline().remove(this); - } - - public boolean handleHttpRequest(ChannelHandlerContext ctx, HttpMessage req) { - String origin = "error"; - String clientIP; - String header = Emulator.getConfig().getValue("ws.nitro.ip.header", ""); - - // Check if X-Forwarded-For header is present and use the first IP as the client IP if available - if (req.headers().contains(header)) { - String xForwardedFor = req.headers().get(header); - clientIP = xForwardedFor.split(",")[0].trim(); // Get the first IP in the list - } else { - clientIP = ctx.channel().remoteAddress().toString().substring(1).split(":")[0]; // Get the client's IP address - } - - try { - if(req.headers().contains(ORIGIN_HEADER)) { - origin = Utils.getDomainNameFromUrl(req.headers().get(ORIGIN_HEADER)); - } - } catch (Exception ignored) { } - - if(!Utils.isWhitelisted(origin, Emulator.getConfig().getValue("websockets.whitelist", "localhost").split(","))) { - LOGGER.warn("Access denied for IP: {}", clientIP); - - FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.FORBIDDEN, Unpooled.wrappedBuffer("W.T.F are you doing?".getBytes())); - ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE); - return false; - } - - if(!header.isEmpty() && req.headers().contains(header)) { - String ip = req.headers().get(header); - ctx.channel().attr(Emulator.WS_IP).set(ip); - } - return true; - } -} \ No newline at end of file diff --git a/Emulator/src/main/java/com/eu/habbo/networking/websockets/ssl/SSLCertificateLoader.java b/Emulator/src/main/java/com/eu/habbo/networking/websockets/ssl/SSLCertificateLoader.java deleted file mode 100644 index 623568f..0000000 --- a/Emulator/src/main/java/com/eu/habbo/networking/websockets/ssl/SSLCertificateLoader.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.eu.habbo.networking.websockets.ssl; - -import io.netty.handler.ssl.SslContext; -import io.netty.handler.ssl.SslContextBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; - -public class SSLCertificateLoader { - private static final String filePath = "ssl"; - private static final Logger LOGGER = LoggerFactory.getLogger(SSLCertificateLoader.class); - - public static SslContext getContext() { - SslContext context; - try { - context = SslContextBuilder.forServer(new File( filePath + File.separator + "cert.pem" ), new File( filePath + File.separator + "privkey.pem" )).build(); - } catch ( Exception e ) { - LOGGER.info("Unable to load ssl: " + e.getMessage()); - context = null; - } - return context; - } -} diff --git a/Emulator/src/main/java/com/eu/habbo/networking/websockets/utils/Utils.java b/Emulator/src/main/java/com/eu/habbo/networking/websockets/utils/Utils.java deleted file mode 100644 index 30f8217..0000000 --- a/Emulator/src/main/java/com/eu/habbo/networking/websockets/utils/Utils.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.eu.habbo.networking.websockets.utils; - -import java.net.URI; - -public class Utils { - public static String getDomainNameFromUrl(String url) throws Exception { - URI uri = new URI(url); - String domain = uri.getHost(); - return domain.startsWith("www.") ? domain.substring(4) : domain; - } - - public static boolean isWhitelisted(String toCheck, String[] whitelist) { - for(String whitelistEntry : whitelist) { - if(whitelistEntry.startsWith("*")) { - if(toCheck.endsWith(whitelistEntry.substring(1)) || ("." + toCheck).equals(whitelistEntry.substring(1))) return true; - } else { - if(toCheck.equals(whitelistEntry)) return true; - } - } - return false; - } -}