package edu.sjtu.infosec.ismp.manager.RAM.web.actions;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.actions.DispatchAction;
import org.infosec.ismp.manager.rmi.comm.model.SystemModelInfo;
import org.infosec.ismp.manager.rmi.lm.pfLog.model.SystemLog;
import edu.sjtu.infosec.ismp.manager.LM.pfLog.service.SystemLogService;
import edu.sjtu.infosec.ismp.manager.RAM.model.AsseInfoProj;
import edu.sjtu.infosec.ismp.manager.RAM.service.DicAsseStatService;
import edu.sjtu.infosec.ismp.manager.RAM.service.DicCpKindService;
import edu.sjtu.infosec.ismp.manager.RAM.service.DicSecuLeveService;
import edu.sjtu.infosec.ismp.manager.RAM.service.ProjectService;
import edu.sjtu.infosec.ismp.manager.RAM.web.form.AsseInfoProjForm;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.service.DomainService;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
import edu.sjtu.infosec.ismp.security.Role;
/**
* web层 项目管理Action.
*/
public class ProjectAction extends DispatchAction{
private static Logger logger = Logger.getLogger(ProjectAction.class);
//测评项目服务访问接口
private ProjectService projectService;
private DomainService domainService;
private DicSecuLeveService dicSecuLeveService;
private DicAsseStatService dicAsseStatService;
private DicCpKindService dicCpKindService;
private SystemLogService logService;
public void setLogService(SystemLogService logService) {
this.logService = logService;
}
public void setProjectService(ProjectService projectService) {
this.projectService = projectService;
}
public void setDomainService(DomainService domainService) {
this.domainService = domainService;
}
public void setDicSecuLeveService(DicSecuLeveService dicSecuLeveService) {
this.dicSecuLeveService = dicSecuLeveService;
}
public void setDicAsseStatService(DicAsseStatService dicAsseStatService) {
this.dicAsseStatService = dicAsseStatService;
}
public void setDicCpKindService(DicCpKindService dicCpKindService) {
this.dicCpKindService = dicCpKindService;
}
/**
* 往session中加载本次测评项目信息
*/
private AsseInfoProj loadAsseInfoproj(HttpServletRequest request) {
AsseInfoProj asseInfoProj = null;
if(request.getSession().getAttribute("asseInfoProj") == null) {
String projId = request.getParameter("projId");
if(projId != null && !"".equals(projId.trim())) {
Integer projCode = new Integer(projId);
asseInfoProj = projectService.find(projCode);
}
request.getSession().setAttribute("asseInfoProj", asseInfoProj);
} else {
asseInfoProj = (AsseInfoProj) request.getSession().getAttribute("asseInfoProj");
}
return asseInfoProj;
}
// 测评项目分页
public ActionForward showProject(ActionMapping mapping,ActionForm form,HttpServletRequest request,
HttpServletResponse response) throws Exception{
int currPage = 1;
Double totalPage = 0d;
Long totalNum = 0l;
int startResult = 0;
int maxResult = 5;
Domain domain = null;
try{
String isAll = (request.getParameter("isAll")==null)?"0":request.getParameter("isAll");
System.out.println("---------------isAll:----------"+isAll);
OperatorDetails user = SecurityUserHolder.getCurrentUser();
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null){
userDomainList = user.getDomainList();
}else{
userDomainList = null;
}
//分页定义的相关的基本信息
String cp = (request.getParameter("currPage")==null)?"1":request.getParameter("currPage");
if(cp!=null && !cp.equals("")){
currPage = Integer.parseInt(cp);
}
startResult = (currPage-1)*maxResult;
if(startResult < 0){
startResult = 0;
}
AsseInfoProjForm show=(AsseInfoProjForm)form;
request.setAttribute("offcPers", show.getOffcPers());
request.setAttribute("assePers", show.getAssePers());
request.setAttribute("secuLeve1", show.getSecuLeve());
request.setAttribute("asseBeginTime", show.getAsseBeginTime());
request.setAttribute("asseEndTime", show.getAsseEndTime());
//数据相关的基本信息
List<AsseInfoProj> projList = new ArrayList<AsseInfoProj>();
domain = domainService.findById(show.getOffcPers());
if(isAll.equals("1")){
request.setAttribute("isAll", isAll);
projList = projectService.findAll(show.getAsseBeginTime(), show.getAsseEndTime(), startResult, maxResult,show.getOffcPers(),domain,show.getAssePers(),show.getSecuLeve());
}else{
projList = projectService.findAllByDomain(userDomainList, null, null, startResult, maxResult,show.getOffcPers(),domain,show.getAssePers(),show.getSecuLeve());
}
//分页定义的相关的基本信息
if(projList!=null && projList.size()>=0){
if(isAll.equals("1")){
totalNum=projectService.findAllNum(null,null,show.getOffcPers(),domain,show.getAssePers(),show.getSecuLeve());
}else{
totalNum = projectService.findAllNumByDomain(userDomainList, null, null,show.getOffcPers(),show.getAssePers(),show.getSecuLeve());
}
}
totalPage = Math.ceil((double)totalNum/maxResult);
if(totalPage>0 && currPage<=0){
currPage = 1;
}
request.setAttribute("udl", userDomainList);
request.setAttribute("projList", projList);
List secuLeve=dicSecuLeveService.findAll();
request.setAttribute("secuLeve", secuLeve);
List dicAsseStatList =dicAsseStatService.listDicAsseStat(null);
request.setAttribute("dicAsseStatList", dicAsseStatList);
}catch(Exception e){
logger.debug("风险评估-首页访问出错啦!");
e.printStackTrace();
}
request.setAttribute("currPage", currPage);
request.setAttribute("totalPage", totalPage.intValue());
return mapping.findForward("show");
}
/**
* 新建项目前
* 用Token来防止后退重复提交
*/
public ActionForward preBuildNewProject(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
String again = request.getParameter("again");
if("y".equalsIgnoreCase(again)) {
request.getSession().removeAttribute("asseInfoProj");
}
OperatorDetails user = SecurityUserHolder.getCurrentUser();
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null){
userDomainList = user.getDomainList();
}else{
userDomainList = null;
}
request.setAttribute("udl", userDomainList);
List dicCpKindList=dicCpKindService.listDicCpKind(null);
request.setAttribute("dicCpKindList", dicCpKindList);
return mapping.findForward("newProject");
}
/**
* 保存新建项目信息
* 用Token来检验是否重复提交
*/
public ActionForward saveNewProject(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
AsseInfoProj asseInfoProj = new AsseInfoProj();
if(isTokenValid(request)) {
resetToken(request);
}
try{
loadAsseInfoproj(request);
AsseInfoProjForm projForm=(AsseInfoProjForm)form;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Timestamp registerDate= null;
if(projForm.getAsseBeginTime()!=null&&!"".equals(projForm.getAsseBeginTime())){
registerDate = new Timestamp(sdf.parse(projForm.getAsseBeginTime()).getTime());
}
Domain domain = domainService.findById(projForm.getOffcPers());
asseInfoProj.setId(projForm.getId());
asseInfoProj.setAddress(projForm.getAddress());
asseInfoProj.setAsseBeginTime(registerDate);
asseInfoProj.setAsseComp(projForm.getAsseComp());
asseInfoProj.setAssePers(projForm.getAssePers());
asseInfoProj.setAsseStatus(projForm.getAsseStatus());
asseInfoProj.setCpKind(projForm.getCpKind());
asseInfoProj.setLawPers(projForm.getLawPers());
asseInfoProj.setLinkway(projForm.getLinkway());
asseInfoProj.setPhone(projForm.getPhone());
asseInfoProj.setProgress(projForm.getProgress());
asseInfoProj.setProjName(projForm.getProjName());
asseInfoProj.setSecuLeve(projForm.getSecuLeve());
asseInfoProj.setZipcode(projForm.getZipcode());
asseInfoProj.setDomain(domain);
projectService.saveOrUpdate(asseInfoProj);
request.getSession().setAttribute("asseInfoProj", asseInfoProj);
System.out.println("asseInfoProj buildOk:");
System.out.println("saved asseInfoProj:"+asseInfoProj.toString());
//添加日志
OperatorDetails user = SecurityUserHolder.getCurrentUser();
SystemLog log = new SystemLog();
log.setUsername(user.getUsername());
List<Role> list=user.getRoleList();
String roles="";
for(Role role:list){
roles+=role.getRole()+",";
}
log.setRoleName(roles.substring(0,roles.length()-1));
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_RAM);
log.setOperationDesc("风险评估模块,新增测评项目,ID为:"+asseInfoProj.getId()+",项目名称为:"+asseInfoProj.getProjName());
log.setControl("成功");
logService.saveSystemLog(log);
} catch(Exception e) {
e.printStackTrace();
}
request.getSession().setAttribute("cpKind", asseInfoProj.getCpKind());
return new ActionForward("/ismp/domain/local/ram/businessManager.do?method=showBusiness" );
}
/**
* 继续测评功能
*/
public ActionForward contAsse(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
String projId = request.getParameter("projId");
String progress = request.getParameter("progress");
String forward = "";
AsseInfoProj asseInfoProj = null;
if(projId != null && !"".equals(projId.trim())) {
Integer projCode = new Integer(projId);
asseInfoProj = projectService.find(projCode);
System.out.println("find asseInfoProj:"+asseInfoProj.toString());
}
request.getSession().setAttribute("asseInfoProj", asseInfoProj);
request.getSession().setAttribute("cpKind", asseInfoProj.getCpKind());
if("prog1".equals(progress)) {
forward = "/ismp/domain/local/ram/projManager.do?method=preBuildNewProject&projId="+asseInfoProj.getId().toString();
}else if("prog2".equals(progress)){
forward = "/ismp/domain/local/ram/businessManager.do?method=showBusiness&projId="+asseInfoProj.getId().toString();
}else if("prog3".equals(progress)){
forward = "/ismp/domain/local/ram/AssetManager.do?method=preInputAsset&projId="+asseInfoProj.getId().toString();
}else if("prog4".equals(progress)){
forward = "/ismp/domain/local/ram/topoInfo.do?projId="+asseInfoProj.getId().toString();
}else if("prog5".equals(progress)){
forward = "/ismp/domain/local/ram/papeManager.do?method=prePaperDesign&projId="+asseInfoProj.getId().toString();
}else if("prog6".equals(progress)){
forward = "/ismp/domain/local/ram/papeManager.do?method=prePaperAnswer&projId="+asseInfoProj.getId().toString();
}else if("prog7".equals(progress)){
forward = "/ismp/domain/local/ram/leakScanManager.do?method=showLeakScan&projId="+asseInfoProj.getId().toString();
}else if("prog8".equals(progress)){
forward = "/ismp/domain/local/ram/VulnAnalManager.do?method=showVulnAnal&projId="+asseInfoProj.getId().toString();
}else if("prog9".equals(progress)){
forward = "/ismp/domain/local/ram/ThreAnalManager.do?method=showThreAnal&projId="+asseInfoProj.getId().toString();
}else if("prog10".equals(progress)){
forward = "/ismp/domain/local/ram/VulnThreRelaManager.do?method=showVulnThre&projId="+asseInfoProj.getId().toString();
}else if("prog11".equals(progress)){
forward = "/ismp/domain/local/ram/CalManager.do?method=preCal&projId="+asseInfoProj.getId().toString();
}else if("prog12".equals(progress)){
forward = "/ismp/domain/local/ram/reportManager.do?method=preReport&projId="+asseInfoProj.getId().toString();
}
return new ActionForward(forward);
}
}