aboutsummaryrefslogtreecommitdiff
path: root/rev/rev.js
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-04-07 15:10:40 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2025-04-07 15:10:40 +0530
commit12746a82d6eb50a39e8a86fbfaf11edda1ce29ee (patch)
tree5664593bb485b3db336609cc0e5e103407e65a3b /rev/rev.js
parent329a68024ba7df2268dbbb85cf2d2b1189e6968e (diff)
add rev
Diffstat (limited to 'rev/rev.js')
-rw-r--r--rev/rev.js147
1 files changed, 147 insertions, 0 deletions
diff --git a/rev/rev.js b/rev/rev.js
new file mode 100644
index 0000000..2bfd9ef
--- /dev/null
+++ b/rev/rev.js
@@ -0,0 +1,147 @@
+const CryptoJS = require('crypto-js');
+const { URLSearchParams } = require('url');
+const dns = require('dns').promises;
+
+// Configuration and state
+const hostIP = "https://app.ecourts.gov.in/ecourt_mobile_DC/";
+let jwttoken = "";
+let regenerateWebserviceCallFlag = false;
+let globaliv = "4B6250655368566D";
+let globalIndex = 0;
+
+// Utility: Check internet connection
+async function checkDeviceOnlineStatus() {
+ try {
+ await dns.lookup('google.com');
+ return true;
+ } catch {
+ console.error("Please check your internet connection and try again");
+ return false;
+ }
+}
+
+// Show error message (replace alert with console)
+function showErrorMessage(message) {
+ console.error("Error:", message);
+}
+
+// Generate random hex
+function genRanHex(size) {
+ return [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join('');
+}
+
+// Generate global IV
+function generateGlobalIv() {
+ const ivOptions = [
+ "556A586E32723575", "34743777217A2543", "413F4428472B4B62",
+ "48404D635166546A", "614E645267556B58", "655368566D597133"
+ ];
+ const indices = [0, 1, 2, 3, 4, 5];
+ for (let i = indices.length - 1; i > 0; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ [indices[i], indices[j]] = [indices[j], indices[i]];
+ }
+ globaliv = ivOptions[indices[0]];
+ globalIndex = indices[0];
+ return globaliv;
+}
+
+// Encrypt data
+function encryptData(data) {
+ const dataEncoded = JSON.stringify(data);
+ generateGlobalIv();
+ const randomiv = genRanHex(16);
+ const key = CryptoJS.enc.Hex.parse('4D6251655468576D5A7134743677397A');
+ const iv = CryptoJS.enc.Hex.parse(globaliv + randomiv);
+
+ const encrypted = CryptoJS.AES.encrypt(dataEncoded, key, { iv });
+ let encrypted_data = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
+ encrypted_data = randomiv + globalIndex + encrypted_data;
+ return encrypted_data;
+}
+
+// Decrypt response
+function decodeResponse(result) {
+ const key = CryptoJS.enc.Hex.parse('3273357638782F413F4428472B4B6250');
+ const iv_random = CryptoJS.enc.Hex.parse(result.trim().slice(0, 32));
+ const result_split = result.trim().slice(32);
+
+ const bytes = CryptoJS.AES.decrypt(result_split, key, { iv: iv_random });
+ let plaintext = bytes.toString(CryptoJS.enc.Utf8);
+ plaintext = plaintext.replace(/[\u0000-\u0019]+/g, "");
+ return plaintext;
+}
+
+// API call wrapper
+async function callToWebService(url, data, callback) {
+ const online = await checkDeviceOnlineStatus();
+ if (!online) return;
+
+ try {
+ const encryptedData = encryptData(data);
+ const headers = {
+ 'Content-Type': 'application/json',
+ };
+
+ headers['Authorization'] = 'Bearer ' + encryptData(jwttoken);
+
+ const params = new URLSearchParams({ data: encryptedData });
+ const fullUrl = `${url}?${params.toString()}`;
+
+ const res = await fetch(fullUrl, {
+ method: 'GET',
+ headers
+ });
+
+ const responseText = await res.text();
+ const decodedResponse = JSON.parse(decodeResponse(responseText));
+
+ if (decodedResponse.token) {
+ jwttoken = decodedResponse.token;
+ }
+
+ console.log(decodedResponse)
+ if (decodedResponse.status === 'N') {
+ if (decodedResponse.status_code === '401') {
+ if (!regenerateWebserviceCallFlag) {
+ regenerateWebserviceCallFlag = true;
+ const packageName = "com.eCourts.mobile";
+ const uidObj = { uid: "324456:" + packageName };
+ const newData = { ...data, ...uidObj };
+ return callToWebService(url, newData, callback);
+ } else {
+ showErrorMessage("Session expired!");
+ }
+ }
+
+ if (decodedResponse.msg) {
+ showErrorMessage(decodedResponse.msg);
+ }
+
+ return;
+ }
+
+ callback(decodedResponse);
+ regenerateWebserviceCallFlag = false;
+
+ } catch (error) {
+ console.error('Error calling web service:', error.message);
+ showErrorMessage("An error occurred while processing your request.");
+ regenerateWebserviceCallFlag = false;
+ }
+}
+
+// Fetch Court Complexes
+async function getCourtComplexes(state_code, dist_code, callback) {
+ const url = hostIP + "courtEstWebService.php";
+ const data = {
+ action_code: "fillCourtComplex",
+ state_code,
+ dist_code
+ };
+ await callToWebService(url, data, callback);
+}
+
+getCourtComplexes("1", "101", (res) => {
+ console.log("Court Complexes:", res.courtComplex);
+});