diff --git a/src/main/java/org/jivesoftware/site/DiscourseAPI.java b/src/main/java/org/jivesoftware/site/DiscourseAPI.java index abd8323f..b0f36404 100644 --- a/src/main/java/org/jivesoftware/site/DiscourseAPI.java +++ b/src/main/java/org/jivesoftware/site/DiscourseAPI.java @@ -34,6 +34,9 @@ public void init(ServletConfig servletConfig) throws ServletException { baseUrl = "https://discourse.igniterealtime.org/"; } + if (!baseUrl.endsWith("/")) { + baseUrl = baseUrl + "/"; + } apiKey = servletConfig.getServletContext().getInitParameter("discourse-api-key"); @@ -76,7 +79,7 @@ private static Long doSimpleQuery(final int queryId, final int lastNumberOfDays) parameters.put("download", "true"); try { - return restClient.post(baseUrl + "/admin/plugins/explorer/queries/"+queryId+"/run", headers, parameters).getJSONArray("rows").getJSONArray(0).getLong(0); + return restClient.post(baseUrl + "admin/plugins/explorer/queries/"+queryId+"/run", headers, parameters).getJSONArray("rows").getJSONArray(0).getLong(0); } catch (Throwable t) { Log.warn("Unable to interact with Discourse's API.", t); return null; diff --git a/src/main/java/org/jivesoftware/site/DownloadStats.java b/src/main/java/org/jivesoftware/site/DownloadStats.java index d0d02696..a7a4c337 100644 --- a/src/main/java/org/jivesoftware/site/DownloadStats.java +++ b/src/main/java/org/jivesoftware/site/DownloadStats.java @@ -283,6 +283,7 @@ public static void addListingToDatabase( String ipAddress, String product, Strin if (ipAddress != null && ipAddress.contains(",")) { ipAddress = ipAddress.substring(ipAddress.indexOf(",")+1).trim(); } + final DbConnectionManager connectionManager = DbConnectionManager.getInstance(); Connection con = null; PreparedStatement pstmt = null; @@ -345,6 +346,11 @@ public static void addListingToDatabase( String ipAddress, String product, Strin public static void addUpdateToDatabase( String ipAddress, String product, String version, String fileType, String fileName, DownloadServlet.DownloadInfo downloadInfo ) { + // Correct for X-Forwarded-For header value sometimes containing a list of IPs. Use the last one. + if (ipAddress != null && ipAddress.contains(",")) { + ipAddress = ipAddress.substring(ipAddress.indexOf(",")+1).trim(); + } + final DbConnectionManager connectionManager = DbConnectionManager.getInstance(); Connection con = null; PreparedStatement pstmt = null; @@ -397,6 +403,11 @@ public static void addUpdateToDatabase( String ipAddress, String product, String public static void addCheckUpdate( String ipAddress, String os, String currentVersion, String latestVersion, DownloadServlet.DownloadInfo info ) { + // Correct for X-Forwarded-For header value sometimes containing a list of IPs. Use the last one. + if (ipAddress != null && ipAddress.contains(",")) { + ipAddress = ipAddress.substring(ipAddress.indexOf(",")+1).trim(); + } + final DbConnectionManager connectionManager = DbConnectionManager.getInstance(); Connection con = null; PreparedStatement pstmt = null; diff --git a/src/main/java/org/jivesoftware/site/PluginDownloadServlet.java b/src/main/java/org/jivesoftware/site/PluginDownloadServlet.java index 30c80b4f..e7139d68 100644 --- a/src/main/java/org/jivesoftware/site/PluginDownloadServlet.java +++ b/src/main/java/org/jivesoftware/site/PluginDownloadServlet.java @@ -110,7 +110,7 @@ public void doGet( HttpServletRequest request, HttpServletResponse response) thr if ( plugin == null || !Files.exists( plugin ) || !Files.isRegularFile( plugin ) ) { // Not a file, return 404 - Log.info( "File {} does not exist (or is not a regular file).", plugin ); + Log.info( "File {} does not exist (or is not a regular file). Unable to process request: {} / {}", plugin, requestURI, request.getQueryString() ); response.sendError( HttpServletResponse.SC_NOT_FOUND ); return; }