package netty.cookbook.common.http; import static io.netty.handler.codec.http.HttpHeaders.Names.COOKIE; import static io.netty.handler.codec.http.HttpHeaders.Names.USER_AGENT; import io.netty.handler.codec.http.Cookie; import io.netty.handler.codec.http.CookieDecoder; import io.netty.handler.codec.http.HttpHeaders; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import netty.cookbook.common.StringPool; import rfx.server.util.ua.Parser; import com.google.gson.Gson; /** * @author Trieu.nguyen * * the HTTP request data, extended information for Http Processors or tracking Http Request Details * */ public class HttpRequestData { public String refererUrl = StringPool.MINUS; public String userAgent = StringPool.MINUS; public String deviceType = "General_Desktop"; protected Map<String, List<String>> params; protected Map<String, String> cookies; public HttpRequestData(HttpRequestEvent event){ HttpHeaders headers = event.getRequest().headers(); String refererUrl = NettyHttpUtil.getRefererUrl(headers); String userAgent = headers.get(USER_AGENT); String cookieString = headers.get(COOKIE); Map<String, String> cookiesMap = null; if (cookieString != null) { try { Set<Cookie> cookies = CookieDecoder.decode(cookieString); int z = cookies.size(); if (z > 0) { cookiesMap = new HashMap<>(z); for (Cookie cookie : cookies) { cookiesMap.put(cookie.getName(), cookie.getValue()); } } else { cookiesMap = new HashMap<>(0); } } catch (Exception e) { e.printStackTrace(); System.err.println("--cookie: "+cookieString); } } set(userAgent, refererUrl, event.getParams(), cookiesMap); //System.out.println(cookieString + " request COOKIE " + cookies ); } public HttpRequestData(String userAgent, String refererUrl, Map<String, List<String>> params, Map<String, String> cookies) { super(); set(userAgent, refererUrl, params, cookies); } protected void set(String userAgent, String refererUrl, Map<String, List<String>> params, Map<String, String> cookies){ this.userAgent = userAgent; this.deviceType = Parser.load().parse(userAgent).device.deviceType(); this.refererUrl = refererUrl; this.params = params; this.cookies = cookies; } public Map<String, List<String>> getParams() { if(params == null){ params = new HashMap<>(0); } return params; } public void setParams(Map<String, List<String>> params) { this.params = params; } public Map<String, String> getCookies() { if(cookies == null){ cookies = new HashMap<>(0); } return cookies; } public String cookie(String name){ return getCookies().getOrDefault(name, ""); } public void setCookies(Map<String, String> cookies) { this.cookies = cookies; } @Override public String toString() { return new Gson().toJson(this); } public boolean isWebBot(){ return userAgent.contains("WebBot"); } public String deviceType(){ return deviceType; } }