forked from Cookies_Github_mirror/AquaDX
[M] Move game URLs
This commit is contained in:
@@ -1,87 +0,0 @@
|
||||
package icu.samnyan.aqua.sega.general.filter;
|
||||
|
||||
import icu.samnyan.aqua.sega.util.Compression;
|
||||
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 jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author samnyan (privateamusement@protonmail.com)
|
||||
*/
|
||||
@Component
|
||||
public class CompressionFilter extends OncePerRequestFilter {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(CompressionFilter.class);
|
||||
private final List<String> filterList;
|
||||
|
||||
public CompressionFilter() {
|
||||
filterList = new ArrayList<>();
|
||||
filterList.add("/ChuniServlet");
|
||||
filterList.add("/OngekiServlet");
|
||||
filterList.add("/MaimaiServlet");
|
||||
filterList.add("/Maimai2Servlet");
|
||||
filterList.add("/ChusanServlet");
|
||||
filterList.add("/CardMakerServlet");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
|
||||
|
||||
logger.debug("Do compress filter");
|
||||
String encoding = request.getHeader("content-encoding");
|
||||
byte[] reqSrc = request.getInputStream().readAllBytes();
|
||||
|
||||
byte[] reqResult;
|
||||
if (encoding != null && encoding.equals("deflate")) {
|
||||
logger.debug("Request length (compressed): {}", reqSrc.length);
|
||||
reqResult = Compression.decompress(reqSrc);
|
||||
logger.debug("Request length (decompressed): {}", reqResult.length);
|
||||
} else {
|
||||
reqResult = reqSrc;
|
||||
}
|
||||
|
||||
CompressRequestWrapper requestWrapper = new CompressRequestWrapper(request, reqResult);
|
||||
CompressResponseWrapper responseWrapper = new CompressResponseWrapper(response);
|
||||
|
||||
filterChain.doFilter(requestWrapper, responseWrapper);
|
||||
|
||||
byte[] respSrc = responseWrapper.toByteArray();
|
||||
logger.debug("Response length (uncompressed): {}", respSrc.length);
|
||||
byte[] respResult = Compression.compress(respSrc);
|
||||
logger.debug("Response length (compressed): {}", respResult.length);
|
||||
|
||||
|
||||
response.setContentLength(respResult.length);
|
||||
response.setContentType("application/json; charset=utf-8");
|
||||
response.addHeader("Content-Encoding", "deflate");
|
||||
|
||||
try {
|
||||
response.getOutputStream().write(respResult);
|
||||
} catch (EofException e) {
|
||||
logger.warn("Client closed connection");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldNotFilter(HttpServletRequest request) {
|
||||
String path = request.getServletPath();
|
||||
boolean notFilter = true;
|
||||
for (String prefix : filterList) {
|
||||
if (path.startsWith(prefix)) {
|
||||
notFilter = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return notFilter;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package icu.samnyan.aqua.sega.general.filter
|
||||
|
||||
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
|
||||
|
||||
/**
|
||||
* @author samnyan (privateamusement@protonmail.com)
|
||||
*/
|
||||
@Component
|
||||
class CompressionFilter : OncePerRequestFilter() {
|
||||
companion object {
|
||||
val logger: Logger = LoggerFactory.getLogger(CompressionFilter::class.java)
|
||||
}
|
||||
|
||||
override fun doFilterInternal(req: HttpServletRequest, resp: HttpServletResponse, chain: FilterChain) {
|
||||
logger.debug("Do compress filter")
|
||||
val encoding = req.getHeader("content-encoding")
|
||||
val reqSrc = req.inputStream.readAllBytes()
|
||||
|
||||
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 responseWrapper = CompressResponseWrapper(resp)
|
||||
|
||||
chain.doFilter(requestWrapper, responseWrapper)
|
||||
|
||||
val respSrc = 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.contentType = "application/json; charset=utf-8"
|
||||
resp.addHeader("Content-Encoding", "deflate")
|
||||
|
||||
try {
|
||||
resp.outputStream.write(respResult)
|
||||
} catch (e: EofException) {
|
||||
logger.warn("Client closed connection")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter games that are not diva
|
||||
*/
|
||||
override fun shouldNotFilter(req: HttpServletRequest) =
|
||||
!(req.servletPath.startsWith("/g") && !req.servletPath.startsWith("/g/diva"))
|
||||
}
|
||||
Reference in New Issue
Block a user