package org.signserver.socket; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoopGroup; import io.netty.channel.group.ChannelGroup; import io.netty.channel.group.DefaultChannelGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.MessageToMessageDecoder; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; import io.netty.util.concurrent.GlobalEventExecutor; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.bind.DatatypeConverter; import org.signserver.common.*; import org.signserver.common.util.*; import java.security.cert.CertificateEncodingException; import java.security.cert.CertificateExpiredException; import java.security.cert.CertificateFactory; import java.security.cert.CertificateNotYetValidException; import java.security.cert.X509Certificate; import java.sql.SQLException; import java.util.*; import javax.annotation.Resource; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.naming.NamingException; import javax.servlet.http.HttpServletRequest; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.ws.WebServiceContext; import javax.xml.ws.handler.MessageContext; import javax.jws.HandlerChain; import org.apache.log4j.Logger; import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; import org.bouncycastle.util.encoders.Base64; import org.signserver.common.*; import org.signserver.ejb.interfaces.IWorkerSession; import org.signserver.server.CertificateClientCredential; import org.signserver.server.IClientCredential; import org.signserver.server.UsernamePasswordClientCredential; import org.signserver.server.log.IWorkerLogger; import org.signserver.server.log.LogMap; import java.io.*; import org.signserver.common.*; import org.signserver.common.util.*; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import ft.otp.core.api.OTPCore; import ft.otp.core.api.OTPCoreFactory; import ft.otp.core.api.Version; import ft.otp.core.entity.UserInfo; import ft.otp.core.exception.OTPCoreException; import org.apache.commons.io.IOUtils; import javax.xml.ws.handler.soap.SOAPMessageContext; import com.tomicalab.cag360.cagconnector.ws.*; /** * * @author PHUONGVU */ public class CAGSocketGateWay extends HttpServlet { private static final Logger LOG = Logger.getLogger(CAGSocketGateWay.class); private static OTPCore otpcore = null; private static boolean isUseContraints = true; private static String localWorkerName; private static final String HTTP_AUTH_BASIC_AUTHORIZATION = "Authorization"; private static Properties config = null; // @Resource // private WebServiceContext wsContext; @EJB private static IWorkerSession.ILocal workersession; private static final Random random = new Random(); private static final int PORT = Integer.parseInt(System.getProperty("port", "14003")); private static byte[] NULL = { 0x00 }; static { // LOG.info("New Instance...\n\n\n"); // Thread start socket server listening new Thread(new Runnable() { @Override public void run() { try { LOG.info("Clear TPM Request"); DBConnector.getInstances().Socket_ClearTPMRequest(); LOG.info("Try to active a signer..."); if (config == null) { config = DBConnector.getInstances() .getPropertiesConfig(); } String workerId = config .getProperty("tomica_autoactive_signerid"); if (workerId != null) { if(workerId.compareTo("") != 0) { String[] Ids = workerId.split(","); try { for (int i = 0; i < Ids.length; i++) { int Id = Integer.valueOf(Ids[i]); WorkerConfig signerConfig = getWorkerSession() .getCurrentWorkerConfig( Integer.valueOf(Id)); getWorkerSession().activateSigner( Integer.valueOf(Id), signerConfig.getProperty("PIN")); } } catch (Exception e) { e.printStackTrace(); } } } LOG.info("Socket deploying and listening on port 14003..."); EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .handler(new LoggingHandler(LogLevel.INFO)) .childHandler(new SecureChatServerInitializer()); b.bind(PORT).sync().channel().closeFuture().sync(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } catch (Exception e) { e.printStackTrace(); } } }).start(); // Thread do signing new Thread(new Runnable() { @Override public void run() { SocketRequestObject requestObject = null; while (true) { try { requestObject = DBConnector.getInstances() .Socket_GetRequest(); if (requestObject != null) { // Co request String functionName = "processData"; String ipClient = Utils.getIPAdress(requestObject .getIp()); String sslSubDn = "TCP Socket"; String sslIseDn = "TCP Socket"; String sslSnb = "TCP Socket"; String xmlData = ""; String username = ""; String password = ""; String timestamp = ""; String signature = ""; String pkcs1Signature = ""; String unsignedData = ""; String signedData = ""; byte[] byteData = null; byte[] request = requestObject.getRequestData(); // tpm free byte[] raw_xmlData = Utils.getBytesValue(request, Utils.S_XMLDATA, Utils.E_XMLDATA); byte[] raw_byteData = Utils.getBytesValue(request, Utils.S_FILEDATA, Utils.E_FILEDATA); byte[] raw_userName = Utils.getBytesValue(request, Utils.S_USERNAME, Utils.E_USERNAME); byte[] raw_passWord = Utils.getBytesValue(request, Utils.S_PASSWORD, Utils.E_PASSWORD); byte[] raw_signature = Utils.getBytesValue(request, Utils.S_SIGNATURE, Utils.E_SIGNATURE); byte[] raw_timestamp = Utils.getBytesValue(request, Utils.S_TIMESTAMP, Utils.E_TIMESTAMP); byte[] raw_pkcs1Sig = Utils.getBytesValue(request, Utils.S_PKCS1SIGNATURE, Utils.E_PKCS1SIGNATURE); if (raw_xmlData == null || Arrays.equals(raw_xmlData, NULL)) { // Invalid parameter String billCode = ExtFunc.getBillCode(); String pData = ExtFunc.genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, "", "", billCode); DBConnector.getInstances() .writeLogToDataBaseOutside( functionName, "", ipClient, "", Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, "", "", xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo(pData)).toBytes()); continue; } else { xmlData = new String(raw_xmlData, "UTF-8"); byteData = raw_byteData; String channelName = ExtFunc.getContent( Defines._CHANNEL, xmlData); String user = ExtFunc.getContent(Defines._USER, xmlData); String idTag = ExtFunc.getContent(Defines._ID, xmlData); String method = ""; String transactionData = ""; String subject = ""; String _billCode = ""; String _otp = ""; if (raw_userName == null || Arrays.equals(raw_userName, NULL) || raw_passWord == null || Arrays.equals(raw_passWord, NULL) || raw_signature == null || Arrays.equals(raw_signature, NULL) || raw_timestamp == null || Arrays.equals(raw_timestamp, NULL) || raw_pkcs1Sig == null || Arrays.equals(raw_pkcs1Sig, NULL)) { String billCode = ExtFunc.getBillCode(); String pData = ExtFunc.genResponseMessage( Defines.CODE_INVALIDCREDENTIAL, Defines.ERROR_INVALIDCREDENTIAL, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDCREDENTIAL, Defines.CODE_INVALIDCREDENTIAL, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo(pData)) .toBytes()); continue; } else { username = new String(raw_userName); password = new String(raw_passWord); timestamp = new String(raw_timestamp); signature = new String(raw_signature); pkcs1Signature = new String(raw_pkcs1Sig); if (channelName.compareTo("") == 0) { String billCode = ExtFunc.getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDCHANNEL, Defines.ERROR_INVALIDCHANNEL, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDCHANNEL, Defines.CODE_INVALIDCHANNEL, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo(pData)) .toBytes()); continue; } if (ExtFunc.getContent(Defines._WORKERNAME, xmlData).compareTo( Defines.WORKER_AGREEMENT) == 0 && ExtFunc .getContent( Defines._ACTION, xmlData) .compareTo( Defines.AGREEMENT_ACTION_VALIDA) == 0) { // do nothing } else { if (user.compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDUSER, Defines.ERROR_INVALIDUSER, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDUSER, Defines.CODE_INVALIDUSER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo(pData)) .toBytes()); continue; } } String result = ""; String fileType = ""; boolean isValidChannel = DBConnector .getInstances().checkChannelCode( channelName); if (isValidChannel) { result = DBConnector.getInstances() .readDataBase(channelName, ipClient, username, password, signature, timestamp, pkcs1Signature); if (result .compareTo(Defines.ERROR_INVALIDIP) == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDIP, Defines.ERROR_INVALIDIP, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDIP, Defines.CODE_INVALIDIP, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo(pData)) .toBytes()); continue; } else if (result .compareTo(Defines.ERROR_INVALIDLOGININFO) == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDLOGININFO, Defines.ERROR_INVALIDLOGININFO, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDLOGININFO, Defines.CODE_INVALIDLOGININFO, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo(pData)) .toBytes()); continue; } else if (result .compareTo(Defines.ERROR_INVALIDSIGNATURE) == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDSIGNATURE, Defines.ERROR_INVALIDSIGNATURE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDSIGNATURE, Defines.CODE_INVALIDSIGNATURE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo(pData)) .toBytes()); continue; } else { // do operation String workerIdOrName = ExtFunc .getContent( Defines._WORKERNAME, xmlData); localWorkerName = workerIdOrName; if (workerIdOrName.compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDWORKERNAME, Defines.ERROR_INVALIDWORKERNAME, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDWORKERNAME, Defines.CODE_INVALIDWORKERNAME, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } functionName = workerIdOrName; final int workerId = getWorkerId(workerIdOrName); if (!(workerIdOrName .compareTo(Defines.WORKER_AGREEMENT) == 0)) { if (workerId < 1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_NOWORKER, Defines.ERROR_NOWORKER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_NOWORKER, Defines.CODE_NOWORKER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // Check WorkerName and ChannelName // for permission boolean isAllow = DBConnector .getInstances() .authCheckRelation( channelName, workerIdOrName); if (!isAllow) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDFUNCTION, Defines.ERROR_INVALIDFUNCTION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDFUNCTION, Defines.CODE_INVALIDFUNCTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // Process SIMCA if (workerIdOrName .compareTo(Defines.WORKER_SIMCA) == 0) { String action = ExtFunc .getContent( Defines._ACTION, xmlData); if (action .compareTo(Defines.AGREEMENT_ACTION_REG) == 0) { String branchId = ExtFunc.getContent(Defines._BranchID, xmlData); // check user in // simagreement if (DBConnector .getInstances() .simca_CheckUser( user, channelName)) { // User exit String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDUSERAGREEMENT, Defines.ERROR_INVALIDUSERAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDUSERAGREEMENT, Defines.CODE_INVALIDUSERAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String expiration = ExtFunc .getContent( Defines._EXPIRATION, xmlData); // check expiration format if (expiration.equals("")) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } int expire = 0; try { expire = Integer .parseInt(expiration); } catch (NumberFormatException e) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (expire <= 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // end check expiration // format // Check Provider: VIETTEL // or MOBIFONE... String provider = ExtFunc .getContent( Defines._SIMPROVIDER, xmlData); int isValidProvider = DBConnector .getInstances() .simca_CheckSimProvider( provider); if (isValidProvider == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SIMCA_INVALIDPROVIDER, Defines.ERROR_SIMCA_INVALIDPROVIDER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_SIMCA_INVALIDPROVIDER, Defines.CODE_SIMCA_INVALIDPROVIDER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } final String content = "" + Defines.CONNECTOR_FUNC_SIMCA_CERTIFICATEQUERY + "" + "" + user + "" + "" + provider + ""; CAGConnector wsConnector = CAGConnectorSrv .getInstance() .getWS(); String sim_response = wsConnector .call(content); int responseCode = Integer .valueOf(ExtFunc.getContent( "ResponseCode", sim_response)); String responseMess = ExtFunc.getContent( "ResponseMessage", sim_response); if (responseCode != 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SIMCA_ERRORRESPONSE, provider + ": " + responseMess, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, provider + ": " + responseMess, Defines.CODE_SIMCA_ERRORRESPONSE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String certificate = ExtFunc.getContent( "Data", sim_response); // Check certificate valid if (!isCertificateValid(certificate)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDCERTIFICATE, Defines.ERROR_INVALIDCERTIFICATE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDCERTIFICATE, Defines.CODE_INVALIDCERTIFICATE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // insert sim agreement String[] certComponets = ExtFunc .getCertificateComponents(certificate); int rv = DBConnector .getInstances() .simca_InsertAgreement( idTag, channelName, user, certificate, certComponets[0], certComponets[3], certComponets[4], Defines.AGREEMENT_STATUS_ACTI, expire, branchId); if (rv == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SIMCA_INSERTAGREEMENT, Defines.ERROR_SIMCA_INSERTAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_SIMCA_INSERTAGREEMENT, Defines.CODE_SIMCA_INSERTAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SUCCESS, Defines.SUCCESS, channelName, user, Defines.AGREEMENT_STATUS_ACTI, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.SUCCESS, Defines.CODE_SUCCESS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (action .compareTo(Defines.AGREEMENT_ACTION_CHAINF) == 0) { // get agreement id int agreementId = DBConnector .getInstances() .simca_GetAgreementID( user, channelName); if (agreementId <= 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_AGREEMENTNOTEXITS, Defines.ERROR_AGREEMENTNOTEXITS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_AGREEMENTNOTEXITS, Defines.CODE_AGREEMENTNOTEXITS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String expiration = ExtFunc .getContent( Defines._EXPIRATION, xmlData); // check expiration format if (expiration.equals("")) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } int expire = 0; try { expire = Integer .parseInt(expiration); } catch (NumberFormatException e) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (expire <= 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // end check expiration // format // update expiration day int rv = DBConnector .getInstances() .simca_UpdateAgreement( agreementId, expire); if (rv == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SIMCA_UPDATEAGREEMENT, Defines.ERROR_SIMCA_UPDATEAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_SIMCA_UPDATEAGREEMENT, Defines.CODE_SIMCA_UPDATEAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SUCCESS, Defines.SUCCESS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.SUCCESS, Defines.CODE_SUCCESS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (action .compareTo(Defines.AGREEMENT_ACTION_UNREG) == 0) { // get agreement id int agreementId = DBConnector .getInstances() .simca_GetAgreementID( user, channelName); if (agreementId <= 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_AGREEMENTNOTEXITS, Defines.ERROR_AGREEMENTNOTEXITS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_AGREEMENTNOTEXITS, Defines.CODE_AGREEMENTNOTEXITS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } int rv = DBConnector .getInstances() .simca_CancelAgreement( agreementId); if (rv == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SIMCA_CANCELAGREEMENT, Defines.ERROR_SIMCA_CANCELAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_SIMCA_CANCELAGREEMENT, Defines.CODE_SIMCA_CANCELAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SUCCESS, Defines.SUCCESS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.SUCCESS, Defines.CODE_SUCCESS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (action .compareTo(Defines.ACTION_SIMCA_SIGNTRAN) == 0) { // Check agreement status int rv = DBConnector .getInstances() .simca_CheckAgreementStatus( user, channelName); if (rv == 1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_AGREEMENTNOTEXITS, Defines.ERROR_AGREEMENTNOTEXITS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_AGREEMENTNOTEXITS, Defines.CODE_AGREEMENTNOTEXITS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (rv == 2) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_AGREEMENTEXPIRED, Defines.ERROR_AGREEMENTEXPIRED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_AGREEMENTEXPIRED, Defines.CODE_AGREEMENTEXPIRED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (rv == 3) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_CONTRACTSTATUS, Defines.ERROR_CONTRACTSTATUS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_CONTRACTSTATUS, Defines.CODE_CONTRACTSTATUS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (rv == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UNKNOWN, Defines.ERROR_UNKNOWN, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UNKNOWN, Defines.CODE_UNKNOWN, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // rv = 0 // Check Provider: VIETTEL // or MOBIFONE... String provider = ExtFunc .getContent( Defines._SIMPROVIDER, xmlData); int isValidProvider = DBConnector .getInstances() .simca_CheckSimProvider( provider); if (isValidProvider == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SIMCA_INVALIDPROVIDER, Defines.ERROR_SIMCA_INVALIDPROVIDER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_SIMCA_INVALIDPROVIDER, Defines.CODE_SIMCA_INVALIDPROVIDER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String dataToSign = ExtFunc .getContent( Defines._DATATOSIGN, xmlData); if (dataToSign.equals("")) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDDATATOSIGN, Defines.ERROR_INVALIDDATATOSIGN, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDDATATOSIGN, Defines.CODE_INVALIDDATATOSIGN, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } dataToSign = ExtFunc .removeAccent(dataToSign); if (dataToSign.length() > 107) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SIMCA_INVALIDLENGTH, Defines.ERROR_SIMCA_INVALIDLENGTH, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_SIMCA_INVALIDLENGTH, Defines.CODE_SIMCA_INVALIDLENGTH, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String signingcert = DBConnector .getInstances() .simca_GetCertificate( user, channelName); final String content = "" + Defines.CONNECTOR_FUNC_SIMCA_SIGNTRANSACTION + "" + "" + dataToSign + "" + "" + user + "" + "" + provider + "" + "" + signingcert + ""; CAGConnector wsConnector = CAGConnectorSrv .getInstance() .getWS(); String connectorResponse = wsConnector .call(content); int responseCode = Integer .valueOf(ExtFunc.getContent( "ResponseCode", connectorResponse)); String responseMess = ExtFunc.getContent( "ResponseMessage", connectorResponse); if (responseCode != 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SIMCA_ERRORRESPONSE, provider + ": " + responseMess, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, provider + ": " + responseMess, Defines.CODE_SIMCA_ERRORRESPONSE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String response_signature = ExtFunc.getContent( "Data", connectorResponse); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( responseCode, Defines.SUCCESS, channelName, user, fileType, signingcert, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, responseMess, responseCode, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData, DatatypeConverter .parseBase64Binary(response_signature)).toBytes())); continue; } else { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDACTION, Defines.ERROR_INVALIDACTION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDACTION, Defines.CODE_INVALIDACTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData(requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // End Process SIMCA if (!(workerIdOrName .compareTo(Defines.WORKER_AGREEMENT) == 0)) { // Check agreement status method = ExtFunc.getContent( Defines._METHOD, xmlData); int agreementStatus = DBConnector .getInstances() .getAgreementStatusUser( user, channelName, getWorkerType( workerIdOrName, method)); if (agreementStatus == 1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_AGREEMENTNOTEXITS, Defines.ERROR_AGREEMENTNOTEXITS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_AGREEMENTNOTEXITS, Defines.CODE_AGREEMENTNOTEXITS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (agreementStatus == 4 || agreementStatus == 2 || agreementStatus == 3 || agreementStatus == 6 || agreementStatus == 7) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_CONTRACTSTATUS, Defines.ERROR_CONTRACTSTATUS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_CONTRACTSTATUS, Defines.CODE_CONTRACTSTATUS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (agreementStatus == 5) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_AGREEMENTEXPIRED, Defines.ERROR_AGREEMENTEXPIRED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_AGREEMENTEXPIRED, Defines.CODE_AGREEMENTEXPIRED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // Check PKI Validation block if (getWorkerType( workerIdOrName, method) == 2) { if (workerIdOrName .indexOf("Validator") != -1) { int pkiCheck = DBConnector .getInstances() .checkHWPKI( channelName, user); if (pkiCheck == 1 || pkiCheck == 2) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_PKILOCKED, Defines.ERROR_PKILOCKED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_PKILOCKED, Defines.CODE_PKILOCKED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (pkiCheck == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UNKNOWN, Defines.ERROR_UNKNOWN, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UNKNOWN, Defines.CODE_UNKNOWN, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } if (workerIdOrName .indexOf("Signer") != -1) { int maxSignerCheck = DBConnector .getInstances() .checkMaxSigner( channelName, user); if (maxSignerCheck == 1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OVERSIGNERTIME, Defines.ERROR_OVERSIGNERTIME, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OVERSIGNERTIME, Defines.CODE_OVERSIGNERTIME, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (maxSignerCheck == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UNKNOWN, Defines.ERROR_UNKNOWN, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UNKNOWN, Defines.CODE_UNKNOWN, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } } // Get SerialNumber of User String serialNumber = ""; if (getWorkerType( workerIdOrName, method) == 2 && workerIdOrName .indexOf("Validator") != -1) { serialNumber = DBConnector .getInstances() .getSerialNumberFromCa( channelName, user); if (serialNumber .compareTo("") == 0 || serialNumber .compareTo(Defines.NULL) == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_NOCERTSERIAL, Defines.ERROR_NOCERTSERIAL, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_NOCERTSERIAL, Defines.CODE_NOCERTSERIAL, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // MetaData List requestMetadata = new ArrayList(); String metaData = ExtFunc .getContent( Defines._METADATA, xmlData); if (!(metaData.compareTo("") == 0)) { requestMetadata = getMetaData(metaData); Metadata certserial = new Metadata( "certSerialNumber", serialNumber); requestMetadata .add(certserial); } else { Metadata certserial = new Metadata( "certSerialNumber", serialNumber); requestMetadata .add(certserial); } final int requestId = random .nextInt(); // final int workerId = // getWorkerId(workerIdOrName); try { // Base64File byte[] data = null; if (workerIdOrName .indexOf("OATH") != -1) { // store check OTP co bi // lock hay ko int otpCheck = DBConnector .getInstances() .checkHWOTP( channelName, user); if (otpCheck == 1 || otpCheck == 2) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPLOCKED, Defines.ERROR_OTPLOCKED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPLOCKED, Defines.CODE_OTPLOCKED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (otpCheck == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UNKNOWN, Defines.ERROR_UNKNOWN, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UNKNOWN, Defines.CODE_UNKNOWN, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // if oathrequest if (workerIdOrName .compareTo(Defines.WORKER_OATHREQUEST) == 0) { method = ExtFunc .getContent( Defines._METHOD, xmlData); transactionData = ExtFunc .getContent( Defines._TRANSACTIONDATA, xmlData); subject = ExtFunc .getContent( Defines._SUBJECT, xmlData); if ((method .compareTo("") == 0) || (transactionData .compareTo("") == 0)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!(method .compareTo(Defines._OTPSMS) == 0) && !(method .compareTo(Defines._OTPEMAIL) == 0)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDOTPMETHOD, Defines.ERROR_INVALIDOTPMETHOD, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDOTPMETHOD, Defines.CODE_INVALIDOTPMETHOD, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!DBConnector .getInstances() .authCheckOTPMethod( channelName, user, method)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDOTPMETHOD, Defines.ERROR_INVALIDOTPMETHOD, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDOTPMETHOD, Defines.CODE_INVALIDOTPMETHOD, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } /* if (!DBConnector .getInstances() .authCheckOTPPerformance( channelName, user, method)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPPERFORMANCEXCEED, Defines.ERROR_OTPPERFORMANCEXCEED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPPERFORMANCEXCEED, Defines.CODE_OTPPERFORMANCEXCEED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } */ } if (workerIdOrName .compareTo(Defines.WORKER_OATHRESPONSE) == 0) { _billCode = ExtFunc .getContent( Defines._BILLCODE, xmlData); transactionData = ExtFunc .getContent( Defines._TRANSACTIONDATA, xmlData); _otp = ExtFunc .getContent( Defines._OTP, xmlData); if (_billCode .compareTo("") == 0 || transactionData .compareTo("") == 0 || _otp.compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!(transactionData .compareTo(DBConnector .getInstances() .authGetTransactionData( channelName, _billCode)) == 0)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDTRANSACSTATUS, Defines.ERROR_INVALIDTRANSACSTATUS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDTRANSACSTATUS, Defines.CODE_INVALIDTRANSACSTATUS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!DBConnector .getInstances() .authCheckOTPTransactionStatus( channelName, _billCode, Defines.OTP_STATUS_WAIT) && !DBConnector .getInstances() .authCheckOTPTransactionStatus( channelName, _billCode, Defines.OTP_STATUS_FAIL) && !DBConnector .getInstances() .authCheckOTPTransactionStatus( channelName, _billCode, Defines.OTP_STATUS_TIME) && !DBConnector .getInstances() .authCheckOTPTransactionStatus( channelName, _billCode, Defines.OTP_STATUS_EXPI)) { if (!DBConnector .getInstances() .authCheckOTPTransactionStatus( channelName, _billCode, Defines.ERROR_OTPLOCKED)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDTRANSACSTATUS, Defines.ERROR_INVALIDTRANSACSTATUS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDTRANSACSTATUS, Defines.CODE_INVALIDTRANSACSTATUS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPLOCKED, Defines.ERROR_OTPLOCKED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPLOCKED, Defines.CODE_OTPLOCKED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } Metadata billCodeOTP = new Metadata( "BillCode", _billCode); Metadata otpOTP = new Metadata( "OTP", _otp); requestMetadata .add(billCodeOTP); requestMetadata .add(otpOTP); } Metadata channelNameOTP = new Metadata( Defines._CHANNEL, channelName); Metadata userOTP = new Metadata( Defines._USER, user); requestMetadata .add(channelNameOTP); requestMetadata .add(userOTP); } else if (workerIdOrName .compareTo("CapicomValidator") == 0) { String capicomSignature = ExtFunc .getContent( Defines._CAPICOMSIGNATURE, xmlData); unsignedData = capicomSignature; if (capicomSignature .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_NOCAPICOMSIGNATURE, Defines.ERROR_NOCAPICOMSIGNATURE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_NOCAPICOMSIGNATURE, Defines.CODE_NOCAPICOMSIGNATURE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } data = Base64 .decode(capicomSignature); } else { // Signer and // Validator // Check FileType if // Signer if (workerIdOrName .indexOf("Signer") != -1) { fileType = ExtFunc .getContent( Defines._FILETYPE, xmlData); if (fileType .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDFILETYPE, Defines.ERROR_INVALIDFILETYPE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDFILETYPE, Defines.CODE_INVALIDFILETYPE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } if (workerIdOrName .compareTo("CMSSigner") == 0) { String dataToSign = ExtFunc .getContent( Defines._DATATOSIGN, xmlData); if (dataToSign .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDDATATOSIGN, Defines.ERROR_INVALIDDATATOSIGN, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDDATATOSIGN, Defines.CODE_INVALIDDATATOSIGN, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } try { data = dataToSign .getBytes("UTF-16LE"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else { if (byteData == null || Arrays .equals(byteData, NULL)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_NOBASE64FILE, Defines.ERROR_NOBASE64FILE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_NOBASE64FILE, Defines.CODE_NOBASE64FILE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } data = byteData; } } // save log for text file // input if (workerIdOrName .compareTo(Defines.WORKER_XMLVALIDATOR) == 0 || workerIdOrName .compareTo(Defines.WORKER_XMLSIGNER) == 0) { unsignedData = new String( data); } final RequestContext requestContext = handleRequestContext( ipClient, requestMetadata, workerId); final ProcessRequest req = new GenericSignRequest( requestId, data); final ProcessResponse resp = getWorkerSession() .process(workerId, req, requestContext); if (resp instanceof GenericSignResponse) { final GenericSignResponse signResponse = (GenericSignResponse) resp; if (signResponse .getRequestID() != requestId) { LOG.error("Response ID " + signResponse .getRequestID() + " not matching request ID " + requestId); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_NOTMATCHID, Defines.ERROR_NOTMATCHID, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_NOTMATCHID, Defines.CODE_NOTMATCHID, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } DataResponse response = new DataResponse( requestId, signResponse .getProcessedData(), signResponse .getArchiveId(), signResponse .getSignerCertificate() == null ? signResponse .getSignerCertificateChainBytes() : signResponse .getSignerCertificate() .getEncoded(), getResponseMetadata(requestContext), signResponse .getResponseCode(), signResponse .getResponseMessage(), signResponse .getSignerInfoResponse()); int responseCode = signResponse .getResponseCode(); String responseMessage = signResponse .getResponseMessage(); if (workerIdOrName .indexOf("Validator") != -1 && workerIdOrName .indexOf("OATH") == -1) { // Validator if (responseCode == Defines.CODE_SUCCESS) { DBConnector .getInstances() .resetErrorCounterHWPKI( channelName, user); List signInfo = signResponse .getSignerInfoResponse(); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( responseCode, responseMessage, channelName, user, signInfo, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, responseMessage, responseCode, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else { int pkiCheck = DBConnector .getInstances() .leftRetryHWPKI( channelName, user); if (pkiCheck == -100) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_PKILOCKED, Defines.ERROR_PKILOCKED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, responseMessage, responseCode, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( responseCode, responseMessage, channelName, user, pkiCheck, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, responseMessage, responseCode, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } else if (workerIdOrName .indexOf("Signer") != -1) { // Signer if (responseCode == Defines.CODE_SUCCESS) { byte[] signedFile = signResponse .getProcessedData(); String signingcert = signResponse .getSignerCertificate() == null ? new String( Base64.encode(signResponse .getSignerCertificateChainBytes())) : new String( Base64.encode(signResponse .getSignerCertificate() .getEncoded())); // save log for // text file // output if (workerIdOrName .compareTo(Defines.WORKER_XMLSIGNER) == 0) { signedData = new String( signedFile); } String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( responseCode, responseMessage, channelName, user, fileType, signingcert, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, responseMessage, responseCode, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData, signedFile)) .toBytes()); continue; } } else { // OATHRequest if (workerIdOrName .compareTo(Defines.WORKER_OATHREQUEST) == 0) { String otpInformation = ""; String otp = new String( signResponse .getProcessedData()); int otpInformationID = DBConnector .getInstances() .authGetOTPInformationID( channelName, user); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseOATHMessage( Defines.CODE_OTP_STATUS_WAIT, Defines.OTP_STATUS_WAIT, channelName, user, billCode); int logID = DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.OTP_STATUS_WAIT, Defines.CODE_OTP_STATUS_WAIT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); boolean res = DBConnector .getInstances() .authInsertOTPTransaction( logID, otp, transactionData, otpInformationID, method); if (method .compareTo(Defines._OTPEMAIL) == 0) { String email = DBConnector .getInstances() .authGetEmailOTP( channelName, user); otpInformation = DBConnector .getInstances() .OTPInformationGeneration( transactionData, otp); // Email // Connector final String content = "SENDEMAIL" + email + "" + otpInformation + "" + "" + subject + ""; CAGConnector wsConnector = CAGConnectorSrv .getInstance() .getWS(); String otp_response = wsConnector .call(content); DBConnector .getInstances() .authInsertEmail( channelName, ExtFunc.getContent( "ServiceID", otp_response), email, otpInformation, (ExtFunc.getContent( "Status", otp_response) .compareTo( "true") == 0), ExtFunc.getContent( "ResponseMessage", otp_response), logID); } else { String phoneNo = DBConnector .getInstances() .authGetPhoneNoOTP( channelName, user); otpInformation = DBConnector .getInstances() .OTPInformationGeneration( ExtFunc.removeAccent(transactionData), otp); // SMS // Gateway final String content = "SENDSMS" + phoneNo + "" + otpInformation + ""; CAGConnector wsConnector = CAGConnectorSrv .getInstance() .getWS(); String otp_response = wsConnector .call(content); DBConnector .getInstances() .authInsertSMS( channelName, ExtFunc.getContent( "ServiceID", otp_response), phoneNo, otpInformation, (ExtFunc.getContent( "Status", otp_response) .compareTo( "true") == 0), ExtFunc.getContent( "ResponseMessage", otp_response), logID); } ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (workerIdOrName .compareTo(Defines.WORKER_OATHRESPONSE) == 0) { if (responseCode != Defines.CODE_SUCCESS) { int otpCheck = DBConnector .getInstances() .leftRetryHWOTP( channelName, user); if (otpCheck == -100) { String[] otpTransaction = DBConnector .getInstances() .authGetOTPTransaction( channelName, _billCode); DBConnector .getInstances() .authSetOTPTransactionStatus( Integer.parseInt(otpTransaction[0]), Defines.OTP_STATUS_EXPI); String pData = ExtFunc .genResponseOATHMessage( Defines.CODE_OTPLOCKED, Defines.ERROR_OTPLOCKED, channelName, user, _billCode); String billCode = ExtFunc .getBillCode(); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPLOCKED, Defines.CODE_OTPLOCKED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String pData = ExtFunc .genResponseOATHMessage( responseCode, responseMessage, channelName, user, _billCode, otpCheck); String billCode = ExtFunc .getBillCode(); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, responseMessage, responseCode, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // SUCCESS DBConnector .getInstances() .resetErrorCounterHWOTP( channelName, user); String pData = ExtFunc .genResponseOATHMessage( responseCode, responseMessage, channelName, user, _billCode); String billCode = ExtFunc .getBillCode(); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, responseMessage, responseCode, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else { // OATHValidator // and OATHSync if (responseCode != Defines.CODE_SUCCESS) { // Su dung // lai store // checkOTP // de tra ve // so lan // con lai int otpCheck = DBConnector .getInstances() .leftRetryHWOTP( channelName, user); LOG.info("Real OTP left retry: " + new String( signResponse .getProcessedData())); if (otpCheck == -100) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPLOCKED, Defines.ERROR_OTPLOCKED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPLOCKED, Defines.CODE_OTPLOCKED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( responseCode, responseMessage, channelName, user, otpCheck, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, responseMessage, responseCode, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (responseCode == Defines.CODE_SUCCESS) { DBConnector .getInstances() .resetErrorCounterHWOTP( channelName, user); } } } String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( responseCode, responseMessage, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, responseMessage, responseCode, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else { LOG.error("Unexpected return type: " + resp.getClass() .getName()); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UNEXPECTEDRETURNTYPE, Defines.ERROR_UNEXPECTEDRETURNTYPE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UNEXPECTEDRETURNTYPE, Defines.CODE_UNEXPECTEDRETURNTYPE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } catch (CertificateEncodingException ex) { LOG.error( "Signer certificate could not be encoded", ex); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SIGNERCERTENCODE, Defines.ERROR_SIGNERCERTENCODE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_SIGNERCERTENCODE, Defines.CODE_SIGNERCERTENCODE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } catch (IllegalRequestException ex) { LOG.info("Request failed: " + ex.getMessage()); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INTERNALSYSTEM, Defines.ERROR_INTERNALSYSTEM, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INTERNALSYSTEM, Defines.CODE_INTERNALSYSTEM, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } catch (CryptoTokenOfflineException ex) { LOG.info("Token offline: " + ex.getMessage()); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_WORKEROFFLINE, Defines.ERROR_WORKEROFFLINE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_WORKEROFFLINE, Defines.CODE_WORKEROFFLINE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } catch (AuthorizationRequiredException ex) { LOG.info("Request failed: " + ex.getMessage()); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INTERNALSYSTEM, Defines.ERROR_INTERNALSYSTEM, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INTERNALSYSTEM, Defines.CODE_INTERNALSYSTEM, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } catch (AccessDeniedException ex) { LOG.info("Request failed: " + ex.getMessage()); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INTERNALSYSTEM, Defines.ERROR_INTERNALSYSTEM, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INTERNALSYSTEM, Defines.CODE_INTERNALSYSTEM, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } catch (SignServerException ex) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INTERNALSYSTEM, Defines.ERROR_INTERNALSYSTEM, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INTERNALSYSTEM, Defines.CODE_INTERNALSYSTEM, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } else { // Agreement String action = ExtFunc .getContent( Defines._ACTION, xmlData); if (action .compareTo(Defines.AGREEMENT_ACTION_REG) == 0) { // do operation String isOtpSms = ExtFunc .getContent( Defines._ISOTPSMS, xmlData); String otpSms = ExtFunc .getContent( Defines._OTPSMS, xmlData); String isOtpEmail = ExtFunc .getContent( Defines._ISOTPEMAIL, xmlData); String otpEmail = ExtFunc .getContent( Defines._OTPEMAIL, xmlData); String isOtpHardware = ExtFunc .getContent( Defines._ISOTPHARDWARE, xmlData); String otpHardware = ExtFunc .getContent( Defines._OTPHARDWARE, xmlData); String isPKI = ExtFunc .getContent( Defines._ISPKI, xmlData); String pkiCertificate = ExtFunc .getContent( Defines._CERTIFICATE, xmlData); String isOtpSoftware = ExtFunc .getContent( Defines._ISOTPSOFTWARE, xmlData); String expiration = ExtFunc .getContent( Defines._EXPIRATION, xmlData); String branchId = ExtFunc.getContent( Defines._BranchID, xmlData); if (isOtpSms.compareTo("") == 0 || isOtpEmail .compareTo("") == 0 || isOtpHardware .compareTo("") == 0 || isPKI.compareTo("") == 0 || isOtpSoftware .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!(isOtpEmail .compareTo(Defines.TRUE) == 0)) { isOtpEmail = Defines.FALSE; otpEmail = Defines.NULL; } if (!(isOtpHardware .compareTo(Defines.TRUE) == 0)) { isOtpHardware = Defines.FALSE; otpHardware = Defines.NULL; } if (!(isOtpSms .compareTo(Defines.TRUE) == 0)) { isOtpSms = Defines.FALSE; otpSms = Defines.NULL; } if (!(isOtpSoftware .compareTo(Defines.TRUE) == 0)) { isOtpSoftware = Defines.FALSE; } if (!(isPKI .compareTo(Defines.TRUE) == 0)) { isPKI = Defines.FALSE; pkiCertificate = Defines.NULL; } if (isOtpEmail .compareTo(Defines.TRUE) == 0) { if (!(otpEmail .compareTo("") == 0)) { if (!ExtFunc .isValidEmail(otpEmail)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (DBConnector .getInstances() .authCheckOTPEmail(user, otpEmail)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_USEREMAILEXIT, Defines.ERROR_USEREMAILEXIT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_USEREMAILEXIT, Defines.CODE_USEREMAILEXIT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } else { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } if (isOtpSms .compareTo(Defines.TRUE) == 0) { if (!(otpSms .compareTo("") == 0)) { if (!ExtFunc .isValidPhoneNumber(otpSms)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (DBConnector .getInstances() .authCheckOTPSMS(user, otpSms)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_USERPHONEEXIT, Defines.ERROR_USERPHONEEXIT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_USERPHONEEXIT, Defines.CODE_USERPHONEEXIT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } else { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // Check expireation if (expiration .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } int expire = 0; try { expire = Integer .parseInt(expiration); } catch (NumberFormatException e) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (expire <= 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // check user if (DBConnector .getInstances() .checkUser(user, channelName)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDUSERAGREEMENT, Defines.ERROR_INVALIDUSERAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDUSERAGREEMENT, Defines.CODE_INVALIDUSERAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; }// end check user // Check certificate PKI if (isPKI .compareTo(Defines.TRUE) == 0) { if (!isCertificateValid(pkiCertificate)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDCERTIFICATE, Defines.ERROR_INVALIDCERTIFICATE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDCERTIFICATE, Defines.CODE_INVALIDCERTIFICATE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String[] certs = ExtFunc .getCertificateComponents(pkiCertificate); if (DBConnector .getInstances() .checkPKICertificate( certs[0], channelName)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_CERTIFICATEEXITED, Defines.ERROR_CERTIFICATEEXITED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_CERTIFICATEEXITED, Defines.CODE_CERTIFICATEEXITED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // end check certificate // pki // OTP if (isOtpHardware .compareTo(Defines.TRUE) == 0) { // Check if serialNumber // of OTP token is null if (otpHardware .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (DBConnector .getInstances() .authCheckOTPHardware( otpHardware)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPHARDWAREEXIT, Defines.ERROR_OTPHARDWAREEXIT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPHARDWAREEXIT, Defines.CODE_OTPHARDWAREEXIT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } otpcore = getOTPCore(); if (otpcore == null) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPEXCEPTION, Defines.ERROR_OTPEXCEPTION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPEXCEPTION, Defines.CODE_OTPEXCEPTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // Check connection try { if (!otpcore .connectTest( otpcore.getConfig(), false)) { LOG.info("OTP Connect test failed!"); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPCONNECTION, Defines.ERROR_OTPCONNECTION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPCONNECTION, Defines.CODE_OTPCONNECTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // Add user to // database UserInfo userInfo = new UserInfo(); userInfo.setUserName(user); otpcore.addUser(userInfo); LOG.info("Add user succeed!"); // Bind user and // token otpcore.bind( user, otpHardware, 1); LOG.info("Bind user and token succeed!"); } catch (OTPCoreException e) { e.printStackTrace(); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPEXCEPTION, Defines.ERROR_OTPEXCEPTION + ": " + e.getMessage(), channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPEXCEPTION + ": " + e.getMessage(), Defines.CODE_OTPEXCEPTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // insert agreement int agreementID = DBConnector .getInstances() .insertAgreement( channelName, user, Defines.AGREEMENT_STATUS_ACTI, expire, idTag, branchId); if (agreementID == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_CREATEAGREEMENT, Defines.ERROR_CREATEAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_CREATEAGREEMENT, Defines.CODE_CREATEAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } int res; res = DBConnector .getInstances() .insertOTPInformation( agreementID, otpSms, otpEmail, otpHardware, (isOtpEmail .compareTo(Defines.TRUE) == 0), (isOtpSms .compareTo(Defines.TRUE) == 0), (isOtpHardware .compareTo(Defines.TRUE) == 0), (isOtpSoftware .compareTo(Defines.TRUE) == 0)); if (res == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INSERTOTPINFORMATION, Defines.ERROR_INSERTOTPINFORMATION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INSERTOTPINFORMATION, Defines.CODE_INSERTOTPINFORMATION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (isPKI .compareTo(Defines.TRUE) == 0) { String[] certs = ExtFunc .getCertificateComponents(pkiCertificate); res = DBConnector .getInstances() .insertPKIInformation( agreementID, certs[0], certs[0].substring( 2, 4), certs[3], certs[4], getIssuerName(certs[2]), pkiCertificate, (isPKI.compareTo(Defines.TRUE) == 0)); } else { res = DBConnector .getInstances() .insertPKIInformation( agreementID, Defines.NULL, Defines.NULL, Defines.NULL, Defines.NULL, Defines.NULL, Defines.NULL, (isPKI.compareTo(Defines.TRUE) == 0)); } if (res == -1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INSERTPKIINFORMATION, Defines.ERROR_INSERTPKIINFORMATION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INSERTPKIINFORMATION, Defines.CODE_INSERTPKIINFORMATION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SUCCESS, Defines.SUCCESS, channelName, user, Defines.AGREEMENT_STATUS_ACTI, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.SUCCESS, Defines.CODE_SUCCESS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (action .compareTo(Defines.AGREEMENT_ACTION_CHAINF) == 0) { int agreementID = DBConnector .getInstances() .authGetArrangementID( channelName, user); if (agreementID == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_AGREEMENTNOTEXITS, Defines.ERROR_AGREEMENTNOTEXITS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_AGREEMENTNOTEXITS, Defines.CODE_AGREEMENTNOTEXITS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String isOtpSms = ExtFunc .getContent( Defines._ISOTPSMS, xmlData); String otpSms = ExtFunc .getContent( Defines._OTPSMS, xmlData); String isOtpEmail = ExtFunc .getContent( Defines._ISOTPEMAIL, xmlData); String otpEmail = ExtFunc .getContent( Defines._OTPEMAIL, xmlData); String isOtpHardware = ExtFunc .getContent( Defines._ISOTPHARDWARE, xmlData); String otpHardware = ExtFunc .getContent( Defines._OTPHARDWARE, xmlData); String isPKI = ExtFunc .getContent( Defines._ISPKI, xmlData); String pkiCertificate = ExtFunc .getContent( Defines._CERTIFICATE, xmlData); String isOtpSoftware = ExtFunc .getContent( Defines._ISOTPSOFTWARE, xmlData); String isUnblockOTP = ExtFunc .getContent( Defines._ISUNBLOCKOTP, xmlData); String expiration = ExtFunc .getContent( Defines._EXPIRATION, xmlData); String isExtend = ExtFunc .getContent( Defines._ISEXTEND, xmlData); boolean isEffective = false; // OTP SMS if (!(isOtpSms .compareTo("") == 0)) { if (!(isOtpSms .compareTo(Defines.TRUE) == 0)) isOtpSms = Defines.FALSE; // Check OTP Method if (isOtpSms .compareTo(Defines.FALSE) == 0) { if (DBConnector .getInstances() .authCheckOTPMethod( channelName, user, Defines._OTPSMS)) { LOG.info("Invalid OTP SMS Method"); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDOTPMETHOD, Defines.ERROR_INVALIDOTPMETHOD, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDOTPMETHOD, Defines.CODE_INVALIDOTPMETHOD, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } if (!(otpSms .compareTo("") == 0) && (isOtpSms .compareTo(Defines.TRUE) == 0)) { if (!ExtFunc .isValidPhoneNumber(otpSms)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (DBConnector .getInstances() .authCheckOTPSMS(user, otpSms)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_USERPHONEEXIT, Defines.ERROR_USERPHONEEXIT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_USERPHONEEXIT, Defines.CODE_USERPHONEEXIT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } boolean res = DBConnector .getInstances() .authSetIsOTPSMSArrangement( agreementID, (isOtpSms .compareTo(Defines.TRUE) == 0)); if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEOTPSMS, Defines.ERROR_UPDATEOTPSMS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEOTPSMS, Defines.CODE_UPDATEOTPSMS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!DBConnector .getInstances() .authCheckOTPMethod( channelName, user, Defines._OTPSMS)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDOTPMETHOD, Defines.ERROR_INVALIDOTPMETHOD, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDOTPMETHOD, Defines.CODE_INVALIDOTPMETHOD, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else { res = DBConnector .getInstances() .authSetOTPSMSArrangement( agreementID, otpSms); isEffective = true; if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEOTPSMS, Defines.ERROR_UPDATEOTPSMS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEOTPSMS, Defines.CODE_UPDATEOTPSMS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } } else if ((otpSms .compareTo("") == 0) && (isOtpSms .compareTo(Defines.TRUE) == 0)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // end otp sms // OTPEmail if (!(isOtpEmail .compareTo("") == 0)) { if (!(isOtpEmail .compareTo(Defines.TRUE) == 0)) isOtpEmail = Defines.FALSE; // Check OTP Method if (isOtpEmail .compareTo(Defines.FALSE) == 0) { if (DBConnector .getInstances() .authCheckOTPMethod( channelName, user, Defines._OTPEMAIL)) { LOG.info("Invalid OTP Email Method"); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDOTPMETHOD, Defines.ERROR_INVALIDOTPMETHOD, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDOTPMETHOD, Defines.CODE_INVALIDOTPMETHOD, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } if (!(otpEmail .compareTo("") == 0) && (isOtpEmail .compareTo(Defines.TRUE) == 0)) { if (!ExtFunc .isValidEmail(otpEmail)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (DBConnector .getInstances() .authCheckOTPEmail(user, otpEmail)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_USEREMAILEXIT, Defines.ERROR_USEREMAILEXIT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_USEREMAILEXIT, Defines.CODE_USEREMAILEXIT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } boolean res = DBConnector .getInstances() .authSetIsOTPEmailArrangement( agreementID, (isOtpEmail .compareTo(Defines.TRUE) == 0)); if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEOTPEMAIL, Defines.ERROR_UPDATEOTPEMAIL, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEOTPEMAIL, Defines.CODE_UPDATEOTPEMAIL, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!DBConnector .getInstances() .authCheckOTPMethod( channelName, user, Defines._OTPEMAIL)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDOTPMETHOD, Defines.ERROR_INVALIDOTPMETHOD, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDOTPMETHOD, Defines.CODE_INVALIDOTPMETHOD, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else { res = DBConnector .getInstances() .authSetOTPEmailArrangement( agreementID, otpEmail); isEffective = true; if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEOTPEMAIL, Defines.ERROR_UPDATEOTPEMAIL, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEOTPEMAIL, Defines.CODE_UPDATEOTPEMAIL, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } } else if ((otpEmail .compareTo("") == 0) && (isOtpEmail .compareTo(Defines.TRUE) == 0)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // end OTP email // OTP hardware if (!(isOtpHardware .compareTo("") == 0)) { if (!(isOtpHardware .compareTo(Defines.TRUE) == 0)) isOtpHardware = Defines.FALSE; // Check OTP Method if (isOtpHardware .compareTo(Defines.FALSE) == 0) { if (DBConnector .getInstances() .authCheckOTPMethod( channelName, user, Defines._OTPHARDWARE)) { LOG.info("Invalid OTP Hardware Method"); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDOTPMETHOD, Defines.ERROR_INVALIDOTPMETHOD, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDOTPMETHOD, Defines.CODE_INVALIDOTPMETHOD, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } if (!(otpHardware .compareTo("") == 0) && (isOtpHardware .compareTo(Defines.TRUE) == 0)) { boolean res = DBConnector .getInstances() .authSetIsOTPHardwareArrangement( agreementID, (isOtpHardware .compareTo(Defines.TRUE) == 0)); if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEOTPHARDWARE, Defines.ERROR_UPDATEOTPHARDWARE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEOTPHARDWARE, Defines.CODE_UPDATEOTPHARDWARE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!DBConnector .getInstances() .authCheckOTPMethod( channelName, user, Defines._OTPHARDWARE)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDOTPMETHOD, Defines.ERROR_INVALIDOTPMETHOD, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDOTPMETHOD, Defines.CODE_INVALIDOTPMETHOD, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (DBConnector .getInstances() .authCheckOTPHardware( otpHardware)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPHARDWAREEXIT, Defines.ERROR_OTPHARDWAREEXIT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPHARDWAREEXIT, Defines.CODE_OTPHARDWAREEXIT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String olderOtpHardware = DBConnector .getInstances() .authGetOTPHardware( channelName, user); if (olderOtpHardware .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_ERRORGETOLDOTP, Defines.ERROR_ERRORGETOLDOTP, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_ERRORGETOLDOTP, Defines.CODE_ERRORGETOLDOTP, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } otpcore = getOTPCore(); if (otpcore == null) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPEXCEPTION, Defines.ERROR_OTPEXCEPTION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPEXCEPTION, Defines.CODE_OTPEXCEPTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } try { List users = otpcore .getUserInfo(user); if (users .size() == 0) { UserInfo userInfo = new UserInfo(); userInfo.setUserName(user); otpcore.addUser(userInfo); otpcore.bind( user, otpHardware, 1); } else { otpcore.unbind( user, olderOtpHardware); otpcore.bind( user, otpHardware, 1); } } catch (OTPCoreException e) { e.printStackTrace(); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPEXCEPTION, Defines.ERROR_OTPEXCEPTION + ": " + e.getMessage(), channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPEXCEPTION + ": " + e.getMessage(), Defines.CODE_OTPEXCEPTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } boolean resHOTP = DBConnector .getInstances() .authSetOTPHardwareArrangement( agreementID, otpHardware); isEffective = true; if (!resHOTP) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEOTPHARDWARE, Defines.ERROR_UPDATEOTPHARDWARE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEOTPHARDWARE, Defines.CODE_UPDATEOTPHARDWARE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } else if ((otpHardware .compareTo("") == 0) && (isOtpHardware .compareTo(Defines.TRUE) == 0)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // End OTP Hardware // OTP Software if (!(isOtpSoftware .compareTo("") == 0)) { if (!(isOtpSoftware .compareTo(Defines.TRUE) == 0)) isOtpSoftware = Defines.FALSE; boolean res = DBConnector .getInstances() .authSetIsOTPSoftwareArrangement( agreementID, (isOtpSoftware .compareTo(Defines.TRUE) == 0)); if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEOTPSOFTWARE, Defines.ERROR_UPDATEOTPSOFTWARE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEOTPSOFTWARE, Defines.CODE_UPDATEOTPSOFTWARE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } isEffective = true; } // End otp software // PKI if (!(isPKI.compareTo("") == 0)) { if (!(isPKI .compareTo(Defines.TRUE) == 0)) isPKI = Defines.FALSE; // Check PKI method if (isPKI .compareTo(Defines.FALSE) == 0) { if (DBConnector .getInstances() .authCheckPKIArrangement( agreementID)) { LOG.info("Invalid PKI Method"); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPKIMETHOD, Defines.ERROR_INVALIDPKIMETHOD, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPKIMETHOD, Defines.CODE_INVALIDPKIMETHOD, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } if (!(pkiCertificate .compareTo("") == 0) && (isPKI .compareTo(Defines.TRUE) == 0)) { boolean res = DBConnector .getInstances() .authSetIsPKIArrangement( agreementID, (isPKI.compareTo(Defines.TRUE) == 0)); if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEPKI, Defines.ERROR_UPDATEPKI, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEPKI, Defines.CODE_UPDATEPKI, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } res = DBConnector .getInstances() .authCheckPKIArrangement( agreementID); if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_NOPKIAGREEMENT, Defines.ERROR_NOPKIAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_NOPKIAGREEMENT, Defines.CODE_NOPKIAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else { if (!isCertificateValid(pkiCertificate)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDCERTIFICATE, Defines.ERROR_INVALIDCERTIFICATE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDCERTIFICATE, Defines.CODE_INVALIDCERTIFICATE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else { String[] certs = ExtFunc .getCertificateComponents(pkiCertificate); if (DBConnector .getInstances() .checkPKICertificate( certs[0], channelName)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_CERTIFICATEEXITED, Defines.ERROR_CERTIFICATEEXITED, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_CERTIFICATEEXITED, Defines.CODE_CERTIFICATEEXITED, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } res = DBConnector .getInstances() .authSetCertificateArrangement( agreementID, certs[0], certs[0].substring( 2, 4), certs[3], certs[4], getIssuerName(certs[2]), pkiCertificate); isEffective = true; if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEPKI, Defines.ERROR_UPDATEPKI, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEPKI, Defines.CODE_UPDATEPKI, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } } } else if ((pkiCertificate .compareTo("") == 0) && (isPKI .compareTo(Defines.TRUE) == 0)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } // End PKI updated // Unblock OTP if (!(isUnblockOTP .compareTo("") == 0)) { if (isUnblockOTP .compareTo(Defines.TRUE) == 0) { boolean res = DBConnector .getInstances() .authCheckOTPArrangement( agreementID); if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_NOOTPAGREEMENT, Defines.ERROR_NOOTPAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_NOOTPAGREEMENT, Defines.CODE_NOOTPAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String _olderOtpHardware = DBConnector .getInstances() .authGetOTPHardware( channelName, user); if (_olderOtpHardware .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_ERRORGETOLDOTP, Defines.ERROR_ERRORGETOLDOTP, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_ERRORGETOLDOTP, Defines.CODE_ERRORGETOLDOTP, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } otpcore = getOTPCore(); if (otpcore == null) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPEXCEPTION, Defines.ERROR_OTPEXCEPTION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPEXCEPTION, Defines.CODE_OTPEXCEPTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } try { otpcore.setTokenLocked( _olderOtpHardware, 0); DBConnector .getInstances() .resetErrorCounterHWOTP( channelName, user); isEffective = true; } catch (OTPCoreException e) { e.printStackTrace(); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPEXCEPTION, Defines.ERROR_OTPEXCEPTION + ": " + e.getMessage(), channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPEXCEPTION + ": " + e.getMessage(), Defines.CODE_OTPEXCEPTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } } // End IsUnblock OTP // Extend if (!(isExtend .compareTo("") == 0)) { if (isExtend .compareTo(Defines.TRUE) == 0) { int expire = 0; try { expire = Integer .parseInt(expiration); } catch (NumberFormatException e) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (expire <= 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } boolean res = DBConnector .getInstances() .authSetExtendArrangement( agreementID, channelName, expire); isEffective = true; if (!res) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UPDATEEXTEND, Defines.ERROR_UPDATEEXTEND, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_UPDATEEXTEND, Defines.CODE_UPDATEEXTEND, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } } // end extend if (isEffective) { // Done String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SUCCESS, Defines.SUCCESS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.SUCCESS, Defines.CODE_SUCCESS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // Done String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_UNCHANGEDAGREEMENT, Defines.INFO_UNCHANGEAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.INFO_UNCHANGEAGREEMENT, Defines.CODE_UNCHANGEDAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (action .compareTo(Defines.AGREEMENT_ACTION_UNREG) == 0) { int agreementID = DBConnector .getInstances() .authGetArrangementID( channelName, user); if (agreementID == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_AGREEMENTNOTEXITS, Defines.ERROR_AGREEMENTNOTEXITS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_AGREEMENTNOTEXITS, Defines.CODE_AGREEMENTNOTEXITS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String agreementStatus = ExtFunc .getContent( Defines._AGREEMENTSTATUS, xmlData); if (agreementStatus .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (agreementStatus .compareTo(Defines.AGREEMENT_STATUS_CANC) == 0) { String olderOtpHardware = DBConnector .getInstances() .authGetOTPHardware( channelName, user); if (olderOtpHardware .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_ERRORGETOLDOTP, Defines.ERROR_ERRORGETOLDOTP, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_ERRORGETOLDOTP, Defines.CODE_ERRORGETOLDOTP, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!(olderOtpHardware .compareTo(Defines.NULL) == 0)) { otpcore = getOTPCore(); if (otpcore == null) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPEXCEPTION, Defines.ERROR_OTPEXCEPTION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPEXCEPTION, Defines.CODE_OTPEXCEPTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } try { otpcore.unbind( user, olderOtpHardware); otpcore.delUser(user); } catch (OTPCoreException e) { e.printStackTrace(); String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_OTPEXCEPTION, Defines.ERROR_OTPEXCEPTION + ": " + e.getMessage(), channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_OTPEXCEPTION + ": " + e.getMessage(), Defines.CODE_OTPEXCEPTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } } int updateAgreement = DBConnector .getInstances() .authUpdateAgreement( agreementID, channelName, agreementStatus); if (updateAgreement == 1) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDAGREESTATUS, Defines.ERROR_INVALIDAGREESTATUS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDAGREESTATUS, Defines.CODE_INVALIDAGREESTATUS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } // Done unregistration String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SUCCESS, Defines.SUCCESS, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.SUCCESS, Defines.CODE_SUCCESS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else if (action .compareTo(Defines.AGREEMENT_ACTION_VALIDA) == 0) { String certificate = ExtFunc .getContent( Defines._CERTIFICATE, xmlData); if (certificate .compareTo("") == 0) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDPARAMETER, Defines.ERROR_INVALIDPARAMETER, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDPARAMETER, Defines.CODE_INVALIDPARAMETER, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if (!isCertificateValid(certificate)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDCERTIFICATE, Defines.ERROR_INVALIDCERTIFICATE, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDCERTIFICATE, Defines.CODE_INVALIDCERTIFICATE, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String certs[] = ExtFunc .getCertificateComponents(certificate); String res = DBConnector .getInstances() .authAgreementValidation( certs[0], getIssuerName(certs[2])); String pCode = res .split("#")[0]; String pMess = res .split("#")[1]; if ((pCode.compareTo("1") == 0) || (pCode .compareTo("3") == 0)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_NOPKIAGREEMENT, Defines.ERROR_NOPKIAGREEMENT, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_NOPKIAGREEMENT, Defines.CODE_NOPKIAGREEMENT, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } if ((pCode.compareTo("2") == 0) || (pCode .compareTo("4") == 0) || (pCode .compareTo("5") == 0)) { String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_AGREEMENTNOTREADY, Defines.ERROR_AGREEMENTNOTREADY, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_AGREEMENTNOTREADY, Defines.CODE_AGREEMENTNOTREADY, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_SUCCESS, Defines.SUCCESS, channelName, pMess, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, pMess, Defines.SUCCESS, Defines.CODE_SUCCESS, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } else { // Invalid action String billCode = ExtFunc .getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDACTION, Defines.ERROR_INVALIDACTION, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDACTION, Defines.CODE_INVALIDACTION, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); ResponseData( requestObject, (new TransactionInfo( pData)) .toBytes()); continue; } } } } else { String billCode = ExtFunc.getBillCode(); String pData = ExtFunc .genResponseMessage( Defines.CODE_INVALIDCHANNEL, Defines.ERROR_INVALIDCHANNEL, channelName, user, billCode); DBConnector .getInstances() .writeLogToDataBaseOutside( functionName, username, ipClient, user, Defines.ERROR_INVALIDCHANNEL, Defines.CODE_INVALIDCHANNEL, sslSubDn, sslIseDn, sslSnb, idTag, channelName, xmlData, pData, billCode, unsignedData, signedData); result = pData; } ResponseData(requestObject, (new TransactionInfo(result)) .toBytes()); continue; } // cagCredential not null } // xmlData and fileData not null } // Thread.sleep(500); } catch (Exception ex) { ex.printStackTrace(); String billCode = ExtFunc.getBillCode(); String pData = ExtFunc.genResponseMessage( Defines.CODE_UNKNOWN, Defines.ERROR_UNKNOWN + ": " + ex.getMessage(), "", "", billCode); DBConnector.getInstances().writeLogToDataBaseOutside( "processData", "", "", "", Defines.ERROR_UNKNOWN + ": " + ex.getMessage(), Defines.CODE_UNKNOWN, "", "", "", "", "", "", pData, billCode, "", ""); ResponseData(requestObject, (new TransactionInfo(pData)).toBytes()); continue; } } } }).start(); } private static IWorkerSession.ILocal getWorkerSession() { if (workersession == null) { try { workersession = ServiceLocator.getInstance().lookupLocal( IWorkerSession.ILocal.class); } catch (NamingException e) { LOG.error(e); } } return workersession; } private static int getWorkerId(String workerIdOrName) { final int retval; if (workerIdOrName.substring(0, 1).matches("\\d")) { retval = Integer.parseInt(workerIdOrName); } else { retval = getWorkerSession().getWorkerId(workerIdOrName); } return retval; } private static void ResponseData(SocketRequestObject requestObject, byte[] byteData) { // LOG.info("ReponseData and close connection..."); String timeSystem = requestObject.getTimeSystem(); Session mSession = SessionManager.getInstance().getSession(timeSystem); if (mSession != null) { ChannelHandlerContext ctx = mSession.getContext(); Channel c = ctx.channel(); ByteBuf outBuf = c.alloc().buffer(4); outBuf.writeBytes(byteData); c.writeAndFlush(outBuf); ctx.close(); SessionManager.getInstance().removeSession(timeSystem); } DBConnector.getInstances().SocketSetStatusRequest(timeSystem); } private static List getMetaData(String metaData) { List listMD = new ArrayList(); try { String xmlData = "" + metaData + ""; DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new InputSource(new StringReader( xmlData))); Element rootElement = document.getDocumentElement(); NodeList list = document.getElementsByTagName("*"); for (int i = 0; i < list.getLength(); i++) { Element element = (Element) list.item(i); if (!(element.getNodeName().compareTo("MetaData") == 0)) { // LOG.info("MetaData Name: "+ element.getNodeName()); // LOG.info("MetaData Value: "+ element.getTextContent()); Metadata tmp = new Metadata(element.getNodeName(), element.getTextContent()); listMD.add(tmp); } } } catch (Exception e) { listMD = null; } return listMD; } private static int getWorkerType(String workerName, String otpMethod) { if (workerName.indexOf("Signer") != -1 || (workerName.indexOf("Validator") != -1 && workerName .indexOf("OATH") == -1)) return 2; // PKI if (workerName.indexOf("OATH") != -1) { if ((workerName.compareTo(Defines.WORKER_OATHVALIDATOR) == 0) || (workerName.compareTo(Defines.WORKER_OATHSYNC) == 0)) return 1;// otp hardware information else { if (otpMethod.compareTo(Defines._OTPEMAIL) == 0) return 3; // otp email else return 4; // otp sms } } return 5; // agreement } private static RequestContext handleRequestContext(String ipAdress, final List requestMetadata, final int workerId) { /* * final HttpServletRequest servletRequest = (HttpServletRequest) * wsContext .getMessageContext().get(MessageContext.SERVLET_REQUEST); * String requestIP = ipAdress; X509Certificate clientCertificate = * getClientCertificate(); final RequestContext requestContext = new * RequestContext( clientCertificate, requestIP); * * IClientCredential credential; * * if (clientCertificate instanceof X509Certificate) { final * X509Certificate cert = (X509Certificate) clientCertificate; * LOG.debug("Authentication: certificate"); credential = new * CertificateClientCredential(cert.getSerialNumber() .toString(16), * cert.getIssuerDN().getName()); } else { // Check is client supplied * basic-credentials final String authorization = servletRequest * .getHeader(HTTP_AUTH_BASIC_AUTHORIZATION); if (authorization != null) * { LOG.debug("Authentication: password"); * * final String decoded[] = new String(Base64.decode(authorization * .split("\\s")[1])).split(":", 2); * * credential = new UsernamePasswordClientCredential(decoded[0], * decoded[1]); } else { LOG.debug("Authentication: none"); credential = * null; } } requestContext.put(RequestContext.CLIENT_CREDENTIAL, * credential); */ final RequestContext requestContext = new RequestContext(); /* * final LogMap logMap = LogMap.getInstance(requestContext); * * // Add HTTP specific log entries logMap.put( * IWorkerLogger.LOG_REQUEST_FULLURL, * servletRequest.getRequestURL().append("?") * .append(servletRequest.getQueryString()).toString()); * logMap.put(IWorkerLogger.LOG_REQUEST_LENGTH, * servletRequest.getHeader("Content-Length")); * logMap.put(IWorkerLogger.LOG_XFORWARDEDFOR, * servletRequest.getHeader("X-Forwarded-For")); * * logMap.put(IWorkerLogger.LOG_WORKER_NAME, * getWorkerSession().getCurrentWorkerConfig(workerId) * .getProperty(ProcessableConfig.NAME)); */ if (requestMetadata == null) { requestContext.remove(RequestContext.REQUEST_METADATA); } else { final RequestMetadata metadata = RequestMetadata .getInstance(requestContext); for (Metadata rmd : requestMetadata) { metadata.put(rmd.getName(), rmd.getValue()); } // Special handling of FILENAME String fileName = metadata.get(RequestContext.FILENAME); if (fileName != null) { requestContext.put(RequestContext.FILENAME, fileName); // logMap.put(IWorkerLogger.LOG_FILENAME, fileName); } } return requestContext; } /* * private X509Certificate getClientCertificate() { MessageContext * msgContext = wsContext.getMessageContext(); HttpServletRequest request = * (HttpServletRequest) msgContext .get(MessageContext.SERVLET_REQUEST); * X509Certificate[] certificates = (X509Certificate[]) request * .getAttribute("javax.servlet.request.X509Certificate"); * * if (certificates != null) { return certificates[0]; } return null; } */ private static List getResponseMetadata( final RequestContext requestContext) { final LinkedList result = new LinkedList(); return result; } /* * private X509Certificate[] getClientCertificates() { SOAPMessageContext * jaxwsContext = (SOAPMessageContext) wsContext .getMessageContext(); * HttpServletRequest request = (HttpServletRequest) jaxwsContext * .get(SOAPMessageContext.SERVLET_REQUEST); * * final X509Certificate[] certificates = (X509Certificate[]) request * .getAttribute("javax.servlet.request.X509Certificate"); return * certificates; } */ private static boolean isCertificateValid(String certificate) { try { CertificateFactory certFactory1 = CertificateFactory .getInstance("X.509"); InputStream in1 = new ByteArrayInputStream( DatatypeConverter.parseBase64Binary(certificate)); X509Certificate cert = (X509Certificate) certFactory1 .generateCertificate(in1); String issuer = cert.getIssuerDN().toString(); String issuerName = ""; String[] pairs = issuer.split(","); for (String pair : pairs) { String[] paramvalue = pair.split("="); if (paramvalue[0].compareTo("CN") == 0 || paramvalue[0].compareTo(" CN") == 0) { issuerName = paramvalue[1]; break; } } ArrayList caProviders = new ArrayList(); try { caProviders = DBConnector.getInstances().getCAProviders(); } catch (SQLException e) { e.printStackTrace(); return false; } String caCertificate = ""; String caCertificate2 = ""; String ocspURL = ""; String crlUrl = ""; if (issuerName.compareTo("") != 0) { for (String[] ca : caProviders) { if (ca[0].compareTo(issuerName) == 0) { ocspURL = ca[1]; caCertificate = ca[2]; crlUrl = ca[3]; caCertificate2 = ca[4]; break; } } } else { return false; } // Check date validity if (!checkDataValidity(cert)) return false; int methodValidateCert = DBConnector.getInstances() .getMethodValidateCert(); switch (methodValidateCert) { case 0: // no check LOG.info("No checking certificate status"); return true; case 1: // CRL LOG.info("CRL certificate status checking"); if (crlUrl.compareTo("") != 0 && caCertificate.compareTo("") != 0) { X509Certificate subX509 = cert; CertificateFactory certFactory = CertificateFactory .getInstance("X.509"); InputStream in = new ByteArrayInputStream( DatatypeConverter.parseBase64Binary(caCertificate)); X509Certificate caX509 = (X509Certificate) certFactory .generateCertificate(in); if (!ExtFunc.checkCertificateRelation(caX509, subX509)) { if (caCertificate2.compareTo("") != 0) { in = new ByteArrayInputStream( DatatypeConverter .parseBase64Binary(caCertificate2)); caX509 = (X509Certificate) certFactory .generateCertificate(in); if (!ExtFunc.checkCertificateRelation(caX509, subX509)) { return false; } } else { return false; } } CRLStatus CRLVarification = CertificateStatus.getInstance() .checkCRLCertificate(subX509, crlUrl); if (!CRLVarification.getIsValid()) { return true; } else { return false; } } else { return false; } case 2: // OCSP LOG.info("OCSP certificate status checking"); if (ocspURL.compareTo("") != 0 && caCertificate.compareTo("") != 0) { X509Certificate subX509 = cert; CertificateFactory certFactory = CertificateFactory .getInstance("X.509"); InputStream in = new ByteArrayInputStream( DatatypeConverter.parseBase64Binary(caCertificate)); X509Certificate caX509 = (X509Certificate) certFactory .generateCertificate(in); if (!ExtFunc.checkCertificateRelation(caX509, subX509)) { if (caCertificate2.compareTo("") != 0) { in = new ByteArrayInputStream( DatatypeConverter .parseBase64Binary(caCertificate2)); caX509 = (X509Certificate) certFactory .generateCertificate(in); if (!ExtFunc.checkCertificateRelation(caX509, subX509)) { return false; } } else { return false; } } boolean ocspStatus = false; int retryNumber = DBConnector.getInstances() .getNumberOCSPReTry(); OcspStatus ocsp_status = CertificateStatus.getInstance() .checkRevocationStatus(ocspURL, subX509, caX509, retryNumber); ocspStatus = ocsp_status.getIsValid(); if (ocspStatus) { return true; } else { return false; } } else { return false; } default: LOG.info("Signature validation and Certificate validation by OCSP (CRL if OCSP failure)"); if (crlUrl.compareTo("") != 0 && ocspURL.compareTo("") != 0 && caCertificate.compareTo("") != 0) { X509Certificate subX509 = cert; CertificateFactory certFactory = CertificateFactory .getInstance("X.509"); InputStream in = new ByteArrayInputStream( DatatypeConverter.parseBase64Binary(caCertificate)); X509Certificate caX509 = (X509Certificate) certFactory .generateCertificate(in); if (!ExtFunc.checkCertificateRelation(caX509, subX509)) { if (caCertificate2.compareTo("") != 0) { in = new ByteArrayInputStream( DatatypeConverter .parseBase64Binary(caCertificate2)); caX509 = (X509Certificate) certFactory .generateCertificate(in); if (!ExtFunc.checkCertificateRelation(caX509, subX509)) { return false; } } else { return false; } } boolean ocspStatus = false; boolean crlStatus = false; int retryNumber = DBConnector.getInstances() .getNumberOCSPReTry(); OcspStatus ocsp_status = CertificateStatus.getInstance() .checkRevocationStatus(ocspURL, subX509, caX509, retryNumber); if (ocsp_status.getCertificateState().equals( OcspStatus.ERROR)) { CRLStatus CRLVarification = CertificateStatus .getInstance().checkCRLCertificate(subX509, crlUrl); crlStatus = !CRLVarification.getIsValid(); if (crlStatus) { return true; } else { return false; } } else { ocspStatus = ocsp_status.getIsValid(); if (ocspStatus) { return true; } else { return false; } } } } } catch (Exception e) { e.printStackTrace(); } return false; } private static String getIssuerName(String DN) { String issuer = DN; String issuerName = ""; String[] pairs = issuer.split(","); for (String pair : pairs) { String[] paramvalue = pair.split("="); if (paramvalue[0].compareTo("CN") == 0 || paramvalue[0].compareTo(" CN") == 0) { issuerName = paramvalue[1]; break; } } return issuerName; } private static boolean checkDataValidity(X509Certificate x509) { try { x509.checkValidity(); return true; } catch (CertificateExpiredException e) { e.printStackTrace(); } catch (CertificateNotYetValidException e) { e.printStackTrace(); } return false; } private static OTPCore getOTPCore() { if (otpcore == null) { otpcore = OTPCoreFactory.getOTPCore(); try { otpcore.initialize("otpcore.xml", 0); } catch (OTPCoreException e) { LOG.info(e.getMessage()); try { otpcore.reloadConfig("otpcore.xml"); } catch (OTPCoreException ex) { ex.printStackTrace(); } } } return otpcore; } /** * Processes requests for both HTTP GET and POST * methods. * * @param request * servlet request * @param response * servlet response * @throws ServletException * if a servlet-specific error occurs * @throws IOException * if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { /* TODO output your page here. You may use following sample code. */ out.println(""); out.println(""); out.println(""); out.println("Servlet CAGSocketGateWay"); out.println(""); out.println(""); out.println("

Servlet CAGSocketGateWay at " + request.getContextPath() + "

"); out.println(""); out.println(""); } finally { out.close(); } } // /** * Handles the HTTP GET method. * * @param request * servlet request * @param response * servlet response * @throws ServletException * if a servlet-specific error occurs * @throws IOException * if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP POST method. * * @param request * servlet request * @param response * servlet response * @throws ServletException * if a servlet-specific error occurs * @throws IOException * if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. * * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// }