Skip to content

Commit

Permalink
Problems with special characters (at least ampersands) in filenames
Browse files Browse the repository at this point in the history
Fix #298
  • Loading branch information
Sergio Ochoa committed Aug 30, 2021
1 parent eca35fc commit 40b6f48
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 10 deletions.
16 changes: 16 additions & 0 deletions src/main/java/com/openkm/frontend/client/util/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,22 @@ public static void changeCss(String title) {
Main.get().mainPanel.stylesChanged();
}

/**
* Reverse of encodeEntities. For example:
* - "/okm:root/a & b" => "/okm:root/a & b"
*
* @param path Path or string to decode.
* @return The string with the decoded entities.
*/
public static String decodeEntities(String path) {
String tmp = path.replaceAll("&", "&");
tmp = tmp.replaceAll("&lt;", "<");
tmp = tmp.replaceAll("&gt;", ">");
tmp = tmp.replaceAll("&#34;", "\"");
tmp = tmp.replaceAll("&#39;", "'");
return tmp;
}

/**
* Change on fly the actual css
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ public void addProgressBar(String entryPath, String actualPath) {
HorizontalPanel progressBarAndButtonPanel = new HorizontalPanel();
progressBarAndButtonPanel.add(progressBar);
progressBarAndButtonPanel.add(Util.hSpace("5px"));
Label nameLabel = new Label(Util.shortenPath(filePath, 80));
Label nameLabel = new Label(Util.shortenPath(Util.decodeEntities(filePath), 80));
progressBarAndButtonPanel.add(nameLabel);
addPanel(progressBarAndButtonPanel);
}
Expand Down
19 changes: 10 additions & 9 deletions src/main/java/com/openkm/util/WebUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public class WebUtils {
public static final String EMPTY_STRING = "";
public static final String METHOD_GET = "GET";
public static final String METHOD_POST = "POST";

/**
* Extrae un parámetro de tipo String del request. Si el parámetro no existe devuelve
* un String vacio.
Expand Down Expand Up @@ -116,7 +116,7 @@ public static final List<String> getStringList(HttpServletRequest request, Strin

return stringValue;
}

/**
* Extrae un parámetro de tipo String del request. Si el parámetro no existe devuelve
* un String vacio.
Expand Down Expand Up @@ -146,7 +146,7 @@ public static final String getStringComaSeparedValues(HttpServletRequest request
}

/**
* Extrae un parámetro de tipo entero del request.
* Extrae un parámetro de tipo entero del request.
* Si el parámetro no existe o no es valido devuelve 0.
* @param request Petición de la que extraer el parámetro.
* @param name Nombre del parámetro
Expand All @@ -168,7 +168,7 @@ public static final int getInt(HttpServletRequest request, String name) {
}

/**
* Extrae un parámetro de tipo entero del request.
* Extrae un parámetro de tipo entero del request.
* Si el parámetro no existe o no es valido devuelve el valor por defecto especificado.
* @param request Petición de la que extraer el parámetro.
* @param name Nombre del parámetro
Expand Down Expand Up @@ -239,7 +239,7 @@ public static final List<Long> getLongList(HttpServletRequest request, String na
}

/**
* Extrae un parámetro de tipo long del request.
* Extrae un parámetro de tipo long del request.
* Si el parámetro no existe o no es valido devuelve 0.
* @param request Petición de la que extraer el parámetro.
* @param name Nombre del parámetro
Expand All @@ -261,7 +261,7 @@ public static final long getLong(HttpServletRequest request, String name) {
}

/**
* Extrae un parámetro de tipo float del request.
* Extrae un parámetro de tipo float del request.
* Si el parámetro no existe o no es valido devuelve 0.
* @param request Petición de la que extraer el parámetro.
* @param name Nombre del parámetro
Expand All @@ -283,7 +283,7 @@ public static final float getFloat(HttpServletRequest request, String name) {
}

/**
* Extrae un parámetro de tipo booleano del request.
* Extrae un parámetro de tipo booleano del request.
* Si el parámetro existe y no esta vacio devuelve true, en caso contrario devuelve false.
* @param request Petición de la que extraer el parámetro.
* @param name Nombre del parámetro
Expand All @@ -295,7 +295,7 @@ public static final boolean getBoolean(HttpServletRequest request, String name)
}

/**
* Extrae un parámetro de tipo booleano del request.
* Extrae un parámetro de tipo booleano del request.
* Si el parámetro existe y es igual al valor especificado devuelve true, en caso
* contrario devuelve false.
* @param request Petición de la que extraer el parámetro.
Expand Down Expand Up @@ -329,7 +329,7 @@ public static void sendFile(HttpServletRequest request, HttpServletResponse resp
log.debug("sendFile({}, {}, {}, {}, {}, {})", new Object[]{request, response, fileName, mimeType, inline, is});
sendFile(request, response, fileName, mimeType, inline, is, is.available());
}

/**
* Send file to client browser.
*/
Expand Down Expand Up @@ -374,6 +374,7 @@ public static void sendFile(HttpServletRequest request, HttpServletResponse resp
public static void prepareSendFile(HttpServletRequest request, HttpServletResponse response,
String fileName, String mimeType, boolean inline) throws UnsupportedEncodingException {
String userAgent = WebUtils.getHeader(request, "user-agent").toLowerCase();
fileName = PathUtils.decodeEntities(fileName);

// Disable browser cache
response.setHeader("Expires", "Sat, 6 May 1971 12:00:00 GMT");
Expand Down

0 comments on commit 40b6f48

Please sign in to comment.