package org.caudexorigo.http.netty4; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpRequest; import java.io.File; import java.net.URI; import org.apache.commons.lang3.StringUtils; public class GzipStaticFileAction extends StaticFileAction { private static final String GZIP_ENCODING = "gzip"; public GzipStaticFileAction(URI rootPath) { super(rootPath); } public GzipStaticFileAction(URI rootPath, long cacheDuration) { super(rootPath, cacheDuration); } @Override protected File getFile(FullHttpRequest request) { String original_req_path = StringUtils.substringBefore(request.getUri(), "?"); try { if (allowsGzip(request)) { String req_path = original_req_path.concat(".gz"); return getFile(req_path); } else { return getFile(original_req_path); } } catch (Throwable t) { return getFile(original_req_path); } } @Override public String getContentEncoding(HttpRequest request, File file) { boolean isGzipFile = file.getPath().endsWith(".gz"); if (allowsGzip(request) && isGzipFile) { return GZIP_ENCODING; } return null; } @Override protected CharSequence getMimeType(HttpRequest request, File file) { String original_req_path = StringUtils.substringBefore(request.getUri(), "?"); return MimeTable.getContentType(original_req_path); } private boolean allowsGzip(HttpRequest request) { String accept_enconding = request.headers().get(HttpHeaders.Names.ACCEPT_ENCODING); return StringUtils.containsIgnoreCase(accept_enconding, GZIP_ENCODING); } }