package kr.co.proten.custom.data; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import kr.co.proten.common.ArgsInfo; import kr.co.proten.common.util.FileUtil; import kr.co.proten.common.util.StringUtil; import kr.co.proten.custom.ClassName; import kr.co.proten.db.DBManager; import kr.co.proten.filter.FileContent; import MarkAny.MaSaferJava.Madec; //import MarkAny.MaSaferJava.MaFileChk; public class MarkAnyCustom implements ClassName{ private static final Logger log = LoggerFactory.getLogger(MarkAnyCustom.class); private static FileContent fileContent = null; public static boolean init = false; public static String DRMFileDir = "/ap/proten/prosearch/dbcrawler/filter"; // 복호화 위치 문서 FullPath public String markAnyDat = "MarkAnyDrmInfo.dat"; // ip, port가 정의된 MarkanyDrmInfo.dat 파일 위치 절대경로 변경 @Override public String customData(String fileFullPath) throws Exception { String retData = ""; if(!MarkAnyCustom.init) { MarkAnyCustom.DRMFileDir =ArgsInfo.homePath+"drmfile"+FileUtil.fileseperator+ArgsInfo.selectid+FileUtil.fileseperator; File file = new File(MarkAnyCustom.DRMFileDir); file.mkdirs(); MarkAnyCustom.fileContent = new FileContent(true); MarkAnyCustom.fileContent.setFilterRoot(ArgsInfo.homePath+"filter"+FileUtil.fileseperator+ArgsInfo.selectid+FileUtil.fileseperator); MarkAnyCustom.init = true; } try { File fileData = new File(fileFullPath); if(!fileData.exists()) { log.debug("File Not Find :"+fileData.getAbsolutePath()); return ""; } // MaFileChk clMaFileChk = null; // 체크 클래스 생성 준비 Madec clMadec = null; // 클래스 생성 준비 BufferedInputStream in = null; BufferedOutputStream out = null; String strRetCode = ""; long OutFileLength = 0; String FileName = new String( fileData.getName() ); // 파일체크 대상 파일 File FileSample = new File( fileFullPath ); // 파일체크 대상 파일 File FileOut = new File( MarkAnyCustom.DRMFileDir + fileData.getName() ); // 복호화 결과로 생성할 파일 in = new BufferedInputStream( new FileInputStream( FileSample ) ); out = new BufferedOutputStream( new FileOutputStream( FileOut ) ); // clMaFileChk = new MaFileChk( markAnyDat); // 연동 시 절대경로로 변경 clMadec = new Madec( markAnyDat ); // 연동 시 절대경로로 변경 long lFileLen = FileSample.length( ); // OutFileLength = clMaFileChk.lGetFileChkFileSize( FileName, lFileLen, in ); OutFileLength = clMadec.lGetDecryptFileSize( FileName, lFileLen, in ); if( OutFileLength > 0 ) { // 파일을 체크 합니다. // strRetCode = clMaFileChk.strMaFileChk( ); // 복호화 합니다. strRetCode = clMadec.strMadec( out ); } if (strRetCode.equals( "00000" )) { // 파일체크를 성공하였습니다. log.debug( "파일체크를 성공 하였습니다. 해당 파일은 암호화 파일 입니다." ); retData = fileContent.getFilterData(MarkAnyCustom.DRMFileDir+fileData.getName()); File _extFile = new File(MarkAnyCustom.DRMFileDir+fileData.getName()); if(_extFile.exists()) { _extFile.delete(); } }else{ strRetCode = clMadec.strGetErrorCode( ); log.debug( "복호화 대상이 아닙니다." ); log.debug( "ERR [ErrorCode] = [" + strRetCode + "]" + "[ErrorDescription] = [" + clMadec.strGetErrorMessage(strRetCode) + "]" ); retData = fileContent.getFilterData(fileFullPath); } }catch( Exception e ){ log.debug("File Drm Error ["+e.toString()+"]"); return ""; }finally{ } return retData; } @Override public String customDataMemory(String data, Map resultMemory) throws Exception { // TODO Auto-generated method stub return ""; } @Override public List customDataAfter(String data) throws Exception { // TODO Auto-generated method stub return new ArrayList(); } @Override public String customDataObject(String data) throws Exception { // TODO Auto-generated method stub return null; } }