File name
Commit message
Commit date
2024-09-10
File name
Commit message
Commit date
2024-09-10
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-09-10
2024-09-10
File name
Commit message
Commit date
2024-09-10
File name
Commit message
Commit date
2024-09-10
2024-07-22
package itn.let.mjo.pay.web;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO;
import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.let.cop.bbs.service.Board;
import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.pay.service.MjonPayService;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.mjo.pay.service.RefundService;
import itn.let.mjo.payva.service.VacsVactService;
import itn.let.mjo.payva.service.VacsVactVO;
import itn.let.uss.umt.service.EgovMberManageService;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.utl.fcc.service.EgovCryptoUtil;
import itn.let.utl.user.service.CheckFileUtil;
import itn.let.utl.user.service.CheckLoginUtil;
/*
*
* settle bank Virtual Account
*
* */
@Controller
public class MjonSBVAPayController {
@Resource(name = "mjonPayService")
private MjonPayService mjonPayService;
/** EgovMessageSource */
@Resource(name="egovMessageSource")
EgovMessageSource egovMessageSource;
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
/** refundService */
@Resource(name = "refundService")
private RefundService refundService;
@Resource(name = "mjonMsgService")
private MjonMsgService mjonMsgService;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
@Resource(name = "mberManageService")
private EgovMberManageService mberManageService;
@Resource(name = "EgovCmmUseService")
private EgovCmmUseService cmmUseService;
//암호화
@Resource(name = "egovCryptoUtil")
EgovCryptoUtil egovCryptoUtil;
//로그인 처리
@Resource(name = "checkLoginUtil")
private CheckLoginUtil checkLoginUtil;
//무료 대행 관련 쿼리
//@Resource(name="addrAgencyService")
//private AddrAgencyService addrAgencyService;
//가상계좌원장
@Resource(name="vacsVactService")
private VacsVactService vacsVactService;
//첨부파일 체크
@Resource(name = "checkFileUtil")
private CheckFileUtil checkFileUtil;
//파일 체크 & 관리
@Resource(name="EgovFileMngUtil")
private EgovFileMngUtil egovFileMngUtil;
//파일 정보 관리
@Resource(name="EgovFileMngService")
private EgovFileMngService fileMngService;
private static final Logger logger = LoggerFactory.getLogger(MjonSBVAPayController.class);
/////////////////////////////////////////////////////////////////////////////////////////
//
//
// USER
//
//
/**
* 세틀뱅크 가상계좌 결제 Action 페이지
* @param searchVO
* @param model
* @return "/web/pay/PayView.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/member/payva/SBPayActionAjax.do"})
public String KGMPayActionAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO,
HttpServletRequest request,
ModelMap model) throws Exception{
/*
String pattern = (String) request.getAttribute(
HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
*/
mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "payva/SBPayActionAjax.do") ;
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
//테스트
mjonPayVO.setBuyerName(loginVO.getName());
mjonPayVO.setBuyerEmail(loginVO.getEmail());
mjonPayVO.setMoid(loginVO.getId());
model.addAttribute("mjonPayVO", mjonPayVO);
return "web/cop/sb/mc_web";
}
/**
* KGM mobile 결제 okurl 페이지
* @param searchVO
* @param model
* @return "/web/pay/PayView.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/member/payva/OkUrl.do"})
public String OkUrl(
HttpServletRequest request
, ModelMap model
) throws Exception{
System.out.println("request.toString()");
System.out.println(request.toString());
return "web/cop/sb/okurl";
}
/**
* KGM mobile 결제 okurl 페이지
* @param searchVO
* @param model
* @return "/web/pay/PayView.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/member/payva/NotiUrl.do"})
public String NotiUrl(
HttpServletRequest request
, ModelMap model
) throws Exception{
System.out.println("request.toString()");
System.out.println(request.toString());
return "web/cop/sb/notiurl";
}
/////////////////////////////////////////////////////////////////////////////////////////
//
//
// ADMIN
//
//
/**
*세틀뱅크 가상계좌 리스트 관리 화면
* @param VacsVactVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/uss/ion/payva/selectVirtualAccountList.do"})
public String selectAddrAgencyListAdmin(
HttpServletRequest request
, @ModelAttribute("searchVO") VacsVactVO vacsVactVO
, ModelMap model
, RedirectAttributes redirectAttributes
) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);
if (!"Y".equals(isLogin)) return isLogin;
//로그인 정보 획득
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
//login 정보
model.addAttribute("loginVO", loginVO);
//ajax를 위한 현재 URL 정보 받기
vacsVactVO.setUrl(request.getRequestURI());
return "/uss/ion/payva/VirtualAccountList";
}
/**
* 세틀뱅크 가상계좌 관리 리스트 ajax 부분
* @param addrVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/uss/ion/payva/selectVirtualAccountListAjax.do"})
public String selectAddrAgencyListAjaxAdmin(
HttpServletRequest request
, @ModelAttribute("searchVO") VacsVactVO vacsVactVO
, ModelMap model
, RedirectAttributes redirectAttributes
) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isLoginCheck4JsonPage(redirectAttributes);
if ("N".equals(isLogin)) return "/uss/ion/payva/VirtualAccountListAjax";
// pageing step1
PaginationInfo paginationInfo = this.setPagingStep1(vacsVactVO);
// pageing step2
vacsVactVO = this.setPagingStep2(vacsVactVO, paginationInfo);
//대상 리스트 가져오기
//관리자 리스트는 30일 마감에 대한 제한을 없애기 위해서 해당 값을 넣어준다.
List<VacsVactVO> vacsVactList = vacsVactService.selectList(vacsVactVO);
// pageing step3
paginationInfo = this.setPagingStep3(vacsVactList, paginationInfo);
//대상 리스트, 페이징 정보 전달
model.addAttribute("resultList", vacsVactList);
model.addAttribute("paginationInfo", paginationInfo);
return "/uss/ion/payva/VirtualAccountListAjax";
}
/**
* 세틀뱅크 가상계좌 등록
* @param searchVO
* @param model
* @return "/uss/ion/payva/VirtualAccountInsert"
* @throws Exception
*/
@RequestMapping(value = {"/uss/ion/payva/VirtualAccountInsert.do"})
public String AddrAgencyInsert(
@ModelAttribute("searchVO") VacsVactVO vacsVactVO
, HttpServletRequest request
, RedirectAttributes redirectAttributes
, Model model) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);
if (!"Y".equals(isLogin)) return isLogin;
//사용자 정보
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
model.addAttribute("loginVO", loginVO);
return "/uss/ion/payva/VirtualAccountInsert";
}
/**
* 은행별 계좌번호 첨부파일을 디비에 저장
*
* @param VacsVactVO
* @param multiRequest
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/uss/ion/payva/insertVirtualAccountAjax.do"})
public ModelAndView insertAddrAgencyAjax(
HttpServletRequest request
, @ModelAttribute("insertAgency") VacsVactVO vacsVactVO
, final MultipartHttpServletRequest multiRequest
, @ModelAttribute("board") Board board
//, ModelMap model
, ModelAndView modelAndView
, RedirectAttributes redirectAttributes
) throws Exception {
//json 알림
modelAndView.setViewName("jsonView");
//사용자 로그인 여부 체크 for json
String isLogin = checkLoginUtil.isLoginCheck4JsonAction(modelAndView);
if ("N".equals(isLogin)) return modelAndView;
//파일 정상 처리 여부와 첨부 파일 정보
String atchFileId = this.readFile(multiRequest, modelAndView, "txt|xls|xlsx", 10, 1); //size and ea
if ("ERROR".equals(atchFileId)) return modelAndView;
//text 파일 읽어서 list에 넣기
List<String> sb = new ArrayList<>();
sb = checkFileUtil.extractFromTxtFile(multiRequest, sb);
if (sb.size()==0) {
//text 파일읽기가 안된경우 excel 읽기를 실행
sb = checkFileUtil.extractFromExcelFile(multiRequest, sb);
}
//필요 쿼리 생성 및 처리 - 계좌번호만 작성된 파일 처리
String s_split = "\t";
int i_plan_size = 1;
String s_in_query = "'0'";
String s_select_query = "SELECT '0' acct_no";
for (int i=0;i<sb.size();i++) {
String[] s_tmp = sb.get(i).split(s_split);
if (s_tmp.length==i_plan_size) {
s_in_query = s_in_query + ",'" + s_tmp[0] + "'";
s_select_query = s_select_query + " UNION ALL SELECT '" + s_tmp[0] + "'";
/*
//한 row에 여러값이 있는 경우 처리 방법
for (int j=0;j<i_plan_size;j++) {
System.out.println(s_tmp[j].toString());
}
*/
}
}
System.out.println(s_in_query);
System.out.println(s_select_query);
//중복수량 확인
vacsVactVO.setAcctNo(s_in_query);
System.out.println(vacsVactVO.toString());
System.out.println(vacsVactVO.getAcctNo());
int i_over_count = vacsVactService.selectOverCount(vacsVactVO);
System.out.println("i_over_count");
System.out.println(i_over_count);
//비중복 저장
vacsVactVO.setOrgCd("31001412");
vacsVactVO.setCmfNm("ITN"); //회사명 셋팅
vacsVactVO.setAcctNo(s_select_query);
//입금가능 기준 금액
vacsVactVO.setTrAmt("5000");
//입금가능 기준 금액보다
//0 조건없음
//1금액=실금액
//2 금액>=실입금액
//3 금액<=실입금액
vacsVactVO.setTramtCond("3");
//txt 파일에서 읽어온 list 사이즈
int readTxtListSize = sb.size();
int i_insert_count = vacsVactService.updateBulk(vacsVactVO);
System.out.println("txt파일에서 읽은 가상계좌 list size :: " + readTxtListSize);
System.out.println("DB에 insert 된 가상계좌 list size :: " + i_insert_count);
System.out.println("i_insert_count");
System.out.println(i_insert_count);
//정합성 체크해서 처리하기
//step1.기존에 사용중인지 확인 하기
//step2.나머지는 저장 처리
//step3.사용중인것 리스트 ret해서 처리하기
//System.out.println(s_in_query);
//System.out.println(s_select_query);
//게시판 등록하기
//modelAndView = this.insertAddrAgencyBoard(modelAndView, atchFileId, addrAgencyVO, board.getNttCn(), loginVO.getId(), multiRequest);
if(readTxtListSize == i_insert_count) {
modelAndView.addObject("result", "success");
modelAndView.addObject("message", "계좌번호 저장에 성공하였습니다.");
}else if(i_insert_count == 0){
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "계좌번호 저장에 실패하였습니다.");
}else {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "첨부자료의 계좌수와 입력된 계좌수가 다릅니다.");
}
return modelAndView;
}
/**
* 세틀뱅크 가상계좌번호 수정 화면
* @param VacsVactVO
* @param model
* @return "/uss/ion/payva/VirtualAccountModify"
* @throws Exception
*/
@RequestMapping(value = {"/uss/ion/payva/VirtualAccountModify.do"})
public String MjonNumberModify(
@ModelAttribute("searchVO") VacsVactVO vacsVactVO
, HttpServletRequest request
, Model model
, RedirectAttributes redirectAttributes
) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);
if (!"Y".equals(isLogin)) return isLogin;
//수정 대상 정보 가져오기
vacsVactVO = vacsVactService.selectDetail(vacsVactVO);
model.addAttribute("VacsVactVO", vacsVactVO);
return "/uss/ion/payva/VirtualAccountModify";
}
/**
* 세틀뱅크 가상계좌번호 수정처리
*
* @param boardVO
* @param board
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/uss/ion/payva/updateVirtualAccountAjax.do"})
public ModelAndView updateVirtualAccountAjax(
HttpServletRequest request
, @ModelAttribute("updateAgency") VacsVactVO vacsVactVO
//, ModelMap model
, ModelAndView modelAndView
, RedirectAttributes redirectAttributes
) throws Exception {
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
//사용자 로그인 여부 체크 for json
String isLogin = checkLoginUtil.isLoginCheck4JsonAction(modelAndView);
if ("N".equals(isLogin)) return modelAndView;
//게시판 등록하기
try {
vacsVactService.update(vacsVactVO);
VacsVactVO hstryVO = vacsVactService.selectDetail(vacsVactVO);
hstryVO.setMberId(loginVO.getId());
//원장 상태 변경 이력 저장
vacsVactService.insertVacsHistory(hstryVO);
modelAndView.addObject("message", egovMessageSource.getMessage("success.common.update"));
modelAndView.addObject("result", "success");
}catch(Exception ex){
ex.printStackTrace();
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 가상계좌 관리 삭제 프로세서
* @param searchVO
* @param model
* @return "/uss/ion/payva/VirtualAccountDelete.do"
* @throws Exception
*/
@RequestMapping(value = {"/uss/ion/payva/VirtualAccountDelete.do"})
public String AddrAgencyDelete(
@RequestParam("del") String[] del
, @ModelAttribute("searchVO") VacsVactVO vacsVactVO
, HttpServletRequest request
, RedirectAttributes redirectAttributes
, Model model
) throws Exception {
//관리자 로그인 여부 체크
String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);
if (!"Y".equals(isLogin)) return isLogin;
//전달받은 AddrAgencyId로 삭제처리
try {
int i_delete_count = 0;
int i_cant_delete_count = 0;
for(String id: del) {
String[] a_param = id.split("_"); //은행코드 & 계좌번호
if (a_param.length==2) {
vacsVactVO.setBankCd(a_param[0]);
vacsVactVO.setAcctNo(a_param[1]);
vacsVactVO.setQuery(" AND MBER_ID is null ");
if (vacsVactService.deleteWithQuery(vacsVactVO)>0) {
i_delete_count++;
}else {
i_cant_delete_count++;
}
}else {
i_cant_delete_count++;
}
}
if (i_cant_delete_count>0) {
redirectAttributes.addFlashAttribute("message", "요청하신 "+(i_delete_count+i_cant_delete_count)+"건 중에서 "+i_delete_count+"건 삭제, "+i_cant_delete_count+"건 사용자 할당으로 비 삭제되었습니다.");
}else {
redirectAttributes.addFlashAttribute("message", "요청하신 "+(i_delete_count+i_cant_delete_count)+"건 "+egovMessageSource.getMessage("success.common.delete"));
}
}catch(Exception e) {
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete"));
}
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/payva/selectVirtualAccountList.do");
return redirectUrlMaker.getRedirectUrl();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// private function
//
//
//페이징을 위한 처리 step1 - 페이징 기본 정보 설정
private PaginationInfo setPagingStep1(VacsVactVO p_vacsVactVO)throws Exception{
// pageing step1
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(p_vacsVactVO.getPageIndex());
paginationInfo.setRecordCountPerPage(p_vacsVactVO.getPageUnit());
paginationInfo.setPageSize(p_vacsVactVO.getPageSize());
return paginationInfo;
}
//페이징을 위한 처리 step2 - 게시물 리스트 수량 설정 및 검색 조건 초기화
private VacsVactVO setPagingStep2(
VacsVactVO p_vacsVactVO
, PaginationInfo p_paginationInfo
)throws Exception{
// pageing step2
p_vacsVactVO.setFirstIndex(p_paginationInfo.getFirstRecordIndex());
p_vacsVactVO.setLastIndex(p_paginationInfo.getLastRecordIndex());
p_vacsVactVO.setRecordCountPerPage(p_paginationInfo.getRecordCountPerPage());
if("".equals(p_vacsVactVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
p_vacsVactVO.setSearchSortCnd("REG_IL");
p_vacsVactVO.setSearchSortOrd("desc");
}
return p_vacsVactVO;
}
//페이징을 위한 처리 step3 - 전체 게시물 수량 설정하기
private PaginationInfo setPagingStep3(
List<VacsVactVO> p_vacsVactList
, PaginationInfo p_paginationInfo
)throws Exception{
// pageing step3
int totCnt = 0;
if(p_vacsVactList.size() > 0) totCnt = p_vacsVactList.get(0).getTotCnt();
p_paginationInfo.setTotalRecordCount(totCnt);
return p_paginationInfo;
}
//사용자 업로드 파일 처리 - 하나의 파일만 처리
private String readFile(
MultipartHttpServletRequest p_multiRequest
, ModelAndView p_modelAndView
, String p_exts //가능한 확장자를 받는다. |
, int p_i_file_size
, int p_i_file_count
//, BoardMasterVO p_bmVO
) throws Exception{
//Map<String, Object> p_map = new Map<>();
//Map<String, Object> in_map = new HashMap<>();
boolean in_bool = true;
List<FileVO> result = null;
String atchFileId = "";
String isThumbFile = "";
//String isThumbFile = "thumbFile"; //"thumbFile" - 썸네일을 생성한다.
final Map<String, MultipartFile> files = p_multiRequest.getFileMap();
if (!files.isEmpty()) {
result = egovFileMngUtil.parseFileInf(files, "ADDRAGENCY_", 0, "", "", isThumbFile);
// 파일 사이즈, 개수, 확장자 체크. model에 체크 오류 메세지 set
//관리자에서 게시판 설정시 업로드 파일 사이즈와 수량 체크용
if(!checkFileUtil.isPosblAtchFileMvWithUserSetting(result, p_modelAndView, 0, p_exts, p_i_file_size, p_i_file_count)) {
// 공통코드 Set
//setBBSCommCd(model, bmVO);
//model.addAttribute("bdMstr", bmVO);
//return "web/cop/bbs/EgovNoticeRegist";
//modelAndView.addObject("bdMstr", bmVO);
p_modelAndView.addObject("result", "fail");
in_bool = false;
}
//atchFileId = fileMngService.insertFileInfs(result); //첨부 파일
for(int i=0;i<result.size();i++) {
FileVO vo = (FileVO) result.get(i);
atchFileId = atchFileId + "|" + vo.fileStreCours + vo.streFileNm; //첨부 파일
}
//atchFileId = atchFileId + "|" + fileMngService.insertFileInfs(result); //첨부 파일
}
if (!in_bool) atchFileId = "ERROR";
return atchFileId;
}
//vacs_vact 가상계좌원장 내용 변경하기
/*
private ModelAndView insertAddrAgencyBoard(
ModelAndView p_modelAndView
//, Map<String, Object> p_fileResult
, String p_atchFileId
, VacsVactVO p_vacsVactVO
, String p_content
, String p_registerId
//, String p_processStatus
, MultipartHttpServletRequest p_multiRequest
) throws Exception{
//게시판 등록하기
try {
String p_processStatus = "";
//p_processStatus = p_vacsVactVO.getProcessStatus();
//if ("".equals(p_processStatus) || p_processStatus==null) p_processStatus = "B";
//p_vacsVactVO.setAtchFileId(p_atchFileId);
//p_vacsVactVO.setRequestTxt(unscript(p_content)); // XSS 방지
//p_vacsVactVO.setProcessStatus(p_processStatus); //처리상태 B/I/E
//p_vacsVactVO.setRegisterId(p_registerId);
//String userIp = EgovClntInfo.getClntIP(p_multiRequest);
//p_vacsVactVO.setNtcrIp(userIp);
vacsVactService.insert(p_vacsVactVO);
p_modelAndView.addObject("message", egovMessageSource.getMessage("success.common.insert"));
p_modelAndView.addObject("result", "success");
}catch(Exception ex){
ex.printStackTrace();
p_modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.insert"));
p_modelAndView.addObject("result", "fail");
}
return p_modelAndView;
}
*/
/**
* XSS 방지 처리.
*
* @param data
* @return
*/
protected String unscript(String data) {
if (data == null || data.trim().equals("")) {
return "";
}
String ret = data;
ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script");
ret = ret.replaceAll("</(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "</script");
ret = ret.replaceAll("<(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "<object");
ret = ret.replaceAll("</(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "</object");
ret = ret.replaceAll("<(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "<applet");
ret = ret.replaceAll("</(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "</applet");
ret = ret.replaceAll("<(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("</(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("<(F|f)(O|o)(R|r)(M|m)", "<form");
ret = ret.replaceAll("</(F|f)(O|o)(R|r)(M|m)", "<form");
//ret = ret.replaceAll("<", "<");
ret = ret.replaceAll("alert", "");
//ret = ret.replaceAll("iframe", "");
return ret;
}
}