/*
* Copyright (c) 2008-2016 Computer Network Information Center (CNIC), Chinese Academy of Sciences.
*
* This file is part of Duckling project.
*
* Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package cn.vlabs.umt.ui.admin;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.vlabs.umt.common.mail.EmailConfig;
import cn.vlabs.umt.common.mail.EmailTemplate;
import cn.vlabs.umt.common.mail.MessageFormatter;
import cn.vlabs.umt.common.mail.TemplateNotFound;
import cn.vlabs.umt.common.util.Config;
import cn.vlabs.umt.common.util.PropertyWriter;
@Controller
@RequestMapping("/admin/editTemplate.do")
/**
* TODO Wait to fix BUG
*
*/
public class EditTemplateController {
private static final Logger log = Logger.getLogger(EditTemplateController.class);
@Autowired
private Config config;
@RequestMapping(params="act=approve")
public String approve(HttpServletRequest request, HttpServletResponse response) {
EmailTemplate email = getEmailTemplate(request, EmailTemplate.TARGET_APPROVE);
request.setAttribute("template", email);
return "/admin/emailtemplate";
}
@RequestMapping(params="act=deny")
public String deny(HttpServletRequest request, HttpServletResponse response) {
EmailTemplate email = getEmailTemplate(request, EmailTemplate.TARGET_DENY);
request.setAttribute("template", email);
return "/admin/emailtemplate";
}
private EmailConfig getEmailConfig() {
EmailConfig emailConfig = new EmailConfig();
String smtp = config.getStringProp(EmailTemplate.CONFIG_SMTP, "");
String email = config.getStringProp(EmailTemplate.CONFIG_EMAIL, "");
String pass = config.getStringProp(EmailTemplate.CONFIG_PASSWORD, "");
emailConfig.setEmail(email);
emailConfig.setSmtp(smtp);
emailConfig.setPassword(pass);
return emailConfig;
}
private EmailTemplate getEmailTemplate(HttpServletRequest request, String templateName) {
EmailTemplate email = new EmailTemplate();
email.setTarget(templateName);
String templatePath =config.getStringProp(EmailTemplate.TEMPLATE_DIR, "WEB-INF/message/");
String realPath = request.getServletContext().getRealPath(templatePath);
MessageFormatter formatter = new MessageFormatter(realPath);
String content = "";
String title = "";
try {
content = formatter.getContent(Locale.getDefault(), templateName, null);
title = formatter.getTitle(Locale.getDefault(), templateName, null);
} catch (TemplateNotFound e) {
log.error(e.getLocalizedMessage());
}
email.setContent(content);
email.setTitle(title);
request.setAttribute("act",request.getParameter("act"));
return email;
}
@RequestMapping(params="act=password")
public String password(HttpServletRequest request, HttpServletResponse response) {
EmailTemplate email = getEmailTemplate(request, EmailTemplate.TARGET_PASSWORD);
request.setAttribute("template", email);
return "/admin/emailtemplate";
}
@RequestMapping(params="act=register")
public String register(HttpServletRequest request, HttpServletResponse response) {
EmailTemplate email = getEmailTemplate(request, EmailTemplate.TARGET_REGISTER);
request.setAttribute("template", email);
return "/admin/emailtemplate";
}
@RequestMapping(params="act=saveConfig")
public String saveConfig(HttpServletRequest request, HttpServletResponse response) {
boolean succ = true;
try {
String file = request.getServletContext().getRealPath("/")
+ "WEB-INF/conf/umt.properties";
PropertyWriter pw = new PropertyWriter();
pw.load(new FileInputStream(file));
pw.setProperty(EmailTemplate.CONFIG_EMAIL, request.getParameter("email"));
pw.setProperty(EmailTemplate.CONFIG_PASSWORD, request.getParameter("password"));
pw.setProperty(EmailTemplate.CONFIG_SMTP, request.getParameter("smtp"));
pw.store(new FileOutputStream(file));
} catch (Exception e) {
succ = false;
log.error(e.getLocalizedMessage());
}
EmailConfig emailConfig = new EmailConfig();
emailConfig.setEmail(request.getParameter("email"));
emailConfig.setPassword(request.getParameter("password"));
emailConfig.setSmtp(request.getParameter("smtp"));
request.setAttribute("config", emailConfig);
request.setAttribute("tabtype", "parameter");
if(succ) {
request.setAttribute("succ", "emailtemp.update.success");
} else {
request.setAttribute("succ", "emailtemp.update.error");
}
request.setAttribute("act", request.getParameter("reAct"));
return "/admin/emailtemplate";
}
@RequestMapping(params="act=saveTemplate")
public String saveTemplate(HttpServletRequest request, HttpServletResponse response) {
StringBuffer sb = new StringBuffer();
sb.append(EmailTemplate.SIGN_TITLE).append(request.getParameter("title"));
sb.append(EmailTemplate.SIGN_CONTENT).append(request.getParameter("content"));
String templateFileDir = request.getSession().getServletContext().getRealPath("/");
boolean succ = true;
try {
String path = config.getStringProp(EmailTemplate.TEMPLATE_DIR, "WEB-INF/message/");
String localeddir = path + "/" + Locale.getDefault().toString();
File f = new File(templateFileDir + localeddir);
if (!f.exists()){
localeddir = path + "/zh_CN";
}
templateFileDir += localeddir + "/" + request.getParameter("target");
Writer writer = new OutputStreamWriter(new FileOutputStream(templateFileDir), "UTF-8");
writer.write(sb.toString());
writer.flush();
writer.close();
}catch (Exception e) {
succ = false;
log.error(e.getLocalizedMessage());
}
EmailTemplate email = getEmailTemplate(request, request.getParameter("target"));
request.setAttribute("template", email);
if(succ) {
request.setAttribute("succ", "emailtempt.update.success");
} else {
request.setAttribute("succ", "emailtempt.update.error");
}
request.setAttribute("act", request.getParameter("reAct"));
return "/admin/emailtemplate";
}
@RequestMapping(params="act=setParameter")
public String setParameter(HttpServletRequest request, HttpServletResponse response) {
EmailConfig emailConfig = getEmailConfig();
request.setAttribute("config", emailConfig);
request.setAttribute("tabtype", "parameter");
request.setAttribute("act",request.getParameter("act"));
return "/admin/emailtemplate";
}
}