diff --git a/src/main/kotlin/net/taehui/twilight/Twilight.kt b/src/main/kotlin/net/taehui/twilight/Twilight.kt index 539381d..9967dac 100644 --- a/src/main/kotlin/net/taehui/twilight/Twilight.kt +++ b/src/main/kotlin/net/taehui/twilight/Twilight.kt @@ -13,9 +13,6 @@ import java.nio.channels.DatagramChannel import java.nio.file.Files import java.nio.file.Paths -import java.security.KeyStore -import javax.net.ssl.KeyManagerFactory -import javax.net.ssl.SSLContext import kotlin.io.path.absolute import kotlin.system.exitProcess @@ -26,7 +23,7 @@ try { val datagramChannel = DatagramChannel.open() - datagramChannel.bind(InetSocketAddress("localhost", 6101)) + datagramChannel.bind(InetSocketAddress("localhost", 4000)) } catch (e: BindException) { System.err.println("Twilight is already running") exitProcess(1) @@ -76,19 +73,9 @@ AutoLoadingSystem.handleSystem() try { - val sslContext = Files.newInputStream(Paths.get("Twilight.jks")).use { - val keyStore = KeyStore.getInstance(KeyStore.getDefaultType()) - keyStore.load(it, Configure.javaCipherStore.pw0) - val keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()) - keyManagerFactory.init(keyStore, Configure.javaCipherStore.pw1) - val sslContext = SSLContext.getInstance("TLS") - sslContext.init(keyManagerFactory.keyManagers, null, null) - sslContext - } - - QwilightBoot(eventLoopGroup, sslContext).use { - SiteBoot(eventLoopGroup).use { - WwwBoot(eventLoopGroup).use { + QwilightBoot(eventLoopGroup).use { + WwwBoot(eventLoopGroup).use { + SiteBoot(eventLoopGroup).use { EtcBoot(eventLoopGroup).use { AvatarHandler.sendClose(IO.handleSystem()) } diff --git a/src/main/kotlin/net/taehui/twilight/Utility.kt b/src/main/kotlin/net/taehui/twilight/Utility.kt index aad629e..d874e8c 100644 --- a/src/main/kotlin/net/taehui/twilight/Utility.kt +++ b/src/main/kotlin/net/taehui/twilight/Utility.kt @@ -1,7 +1,6 @@ package net.taehui.twilight import io.netty.handler.codec.DecoderException -import io.netty.handler.ssl.NotSslRecordException import net.taehui.twilight.system.PlatformIDSystem import org.apache.commons.codec.binary.Hex import java.net.MalformedURLException @@ -79,7 +78,7 @@ } fun isValidFault(e: Throwable): Boolean { - return !(e is SocketException && e.localizedMessage?.contains("Connection reset") == true) && !(e is DecoderException && e.cause is NotSslRecordException) + return !(e is SocketException && e.localizedMessage?.contains("Connection reset") == true) } fun getID512(noteFileData: ByteArray): String { diff --git a/src/main/kotlin/net/taehui/twilight/awilight/AwilightAvatar.kt b/src/main/kotlin/net/taehui/twilight/awilight/AwilightAvatar.kt index fb12d55..c7643a5 100644 --- a/src/main/kotlin/net/taehui/twilight/awilight/AwilightAvatar.kt +++ b/src/main/kotlin/net/taehui/twilight/awilight/AwilightAvatar.kt @@ -33,7 +33,7 @@ loadAwilight() } - val isBeginner: Boolean + val isEasyMode: Boolean get() { return w < 0.4 } diff --git a/src/main/kotlin/net/taehui/twilight/etc/EtcBoot.kt b/src/main/kotlin/net/taehui/twilight/etc/EtcBoot.kt index c859240..67805d2 100644 --- a/src/main/kotlin/net/taehui/twilight/etc/EtcBoot.kt +++ b/src/main/kotlin/net/taehui/twilight/etc/EtcBoot.kt @@ -26,7 +26,7 @@ init { logInfo("Loading Etc") - mainChannel = mainBootstrap.bind(8300).channel().closeFuture() + mainChannel = mainBootstrap.bind(4003).channel().closeFuture() .addListener { logInfo("Closed Etc") }.channel() diff --git a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt index e13122f..2bf5319 100644 --- a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt +++ b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt @@ -1,14 +1,16 @@ package net.taehui.twilight.qwilight +import CommentOuterClass +import EventOuterClass import com.fasterxml.jackson.databind.ObjectMapper import com.google.protobuf.ByteString import io.netty.channel.ChannelFuture import io.netty.channel.ChannelHandlerContext import io.netty.channel.SimpleChannelInboundHandler +import io.netty.handler.codec.haproxy.HAProxyMessage import net.taehui.twilight.* import net.taehui.twilight.BundleIO.BundleVariety import net.taehui.twilight.BundleIO.BundleVariety.Companion.getBundleVariety -import net.taehui.twilight.Component import net.taehui.twilight.system.* import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream import org.apache.commons.io.FilenameUtils @@ -16,7 +18,6 @@ import org.apache.commons.lang3.RandomStringUtils import org.slf4j.LoggerFactory import java.net.InetAddress -import java.net.InetSocketAddress import java.nio.channels.AsynchronousFileChannel import java.nio.channels.CompletionHandler import java.nio.file.Files @@ -124,15 +125,21 @@ override fun channelActive(ctx: ChannelHandlerContext) { handler = ctx - avatarIP = (handler.channel().remoteAddress() as InetSocketAddress).address - isAwilight = avatarIP.isLoopbackAddress - avatarEstimatedID = AvatarIPSystem.getAvatarID(remote) } override fun channelInactive(ctx: ChannelHandlerContext) { AvatarHandler.quitAvatar(avatarID) } + override fun channelRead(ctx: ChannelHandlerContext, msg: Any) { + super.channelRead(ctx, msg) + if (msg is HAProxyMessage) { + avatarIP = InetAddress.getByName(msg.sourceAddress()) + isAwilight = avatarIP.isLoopbackAddress + avatarEstimatedID = AvatarIPSystem.getAvatarID(remote) + } + } + public override fun channelRead0(ctx: ChannelHandlerContext, msg: EventOuterClass.Event) { doIfValid(msg) { doIfAvailable { @@ -220,8 +227,8 @@ language = text.language qwilightHash = text.hash qwilightDate = text.date - val isAllowedIP = avatarIP.isLoopbackAddress || avatarIP.isSiteLocalAddress - val isAllowedHash = Configure.hash.contains(qwilightHash) + val isAllowedIP = avatarIP.isSiteLocalAddress || avatarIP.isLoopbackAddress + val isAllowedClient = Configure.hash.contains(qwilightHash) if (Configure.mode.pause) { send(EventOuterClass.Event.EventID.NOTIFY, object { val text = translateLanguage("pause") @@ -239,13 +246,13 @@ val isUrgent = false val v = 2 }) - } else if (isAllowedIP || isAllowedHash) { + } else if (isAllowedIP || isAllowedClient) { val avatarID = "*" + RandomStringUtils.randomAlphanumeric(19) if (isValve) { ValveSystem.putDrawing(avatarID, eventData[0]) } AvatarHandler.establish(this, avatarID, text.qwilightName, isValve, false) - if (!isAllowedHash) { + if (!isAllowedClient) { send(EventOuterClass.Event.EventID.NOTIFY, object { val text = qwilightHash val isUrgent = false diff --git a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightBoot.kt b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightBoot.kt index 308354f..40ff622 100644 --- a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightBoot.kt +++ b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightBoot.kt @@ -4,27 +4,26 @@ import io.netty.channel.Channel import io.netty.channel.ChannelInitializer import io.netty.channel.EventLoopGroup -import io.netty.channel.socket.ServerSocketChannel import io.netty.channel.socket.SocketChannel import io.netty.channel.socket.nio.NioServerSocketChannel +import io.netty.handler.codec.haproxy.HAProxyMessageDecoder import io.netty.handler.codec.protobuf.ProtobufDecoder import io.netty.handler.codec.protobuf.ProtobufEncoder import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender -import io.netty.handler.ssl.SslHandler import net.taehui.twilight.Logger -import javax.net.ssl.SSLContext -class QwilightBoot(eventLoopGroup: EventLoopGroup, sslContext: SSLContext) : Logger, AutoCloseable { +class QwilightBoot(eventLoopGroup: EventLoopGroup) : Logger, AutoCloseable { private val mainBootstrap: ServerBootstrap = ServerBootstrap().group(eventLoopGroup).channel(NioServerSocketChannel::class.java) .childHandler(object : ChannelInitializer() { public override fun initChannel(ch: SocketChannel) { - ch.pipeline().addLast(SslHandler(sslContext.createSSLEngine().apply { - useClientMode = false - })).addLast(ProtobufVarint32FrameDecoder()) + ch.pipeline() + .addLast(HAProxyMessageDecoder()) + .addLast(ProtobufVarint32FrameDecoder()) .addLast(ProtobufDecoder(EventOuterClass.Event.getDefaultInstance())) - .addLast(ProtobufVarint32LengthFieldPrepender()).addLast(ProtobufEncoder()) + .addLast(ProtobufVarint32LengthFieldPrepender()) + .addLast(ProtobufEncoder()) .addLast(QwilightAvatar()) } }) @@ -32,7 +31,7 @@ init { logInfo("Loading Qwilight") - mainChannel = mainBootstrap.bind(6101).channel().closeFuture().addListener { + mainChannel = mainBootstrap.bind(4000).channel().closeFuture().addListener { logInfo("Closed Qwilight") }.channel() } diff --git a/src/main/kotlin/net/taehui/twilight/site/SiteBoot.kt b/src/main/kotlin/net/taehui/twilight/site/SiteBoot.kt index 0e91ebb..591a5c2 100644 --- a/src/main/kotlin/net/taehui/twilight/site/SiteBoot.kt +++ b/src/main/kotlin/net/taehui/twilight/site/SiteBoot.kt @@ -29,7 +29,7 @@ init { logInfo("Loading Site") - mainChannel = mainBootstrap.bind(6704).channel().closeFuture() + mainChannel = mainBootstrap.bind(4002).channel().closeFuture() .addListener { logInfo("Closed Site") }.channel() diff --git a/src/main/kotlin/net/taehui/twilight/system/AwilightHandler.kt b/src/main/kotlin/net/taehui/twilight/system/AwilightHandler.kt index 4927483..367bfef 100644 --- a/src/main/kotlin/net/taehui/twilight/system/AwilightHandler.kt +++ b/src/main/kotlin/net/taehui/twilight/system/AwilightHandler.kt @@ -29,7 +29,7 @@ fun putAvatar(handler: ChannelHandlerContext, avatar: AwilightAvatar) { avatars[handler] = avatar logValueFuture { - if (avatar.isBeginner) { + if (avatar.isEasyMode) { try { HttpClients.createDefault().use { UnsafeByteOperations.unsafeWrap( diff --git a/src/main/kotlin/net/taehui/twilight/www/WwwBoot.kt b/src/main/kotlin/net/taehui/twilight/www/WwwBoot.kt index 94ed5f1..4e9d395 100644 --- a/src/main/kotlin/net/taehui/twilight/www/WwwBoot.kt +++ b/src/main/kotlin/net/taehui/twilight/www/WwwBoot.kt @@ -24,7 +24,7 @@ init { logInfo("Loading Www") - mainChannel = mainBootstrap.bind(7301).channel().closeFuture().addListener { + mainChannel = mainBootstrap.bind(4001).channel().closeFuture().addListener { logInfo("Closed Www") }.channel() }