Added option to autocreate bug issues on client and server side

Additionally cleaned up a few classes a bit
This commit is contained in:
delvh
2020-08-16 17:14:41 +02:00
parent da287d48e4
commit cf40420eb1
11 changed files with 299 additions and 30 deletions

View File

@ -59,7 +59,7 @@ public class Startup {
public static void main(String[] args) throws IOException {
initLogging();
final Server server = new Server(8080, ObjectMessageReader::new,
final var server = new Server(8080, ObjectMessageReader::new,
new ObjectMessageProcessor(Set.of(new LoginCredentialProcessor(),
new MessageProcessor(),
new GroupMessageProcessor(),
@ -73,10 +73,11 @@ public class Startup {
new IsTypingProcessor(),
new NameChangeProcessor(),
new ProfilePicChangeProcessor(),
new PasswordChangeRequestProcessor())));
new PasswordChangeRequestProcessor(),
new IssueProposalProcessor())));
// Initialize the current message ID
final PersistenceManager persistenceManager = PersistenceManager.getInstance();
final var persistenceManager = PersistenceManager.getInstance();
if (persistenceManager.getConfigItemByID("currentMessageId") == null)
persistenceManager.addConfigItem(new envoy.server.data.ConfigItem("currentMessageId", "0"));

View File

@ -0,0 +1,88 @@
package envoy.server.processors;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import envoy.event.IssueProposal;
import envoy.server.net.ObjectWriteProxy;
import envoy.util.EnvoyLog;
/**
* This processor handles incoming {@link IssueProposal}s and automatically
* creates a new issue on the gitea site, if not disabled by its administrator.
* <p>
* Project: <strong>server</strong><br>
* File: <strong>IssueProposalProcessor.java</strong><br>
* Created: <strong>Aug 5, 2020</strong><br>
*
* @author Leon Hofmeister
* @since Envoy Server v0.2-beta
*/
public class IssueProposalProcessor implements ObjectProcessor<IssueProposal> {
private static boolean issueReportingEnabled = true;
private static final Logger logger = EnvoyLog.getLogger(IssueProposalProcessor.class);
@Override
public void process(IssueProposal issueProposal, long socketID, ObjectWriteProxy writeProxy) throws IOException {
// Do nothing if manually disabled
if (!issueReportingEnabled) return;
var issueDescription = issueProposal.getDescription();
// Appending the submitter name, if this option was enabled
issueDescription += issueProposal.getSubmitterName() != null
? (issueDescription.endsWith("\n") || issueDescription.endsWith("<br>") ? "" : "<br>")
+ String.format("Submitted by user %s.", issueProposal.getSubmitterName())
: "";
// Markdown does not support "\n". It uses "<br>"
issueDescription = issueDescription.replaceAll("\n", "<br>");
// We do not want any Windows artifacts to remain as that may cause problems
issueDescription = issueDescription.replaceAll("\r", "");
try {
final var url = new URL(
"https://git.kske.dev/api/v1/repos/zdm/envoy/issues?access_token=6d8ec2a72d64cbaf6319434aa2e7caf0130701b3");
final var connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; utf-8");
connection.setRequestProperty("Accept", "application/json");
connection.setDoOutput(true);
final var json = String.format("{\"title\":\"%s\",\"body\":\"%s\",\"labels\":[240, %d]}",
issueProposal.get(),
issueDescription,
// Label 240 should be user-made, label 117 bug and label 119 feature
issueProposal.isBug() ? 117 : 119);
try (final var os = connection.getOutputStream()) {
final byte[] input = json.getBytes("utf-8");
os.write(input, 0, input.length);
}
final var status = connection.getResponseCode();
if (status == 201) logger.log(Level.INFO, "Successfully created an issue");
else logger.log(Level.WARNING,
String.format("Tried creating an issue but received status code %d - Request params:title=%s,description=%s,json=%s",
status,
issueProposal.get(),
issueDescription,
json));
} catch (final IOException e) {
logger.log(Level.WARNING, "An error occurred while creating an issue: ", e);
}
}
/**
* @return whether issue reporting is enabled
* @since Envoy Server v0.2-beta
*/
public static boolean isIssueReportingEnabled() { return issueReportingEnabled; }
/**
* @param issueReportingEnabled whether issue reporting should be enabled - true
* by default
* @since Envoy Server v0.2-beta
*/
public static void setIssueReportingEnabled(boolean issueReportingEnabled) {
IssueProposalProcessor.issueReportingEnabled = issueReportingEnabled;
}
}