Fix quote and backslash escaping in IssueProposal
This commit is contained in:
parent
575a84a13c
commit
2138d8d064
@ -4,8 +4,7 @@ import javafx.event.EventHandler;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.input.InputEvent;
|
||||
|
||||
import envoy.client.data.Context;
|
||||
import envoy.client.util.IssueUtil;
|
||||
import envoy.event.IssueProposal;
|
||||
|
||||
/**
|
||||
* This class offers the option for users to submit a bug report. Only the title
|
||||
@ -58,10 +57,10 @@ public final class BugReportPane extends OnlineOnlySettingsPane {
|
||||
|
||||
// Displaying the submitReportButton
|
||||
submitReportButton.setDisable(true);
|
||||
submitReportButton.setOnAction(e -> client.send(IssueUtil.createIssueProposal(titleTextField.getText(),
|
||||
errorDetailArea.getText(),
|
||||
showUsernameInBugReport.isSelected() ? Context.getInstance().getLocalDB().getUser().getName() : null,
|
||||
true)));
|
||||
submitReportButton.setOnAction(e -> {
|
||||
String title = titleTextField.getText(), description = errorDetailArea.getText();
|
||||
client.send(showUsernameInBugReport.isSelected() ? new IssueProposal(title, description, true) : new IssueProposal(title, description, client.getSender().getName(), true));
|
||||
});
|
||||
getChildren().add(submitReportButton);
|
||||
}
|
||||
}
|
||||
|
@ -1,83 +0,0 @@
|
||||
package envoy.client.util;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import envoy.event.IssueProposal;
|
||||
|
||||
/**
|
||||
* Provides methods to handle outgoing issues.
|
||||
*
|
||||
* @author Leon Hofmeister
|
||||
* @author Kai S. K. Engelbart
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public final class IssueUtil {
|
||||
|
||||
private static final Pattern removeBackslashes = Pattern.compile("\\\\");
|
||||
private static final Pattern escapeQuotes = Pattern.compile("\"");
|
||||
|
||||
private IssueUtil() {}
|
||||
|
||||
/**
|
||||
* Creates a new {@code IssueProposal} from the given data.
|
||||
*
|
||||
* @param title the proposed title of the issue
|
||||
* @param description the proposed description of the issue
|
||||
* @param username the user who submitted the issue. Should be
|
||||
* {@code null} if he does not want to be named. * @param
|
||||
* isBug
|
||||
* @param isBug whether this issue is a bug or a feature
|
||||
* @return a sanitized IssueProposal that should not fail to be sent
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public static IssueProposal createIssueProposal(String title, String description, String username, boolean isBug) {
|
||||
title = sanitizeIssueTitle(title);
|
||||
description = sanitizeIssueDescription(description, username);
|
||||
return new IssueProposal(title, description, isBug);
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes quotes and removes backslashes for a suggested issue title.
|
||||
*
|
||||
* @param title the title to sanitize
|
||||
* @return the sanitized title
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
private static String sanitizeIssueTitle(String title) {
|
||||
|
||||
// Remove ALL backslashes as they are only error prone
|
||||
title = removeBackslashes.matcher(title).replaceAll("");
|
||||
|
||||
// Escape quotes
|
||||
title = escapeQuotes.matcher(title).replaceAll("\\\\\"");
|
||||
return title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes line breaks, <br>
|
||||
* removes all backslashes, <br>
|
||||
* escapes quotes and<br>
|
||||
* appends the user name to the issue description if requested.
|
||||
*
|
||||
* @param description the description to sanitize
|
||||
* @param username the user who submitted the issue. Should be
|
||||
* {@code null} if he does not want to be named.
|
||||
* @return the sanitized description
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public static String sanitizeIssueDescription(String description, String username) {
|
||||
|
||||
// Trim and replace line breaks by <br> tags
|
||||
description = description.trim().replaceAll(System.getProperty("line.separator"), "<br>");
|
||||
|
||||
// Append user name if requested
|
||||
if (username != null) description += String.format("<br>Submitted by user %s.", username);
|
||||
|
||||
// Remove ALL backslashes as they are only error prone
|
||||
description = removeBackslashes.matcher(description).replaceAll("");
|
||||
|
||||
// Escape all quotes to avoid prematurely ending the string
|
||||
description = escapeQuotes.matcher(description).replaceAll("\\\\\"");
|
||||
return description;
|
||||
}
|
||||
}
|
@ -23,11 +23,46 @@ public final class IssueProposal extends Event<String> {
|
||||
* @since Envoy Common v0.2-beta
|
||||
*/
|
||||
public IssueProposal(String title, String description, boolean isBug) {
|
||||
super(title);
|
||||
this.description = description;
|
||||
super(escape(title));
|
||||
this.description = sanitizeDescription(description);
|
||||
bug = isBug;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param title the title of the reported bug
|
||||
* @param description the description of this bug
|
||||
* @param user the name of the user creating the issue
|
||||
* @param isBug determines whether this {@code IssueProposal} is
|
||||
* supposed to be a
|
||||
* feature or a bug (true = bug, false = feature)
|
||||
* @since Envoy Common v0.2-beta
|
||||
*/
|
||||
public IssueProposal(String title, String description, String user, boolean isBug) {
|
||||
super(escape(title));
|
||||
this.description = sanitizeDescription(description) + String.format("<br>Submitted by user %s.", user);
|
||||
bug = isBug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes an issue description and normalizes its line breaks.
|
||||
*
|
||||
* @param description the description to normalize
|
||||
* @return the normalized description
|
||||
* @since Envoy Common v0.2-beta
|
||||
*/
|
||||
private static String sanitizeDescription(String description) {
|
||||
return escape(description).replaceAll("\r?\n", "<br>");
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes quotes and backslashes from a string.
|
||||
*
|
||||
* @param raw the string to escape
|
||||
* @return the escaped string
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
private static String escape(String raw) { return raw.replace("\\", "\\\\").replace("\"", "\\\""); }
|
||||
|
||||
/**
|
||||
* @return the description
|
||||
* @since Envoy Common v0.2-beta
|
||||
|
Reference in New Issue
Block a user