This is an automated email from the ASF dual-hosted git repository. mbien pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/roller.git
commit de1f33a7e2ed11163bdf259fe56430f016ab65cb Author: Michael Bien <mbie...@gmail.com> AuthorDate: Mon Jul 19 15:07:04 2021 +0200 precompile regex patterns. --- .../rendering/mobile/MobileDeviceRepository.java | 47 +++++++++------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/mobile/MobileDeviceRepository.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/mobile/MobileDeviceRepository.java index 04e9134..ddad1e2 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/mobile/MobileDeviceRepository.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/mobile/MobileDeviceRepository.java @@ -17,24 +17,24 @@ */ package org.apache.roller.weblogger.ui.rendering.mobile; +import java.util.regex.Pattern; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import static org.apache.roller.weblogger.ui.rendering.mobile.MobileDeviceRepository.DeviceType.*; public class MobileDeviceRepository { - private static Log log = LogFactory.getLog(MobileDeviceRepository.class); public enum DeviceType { standard, mobile } - public static final String POSSIBLE_DEVICES_1 = ".*(android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)" + public static final Pattern POSSIBLE_DEVICES_1 = Pattern.compile(".*(android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)" + "|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\\\/|" - + "plucker|pocket|psp|symbian|treo|up\\\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino).*"; - public static final String POSSIBLE_DEVICES_2 = "\"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\\\-)|" + + "plucker|pocket|psp|symbian|treo|up\\\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino).*"); + + public static final Pattern POSSIBLE_DEVICES_2 = Pattern.compile("\"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\\\-)|" + "ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\\\-m|r |s )|" + "avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\\\-(n|u)|c55\\\\/|capi|ccwa|cdm\\\\-|" + "cell|chtm|cldc|cmd\\\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\\\-d)|" @@ -53,7 +53,8 @@ public class MobileDeviceRepository { + "ta(gt|lk)|tcl\\\\-|tdg\\\\-|tel(i|m)|tim\\\\-|t\\\\-mo|to(pl|sh)|ts(70|m\\\\-|m3|m5)|tx\\\\-9|" + "up(\\\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\\\-v)|vm40|voda|vulc|" + "vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\\\\-|2|g)|" - + "yas\\\\-|your|zeto|zte\\\\-"; + + "yas\\\\-|your|zeto|zte\\\\-"); + public static final String USER_REQUEST_TYPE = "roller_user_request_type"; public static final String USER_AGENT_PARAMETER = "deviceType"; @@ -67,45 +68,35 @@ public class MobileDeviceRepository { public static boolean isMobileDevice(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); if (userAgent != null) { - userAgent = request.getHeader("User-Agent").toLowerCase(); - - try { - return (userAgent.matches(POSSIBLE_DEVICES_1) || userAgent - .substring(0, 4).matches(POSSIBLE_DEVICES_2)); - } catch (StringIndexOutOfBoundsException e) { - // invalid device - log.error("ERROR invalid userAgent type : " + userAgent); - return false; - } + userAgent = userAgent.toLowerCase(); + return POSSIBLE_DEVICES_1.matcher(userAgent).matches() + || (userAgent.length() >= 4 && + POSSIBLE_DEVICES_2.matcher(userAgent.substring(0, 4)).matches()); } return false; } public static DeviceType getRequestType(HttpServletRequest request) { - DeviceType type = DeviceType.standard; String deviceTypeParam = request.getParameter(USER_AGENT_PARAMETER); if (deviceTypeParam != null) { - return deviceTypeParam.trim().equals("standard") ? DeviceType.standard - : DeviceType.mobile; + return deviceTypeParam.trim().equals("standard") ? standard : mobile; } - String cookie = getCookieValue(request.getCookies(), USER_REQUEST_TYPE, - null); + String cookie = getCookieValue(request.getCookies(), USER_REQUEST_TYPE, null); if (cookie != null) { - return cookie.equals("standard") ? DeviceType.standard - : DeviceType.mobile; + return cookie.equals("standard") ? standard : mobile; } if (isMobileDevice(request)) { - type = DeviceType.mobile; + return mobile; } - return type; + + return standard; } - private static String getCookieValue(Cookie[] cookies, String cookieName, - String defaultValue) { + private static String getCookieValue(Cookie[] cookies, String cookieName, String defaultValue) { if (cookies != null) { for (Cookie cookie : cookies) { if (cookieName.equals(cookie.getName())) {