<%@ page import="java.net.*, java.io.*, java.security.*" %> <% final String MOBILE_SITE = "http://m.videirachurch.org"; // Uncomment the line below to redirect to site specifically for tablets final String TABLET_SITE = "http://m.videirachurch.org"; final boolean DA_USE_COOKIES = true; final boolean DA_USE_CACHE = true; final String DA_CACHE_DIR = System.getProperty("java.io.tmpdir")+ System.getProperty("file.separator")+ "DeviceAtlasCache"+System.getProperty("file.separator"); final String DA_URI = "http://detect.deviceatlas.com/query"; final int COOKIE_EXPIRY_TIME = 21600; String source = "none"; String error = ""; String daJson = null; String redirectParam = request.getParameter("redirect"); String referrer = request.getHeader("referer"); //If redirect permitted (not explicitly prevented via redirect=false param or referred from mobile site) if((null!=referrer && !referrer.startsWith(MOBILE_SITE)) || (null!=redirectParam && !redirectParam.equals("false")) || redirectParam==null) { boolean preventRedirect = false; if (DA_USE_COOKIES && null!=getCookieValue("Mobi_Mtld_DA_Prevent_Redirect", request.getCookies())) { //Clear the redirect-prevention cookie if we see redirect=true parameter if(null!=redirectParam && redirectParam.equals("true")) { Cookie cookie = getCookie("Mobi_Mtld_DA_Prevent_Redirect", request.getCookies()); if(null!=cookie) { cookie.setMaxAge(0); //Do we need to add it back to the response like this? response.addCookie(cookie); } } else { preventRedirect = Boolean.parseBoolean(getCookieValue("Mobi_Mtld_DA_Prevent_Redirect", request.getCookies())); //If prevent cookie has value true then stop the redirect if(preventRedirect) { source = "prevent_redirect"; } } } //Grab the user-agent String userAgent = request.getHeader("user-agent"); //Look up cookies if(DA_USE_COOKIES) { daJson = getCookieValue("Mobi_Mtld_DA_Properties", request.getCookies()); if(daJson != null && !daJson.equals("null")) { source = "cookie"; } } //Look up cache if(DA_USE_CACHE && source.equals("none")) { String filename = DA_CACHE_DIR + md5(userAgent) + ".json"; File dir = new File(DA_CACHE_DIR); if(!dir.exists() && !dir.mkdirs()) { error = "Unable to create cache directory: " + DA_CACHE_DIR + "\n"; } else { //Read the cache file if it exists daJson = readFileAsString(filename); if(daJson!=null && !daJson.trim().equals("null") && !daJson.trim().equals("")) source = "cache"; } } //Look up DA webservice if we need to if(source.equals("none")) { URL DA = new URL("http://detect.deviceatlas.com/query?User-Agent=" + URLEncoder.encode(userAgent)); URLConnection conn = DA.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; line = br.readLine(); while (line != null) { daJson += line; line = br.readLine(); } br.close(); if(null!=daJson) { source = "webservice"; if(DA_USE_COOKIES) { Cookie cookie = new Cookie("Mobi_Mtld_DA_Properties", daJson); response.addCookie(cookie); } if(DA_USE_CACHE) { String filename = DA_CACHE_DIR + md5(userAgent) + ".json"; writeFile(filename, daJson); } } } String isMobile = parseJson(daJson, "mobileDevice"); String isTablet = parseJson(daJson, "isTablet"); //Do the redirect if(!preventRedirect){ String redirectUrl = MOBILE_SITE; String requestURL = request.getRequestURL().toString().replace("http://","").replace("https://",""); String queryString = request.getQueryString(); if (queryString == null) { redirectUrl += "/w/" + requestURL; } else { redirectUrl += "/w/" + requestURL + "?" + queryString; } if ((null!=TABLET_SITE && null!=isTablet && isTablet.equals("true")) || (null!=isMobile && isMobile.equals("true"))){ response.sendRedirect(redirectUrl); } } } else { //Create a cookie to prevent redirect for subsequent requests if (DA_USE_COOKIES && null==getCookieValue("Mobi_Mtld_DA_Prevent_Redirect", request.getCookies())) { Cookie cookie = new Cookie("Mobi_Mtld_DA_Prevent_Redirect", "true"); cookie.setMaxAge(COOKIE_EXPIRY_TIME); response.addCookie(cookie); } } %> <%! //Some helper functions //Parse json for property - really basic & assumes flat json file as returned by DA service static final String parseJson(String json, String property) { if(null==json) return null; String[] tokens = json.split(",\\s\"|\":|\\{\"|:\\s|,\\s|\\}"); for(int i=0;i Desktop content!