Skip to content

Commit

Permalink
Remove use of Properties for URL query parsing, fixes OpenRefine#6403
Browse files Browse the repository at this point in the history
  • Loading branch information
EliasStihl committed Mar 1, 2024
1 parent 21aaf8a commit eb5ac27
Show file tree
Hide file tree
Showing 11 changed files with 150 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import java.io.Writer;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -83,9 +83,9 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
logger.debug("doPost Query String::{}", request.getQueryString());
}
response.setCharacterEncoding("UTF-8");
Properties parameters = ParsingUtilities.parseUrlParameters(request);
Map<String, String> parameters = ParsingUtilities.parseParameters(request);

String subCommand = parameters.getProperty("subCommand");
String subCommand = parameters.get("subCommand");

if (logger.isDebugEnabled()) {
logger.info("doPost::subCommand::{}", subCommand);
Expand Down Expand Up @@ -131,7 +131,8 @@ private String getDbServiceException(Exception ex) {
* @throws ServletException
* @throws IOException
*/
private void doInitializeParserUI(HttpServletRequest request, HttpServletResponse response, Properties parameters)
private void doInitializeParserUI(HttpServletRequest request, HttpServletResponse response,
Map<String, String> parameters)
throws ServletException, IOException {
if (logger.isDebugEnabled()) {
logger.debug("::doInitializeParserUI::");
Expand Down Expand Up @@ -164,13 +165,13 @@ private void doInitializeParserUI(HttpServletRequest request, HttpServletRespons
* @throws DatabaseServiceException
*/
private void doParsePreview(
HttpServletRequest request, HttpServletResponse response, Properties parameters)
HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException, DatabaseServiceException {
if (logger.isDebugEnabled()) {
logger.debug("JobID::{}", parameters.getProperty("jobID"));
logger.debug("JobID::{}", parameters.get("jobID"));
}

long jobID = Long.parseLong(parameters.getProperty("jobID"));
long jobID = Long.parseLong(parameters.get("jobID"));
ImportingJob job = ImportingManager.getJob(jobID);
if (job == null) {
HttpUtilities.respond(response, "error", "No such import job");
Expand Down Expand Up @@ -289,13 +290,14 @@ private static void parsePreview(
* @param response
* @param parameters
*/
private void doCreateProject(HttpServletRequest request, HttpServletResponse response, Properties parameters)
private void doCreateProject(HttpServletRequest request, HttpServletResponse response,
Map<String, String> parameters)
throws ServletException, IOException {
if (logger.isDebugEnabled()) {
logger.debug("DatabaseImportController::doCreateProject:::{}", parameters.getProperty("jobID"));
logger.debug("DatabaseImportController::doCreateProject:::{}", parameters.get("jobID"));
}

long jobID = Long.parseLong(parameters.getProperty("jobID"));
long jobID = Long.parseLong(parameters.get("jobID"));
final ImportingJob job = ImportingManager.getJob(jobID);
if (job == null) {
HttpUtilities.respond(response, "error", "No such import job");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
import java.io.Writer;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -91,8 +91,8 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setCharacterEncoding("UTF-8");
Properties parameters = ParsingUtilities.parseUrlParameters(request);
String subCommand = parameters.getProperty("subCommand");
Map<String, String> parameters = ParsingUtilities.parseParameters(request);
String subCommand = parameters.get("subCommand");
if ("list-documents".equals(subCommand)) {
doListDocuments(request, response, parameters);
} else if ("initialize-parser-ui".equals(subCommand)) {
Expand All @@ -106,7 +106,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
}
}

private void doListDocuments(HttpServletRequest request, HttpServletResponse response, Properties parameters)
private void doListDocuments(HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException {

String token = TokenCookie.getToken(request);
Expand Down Expand Up @@ -171,11 +171,11 @@ private void listSpreadsheets(Drive drive, JsonGenerator writer)
}

private void doInitializeParserUI(
HttpServletRequest request, HttpServletResponse response, Properties parameters)
HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException {
String token = TokenCookie.getToken(request);
String type = parameters.getProperty("docType");
String urlString = parameters.getProperty("docUrl");
String type = parameters.get("docType");
String urlString = parameters.get("docUrl");
ObjectNode result = ParsingUtilities.mapper.createObjectNode();
ObjectNode options = ParsingUtilities.mapper.createObjectNode();

Expand Down Expand Up @@ -227,12 +227,12 @@ private List<Sheet> getWorksheetEntriesForDoc(String token, String spreadsheetId
}

private void doParsePreview(
HttpServletRequest request, HttpServletResponse response, Properties parameters)
HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException {

String token = TokenCookie.getToken(request);

long jobID = Long.parseLong(parameters.getProperty("jobID"));
long jobID = Long.parseLong(parameters.get("jobID"));
ImportingJob job = ImportingManager.getJob(jobID);
if (job == null) {
HttpUtilities.respond(response, "error", "No such import job");
Expand Down Expand Up @@ -285,12 +285,12 @@ private void doParsePreview(
job.updating = false;
}

private void doCreateProject(HttpServletRequest request, HttpServletResponse response, Properties parameters)
private void doCreateProject(HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException {

final String token = TokenCookie.getToken(request);

long jobID = Long.parseLong(parameters.getProperty("jobID"));
long jobID = Long.parseLong(parameters.get("jobID"));
final ImportingJob job = ImportingManager.getJob(jobID);
if (job == null) {
HttpUtilities.respond(response, "error", "No such import job");
Expand Down
4 changes: 2 additions & 2 deletions main/src/com/google/refine/commands/Command.java
Original file line number Diff line number Diff line change
Expand Up @@ -246,8 +246,8 @@ protected boolean hasValidCSRFTokenAsGET(HttpServletRequest request) {
if (request == null) {
throw new IllegalArgumentException("parameter 'request' should not be null");
}
Properties options = ParsingUtilities.parseUrlParameters(request);
String token = options.getProperty("csrf_token");
Map<String, String> options = ParsingUtilities.parseParameters(request);
String token = options.get("csrf_token");
return token != null && csrfFactory.validToken(token);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
package com.google.refine.commands.importing;

import java.io.IOException;
import java.util.Properties;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -95,8 +95,8 @@ private ImportingController getController(HttpServletRequest request) {
* will get read and we won't have a chance to parse the body ourselves. This is why we have to parse the URL
* for parameters ourselves. Don't call request.getParameter() before calling internalImport().
*/
Properties options = ParsingUtilities.parseUrlParameters(request);
String name = options.getProperty("controller");
Map<String, String> options = ParsingUtilities.parseParameters(request);
String name = options.get("controller");
if (name != null) {
return ImportingManager.controllers.get(name);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -71,13 +71,13 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)

ProjectManager.singleton.setBusy(true);
try {
Properties parameters = ParsingUtilities.parseUrlParameters(request);
Map<String, String> parameters = ParsingUtilities.parseParameters(request);
ImportingJob job = ImportingManager.createJob();
ObjectNode config = job.getOrCreateDefaultConfig();
ImportingUtilities.loadDataAndPrepareJob(
request, response, parameters, job, config);

String format = parameters.getProperty("format");
String format = parameters.get("format");

// If a format is specified, it might still be wrong, so we need
// to check if we have a parser for it. If not, null it out.
Expand All @@ -91,10 +91,10 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
// If we don't have a format specified, try to guess it.
if (format == null || format.isEmpty()) {
// Use legacy parameters to guess the format.
if ("false".equals(parameters.getProperty("split-into-columns"))) {
if ("false".equals(parameters.get("split-into-columns"))) {
format = "text/line-based";
} else if (",".equals(parameters.getProperty("separator")) ||
"\\t".equals(parameters.getProperty("separator"))) {
} else if (",".equals(parameters.get("separator")) ||
"\\t".equals(parameters.get("separator"))) {
format = "text/line-based/*sv";
} else {
ArrayNode rankedFormats = JSONUtilities.getArray(config, "rankedFormats");
Expand All @@ -110,7 +110,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
}

ObjectNode optionObj = null;
String optionsString = parameters.getProperty("options");
String optionsString = parameters.get("options");
if (optionsString != null && !optionsString.isEmpty()) {
optionObj = ParsingUtilities.evaluateJsonStringToObjectNode(optionsString);
} else {
Expand All @@ -120,7 +120,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
}
adjustLegacyOptions(format, parameters, optionObj);

String projectName = parameters.getProperty("project-name");
String projectName = parameters.get("project-name");
if (projectName != null && !projectName.isEmpty()) {
JSONUtilities.safePut(optionObj, "projectName", projectName);
}
Expand All @@ -137,10 +137,10 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
}
}

static private void adjustLegacyOptions(String format, Properties parameters, ObjectNode optionObj) {
if (",".equals(parameters.getProperty("separator"))) {
static private void adjustLegacyOptions(String format, Map<String, String> parameters, ObjectNode optionObj) {
if (",".equals(parameters.get("separator"))) {
JSONUtilities.safePut(optionObj, "separator", ",");
} else if ("\\t".equals(parameters.getProperty("separator"))) {
} else if ("\\t".equals(parameters.get("separator"))) {
JSONUtilities.safePut(optionObj, "separator", "\t");
}

Expand All @@ -154,9 +154,9 @@ static private void adjustLegacyOptions(String format, Properties parameters, Ob
}

static private void adjustLegacyIntegerOption(
String format, Properties parameters, ObjectNode optionObj, String legacyName, String newName) {
String format, Map<String, String> parameters, ObjectNode optionObj, String legacyName, String newName) {

String s = parameters.getProperty(legacyName);
String s = parameters.get(legacyName);
if (s != null && !s.isEmpty()) {
try {
JSONUtilities.safePut(optionObj, newName, Integer.parseInt(s));
Expand All @@ -168,13 +168,13 @@ static private void adjustLegacyIntegerOption(

static private void adjustLegacyBooleanOption(
String format,
Properties parameters,
Map<String, String> parameters,
ObjectNode optionObj,
String legacyName,
String newName,
boolean invert) {

String s = parameters.getProperty(legacyName);
String s = parameters.get(legacyName);
if (s != null && !s.isEmpty()) {
JSONUtilities.safePut(optionObj, newName, Boolean.parseBoolean(s));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -70,7 +70,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)

ProjectManager.singleton.setBusy(true);
try {
Properties options = ParsingUtilities.parseUrlParameters(request);
Map<String, String> options = ParsingUtilities.parseParameters(request);

long projectID = Project.generateID();
logger.info("Importing existing project using new ID {}", projectID);
Expand All @@ -82,7 +82,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
ProjectMetadata pm = ProjectManager.singleton.getProjectMetadata(projectID);
if (pm != null) {
if (options.containsKey("project-name")) {
String projectName = options.getProperty("project-name");
String projectName = options.get("project-name");
if (projectName != null && projectName.length() > 0) {
pm.setName(projectName);
}
Expand All @@ -101,7 +101,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)

protected void internalImport(
HttpServletRequest request,
Properties options,
Map<String, String> options,
long projectID) throws Exception {

String url = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -80,8 +79,8 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
* will get read and we won't have a chance to parse the body ourselves. This is why we have to parse the URL
* for parameters ourselves.
*/
Properties parameters = ParsingUtilities.parseUrlParameters(request);
String subCommand = parameters.getProperty("subCommand");
Map<String, String> parameters = ParsingUtilities.parseParameters(request);
String subCommand = parameters.get("subCommand");
if ("load-raw-data".equals(subCommand)) {
doLoadRawData(request, response, parameters);
} else if ("update-file-selection".equals(subCommand)) {
Expand All @@ -97,10 +96,10 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
}
}

private void doLoadRawData(HttpServletRequest request, HttpServletResponse response, Properties parameters)
private void doLoadRawData(HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException {

long jobID = Long.parseLong(parameters.getProperty("jobID"));
long jobID = Long.parseLong(parameters.get("jobID"));
ImportingJob job = ImportingManager.getJob(jobID);
if (job == null) {
respondStatusError(response, "No such import job");
Expand All @@ -120,10 +119,10 @@ private void doLoadRawData(HttpServletRequest request, HttpServletResponse respo
job.updating = false;
}

private void doUpdateFileSelection(HttpServletRequest request, HttpServletResponse response, Properties parameters)
private void doUpdateFileSelection(HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException {

long jobID = Long.parseLong(parameters.getProperty("jobID"));
long jobID = Long.parseLong(parameters.get("jobID"));
ImportingJob job = ImportingManager.getJob(jobID);
if (job == null) {
respondStatusError(response, "No such import job");
Expand All @@ -147,10 +146,10 @@ private void doUpdateFileSelection(HttpServletRequest request, HttpServletRespon
job.updating = false;
}

private void doUpdateFormatAndOptions(HttpServletRequest request, HttpServletResponse response, Properties parameters)
private void doUpdateFormatAndOptions(HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException {

long jobID = Long.parseLong(parameters.getProperty("jobID"));
long jobID = Long.parseLong(parameters.get("jobID"));
ImportingJob job = ImportingManager.getJob(jobID);
if (job == null) {
respondStatusError(response, "No such import job");
Expand Down Expand Up @@ -187,10 +186,10 @@ private void doUpdateFormatAndOptions(HttpServletRequest request, HttpServletRes
job.updating = false;
}

private void doInitializeParserUI(HttpServletRequest request, HttpServletResponse response, Properties parameters)
private void doInitializeParserUI(HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException {

long jobID = Long.parseLong(parameters.getProperty("jobID"));
long jobID = Long.parseLong(parameters.get("jobID"));
ImportingJob job = ImportingManager.getJob(jobID);
if (job == null) {
respondStatusError(response, "No such import job");
Expand All @@ -216,10 +215,10 @@ private void doInitializeParserUI(HttpServletRequest request, HttpServletRespons
}
}

private void doCreateProject(HttpServletRequest request, HttpServletResponse response, Properties parameters)
private void doCreateProject(HttpServletRequest request, HttpServletResponse response, Map<String, String> parameters)
throws ServletException, IOException {

long jobID = Long.parseLong(parameters.getProperty("jobID"));
long jobID = Long.parseLong(parameters.get("jobID"));
ImportingJob job = ImportingManager.getJob(jobID);
if (job == null) {
respondStatusError(response, "No such import job");
Expand Down

0 comments on commit eb5ac27

Please sign in to comment.