Sanitized Issue Proposals (#58)
Fixes #53 Co-authored-by: kske <kai@kske.dev> Reviewed-on: https://git.kske.dev/zdm/envoy/pulls/58 Reviewed-by: kske <kai@kske.dev> Reviewed-by: DieGurke <maxi@kske.dev>
This commit is contained in:
parent
829e94fa5f
commit
4a0bcf9762
@ -4,7 +4,6 @@ import javafx.event.EventHandler;
|
|||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.input.InputEvent;
|
import javafx.scene.input.InputEvent;
|
||||||
|
|
||||||
import envoy.client.util.IssueUtil;
|
|
||||||
import envoy.event.IssueProposal;
|
import envoy.event.IssueProposal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,8 +57,10 @@ public final class BugReportPane extends OnlineOnlySettingsPane {
|
|||||||
|
|
||||||
// Displaying the submitReportButton
|
// Displaying the submitReportButton
|
||||||
submitReportButton.setDisable(true);
|
submitReportButton.setDisable(true);
|
||||||
submitReportButton.setOnAction(e -> client.send(new IssueProposal(titleTextField.getText(), IssueUtil
|
submitReportButton.setOnAction(e -> {
|
||||||
.sanitizeIssueDescription(errorDetailArea.getText(), showUsernameInBugReport.isSelected() ? client.getSender().getName() : null), true)));
|
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);
|
getChildren().add(submitReportButton);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
package envoy.client.util;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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 IssueUtil() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Normalizes line breaks and 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);
|
|
||||||
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
}
|
|
@ -23,11 +23,46 @@ public final class IssueProposal extends Event<String> {
|
|||||||
* @since Envoy Common v0.2-beta
|
* @since Envoy Common v0.2-beta
|
||||||
*/
|
*/
|
||||||
public IssueProposal(String title, String description, boolean isBug) {
|
public IssueProposal(String title, String description, boolean isBug) {
|
||||||
super(title);
|
super(escape(title));
|
||||||
this.description = description;
|
this.description = sanitizeDescription(description);
|
||||||
bug = isBug;
|
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
|
* @return the description
|
||||||
* @since Envoy Common v0.2-beta
|
* @since Envoy Common v0.2-beta
|
||||||
|
Reference in New Issue
Block a user