package cn.jcenterhome.web.action.admin;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.config.ModuleConfig;
import cn.jcenterhome.util.Common;
import cn.jcenterhome.util.JavaCenterHome;
import cn.jcenterhome.util.Serializer;
import cn.jcenterhome.web.action.BaseAction;
public class IndexAction extends BaseAction {
@SuppressWarnings("unchecked")
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
Map<String, Map<String, Integer>> menus = (Map<String, Map<String, Integer>>) request
.getAttribute("menus");
if (!Common.empty(menus.get("menu0").get("config"))) {
String jchRoot = JavaCenterHome.jchRoot;
File installFile = new File(jchRoot + "install/index.jsp");
File lockFile = new File(jchRoot + "data/install.lock");
if (installFile.exists() && !lockFile.exists()) {
try {
lockFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
Map<String, Object> statistics = getStatistics(request);
HttpSession session = request.getSession(false);
ModuleConfig ac = (ModuleConfig) session.getServletContext().getAttribute(Globals.MODULE_KEY);
String fileUpload = ac.getControllerConfig().getMaxFileSize();
long size = (Long) statistics.get("dbsize");
String attachSize = request.getParameter("attachsize");
if (attachSize == null) {
attachSize = "<a href=\"admincp.jsp?attachsize\">------</a>";
} else {
attachSize = dataBaseService.findFirst("SELECT SUM(size) as totalsize FROM "
+ JavaCenterHome.getTableName("pic"), 1);
attachSize = Common.empty(attachSize) ? "unknown" : Common.formatSize(Long
.parseLong(attachSize));
}
request.setAttribute("os", System.getProperty("os.name") + " / JDK v" + statistics.get("jdk"));
request.setAttribute("serverInfo", servlet.getServletContext().getServerInfo());
request.setAttribute("fileupload",
Common.empty(fileUpload) ? "<font color=\"red\">Prohibition</font>" : fileUpload);
request.setAttribute("dbsize", size > 0 ? Common.formatSize(size) : "unknown");
request.setAttribute("attachsize", attachSize);
request.setAttribute("statistics", statistics);
request.setAttribute("my_checkupdate", Common.myCheckUpdate(request, response));
}
return mapping.findForward("index");
}
@SuppressWarnings("unchecked")
private Map<String, Object> getStatistics(HttpServletRequest request) {
Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig");
Map<String, String> jchConfig = JavaCenterHome.jchConfig;
long dbSize = dataBaseService.findTableSize("SHOW TABLE STATUS LIKE '"
+ jchConfig.get("tablePre") + "%'");
String siteKey = Common.trim((String) sConfig.get("sitekey"));
if (Common.empty(siteKey)) {
siteKey = mkSiteKey(request);
dataBaseService.executeUpdate("REPLACE INTO " + JavaCenterHome.getTableName("config")
+ " (var, datavalue) VALUES ('sitekey', '" + siteKey + "')");
try {
cacheService.config_cache();
} catch (IOException e) {
e.printStackTrace();
}
}
Map<String, Object> statistics = new HashMap<String, Object>();
statistics.put("sitekey", siteKey + 1);
statistics.put("version", JavaCenterHome.JCH_VERSION);
statistics.put("release", JavaCenterHome.JCH_RELEASE);
statistics.put("jdk", System.getProperty("java.version"));
statistics.put("mysql", dataBaseService.showVersion());
statistics.put("dbsize", dbSize);
statistics.put("charset", jchConfig.get("charset"));
statistics.put("sitename", sConfig.get("sitename").toString().replaceAll("(?s)[\'\"\\s]", ""));
statistics.put("feednum", Common.getCount("feed", null, null));
statistics.put("blognum", Common.getCount("blog", null, null));
statistics.put("albumnum", Common.getCount("pic", null, null));
statistics.put("threadnum", Common.getCount("thread", null, null));
statistics.put("sharenum", Common.getCount("share", null, null));
statistics.put("commentnum", Common.getCount("comment", null, null));
statistics.put("myappnum", Common.getCount("myapp", null, null));
statistics.put("spacenum", Common.getCount("space", null, null));
String charset = "gbk";
statistics.put("update", Common.urlEncode(Serializer.serialize(statistics, charset), charset) + "&h=" + Common.md5(request.getHeader("User-Agent") + "|" + Common.implode(statistics, "|")).substring(8, 16));
return statistics;
}
@SuppressWarnings("unchecked")
private String mkSiteKey(HttpServletRequest request) {
Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal");
Map<String, String> jchConfig = JavaCenterHome.jchConfig;
StringBuffer siteStr = new StringBuffer();
siteStr.append(request.getLocalAddr());
siteStr.append(request.getHeader("User-Agent"));
siteStr.append(jchConfig.get("dbHost"));
siteStr.append(jchConfig.get("dbUser"));
siteStr.append(jchConfig.get("dbPw"));
siteStr.append(jchConfig.get("dbName"));
siteStr.append(sGlobal.get("timestamp").toString().substring(0, 6));
return Common.md5(siteStr.toString()).substring(8, 14) + Common.getRandStr(10, false);
}
}