/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.module.sync.web.controller; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codehaus.jackson.map.ObjectMapper; import org.openmrs.GlobalProperty; import org.openmrs.api.APIException; import org.openmrs.api.AdministrationService; import org.openmrs.api.context.Context; import org.openmrs.messagesource.MessageSourceService; import org.openmrs.module.sync.SyncMailUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; /** * Controller for viewing, configuring, and testing server email settings */ @Controller public class EmailConfigController { protected final Log log = LogFactory.getLog(getClass()); @Autowired @Qualifier(value="adminService") AdministrationService administrationService; @RequestMapping("/module/sync/emailConfig") public void view(ModelMap model) { if (Context.isAuthenticated()) { Map<String, String> settings = SyncMailUtil.getCurrentlyConfiguredSettings(); model.addAttribute("settings", settings); } } @RequestMapping("/module/sync/saveEmailConfiguration") public String saveSettings(HttpServletRequest request) { if (Context.isAuthenticated()) { for (String s : SyncMailUtil.getMailGlobalProperties()) { GlobalProperty p = administrationService.getGlobalPropertyObject(s); String propertyValue = ServletRequestUtils.getStringParameter(request, s, ""); p.setPropertyValue(propertyValue); administrationService.saveGlobalProperty(p); } } return "redirect:/module/sync/emailConfig.form"; } @RequestMapping("/module/sync/validateEmailSettings") public void validateSettings(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception { Map<String, String> settings = new HashMap<String, String>(); for (String s : SyncMailUtil.getMailGlobalProperties()) { String propertyValue = ServletRequestUtils.getStringParameter(request, s, ""); settings.put(s, propertyValue); } String validationMessage = SyncMailUtil.validateSettings(settings); response.setContentType("text/json"); response.getWriter().write(toJson(validationMessage)); } @RequestMapping("/module/sync/sendTestEmail") public void sendTestEmail(@RequestParam("recipients") String recipients, @RequestParam("subject") String subject, @RequestParam("emailBody") String emailBody, HttpServletRequest request, HttpServletResponse response) throws Exception { MessageSourceService mss = Context.getMessageSourceService(); String results = mss.getMessage("sync.emailConfig.messageSendSuccessful"); try { String serverName = request.getServerName(); SyncMailUtil.sendMessage(recipients, serverName + ": " + subject, emailBody); } catch (Exception e) { results = mss.getMessage("sync.emailConfig.messageSendFailed") + ": " + e.getMessage(); } response.setContentType("text/json"); response.getWriter().write(toJson(results)); } /** * Utility method to return the json representation of an object */ private static String toJson(Object obj) { ObjectMapper mapper = new ObjectMapper(); StringWriter sw = new StringWriter(); try { mapper.writeValue(sw, obj); } catch (Exception e) { throw new APIException("Error converting to JSON", e); } return sw.toString(); } }