From fe2c349a3b3e99ec2e401c87e25b7626f73be8fc Mon Sep 17 00:00:00 2001
From: Daniel Haag <daniel.haag@uibk.ac.at>
Date: Wed, 20 Nov 2019 14:59:30 +0100
Subject: [PATCH] openolat#137: using the new identitykey parameter for error
 feedback handling

---
 .../core/dispatcher/ErrorFeedbackMailer.java  | 24 +++++++++++++------
 .../exception/ExceptionWindowController.java  | 18 +++++++-------
 .../exception/_content/exception_page.html    |  2 +-
 3 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/olat/core/dispatcher/ErrorFeedbackMailer.java b/src/main/java/org/olat/core/dispatcher/ErrorFeedbackMailer.java
index b608f5b76f6..5db4605c398 100644
--- a/src/main/java/org/olat/core/dispatcher/ErrorFeedbackMailer.java
+++ b/src/main/java/org/olat/core/dispatcher/ErrorFeedbackMailer.java
@@ -82,10 +82,16 @@ public class ErrorFeedbackMailer implements Dispatcher {
 	public void sendMail(HttpServletRequest request) {
 		String feedback = request.getParameter("textarea");
 		String errorNr = request.getParameter("fx_errnum");
-		String username = request.getParameter("username");
+		String userIdentityKey = request.getParameter("useridentitykey");
 		try {
-			if(StringHelper.containsNonWhitespace(username)) {
-				Identity ident = securityManager.findIdentityByName(username);
+			if(StringHelper.containsNonWhitespace(feedback)) {
+				Identity ident = securityManager.loadIdentityByKey(Long.valueOf(userIdentityKey),true);
+				String username;
+				if (ident == null) {
+					username = "n/a";
+				} else {
+					username = ident.getName();
+				}
 				Collection<String> logFileEntries = LogFileParser.getErrorToday(errorNr, false);
 				StringBuilder out = new StringBuilder(2048);
 				out.append(feedback)
@@ -97,12 +103,16 @@ public class ErrorFeedbackMailer implements Dispatcher {
 				}
 	
 				MailBundle bundle = new MailBundle();
-				bundle.setFromId(ident);
+				if (ident == null) {
+					bundle.setFrom(WebappHelper.getMailConfig("mailError"));
+				} else {
+					bundle.setFromId(ident);
+				}
 				bundle.setTo(WebappHelper.getMailConfig("mailError"));
 				bundle.setContent("Feedback from Error Nr.: " + errorNr, "<pre>" + StringEscapeUtils.escapeHtml(out.toString()) + "</pre>");
 				mailManager.sendExternMessage(bundle, null, false);
 			} else {
-				log.error("Try to send a feedback without identity");
+				log.error("Try to send a feedback without text");
 			}
 		} catch (Exception e) {
 			handleException(request, e);
@@ -111,9 +121,9 @@ public class ErrorFeedbackMailer implements Dispatcher {
 
 	private void handleException(HttpServletRequest request, Exception e) {
 		String feedback = request.getParameter("textarea");
-		String username = request.getParameter("username");
+		String userIdentityKey = request.getParameter("useridentitykey");
 		log.error("Error sending error feedback mail to OpenOLAT error support (" + WebappHelper.getMailConfig("mailError") + ") from: "
-				+ username + " with content: " + feedback, e);
+				+ userIdentityKey + " with content: " + feedback, e);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/core/gui/exception/ExceptionWindowController.java b/src/main/java/org/olat/core/gui/exception/ExceptionWindowController.java
index 8b54e1de38f..41f9ac9eb07 100644
--- a/src/main/java/org/olat/core/gui/exception/ExceptionWindowController.java
+++ b/src/main/java/org/olat/core/gui/exception/ExceptionWindowController.java
@@ -195,7 +195,7 @@ public class ExceptionWindowController extends DefaultChiefController {
 		msg.contextPut("stacktrace", OLATRuntimeException.throwableToHtml(th));			
 		
 		Identity curIdent = ureq.getIdentity();
-		msg.contextPut("username", curIdent == null? "n/a" : curIdent.getKey());
+		msg.contextPut("userIdentityKey", curIdent == null? "n/a" : curIdent.getKey());
 		msg.contextPut("allowBackButton", Boolean.valueOf(allowBackButton));
 		msg.contextPut("detailedmessage", detailedmessage);
 		// Cluster request reference number
@@ -241,15 +241,13 @@ public class ExceptionWindowController extends DefaultChiefController {
 		
 		// send email to support address
 		try {
-			// if null, user may crashed before getting a valid session, try with
-			// guest user instead
+			MailBundle bundle = new MailBundle();
+			// if null, user may crashed before getting a valid session
 			if (curIdent == null) {
-				BaseSecurity im = CoreSpringFactory.getImpl(BaseSecurity.class);
-				curIdent = im.findIdentityByName("guest");
+				bundle.setFrom(WebappHelper.getMailConfig("mailError"));
+			} else {
+				bundle.setFromId(curIdent);
 			}
-			
-			MailBundle bundle = new MailBundle();
-			bundle.setFromId(curIdent);
 			bundle.setTo(WebappHelper.getMailConfig("mailError"));
 			bundle.setContent(
 					"**RedScreen** Nr.: " + Settings.getNodeInfo() + "-E" + refNum, 
@@ -257,8 +255,8 @@ public class ExceptionWindowController extends DefaultChiefController {
 					StringEscapeUtils.escapeHtml(
 					"**RedScreen** " + o3e.getLogMsg() + "\n" + 
 					formatter.formatDateAndTime(new Date()) + "\n" +
-					"Username: " + curIdent.getName() + "\n" +
-					"Stacktrace:\n" + 
+					"Username: " + (curIdent == null ? "null" : curIdent.getName()) + "\n" +
+					"Stacktrace:\n" +
 					OLATRuntimeException.throwableToHtml(th).replaceAll("<br />", "\n") + "\n\n" + 
 					"ListenerInfo\n" + 
 					componentListenerInfo + "\n" +
diff --git a/src/main/java/org/olat/core/gui/exception/_content/exception_page.html b/src/main/java/org/olat/core/gui/exception/_content/exception_page.html
index fcefb2c6828..837757d74a5 100644
--- a/src/main/java/org/olat/core/gui/exception/_content/exception_page.html
+++ b/src/main/java/org/olat/core/gui/exception/_content/exception_page.html
@@ -145,7 +145,7 @@ $r.renderHeaderIncludes()
 						</a>
 					</div>
 
-					<input type="hidden" name="username" value="$username" />
+					<input type="hidden" name="useridentitykey" value="$userIdentityKey" />
 					<input type="hidden" name="fx_errnum" value="${errnum}" />
 					<textarea rows="15" name="textarea" class="form-control">
 $r.translate('error.errnum') ${errnum} 
-- 
GitLab