From b589c78cfcc52d96b28d9e7cff621f3038c2828d Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Tue, 27 Feb 2024 23:16:45 -0500 Subject: [PATCH] [+] More logging for Diva compression --- .../diva/filter/DivaCompressionFilter.java | 65 ------------------ .../sega/diva/filter/DivaCompressionFilter.kt | 68 +++++++++++++++++++ .../sega/general/filter/CompressionFilter.kt | 2 +- 3 files changed, 69 insertions(+), 66 deletions(-) delete mode 100644 src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.kt diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.java b/src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.java deleted file mode 100644 index 55b66bf9..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.java +++ /dev/null @@ -1,65 +0,0 @@ -package icu.samnyan.aqua.sega.diva.filter; - -import icu.samnyan.aqua.sega.general.filter.CompressRequestWrapper; -import icu.samnyan.aqua.sega.general.filter.CompressResponseWrapper; -import icu.samnyan.aqua.sega.util.Compression; -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.eclipse.jetty.io.EofException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; - -import java.io.IOException; -import java.util.Base64; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -@Component -public class DivaCompressionFilter extends OncePerRequestFilter { - - private static final Logger logger = LoggerFactory.getLogger(DivaCompressionFilter.class); - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - - String encoding = request.getHeader("pragma"); - byte[] reqSrc = request.getInputStream().readAllBytes(); - - byte[] reqResult; - if (encoding != null && encoding.equals("DFI")) { - reqResult = Base64.getMimeDecoder().decode(reqSrc); - reqResult = Compression.decompress(reqResult); - } else { - reqResult = reqSrc; - } - - CompressRequestWrapper requestWrapper = new CompressRequestWrapper(request, reqResult); - CompressResponseWrapper responseWrapper = new CompressResponseWrapper(response); - - filterChain.doFilter(requestWrapper, responseWrapper); - byte[] respSrc = responseWrapper.toByteArray(); - byte[] respResult = Compression.compress(respSrc); - respResult = Base64.getMimeEncoder().encode(respResult); - - - response.setContentLength(respResult.length); - response.setHeader("pragma", "DFI"); - - try { - response.getOutputStream().write(respResult); - } catch (EofException e) { - logger.warn("- EOF: Client closed connection"); - } - } - - @Override - protected boolean shouldNotFilter(HttpServletRequest request) { - String path = request.getServletPath(); - return !path.startsWith("/g/diva"); - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.kt b/src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.kt new file mode 100644 index 00000000..946aeefd --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.kt @@ -0,0 +1,68 @@ +package icu.samnyan.aqua.sega.diva.filter + +import icu.samnyan.aqua.sega.general.filter.CompressRequestWrapper +import icu.samnyan.aqua.sega.general.filter.CompressResponseWrapper +import icu.samnyan.aqua.sega.util.Compression +import jakarta.servlet.FilterChain +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse +import org.eclipse.jetty.io.EofException +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.springframework.stereotype.Component +import org.springframework.web.filter.OncePerRequestFilter +import java.util.* + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +class DivaCompressionFilter : OncePerRequestFilter() { + companion object { + val logger: Logger = LoggerFactory.getLogger(DivaCompressionFilter::class.java) + } + + override fun doFilterInternal(req: HttpServletRequest, resp: HttpServletResponse, chain: FilterChain) { + logger.debug(">>> DIVA Incoming request: ${req.servletPath}") + logger.debug("> ${req.headerNames.toList().map { it to req.getHeader(it) }}") + val encoding = req.getHeader("pragma") + val reqSrc = req.inputStream.readAllBytes() + + logger.debug("> Encoding: $encoding") + + var reqResult: ByteArray? + if (encoding != null && encoding == "DFI") { + logger.debug("> Request length (compressed): ${reqSrc.size}") + reqResult = Base64.getMimeDecoder().decode(reqSrc) + reqResult = Compression.decompress(reqResult) + logger.debug("> Request length (decompressed): ${reqResult.size}") + } else { + reqResult = reqSrc + } + + val requestWrapper = CompressRequestWrapper(req, reqResult) + val responseWrapper = CompressResponseWrapper(resp) + + chain.doFilter(requestWrapper, responseWrapper) + + val respSrc = responseWrapper.toByteArray() + logger.debug(">>> DIVA Outgoing response: $respSrc") + logger.debug("> Response length (uncompressed): ${respSrc.size}") + var respResult = Compression.compress(respSrc) + logger.debug("> Response length (compressed): ${respResult.size}") + respResult = Base64.getMimeEncoder().encode(respResult) + + resp.setContentLength(respResult.size) + resp.setHeader("pragma", "DFI") + + try { + resp.outputStream.write(respResult) + } catch (e: EofException) { + Companion.logger.warn("- EOF: Client closed connection when writing result") + } + } + + override fun shouldNotFilter(request: HttpServletRequest): Boolean { + return !request.servletPath.startsWith("/g/diva") + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.kt b/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.kt index 1dd0445c..8109fc62 100644 --- a/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.kt +++ b/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.kt @@ -50,7 +50,7 @@ class CompressionFilter : OncePerRequestFilter() { try { resp.outputStream.write(respResult) } catch (e: EofException) { - logger.warn("- EOF: Client closed connection") + logger.warn("- EOF: Client closed connection when writing result") } }