package codeine.utils.network; import javax.servlet.http.HttpServletRequest; public class UserAgentHeader { public static final UserAgentHeader NULL = new UserAgentHeader("null_os", "null_browser"); private String os; private String browser; private String header; private String lowerCaseUserHeader; private UserAgentHeader(String os, String browser) { super(); this.os = os; this.browser = browser; } private UserAgentHeader(String header) { super(); this.header = header; lowerCaseUserHeader = header.toLowerCase(); } public static UserAgentHeader parseBrowserAndOs(HttpServletRequest request) { return parseBrowserAndOs(RequestUtils.getHeader(request, "User-Agent")); } public static UserAgentHeader parseBrowserAndOs(String header) { if (null == header) { return UserAgentHeader.NULL; } return new UserAgentHeader(header).parseBrowserAndOs(); } private UserAgentHeader parseBrowserAndOs() { // log.info("User Agent for the request is===>"+browserDetails); try { parseOs(); parseBrowser(); } catch (RuntimeException e) { throw new RuntimeException("error parsing User-Agent header " + header, e); } // log.info("Operating System======>"+os); // log.info("Browser Name==========>"+browser); return this; } private void parseBrowser() { // ===============Browser=========================== if (lowerCaseUserHeader.contains("msie")) { String substring = header.substring(header.indexOf("MSIE")).split(";")[0]; browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1]; } else if (lowerCaseUserHeader.contains("trident")) { String substring = header.substring(header.indexOf("rv:")).split("\\)")[0]; browser = substring.replace("rv:", "IE-"); } else if (lowerCaseUserHeader.contains("safari") && lowerCaseUserHeader.contains("version")) { browser = (header.substring(header.indexOf("Safari")).split(" ")[0]).split("/")[0] + "-" + (header.substring(header.indexOf("Version")).split(" ")[0]).split("/")[1]; } else if (lowerCaseUserHeader.contains("opr") || lowerCaseUserHeader.contains("opera")) { if (lowerCaseUserHeader.contains("opera")) browser = (header.substring(header.indexOf("Opera")).split(" ")[0]).split("/")[0] + "-" + (header.substring(header.indexOf("Version")).split(" ")[0]).split("/")[1]; else if (lowerCaseUserHeader.contains("opr")) browser = ((header.substring(header.indexOf("OPR")).split(" ")[0]).replace("/", "-")).replace("OPR", "Opera"); } else if (lowerCaseUserHeader.contains("chrome")) { browser = (header.substring(header.indexOf("Chrome")).split(" ")[0]).replace("/", "-"); } else if (lowerCaseUserHeader.contains("curl")) { browser = (header.split(" ")[0]).replace("/", "-"); } else if ((lowerCaseUserHeader.indexOf("mozilla/7.0") > -1) || (lowerCaseUserHeader.indexOf("netscape6") != -1) || (lowerCaseUserHeader.indexOf("mozilla/4.7") != -1) || (lowerCaseUserHeader.indexOf("mozilla/4.78") != -1) || (lowerCaseUserHeader.indexOf("mozilla/4.08") != -1) || (lowerCaseUserHeader.indexOf("mozilla/3") != -1)) { // browser=(userAgent.substring(userAgent.indexOf("MSIE")).split(" ")[0]).replace("/", // "-"); browser = "Netscape-?"; } else if (lowerCaseUserHeader.contains("firefox")) { browser = (header.substring(header.indexOf("Firefox")).split(" ")[0]).replace("/", "-"); } else { browser = "Unknown[" + header + "]"; } } private void parseOs() { // =================OS======================= if (lowerCaseUserHeader.indexOf("windows") >= 0) { os = "Windows"; } else if (lowerCaseUserHeader.indexOf("mac") >= 0) { os = "Mac"; } else if (lowerCaseUserHeader.indexOf("x11") >= 0) { os = "Unix"; } else if (lowerCaseUserHeader.indexOf("android") >= 0) { os = "Android"; } else if (lowerCaseUserHeader.indexOf("iphone") >= 0) { os = "IPhone"; } else if (lowerCaseUserHeader.indexOf("linux") >= 0) { os = "Linux"; } else { os = "UnKnown, More-Info: " + header; } } public String getOs() { return os; } public String getBrowser() { return browser; } }