FeedbackRestController.java
package sk.iway.iwcm.admin;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.util.ResponseUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.SpamProtection;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.admin.upload.AdminUploadServlet;
import sk.iway.iwcm.helpers.MailHelper;
import sk.iway.iwcm.io.IwcmFile;
import sk.iway.iwcm.users.UsersDB;
/**
* 54177 - Zalozky - odosle email so spatnou vazbou k WebJET CMS
*/
@RestController
@PreAuthorize("@WebjetSecurityService.isAdmin()")
public class FeedbackRestController {
private static String textKey = "data[text]";
private static String filesKeys = "data[fileKeys][]";
private static String isAnonymousKey = "data[isAnonymous]";
@RequestMapping(path={"/admin/rest/feedback"})
public String sendFeedback(HttpServletRequest request) {
String recipient = Constants.getString("problemReportEmail");
//Create mail helper
MailHelper mailHelper = new MailHelper()
.setSubject("Spätná väzba k WebJET CMS - " + Tools.getServerName(request))
.setToEmail(recipient);
//Get params from request
Map<String, String[]> params = request.getParameterMap();
//Handle text
StringBuilder feedbackText = new StringBuilder();
feedbackText.append("<p>")
.append(Tools.replace(ResponseUtils.filter(params.get(textKey)[0]), "\n", "<br/>\n"))
.append("</p>\n<p>");
//Handle isAnonymous
if(!params.get(isAnonymousKey)[0].equals("true")) {
Identity user = UsersDB.getCurrentUser(request);
//Use user name and email
mailHelper.setFromName(user.getFullName());
mailHelper.setFromEmail(user.getEmail());
//Add info about sender (user) to feedback text
feedbackText.append("Login: " + ResponseUtils.filter(user.getLogin()) + "<br/>");
feedbackText.append("Name: " + ResponseUtils.filter(user.getFullName()) + "<br/>");
feedbackText.append("Email: " + ResponseUtils.filter(user.getEmail()) + "<br/>");
feedbackText.append("User-Agent: " + ResponseUtils.filter(request.getHeader("User-Agent")) + "<br/>");
} else {
//Set anonymous
mailHelper.setFromName("Anonymous");
mailHelper.setFromEmail(getFirstEmail(recipient));
}
//Add more info
feedbackText.append("Domain: ").append(ResponseUtils.filter(Tools.getServerName(request))).append("<br/>");
feedbackText.append("IP: ").append(ResponseUtils.filter(Tools.getRemoteIP(request))).append("<br/>");
feedbackText.append("Date: ").append(ResponseUtils.filter(Tools.formatDateTimeSeconds(Tools.getNow()))).append("<br/>");
feedbackText.append("\n</p>");
//Set feddback text to email
mailHelper.setMessage(feedbackText.toString());
//Handle files
if(params.get(filesKeys) != null) {
for(String fileKey : params.get(filesKeys)) {
//Get file path
String filePath = AdminUploadServlet.getTempFilePath(fileKey);
IwcmFile file = new IwcmFile(filePath);
//Add file path to email
mailHelper.addAttachment(file);
}
}
//Chceck
if(SpamProtection.canPost("form", feedbackText.toString(), request) && mailHelper.send()) {
//Delete temporal files
if(params.get(filesKeys) != null) {
for(String fileKey : params.get(filesKeys)) {
AdminUploadServlet.deleteTempFile(fileKey);
}
}
} else {
throw new IllegalArgumentException("Sending mail failed.");
}
return "OK";
}
/**
* Vrati prvy email so zoznamu (email1@domena.sk,email2@domena.sk vrati email1@domena.sk)
* @param emails
* @return
*/
private static String getFirstEmail(String emails)
{
if (Tools.isEmpty(emails)) return "";
String[] emailsArr = Tools.getTokens(emails, ",", true);
if (emailsArr.length>0) return emailsArr[0];
return "";
}
}