[+] Exclude wacca in compression filter

pull/29/head
Azalea 2024-03-27 23:08:22 -04:00
parent 32fcc25ea4
commit af11758190
1 changed files with 11 additions and 22 deletions

View File

@ -1,12 +1,11 @@
package icu.samnyan.aqua.sega.general.filter package icu.samnyan.aqua.sega.general.filter
import ext.logger
import icu.samnyan.aqua.sega.util.Compression import icu.samnyan.aqua.sega.util.Compression
import jakarta.servlet.FilterChain import jakarta.servlet.FilterChain
import jakarta.servlet.http.HttpServletRequest import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletResponse import jakarta.servlet.http.HttpServletResponse
import org.eclipse.jetty.io.EofException import org.eclipse.jetty.io.EofException
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component import org.springframework.stereotype.Component
import org.springframework.web.filter.OncePerRequestFilter import org.springframework.web.filter.OncePerRequestFilter
@ -16,39 +15,28 @@ import org.springframework.web.filter.OncePerRequestFilter
@Component @Component
class CompressionFilter : OncePerRequestFilter() { class CompressionFilter : OncePerRequestFilter() {
companion object { companion object {
val logger: Logger = LoggerFactory.getLogger(CompressionFilter::class.java) val logger = logger()
} }
override fun doFilterInternal(req: HttpServletRequest, resp: HttpServletResponse, chain: FilterChain) { override fun doFilterInternal(req: HttpServletRequest, resp: HttpServletResponse, chain: FilterChain) {
logger.debug("Do compress filter") val reqSrc = req.inputStream.readAllBytes().let {
val encoding = req.getHeader("content-encoding") if (req.getHeader("content-encoding") == "deflate") Compression.decompress(it)
val reqSrc = req.inputStream.readAllBytes() else it
val reqResult: ByteArray
if (encoding != null && encoding == "deflate") {
logger.debug("Request length (compressed): ${reqSrc.size}")
reqResult = Compression.decompress(reqSrc)
logger.debug("Request length (decompressed): ${reqResult.size}")
} else {
reqResult = reqSrc
} }
val requestWrapper = CompressRequestWrapper(req, reqResult) val requestWrapper = CompressRequestWrapper(req, reqSrc)
val responseWrapper = CompressResponseWrapper(resp) val responseWrapper = CompressResponseWrapper(resp)
chain.doFilter(requestWrapper, responseWrapper) chain.doFilter(requestWrapper, responseWrapper)
val respSrc = responseWrapper.toByteArray() val result = Compression.compress(responseWrapper.toByteArray())
logger.debug("Response length (uncompressed): ${respSrc.size}")
val respResult = Compression.compress(respSrc)
logger.debug("Response length (compressed): ${respResult.size}")
resp.setContentLength(respResult.size) resp.setContentLength(result.size)
resp.contentType = "application/json; charset=utf-8" resp.contentType = "application/json; charset=utf-8"
resp.addHeader("Content-Encoding", "deflate") resp.addHeader("Content-Encoding", "deflate")
try { try {
resp.outputStream.write(respResult) resp.outputStream.write(result)
} catch (e: EofException) { } catch (e: EofException) {
logger.warn("- EOF: Client closed connection when writing result") logger.warn("- EOF: Client closed connection when writing result")
} }
@ -58,5 +46,6 @@ class CompressionFilter : OncePerRequestFilter() {
* Filter games that are not diva * Filter games that are not diva
*/ */
override fun shouldNotFilter(req: HttpServletRequest) = override fun shouldNotFilter(req: HttpServletRequest) =
!(req.servletPath.startsWith("/g/") && !req.servletPath.startsWith("/g/diva")) !(req.servletPath.startsWith("/g/") && !req.servletPath.startsWith("/g/diva")
&& !req.servletPath.startsWith("/g/wacca"))
} }