Commit 0f19b705 authored by steurwadkar's avatar steurwadkar

F17ABAS001 source code commit


git-svn-id: http://15.206.35.175/svn/proteus/business-java/trunk@106615 ce508802-f39f-4f6c-b175-0d175dae99d5
parent 1e761cb8
package ibase.webitm.ejb.gst;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.rmi.RemoteException;
import java.security.PrivateKey;
import java.sql.Connection;
......@@ -11,12 +17,18 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import javax.annotation.PostConstruct;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import org.apache.commons.io.IOUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.XML;
import org.w3c.dom.Document;
......@@ -48,11 +60,13 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
private String GST_API_URL = "";
private String GSP_API_URL = "";
private String AUTH_TOKEN_URL_V2 = "";
private String GSTR_URL_V3 = "";
private String GSTR1_URL_V2 = "";
private String GSTR2_URL_V2 = "";
private String GSTR1_URL_V3 = "";
private String GSTR2_URL_V3 = "";
private String GSTR3B_URL_V3 = "";
private String FILEDET_URL = "";
private final String APPLICATION_JSON = "application/json";
private String appKey = "";
String ipAddress = "";
......@@ -60,6 +74,7 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
private String appKeyEncryptedAndCoded = "";
private String clientId = "";
private String clientSecret = "";
private String fileDownloadDir = "";
AESEncryption aesEncryption = null;
PubKeyEncryption pubKeyEncryption = null;
GSPSignature gspSignature;
......@@ -72,7 +87,7 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
@PostConstruct
public void postConstruct()
{
String sql = "", gstnPublicKeyName = "";
String sql = "", gstnPublicKeyName = "", gspPrivateKeyName = "";
PreparedStatement pstmt = null;
ResultSet rs = null;
try(java.util.Scanner sc = new java.util.Scanner(new java.net.URL("https://api.ipify.org").openStream(), "UTF-8").useDelimiter("\\A"))
......@@ -81,22 +96,42 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
conn = getConnection();
FinCommon finCommon = new FinCommon();
gstnPublicKeyName = finCommon.getFinparams("999999", "GSTN_PUB_KEY_NAME", conn);
gspPrivateKeyName = finCommon.getFinparams("999999", "GSP_PRI_KEY_NAME", conn);
if("NULLFOUND".equalsIgnoreCase(gstnPublicKeyName))
{
gstnPublicKeyName = "GSTN_G2B_Prod_Public";
}
if("NULLFOUND".equalsIgnoreCase(gspPrivateKeyName))
{
gspPrivateKeyName = "GSP_Private_Prod_Key";
}
System.out.println("gstnPublicKeyName["+gstnPublicKeyName+"]");
InputStream pubKeyInpStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("ibase/webitm/resources/gst/"+gstnPublicKeyName+".cer");
System.out.println("gspPrivateKeyName["+gspPrivateKeyName+"]");
InputStream pubKeyInpStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("ibase/webitm/resources/gst/"+gstnPublicKeyName.trim()+".cer");
clientId = finCommon.getFinparams("999999", "GST_CLIENT_ID", conn);
clientSecret = finCommon.getFinparams("999999", "GST_CLIENT_SECRET", conn);
fileDownloadDir = finCommon.getFinparams("999999", "GST_DOWNLOAD_DIR", conn);
aesEncryption = new AESEncryption();
pubKeyEncryption = new PubKeyEncryption(pubKeyInpStream);
ipAddress = sc.next();
if(ipAddress== null || ipAddress.trim().length() == 0)
{
String tomcatHome = CommonConstants.TOMCAT_HOME;
ipAddress = tomcatHome.substring(tomcatHome.lastIndexOf("/")+1, tomcatHome.lastIndexOf(":"));
}
System.out.println("host ipAddress["+ipAddress+"]");
gspSignature = new GSPSignature();
String privateKeyPath = "/ibase/webitm/resources/gst/privatekey.pem";
String privateKeyPath = "/ibase/webitm/resources/gst/"+gspPrivateKeyName.trim()+".pem";
aspPrivateKey = gspSignature.loadPrivateKey(Thread.currentThread().getContextClassLoader().getResourceAsStream(privateKeyPath));
File folder = new File(fileDownloadDir);
if(!folder.exists())
{
folder.mkdirs();
System.out.println("GSTN Folder created");
}
sql = "SELECT SERVICE_CODE, SERVICE_URI FROM SYSTEM_EVENT_SERVICES WHERE METHOD_NAME = 'GST_API_URL'";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
......@@ -114,6 +149,11 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
GST_API_URL = rs.getString("SERVICE_URI");
}
break;
case "gstr_url_v3" :
{
GSTR_URL_V3 = rs.getString("SERVICE_URI");
}
break;
case "gstr_auth_url_v2" :
{
AUTH_TOKEN_URL_V2 = rs.getString("SERVICE_URI");
......@@ -144,6 +184,11 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
GSTR3B_URL_V3 = rs.getString("SERVICE_URI");
}
break;
case "gstr_filedet_url" :
{
FILEDET_URL = rs.getString("SERVICE_URI");
}
break;
}
}
if(pstmt!=null)
......@@ -159,11 +204,13 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
System.out.println("GST_API_URL["+GST_API_URL+"]");
System.out.println("AUTH_TOKEN_URL_V2["+AUTH_TOKEN_URL_V2+"]");
System.out.println("GSTR_URL_V3["+GSTR_URL_V3+"]");
System.out.println("GSTR1_URL_V2["+GSTR1_URL_V2+"]");
System.out.println("GSTR2_URL_V2["+GSTR2_URL_V2+"]");
System.out.println("GSTR1_URL_V3["+GSTR1_URL_V3+"]");
System.out.println("GSTR2_URL_V3["+GSTR2_URL_V3+"]");
System.out.println("GSTR3B_URL_V3["+GSTR3B_URL_V3+"]");
System.out.println("FILEDET_URL["+FILEDET_URL+"]");
}
catch (Exception e)
......@@ -1513,7 +1560,7 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
StringBuffer retStringBuff = new StringBuffer();
String[] gstr1Section = {"B2B","B2CL","B2CS","CDNR","AT","TXP","NIL","EXP","HSNSUM","CDNUR"};
String gspAuthString = "", gspAuthSignature = "";
String siteCode = "", loginCode = "", chgTerm = "", callStatus = "", responseId = "", responseJsonStr= "";
String siteCode = "", loginCode = "", chgTerm = "", callStatus = "", responseId = "", responseJsonStr= "", dataXML = "";
try
{
......@@ -1575,74 +1622,76 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
String getjsonData = new String(getrespJsonInBytes);
System.out.println("json response["+getjsonData+"] for ["+action+"]");
JSONObject getJsonDataJsonObj = new JSONObject(getjsonData);
if(getJsonDataJsonObj.has("est") && getJsonDataJsonObj.has("token"))
{
dataXML = getDataFromFileServer(gstinNo, "1", periodCode, authToken, userName, stateCode, authSek, getJsonDataJsonObj, xtraParams);
}
else
{
dataXML = XML.toString(getJsonDataJsonObj);
}
if("B2B".equalsIgnoreCase(action))
{
String b2bXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<b2b_invoices>");
retStringBuff.append(b2bXML);
retStringBuff.append(dataXML);
retStringBuff.append("</b2b_invoices>");
}
else if("B2CL".equalsIgnoreCase(action))
{
String b2clXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<b2cl_invoices>");
retStringBuff.append(b2clXML);
retStringBuff.append(dataXML);
retStringBuff.append("</b2cl_invoices>");
}
else if("B2CS".equalsIgnoreCase(action))
{
String b2csXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<b2cs_invoices>");
retStringBuff.append(b2csXML);
retStringBuff.append(dataXML);
retStringBuff.append("</b2cs_invoices>");
}
else if("CDNR".equalsIgnoreCase(action))
{
String cdnrXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<cdnr_data>");
retStringBuff.append(cdnrXML);
retStringBuff.append(dataXML);
retStringBuff.append("</cdnr_data>");
}
else if("CDNUR".equalsIgnoreCase(action))
{
String cdnurXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<cdnur_data>");
retStringBuff.append(cdnurXML);
retStringBuff.append(dataXML);
retStringBuff.append("</cdnur_data>");
}
else if("AT".equalsIgnoreCase(action))
{
String atXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<at_data>");
retStringBuff.append(atXML);
retStringBuff.append(dataXML);
retStringBuff.append("</at_data>");
}
else if("TXP".equalsIgnoreCase(action))
{
String txpXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<txp_data>");
retStringBuff.append(txpXML);
retStringBuff.append(dataXML);
retStringBuff.append("</txp_data>");
}
else if("NIL".equalsIgnoreCase(action))
{
String nilXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<nil_data>");
retStringBuff.append(nilXML);
retStringBuff.append(dataXML);
retStringBuff.append("</nil_data>");
}
else if("EXP".equalsIgnoreCase(action))
{
String expXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<exp_data>");
retStringBuff.append(expXML);
retStringBuff.append(dataXML);
retStringBuff.append("</exp_data>");
}
else if("HSNSUM".equalsIgnoreCase(action))
{
String hsnSumXML = XML.toString(new JSONObject(new String(getrespJsonInBytes)));
retStringBuff.append("<hsnsum_data>");
retStringBuff.append(hsnSumXML);
retStringBuff.append(dataXML);
retStringBuff.append("</hsnsum_data>");
}
}
......@@ -2708,6 +2757,229 @@ public class GSTDataSubmitWizEJB extends ValidatorEJB implements GSTDataSubmitWi
System.out.println("final retString ["+retString+"]");
return retString;
}
private String getDataFromFileServer(String gstin, String recType, String periodCode, String authToken, String userName, String stateCode, byte[] authSek, JSONObject dataJSONObject, String xtraParams) throws ITMException
{
String retString = null;
String transactionId = "", gspAuthString = "", gspAuthSignature = "", returnType = "", saveFilePath = "";
String siteCode = "", loginCode = "", chgTerm = "", responseId = "", responseJsonStr = "", callStatus = "";
try
{
siteCode = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "loginSiteCode");
loginCode = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "loginCode");
chgTerm = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "chgTerm");
if("1".equalsIgnoreCase(recType))
{
returnType = "GSTR1";
}
else if("2".equalsIgnoreCase(recType))
{
returnType = "GSTR2";
}
File baseDir = new File(fileDownloadDir);
String baseDirPath = baseDir.getAbsolutePath();
String finalDirPath = baseDirPath+File.separator+gstin+File.separator+periodCode+File.separator+returnType;
File finalDir = new File(finalDirPath);
if(!finalDir.exists())
{
boolean isFoderCreated = finalDir.mkdirs();
if(isFoderCreated)
{
System.out.println("final folder structure created for ["+gstin+"] for return period["+periodCode+"] for ["+returnType+"]");
}
}
saveFilePath = finalDir.getAbsolutePath();
transactionId = UUID.randomUUID().toString().replaceAll("-", "");
long timeStamp = new Timestamp().getDateTime();
gspAuthString = clientId + ":" + transactionId + ":" + timeStamp + ":" + gstin;
gspAuthSignature = gspSignature.sign(gspAuthString, aspPrivateKey);
HttpRequest fileDetailsReq = Unirest.get(String.format("%s%s", GSP_API_URL, GSTR_URL_V3))
.queryString("gstin", gstin)
.queryString("ret_period",periodCode)
.queryString("token",dataJSONObject.getString("token"))
.queryString("action","FILEDET")
.header("Content-Type", APPLICATION_JSON)
.header("state-cd", stateCode)
.header("clientid", clientId)
.header("client-secret", clientSecret)
.header("ip-usr", ipAddress)
.header("username", userName)
.header("auth-token", authToken)
.header("txn", transactionId)
.header("ret_period", periodCode)
.header("gstin", gstin)
.header("X-Asp-Auth-Token", gspAuthString)
.header("X-Asp-Auth-Signature", gspAuthSignature)
.getHttpRequest();
System.out.println("download file url["+fileDetailsReq.getUrl()+"]");
System.out.println("download file method["+fileDetailsReq.getHttpMethod()+"]");
System.out.println("download file request header["+fileDetailsReq.getHeaders()+"]");
HttpResponse<JsonNode> fileDetailsResp = fileDetailsReq.asJson();
System.out.println(String.format("fileDetailsResp Request : Status[%s] Response[%s]", fileDetailsResp.getStatus(), fileDetailsResp.getBody()));
if (fileDetailsResp.getStatus() == 200)
{
JSONObject fileGstr1RespObj = fileDetailsResp.getBody().getObject();
if(fileGstr1RespObj.has("data") && fileGstr1RespObj.has("rek"))
{
callStatus = "1";
String fileGstr1Data = fileGstr1RespObj.getString("data");
String fileGstr1Rek = fileGstr1RespObj.getString("rek");
byte[] fileGstr1ApiEK = aesEncryption.decrypt(fileGstr1Rek, authSek);
String fileGstr1JsoninBase64 = new String(aesEncryption.decrypt(fileGstr1Data, fileGstr1ApiEK));
byte[] fileGstr1JsonInBytes = aesEncryption.decodeBase64StringTOByte(fileGstr1JsoninBase64);
JSONObject filedetailsJsonObj = new JSONObject(new String(fileGstr1JsonInBytes));
if(filedetailsJsonObj.has("urls")&&filedetailsJsonObj.has("ek"))
{
String sessionKey = filedetailsJsonObj.getString("ek");
JSONArray fileDetailsArry = filedetailsJsonObj.getJSONArray("urls");
System.out.println("sessionKey["+sessionKey+"]");
for(int i=0; i<fileDetailsArry.length(); i++)
{
JSONObject tempJsonObj = fileDetailsArry.getJSONObject(i);
if(tempJsonObj.has("ul"))
{
String fileUrl = tempJsonObj.getString("ul");
fileUrl = FILEDET_URL + fileUrl;
URL url = new URL(fileUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK)
{
String fileName = "";
String disposition = connection.getHeaderField("Content-Disposition");
if (disposition != null)
{
int index = disposition.indexOf("filename=");
if (index > 0)
{
fileName = disposition.substring(index + 10, disposition.length() - 1);
}
}
else
{
fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1,fileUrl.lastIndexOf("?"));
}
InputStream inputStream = connection.getInputStream();
saveFilePath += File.separator+fileName;
FileOutputStream outputStream = new FileOutputStream(saveFilePath);
int bytesRead = -1;
byte[] buffer = new byte[1024];
while ((bytesRead = inputStream.read(buffer)) != -1)
{
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
}
TarArchiveInputStream tarInput = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(saveFilePath)));
TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
BufferedReader br = null;
while (currentEntry != null)
{
br = new BufferedReader(new InputStreamReader(tarInput));
System.out.println("For File = " + currentEntry.getName());
String line;
while ((line = br.readLine()) != null)
{
System.out.println("line="+line);
byte[] decryptEK = aesEncryption.decodeBase64StringTOByte(sessionKey);
String decryptedData = new String(aesEncryption.decrypt(line, decryptEK));
String decodedJson = new String(Base64.decodeBase64(decryptedData));
retString += XML.toString(new JSONObject(decodedJson));
}
currentEntry = tarInput.getNextTarEntry();
}
tarInput.close();
}
}
}
}
else
{
String errMsg = "";
callStatus = "2";
JSONObject errorJSON = fileDetailsResp.getBody().getObject();
if(errorJSON.has("error"))
{
JSONObject tempJsonObj = errorJSON.getJSONObject("error");
if(tempJsonObj.has("message"))
{
errMsg = tempJsonObj.getString("message");
retString = "<data_error><![CDATA["+errMsg+"]]></data_error>";
}
}
}
}
else
{
String errMsg = "";
callStatus = "2";
JSONObject errorJSON = fileDetailsResp.getBody().getObject();
if(errorJSON.has("error"))
{
JSONObject tempJsonObj = errorJSON.getJSONObject("error");
if(tempJsonObj.has("message"))
{
errMsg = tempJsonObj.getString("message");
retString = "<data_error><![CDATA["+errMsg+"]]></data_error>";
}
}
}
APICallData apiCallData = new APICallData();
apiCallData.setPeriodCode(periodCode);
apiCallData.setCallDate(new Date());
apiCallData.setSiteCode(siteCode);
apiCallData.setUserId(loginCode);
apiCallData.setCallType("FILEDET");
apiCallData.setRecType(recType);
apiCallData.setNoOfRecords(0);
apiCallData.setCallStatus(callStatus);
apiCallData.setResponseId(responseId);
apiCallData.setResponseJsonStr(responseJsonStr);
apiCallData.setChgUser(loginCode);
apiCallData.setChgDate(new Date());
apiCallData.setChgTerm(chgTerm);
gstCommonUtil.updateAPICallLogHistory(apiCallData, null);
}
catch(Exception e)
{
System.out.println("GSTCommonUtil.getDataFromFileServer()["+e.getMessage()+"]");
e.printStackTrace();
throw new ITMException(e);
}
System.out.println("final retString["+retString+"]");
return retString;
}
private String checkNull(String input)
{
if (input==null)
......
......@@ -105,6 +105,7 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
private String GSTR2A_URL_V3 = "";
private String GSTR3_URL_V3 = "";
private String GSTR3B_URL_V3 = "";
private String FILEDET_URL = "";
private final String APPLICATION_JSON = "application/json";
private String appKey = "";
String ipAddress = "";
......@@ -127,7 +128,7 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
@PostConstruct
public void postConstruct()
{
String sql = "", gstnPublicKeyName = "";
String sql = "", gstnPublicKeyName = "", gspPrivateKeyName = "";
PreparedStatement pstmt = null;
ResultSet rs = null;
try(java.util.Scanner sc = new java.util.Scanner(new java.net.URL("https://api.ipify.org").openStream(), "UTF-8").useDelimiter("\\A"))
......@@ -136,20 +137,31 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
conn = getConnection();
FinCommon finCommon = new FinCommon();
gstnPublicKeyName = finCommon.getFinparams("999999", "GSTN_PUB_KEY_NAME", conn);
gspPrivateKeyName = finCommon.getFinparams("999999", "GSP_PRI_KEY_NAME", conn);
if("NULLFOUND".equalsIgnoreCase(gstnPublicKeyName))
{
gstnPublicKeyName = "GSTN_G2B_Prod_Public";
}
if("NULLFOUND".equalsIgnoreCase(gspPrivateKeyName))
{
gspPrivateKeyName = "GSP_Private_Prod_Key";
}
System.out.println("gstnPublicKeyName["+gstnPublicKeyName+"]");
InputStream pubKeyInpStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("ibase/webitm/resources/gst/"+gstnPublicKeyName+".cer");
System.out.println("gspPrivateKeyName["+gspPrivateKeyName+"]");
InputStream pubKeyInpStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("ibase/webitm/resources/gst/"+gstnPublicKeyName.trim()+".cer");
clientId = finCommon.getFinparams("999999", "GST_CLIENT_ID", conn);
clientSecret = finCommon.getFinparams("999999", "GST_CLIENT_SECRET", conn);
aesEncryption = new AESEncryption();
pubKeyEncryption = new PubKeyEncryption(pubKeyInpStream);
ipAddress = sc.next();
if(ipAddress== null || ipAddress.trim().length() == 0)
{
String tomcatHome = CommonConstants.TOMCAT_HOME;
ipAddress = tomcatHome.substring(tomcatHome.lastIndexOf("/")+1, tomcatHome.lastIndexOf(":"));
}
System.out.println("host ipAddress["+ipAddress+"]");
gspSignature = new GSPSignature();
String privateKeyPath = "/ibase/webitm/resources/gst/privatekey.pem";
String privateKeyPath = "/ibase/webitm/resources/gst/"+gspPrivateKeyName.trim()+".pem";
aspPrivateKey = gspSignature.loadPrivateKey(Thread.currentThread().getContextClassLoader().getResourceAsStream(privateKeyPath));
sql = "SELECT SERVICE_CODE, SERVICE_URI FROM SYSTEM_EVENT_SERVICES WHERE METHOD_NAME = 'GST_API_URL'";
......@@ -214,6 +226,11 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
GSTR3B_URL_V3 = rs.getString("SERVICE_URI");
}
break;
case "gstr_filedet_url" :
{
FILEDET_URL = rs.getString("SERVICE_URI");
}
break;
}
}
if(pstmt!=null)
......@@ -236,6 +253,7 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
System.out.println("GSTR2A_URL_V3["+GSTR2A_URL_V3+"]");
System.out.println("GSTR3_URL_V3["+GSTR3_URL_V3+"]");
System.out.println("GSTR3B_URL_V3["+GSTR3B_URL_V3+"]");
System.out.println("FILEDET_URL["+FILEDET_URL+"]");
}
catch (Exception e)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment