|
What this is
Other links
The source code
/*
* $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/admin/GeneralAdminTasksWebHandler.java,v 1.63 2005/01/26 18:46:51 minhnn Exp $
* $Author: minhnn $
* $Revision: 1.63 $
* $Date: 2005/01/26 18:46:51 $
*
* ====================================================================
*
* Copyright (C) 2002-2005 by MyVietnam.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* All copyright notices regarding mvnForum MUST remain intact
* in the scripts and in the outputted HTML.
* The "powered by" text/logo with a link back to
* http://www.mvnForum.com and http://www.MyVietnam.net in the
* footer of the pages MUST remain visible when the pages
* are viewed on the internet or intranet.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Support can be obtained from support forums at:
* http://www.mvnForum.com/mvnforum/index
*
* Correspondence and Marketing Questions can be sent to:
* info@MyVietnam.net
*
* @author: Minh Nguyen minhnn@MyVietnam.net
* @author: Mai Nguyen mai.nh@MyVietnam.net
* @author: Igor Manic imanic@users.sourceforge.net
*/
package com.mvnforum.admin;
import java.io.*;
import java.sql.Timestamp;
import java.util.*;
import java.util.Date;
import javax.mail.MessagingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mvnforum.*;
import com.mvnforum.auth.*;
import com.mvnforum.common.SendMailUtil;
import com.mvnforum.db.*;
import com.mvnforum.search.company.CompanyIndexer;
import com.mvnforum.search.member.MemberIndexer;
import com.mvnforum.search.post.*;
import freemarker.template.*;
import net.myvietnam.mvncore.exception.*;
import net.myvietnam.mvncore.filter.HtmlNewLineFilter;
import net.myvietnam.mvncore.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
class GeneralAdminTasksWebHandler {
private static Log log = LogFactory.getLog(GeneralAdminTasksWebHandler.class);
private OnlineUserManager onlineUserManager = OnlineUserManager.getInstance();
GeneralAdminTasksWebHandler() {
}
void prepareShowIndex(HttpServletRequest request)
throws DatabaseException, AssertionException, AuthenticationException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureIsAuthenticated();
Timestamp now = DateUtil.getCurrentGMTTimestamp();
Timestamp startTimestamp = MVNForumContextListener.getInstance().getStartTimestamp();
long upTime = now.getTime() - startTimestamp.getTime();
request.setAttribute("StartTime", onlineUser.getGMTTimestampFormat(startTimestamp));
request.setAttribute("NowTime", onlineUser.getGMTTimestampFormat(now));
request.setAttribute("UpTime", DateUtil.formatDuration(upTime));
}
void prepareTestSystem(HttpServletRequest request)
throws DatabaseException, AssertionException, AuthenticationException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
}
public void changeShowUserArea(HttpServletRequest request)
throws DatabaseException, AuthenticationException,
BadInputException, AssertionException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
String mode = ParamUtil.getParameterSafe(request, "mode", true);
if (mode.equals("on")) {
MVNForumConfig.setShouldShowUserArea(true);
} else if (mode.equals("off")) {
MVNForumConfig.setShouldShowUserArea(false);
} else {
throw new AssertionException("Not support this mode " + mode);
}
}
void prepareImportExport(HttpServletRequest request)
throws DatabaseException, AssertionException, AuthenticationException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
request.setAttribute("BackupFilesOnServer", ImportWebHandler.getBackupFilesOnServer());
}
void importXmlZip(HttpServletRequest request, HttpServletResponse response)
throws DatabaseException, AssertionException, AuthenticationException, ImportException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
ImportWebHandler.importXmlZip(request, response);
}
void exportXmlZip(HttpServletRequest request)
throws DatabaseException, AssertionException, AuthenticationException, ExportException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
ExportWebHandler.exportXmlZip(request);
}
void getExportXmlZip(HttpServletRequest request, HttpServletResponse response)
throws BadInputException, DatabaseException, AssertionException, AuthenticationException, IOException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
ExportWebHandler.getExportXmlZip(request, response);
}
void deleteExportXmlZip(HttpServletRequest request)
throws BadInputException, DatabaseException, AssertionException, AuthenticationException, IOException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
ExportWebHandler.deleteExportXmlZip(request);
//now prepare all for redirection to "/importexport"
request.setAttribute("BackupFilesOnServer", ImportWebHandler.getBackupFilesOnServer());
}
void prepareRebuildIndex(HttpServletRequest request)
throws DatabaseException, AssertionException, AuthenticationException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
int postNumDocs = PostIndexer.getNumDocs();
int memberNumDocs = MemberIndexer.getNumDocs();
int companyNumDocs = -1;
if (MVNForumConfig.getEnableCompany()) {
companyNumDocs = CompanyIndexer.getNumDocs();
}
int postCount = DAOFactory.getPostDAO().getNumberOfPosts();
int memberCount = DAOFactory.getMemberDAO().getNumberOfMembers();
int companyCount = 0;
if (MVNForumConfig.getEnableCompany()) {
companyCount = DAOFactory.getCompanyDAO().getNumberOfCompanies();
}
request.setAttribute("PostNumDocs", new Integer(postNumDocs));
request.setAttribute("PostCount", new Integer(postCount));
request.setAttribute("MemberNumDocs", new Integer(memberNumDocs));
request.setAttribute("MemberCount", new Integer(memberCount));
request.setAttribute("CompanyNumDocs", new Integer(companyNumDocs));
request.setAttribute("CompanyCount", new Integer(companyCount));
}
void rebuildIndex(HttpServletRequest request)
throws DatabaseException, AssertionException, AuthenticationException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
String target = ParamUtil.getParameter(request, "target");
if (target.equalsIgnoreCase("post")) {
if ( !RebuildPostIndexTask.isRebuilding()) {
PostIndexer.scheduleRebuildIndexTask();
}
} else if (target.equalsIgnoreCase("member")) {
MemberIndexer.scheduleRebuildIndexTask();
} else if (target.equalsIgnoreCase("company") && MVNForumConfig.getEnableCompany()) {
CompanyIndexer.scheduleRebuildIndexTask();
} else if (target.length() == 0) {
PostIndexer.scheduleRebuildIndexTask();
MemberIndexer.scheduleRebuildIndexTask();
if (MVNForumConfig.getEnableCompany()) {
CompanyIndexer.scheduleRebuildIndexTask();
}
}
}
void prepareSendMail(HttpServletRequest request)
throws BadInputException, DatabaseException,
AuthenticationException, AssertionException, ObjectNotFoundException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanSendMail();
Locale locale = I18nUtil.getLocaleInRequest(request);
boolean isPreviewing = ParamUtil.getParameterBoolean(request, "preview");
if (isPreviewing) {
ParamUtil.getParameterEmail(request, "From");//just call to check the validity of From
String to = ParamUtil.getParameter(request, "To");
String cc = ParamUtil.getParameter(request, "Cc");
String bcc = ParamUtil.getParameter(request, "Bcc");
String subject = ParamUtil.getParameter(request, "Subject", true);
String message = ParamUtil.getParameter(request, "Message", true);
int mailToSelector = ParamUtil.getParameterInt(request, "MailToSelector");
String warningMessage = "";
String previewMessage = message;
String previewSubject = subject;
if (mailToSelector == 0) { // that is, send to specific users
if ((to.length() == 0) && (cc.length() == 0) && (bcc.length() == 0)) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.please_enter_to_or_cc_or_bcc");
throw new BadInputException(localizedMessage);
//throw new BadInputException("Please enter at least To, CC or BCC.");
}
} else { // send to group of users
// Then add members coresponding to the mailToSelector
String kind;
int groupID = -1;
switch (mailToSelector) {
case 1:
kind = "all";
groupID = ParamUtil.getParameterInt(request, "group");
to = "Group: " + DAOFactory.getGroupsDAO().getGroup(groupID).getGroupName();
break;
case 2:
kind = "activated";
to = "All activated members";
break;
case 3:
kind = "nonactivated";
to = "All non-activated members";
break;
default:
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_process_mailto_selector", new Object[] {new Integer(mailToSelector)});
throw new BadInputException(localizedMessage);
//throw new BadInputException("Cannot process MailToSelector = " + mailToSelector);
}
Collection memberBeans = null;
if (kind.equals("all")) {
if (groupID == MVNForumConstant.GROUP_ID_OF_REGISTERED_MEMBERS) {
memberBeans = DAOFactory.getMemberDAO().getEnableMembers_inActivationStatus("all");
} else if (groupID <= MVNForumConstant.LAST_RESERVED_GROUP_ID) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_list_member_in_reserved_group");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot list member in a reserved (virtual) group.");
} else {
memberBeans = DAOFactory.getMemberDAO().getEnableMembers_inGroup(groupID);
}
} else {
memberBeans = DAOFactory.getMemberDAO().getEnableMembers_inActivationStatus(kind);
}
if (memberBeans.size() > 0 ) {
warningMessage = String.valueOf(memberBeans.size() + " members");
} else {
warningMessage = "No members";
}
MemberBean previewedMember = null;
for(Iterator iterator = memberBeans.iterator();iterator.hasNext();) {
previewedMember = (MemberBean)iterator.next();
previewMessage = processMailTemplate(previewedMember, message);
previewSubject = processMailTemplate(previewedMember, subject);
request.setAttribute("PreviewEmail", previewedMember.getMemberEmail());
break;
}
}// end of send to a group of users
request.setAttribute("PreviewTo", to);
request.setAttribute("PreviewCc", cc);
request.setAttribute("PreviewBcc", bcc);
request.setAttribute("PreviewSubject", previewSubject);
request.setAttribute("PreviewMessage", HtmlNewLineFilter.filter(previewMessage));
request.setAttribute("WarningMessage", warningMessage);
}
Collection groupBeans = DAOFactory.getGroupsDAO().getGroups();
for(Iterator iterator = groupBeans.iterator(); iterator.hasNext();) {
GroupsBean groupBean = (GroupsBean)iterator.next();
if (groupBean.getGroupID() == MVNForumConstant.GROUP_ID_OF_GUEST) {
iterator.remove();
break;
}
}
request.setAttribute("GroupBeans", groupBeans);
}
void sendMail(HttpServletRequest request)
throws BadInputException, MessagingException, DatabaseException,
AuthenticationException, AssertionException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanSendMail();
Locale locale = I18nUtil.getLocaleInRequest(request);
String from = ParamUtil.getParameterEmail(request, "From");
String to = ParamUtil.getParameter(request, "To");
String cc = ParamUtil.getParameter(request, "Cc");
String bcc = ParamUtil.getParameter(request, "Bcc");
String subject = ParamUtil.getParameter(request, "Subject", true);
String message = ParamUtil.getParameter(request, "Message", true);
int mailToSelector = ParamUtil.getParameterInt(request, "MailToSelector");
Collection mailMessageStructs = new ArrayList();
if (mailToSelector == 0) { // that is, send to specific users
if ((to.length() == 0) && (cc.length() == 0) && (bcc.length() == 0)) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.please_enter_to_or_cc_or_bcc");
throw new BadInputException(localizedMessage);
//throw new BadInputException("Please enter at least To, CC or BCC.");
}
MailMessageStruct mailMessageStruct = new MailMessageStruct();
mailMessageStruct.setFrom(from);
mailMessageStruct.setTo(to);
mailMessageStruct.setCc(cc);
mailMessageStruct.setBcc(bcc);
mailMessageStruct.setSubject(subject);
mailMessageStruct.setMessage(message);
mailMessageStructs.add(mailMessageStruct);
} else { // send to group of users
// now add emails in the To, CC, BCC. Please note that we ONLY use the method setTo
String[] emailArray = MailUtil.getEmails(to, cc, bcc);
for (int i = 0; i < emailArray.length; i++) {
MailMessageStruct mailMessage = new MailMessageStruct();
mailMessage.setFrom(from);
mailMessage.setTo(emailArray[i]);
mailMessage.setSubject(subject);
mailMessage.setMessage(message);
mailMessageStructs.add(mailMessage);
}
// Then add members coresponding to the mailToSelector
String kind;
int groupID = -1;
switch (mailToSelector) {
case 1:
kind = "all";
groupID = ParamUtil.getParameterInt(request, "group");
break;
case 2:
kind = "activated";
break;
case 3:
kind = "nonactivated";
break;
default:
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_process_mailto_selector", new Object[] {new Integer(mailToSelector)});
throw new BadInputException(localizedMessage);
//throw new BadInputException("Cannot process MailToSelector = " + mailToSelector);
}
Collection memberBeans = null;
if (kind.equals("all")) {
if (groupID == MVNForumConstant.GROUP_ID_OF_REGISTERED_MEMBERS) {
memberBeans = DAOFactory.getMemberDAO().getEnableMembers_inActivationStatus("all");
} else if (groupID <= MVNForumConstant.LAST_RESERVED_GROUP_ID) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_list_member_in_reserved_group");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot list member in a reserved (virtual) group.");
} else {
memberBeans = DAOFactory.getMemberDAO().getEnableMembers_inGroup(groupID);
}
} else {
memberBeans = DAOFactory.getMemberDAO().getEnableMembers_inActivationStatus(kind);
}
for (Iterator countIterator = memberBeans.iterator(); countIterator.hasNext(); ) {
MemberBean memberBean = (MemberBean) countIterator.next();
MailMessageStruct mailMessage = new MailMessageStruct();
mailMessage.setFrom(from);
String memberEmail = memberBean.getMemberEmail();
String processedSubject = processMailTemplate(memberBean, subject);
String processedMessage = processMailTemplate(memberBean, message);
mailMessage.setTo(memberEmail);
mailMessage.setSubject(processedSubject);
mailMessage.setMessage(processedMessage);
mailMessageStructs.add(mailMessage);
} //for
}
try {
MailUtil.sendMail(mailMessageStructs);
} catch (UnsupportedEncodingException e) {
log.error("Cannot support encoding", e);
}
request.setAttribute("MailMessageStructs", mailMessageStructs);
}
void sendActivateMailToAll(HttpServletRequest request)
throws BadInputException, MessagingException, DatabaseException,
AuthenticationException, AssertionException, ObjectNotFoundException, IOException, TemplateException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanSendMail();//@todo: check if this is the correct permission
//@todo: review this constant parameter "nonactivated"
Collection memberBeans = DAOFactory.getMemberDAO().getEnableMembers_inActivationStatus("nonactivated");
Collection mailMessageStructs = new ArrayList();
String serverName = ParamUtil.getServerPath();//ParamUtil.getServer2(request);
for (Iterator countIterator = memberBeans.iterator(); countIterator.hasNext(); ) {
MemberBean memberBean = (MemberBean) countIterator.next();
MailMessageStruct mailMessage = SendMailUtil.getActivationCodeEmail(memberBean.getMemberID(), serverName);
mailMessageStructs.add(mailMessage);
}//for
try {
log.debug("About to send activate mail to all non activated members, total = " + mailMessageStructs.size());
MailUtil.sendMail(mailMessageStructs);
} catch (UnsupportedEncodingException e) {
log.error("Cannot support encoding", e);
}
request.setAttribute("MailMessageStructs", mailMessageStructs);
}
/**
*Process mail with a template from User
*/
private String processMailTemplate(MemberBean memberBean, String message) {
try {
Map root = new HashMap();
StringWriter messageWriter = new StringWriter(256);
//Just assume some variables are needed to be replaced
root.put("memberID", new Integer(memberBean.getMemberID()));
root.put("memberName", memberBean.getMemberName());
root.put("memberFirstname", memberBean.getMemberFirstname());
root.put("memberLastname", memberBean.getMemberLastname());
root.put("memberEmail", memberBean.getMemberEmail());
StringReader stringReader = new StringReader(message);
Configuration cfg = MVNForumConfig.getFreeMarkerConfiguration();
Template messageTemplate = new Template("", stringReader, cfg, "");
messageTemplate.process(root, messageWriter);
message = messageWriter.toString();
} catch (IOException ioe) {
log.error("Cannot process mail template", ioe);
//if we have problem while processing template, we will return orginal message
} catch (TemplateException te) {
log.error("Cannot process mail template", te);
//if we have problem while processing template, we will return orginal message
}
//log.debug("processMailTemplate return = " + message);
return message;
}
public void prepareViewLogSystem(HttpServletRequest request)
throws FileNotFoundException, DatabaseException,
BadInputException, AuthenticationException, AssertionException, IOException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
// just for checking the valid value of "linecount"
ParamUtil.getParameterUnsignedInt(request, "linecount", 25);
String shortName = ParamUtil.getParameterSafe(request, "filename", false);
String logDir = MVNForumConfig.getLogDir();
String logFileName = "";
if (shortName.length() == 0) {
logFileName = MVNForumConfig.getLogFile();
} else {
File logDirFile = new File(logDir);
if (!logDirFile.exists()) {
throw new FileNotFoundException("Cannot find the log dir: " + logDirFile.getAbsolutePath());
}
if (!logDirFile.isDirectory()) {
throw new IOException("The log dir is not a directory: " + logDirFile.getAbsolutePath());
}
FileUtil.checkGoodFileName(shortName);
logFileName = logDir + File.separatorChar + shortName;
}
File logFile = new File(logFileName);
if (!logFile.exists()) {
throw new FileNotFoundException("Cannot find the log file " + logFile.getAbsolutePath());
}
long size = logFile.length();
String humanSize = FileUtil.getHumanSize(size);
request.setAttribute("FileName", shortName);
request.setAttribute("LogDir", logDir);
request.setAttribute("LogFileName", logFileName);
request.setAttribute("LogFileSize", String.valueOf(size));
request.setAttribute("LogFileHumanSize", humanSize);
}
public void prepareLogFrame(HttpServletRequest request)
throws DatabaseException, AuthenticationException, IOException,
FileNotFoundException, AssertionException, BadInputException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
String logFileName = ParamUtil.getParameterSafe(request, "filename", false);
if (logFileName.length() == 0) {
logFileName = MVNForumConfig.getLogFile();
} else {
String logDir = MVNForumConfig.getLogDir();
File logDirFile = new File(logDir);
if (!logDirFile.exists()) {
throw new FileNotFoundException("Cannot find the log dir: " + logDirFile.getAbsolutePath());
}
if (!logDirFile.isDirectory()) {
throw new IOException("The log dir is not a directory: " + logDirFile.getAbsolutePath());
}
FileUtil.checkGoodFileName(logFileName);
logFileName = logDir + File.separatorChar + logFileName;
}
File logFile = new File(logFileName);
if (!logFile.exists()) {
throw new FileNotFoundException("Cannot find the log file: " + logFile.getAbsolutePath());
}
if (!logFile.canRead()) {
throw new IOException("Cannot read the log file: " + logFile.getAbsolutePath());
}
int lineCount = ParamUtil.getParameterUnsignedInt(request, "linecount", 25); // 25, 50 100 200 400 800
if (lineCount > 5000) {
lineCount = 5000;
}
int offset = 0;
if (offset < 0) offset = 0;
String[] contentLog = FileUtil.getLastLines(logFile, lineCount);
request.setAttribute("Offset", new Integer(offset));
request.setAttribute("ContentLog", contentLog);
}
public void backupSystemLog(HttpServletRequest request)
throws DatabaseException, AuthenticationException,
IOException, FileNotFoundException, AssertionException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
boolean empty = ParamUtil.getParameterBoolean(request, "empty");
String logFileName = MVNForumConfig.getLogFile();
String logDir = MVNForumConfig.getLogDir();
File logDirFile = new File(logDir);
if (!logDirFile.exists()) {
throw new FileNotFoundException("Cannot find the log dir: " + logDirFile.getAbsolutePath());
}
if (!logDirFile.isDirectory()) {
throw new IOException("The log dir is not a directory: " + logDirFile.getAbsolutePath());
}
String pattern = "yyyy-MM-dd_HH-mm-ss";
String newFileName = logDir + File.separator + "mvnforumlog_" + DateUtil.format(new Date(), pattern) + ".log";
File newFile = new File(newFileName);
// We don't have to check file here, we check it in FileUtil.copyFile
FileUtil.copyFile(logFileName, newFileName, false);
if (empty) {
FileUtil.emptyFile(logFileName);
}
long size = newFile.length();
String humanSize = FileUtil.getHumanSize(size);
request.setAttribute("LogFileName", newFile.getAbsolutePath());
request.setAttribute("LogFileSize", String.valueOf(size));
request.setAttribute("LogFileHumanSize", humanSize);
}
public void prepareListLogFiles(HttpServletRequest request)
throws DatabaseException, AuthenticationException,
IOException, FileNotFoundException, AssertionException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
String logDir = MVNForumConfig.getLogDir();
File logDirFile = new File(logDir);
if (!logDirFile.exists()) {
throw new FileNotFoundException("Cannot find the log dir: " + logDirFile.getAbsolutePath());
}
if (!logDirFile.isDirectory()) {
throw new IOException("The log dir is not a directory: " + logDirFile.getAbsolutePath());
}
File[] files = logDirFile.listFiles();
File currentLogFile = new File(MVNForumConfig.getLogFile());
request.setAttribute("LogFiles", files);
request.setAttribute("CurrentLogFile", currentLogFile);
}
public void downloadLogFile(HttpServletRequest request, HttpServletResponse response)
throws DatabaseException, AuthenticationException, AssertionException, BadInputException, IOException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
Locale locale = I18nUtil.getLocaleInRequest(request);
// This method require fileName is not empty
String fileName = ParamUtil.getParameterSafe(request, "filename", true);// must check empty here
FileUtil.checkGoodFileName(fileName);
String logDir = MVNForumConfig.getLogDir();
File logDirFile = new File(logDir);
if (!logDirFile.exists()) {
throw new FileNotFoundException("Cannot find the log dir: " + logDirFile.getAbsolutePath());
}
if (!logDirFile.isDirectory()) {
throw new IOException("The log dir is not a directory: " + logDirFile.getAbsolutePath());
}
File file = new File(MVNForumConfig.getLogDir() + File.separatorChar + fileName);
if ((!file.exists()) || (!file.isFile())) {
log.error("Can't find a file " + file + " to be downloaded (or maybe it's directory).");
String localizedMessage = MVNForumResourceBundle.getString(locale, "java.io.IOException.not_exist_or_not_file_to_be_downloaded");
throw new IOException(localizedMessage + " " + file);
//throw new IOException("Can't find a file to be downloaded (or maybe it's directory).");
}
BufferedOutputStream output = null;
try {
response.setContentType("application/octet-stream");
response.setHeader("Location", fileName);
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
int length = (int) file.length();
if (length > 0) {
response.setContentLength(length);
}
output = new BufferedOutputStream(response.getOutputStream(), 1024 /* buffer size */);
response.setBufferSize(1024);
//when we start download, we cannot redirect or raise exceptions
FileUtil.popFile(file, output);
output.flush();
} catch (FileNotFoundException e) {
log.error("Can't find the such log file on server " + fileName);
} catch (IOException e) {
log.error("Error while trying to send backup file from server (" + fileName + ").", e);
} finally {
if (output != null) {
try {
output.close();
} catch (IOException e) { }
}
}
}
public void deleteLogFile(HttpServletRequest request)
throws DatabaseException, AuthenticationException, AssertionException, BadInputException, IOException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureCanAdminSystem();
String fileName = ParamUtil.getParameterSafe(request, "filename", true);
FileUtil.checkGoodFileName(fileName);
String logDir = MVNForumConfig.getLogDir();
File logDirFile = new File(logDir);
if (!logDirFile.exists()) {
throw new FileNotFoundException("Cannot find the log dir: " + logDirFile.getAbsolutePath());
}
if (!logDirFile.isDirectory()) {
throw new IOException("The log dir is not a directory: " + logDirFile.getAbsolutePath());
}
fileName = logDir + File.separator + fileName;
String logFileName = MVNForumConfig.getLogFile();
File currentLogFile = new File(logFileName);
if (currentLogFile.equals(new File(fileName))) {
throw new AssertionException("Cannot delete the current log file: " + fileName);
}
FileUtil.deleteFile(fileName);
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.