From b024cacfe867cf5462d13824e074ce32a7f09872 Mon Sep 17 00:00:00 2001
From: Karl <karl@k-world.me.uk>
Date: Thu, 23 Sep 2021 15:26:24 +0000
Subject: [PATCH] working with tor

---
 .vscode/launch.json   |  39 -------
 lib/checker.js        | 257 ++++++++++--------------------------------
 package-lock.json     |  97 ++++++++++++++++
 package.json          |   1 +
 routes/singleCheck.js |  15 ++-
 test.js               |  21 ++++
 6 files changed, 183 insertions(+), 247 deletions(-)
 create mode 100644 test.js

diff --git a/.vscode/launch.json b/.vscode/launch.json
index edb5cbb..89becdb 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -4,14 +4,6 @@
     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
     "version": "0.2.0",
     "configurations": [
-        {
-            "name": "React",
-            "type": "chrome",
-            "request": "launch",
-            "url": "http://localhost:6969",
-            // "webRoot": "${workspaceRoot}/react-backend/client/src"
-            "port": 9223
-        },
         {
             "type": "node",
             "request": "launch",
@@ -43,37 +35,6 @@
                 "DATABASE": "BBLB_DNS",
                 "DBPORT": "3306",
             }
-        },
-        {
-            "type": "node",
-            "request": "launch",
-            "name": "AddAcccount",
-            "skipFiles": [
-                "<node_internals>/**"
-            ],
-            "program": "${workspaceFolder}/lib/addAccounts.js",
-            "env": {
-                "DBHOST": "vps.k-world.me.uk",
-                "DBUSER": "root",
-                "DBPASS": "Grd555269",
-                "DATABASE": "BBLB_DNS",
-                "DBPORT": "3306",
-            }
-        },
-        {
-            "type": "node",
-            "request": "launch",
-            "name": "password",
-            "skipFiles": [
-                "<node_internals>/**"
-            ],
-            "program": "${workspaceFolder}/lib/addAccounts.js",
-            "env": {
-                "HOST": "localhost",
-                "DBUSER": "root",
-                "DBPASS": "example",
-                "DATABASE": "BBLB_DNS"
-            }
         }
     ]
 }
\ No newline at end of file
diff --git a/lib/checker.js b/lib/checker.js
index ddc99e5..0b4a376 100644
--- a/lib/checker.js
+++ b/lib/checker.js
@@ -1,25 +1,18 @@
 const { getStreamsNew } = require('../routes/getStreams')
-
 const { updateStreamData } = require('./updateStreams')
-
-
 const { decryptPassword } = require('./password')
-
-const { getAllUserAccounts, getUserAccountsCheck } = require('./getUser')
-
-
-const { removeAccountFromDB, storeAccountToDB } = require('../lib/Accounts')
+const { getUserAccountsCheck } = require('./getUser')
+const { storeAccountToDB } = require('../lib/Accounts')
 
 const axios = require('axios')
-const { wrapper } = require('axios-cookiejar-support')
-// import { wrapper } from 'axios-cookiejar-support';
-const { CookieJar } = require('tough-cookie')
-// import { CookieJar } from 'tough-cookie';
+const tor_axios = require('tor-axios');
+const tor = tor_axios.torSetup({
+    ip: 'localhost',
+    port: 9050,
+    controlPort: '9051',
+    controlPassword: 'KarlMax',
+})
 
-const jar = new CookieJar();
-const client = wrapper(axios.create({ jar }));
-
-// axios.defaults.timeout = 5000;
 
 const delay = ms => new Promise(res => setTimeout(res, ms));
 
@@ -80,6 +73,31 @@ async function addNewAccount(userAccount, data, url) {
     }
 }
 
+async function urlChecker(userAccounts, urlList) {
+    let ip = await tor.get('http://api.ipify.org')
+    console.log(ip.data);
+    await Promise.all(urlList.map(async (url) => {
+        try {
+            const response = await tor.get(url)
+            if (response.status == 200 && response.data !== "") {
+                try {
+                    let data = response.data
+                    if (data.user_info.auth) {
+                        console.log(url)
+                        updateAccounts(userAccounts, data, url)
+                        return true
+                    }
+                } catch {
+                }
+            }
+        } catch {
+        }
+    })).then((values) => {
+        endresponse = values
+    });
+    return endresponse
+}
+
 
 async function userCheck(accountData) {
     console.log(Date.now())
@@ -102,190 +120,24 @@ async function userCheck(accountData) {
             urlList.push(await buildURL(streamURL, userAccount.username, userAccount.passwordDecryped))
         }
     }
-    userAccounts
-    urlList
 
-    await Promise.all(urlList.map(async (url) => {
-        try {
-            const response = await axios({
-                method: 'GET',
-                headers: {
-                    'Content-Type': 'application/json',
-                    'User-Agent': 'PostmanRuntime/7.28.4',
-                    'Accept': '*/*'
-                },
-                url: url,
-            })
-            console.log(url)
-            if (response.status == 200 && response.data !== "") {
-                try {
-                    let data = response.data
-                    if (data.user_info.auth) {
-                        console.log(url)
-                        updateAccounts(userAccounts, data, url)
-                        return true
-                    } else {
-                        return false
-                    }
-                } catch (error) {
-                    console.log(error)
-                    return false
-                }
-            } else {
-                return false
-            }
-        } catch (error) {
-            console.log(error)
-            return false
+
+    values = await urlChecker(userAccounts, urlList)
+    if (values.includes(true)) {
+        let updatedCount = values.filter(function (value) {
+            return value === true;
+        }).length
+        console.log('true ' + updatedCount)
+        return endresponse = {
+            "update": true,
+            "count": updatedCount
         }
-    })).then((values) => {
-        console.log(values)
-        if (values.includes(true)) {
-            let count = values.filter(function (value) {
-                return value === true;
-            }).length
-            let count2 = values.filter(function (value) {
-                return value === false;
-            }).length
-            console.log('true ' + count)
-            console.log('fail ' + count2)
-            t = count + count2
-            console.log(t)
-            endresponse = true
-        } else {
-            console.log('true ' + count)
-            console.log('fail ' + count2)
-            t = count + count2
-            console.log(t)
-            endresponse = false
-        }
-    });
-    return endresponse
+    } else {
+        return endresponse = false
+    }
+
 }
 
-// async function newCheck() {
-//     streamURLS = await getStreamsNew()
-//     let userAccounts = await getAllUserAccounts()
-//     userAccounts = userAccounts.map(async user => {
-//         user.passwordDecryped = decryptPassword(user.password)
-//         return user
-//     })
-//     for (let userAccount of userAccounts) {
-//         if (userAccount.expiaryDate != 123 && Math.round(Date.now() / 1000) > userAccount.expiaryDate) {
-//             setExpired(userAccount)
-//         } else {
-//             for (let streamURL of streamURLS) {
-//                 process.stdout.write('.')
-//                 let url = await buildURL(streamURL, userAccount.username, userAccount.passwordDecryped)
-//                 let t = await gotRequest(url)
-//                 let body = t.body
-//                 if (t.statusCode == 200 && body !== "") {
-//                     try {
-//                         body = JSON.parse(body)
-//                         if (body.user_info.auth) {
-//                             var date = new Date(body.user_info.exp_date * 1000).toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })
-//                             // process.stdout.write('\n')
-//                             console.log(`${userAccount.username} - ${userAccount.stream} - ${streamURL} - Expires ${date}.`)
-//                             await updateStreamData(userAccount, streamURL, body.user_info.exp_date)
-//                             break
-//                         }
-//                     } catch (error) {
-//                     }
-//                 }
-//             }
-//         }
-//     }
-// }
-
-
-// async function updateAccountDNS(userAccount, streamURLS) {
-//     // return new Promise(async (resolve, reject) => {
-//     await Promise.all(streamURLS.map(async (streamURL) => {
-//         process.stdout.write('.')
-//         let url = await buildURL(streamURL, userAccount.username, userAccount.passwordDecryped)
-//         // console.log('tested url ' + url)
-//         let t = await gotRequest(url)
-//         let body = t.body
-//         if (t.statusCode == 200 && body !== "") {
-//             try {
-//                 body = JSON.parse(body)
-//                 if (body.user_info.auth) {
-//                     var date = new Date(body.user_info.exp_date * 1000).toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })
-//                     // process.stdout.write('\n')
-//                     console.log(`${userAccount.username} - ${userAccount.stream} - ${streamURL} - Expires ${date}.`)
-//                     await updateStreamData(userAccount, streamURL, body.user_info.exp_date)
-//                     resolve(true)
-//                 }
-//             } catch (error) {
-//             }
-//         } else {
-//         }
-//     }));
-// }
-
-// async function updateAccounts(userAccount, streamURLS) {
-//     return new Promise(async (resolve, reject) => {
-//         await streamURLS.forEach(async streamURL => {
-//             process.stdout.write('.')
-//             let url = await buildURL(streamURL, userAccount.username, userAccount.passwordDecryped)
-//             console.log('tested url ' + url)
-//             let t = await gotRequest(url)
-//             let body = t.body
-//             if (t.statusCode == 200 && body !== "") {
-//                 try {
-//                     body = JSON.parse(body)
-//                     if (body.user_info.auth) {
-//                         var date = new Date(body.user_info.exp_date * 1000).toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })
-//                         // process.stdout.write('\n')
-//                         console.log(`${userAccount.username} - ${userAccount.stream} - ${streamURL} - Expires ${date}.`)
-//                         await updateStreamData(userAccount, streamURL, body.user_info.exp_date)
-//                         resolve(true)
-//                     }
-//                 } catch (error) {
-//                 }
-//             } else {
-//             }
-//         })
-//         reject(userAccount)
-//     })
-// }
-
-
-
-// async function singleCheck(accountData) {
-//     streamURLS = await getStreamsNew()
-//     let userAccounts = await getUserAccountsCheck(accountData.userId)
-//     userAccounts = userAccounts.map(user => {
-//         user.userId = accountData.userId
-//         user.passwordDecryped = decryptPassword(user.password)
-//         return user
-//     })
-//     userAccounts = userAccounts.filter(obj => {
-//         return obj.username === accountData.username && obj.passwordDecryped === accountData.password && obj.stream === accountData.stream
-//     })
-
-//     try {
-//         for (let i = 0; i < userAccounts.length; ++i) {
-//             const userAccount = userAccounts[i];
-//             if (userAccount.expiaryDate != 123 && Math.round(Date.now() / 1000) > userAccount.expiaryDate) {
-//                 setExpired(userAccount)
-//             } else {
-//                 await updateAccounts(userAccount, streamURLS)
-//             }
-//         }
-//         console.log(Date.now())
-//         return true
-//     } catch (userAccount) {
-//         console.log('notfoundincatch')
-//         // console.error(error);
-//         removeAccountFromDB({
-//             "user": userAccount.username,
-//             "stream": userAccount.stream,
-//             "userId": accountData.userId
-//         })
-//     }
-// }
-
 
 async function singleAccountCheck(accountData) {
     let endresponse
@@ -302,9 +154,14 @@ async function singleAccountCheck(accountData) {
 
     await Promise.all(urlList.map(async (url) => {
         try {
-            // console.log(url)
-            const response = await axios.get(url)
-            // console.log(response)
+            const response = await axios.get({
+                method: 'GET',
+                headers: {
+                    'User-Agent': 'GoldPlayer',
+                    'Accept': '*/*'
+                },
+                url: url,
+            })
             if (response.status == 200 && response.data !== "") {
                 try {
                     let data = response.data
@@ -312,7 +169,7 @@ async function singleAccountCheck(accountData) {
                         addNewAccount(accountData, data, url)
                         return true
                     }
-                } catch (error) {
+                } catch {
                 }
             }
         } catch {
diff --git a/package-lock.json b/package-lock.json
index 414ac9f..95593e2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -497,6 +497,19 @@
         "once": "^1.4.0"
       }
     },
+    "es6-promise": {
+      "version": "4.2.8",
+      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+      "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
+    },
+    "es6-promisify": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+      "requires": {
+        "es6-promise": "^4.0.3"
+      }
+    },
     "escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -815,11 +828,21 @@
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+    },
     "ipaddr.js": {
       "version": "1.9.1",
       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
       "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
     },
+    "is-buffer": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+      "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
+    },
     "is-fullwidth-code-point": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
@@ -1297,6 +1320,39 @@
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
       "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
     },
+    "smart-buffer": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
+    },
+    "socks": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz",
+      "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==",
+      "requires": {
+        "ip": "1.1.5",
+        "smart-buffer": "^4.1.0"
+      }
+    },
+    "socks-proxy-agent": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz",
+      "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==",
+      "requires": {
+        "agent-base": "~4.2.1",
+        "socks": "~2.3.2"
+      },
+      "dependencies": {
+        "agent-base": {
+          "version": "4.2.1",
+          "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
+          "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
+          "requires": {
+            "es6-promisify": "^5.0.0"
+          }
+        }
+      }
+    },
     "sqlstring": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
@@ -1391,6 +1447,47 @@
         "promise": "^7.1.1"
       }
     },
+    "tor-axios": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/tor-axios/-/tor-axios-1.0.9.tgz",
+      "integrity": "sha512-JFBkpV7essVA7sB2Xwm5MhfJ5CwA4dLZSyOaQTl14hl9K+Q0wHWEOqtFoME2qPRmYIbIHJIIxZTPVQjB3aV8gw==",
+      "requires": {
+        "axios": "^0.18.1",
+        "socks-proxy-agent": "^4.0.2"
+      },
+      "dependencies": {
+        "axios": {
+          "version": "0.18.1",
+          "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz",
+          "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==",
+          "requires": {
+            "follow-redirects": "1.5.10",
+            "is-buffer": "^2.0.2"
+          }
+        },
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "follow-redirects": {
+          "version": "1.5.10",
+          "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+          "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+          "requires": {
+            "debug": "=3.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
     "tough-cookie": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
diff --git a/package.json b/package.json
index dc38577..0b23050 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
     "http-errors": "~1.6.3",
     "request": "^2.88.2",
     "sync-mysql": "^3.0.1",
+    "tor-axios": "^1.0.9",
     "tough-cookie": "^4.0.0"
   }
 }
diff --git a/routes/singleCheck.js b/routes/singleCheck.js
index 18f5367..0bdf044 100644
--- a/routes/singleCheck.js
+++ b/routes/singleCheck.js
@@ -9,14 +9,13 @@ router.get('/', async function (req, res, next) {
   let postData = req.body
   postData.userId = getUserId(req.auth.user)
   // postData.userId = 5
-    a = await userCheck(postData)
-    console.log(Date.now())
-    if (a) {
-      res.sendStatus(200)
-    } else {
-      res.sendStatus(500);
-    }
-//   }
+  let response = await userCheck(postData)
+  console.log(Date.now())
+  if (response.update) {
+    res.json({ "updatedAccounts": response.count })
+  } else {
+    res.sendStatus(500);
+  }
 });
 
 module.exports = router;
diff --git a/test.js b/test.js
new file mode 100644
index 0000000..8e327ae
--- /dev/null
+++ b/test.js
@@ -0,0 +1,21 @@
+const tor_axios = require('tor-axios');
+const tor = tor_axios.torSetup({
+    ip: 'localhost',
+    port: 9050,
+    controlPort: '9051',
+    controlPassword: 'KarlMax',
+})
+
+async function main() {
+    let response = await tor.get('http://api.ipify.org');
+    let ip = response.data;
+    console.log(await tor.get('http://api.ipify.org'));
+
+    await tor.torNewSession(); //change tor ip
+
+    response = await tor.get('http://api.ipify.org');
+    ip = response.data;
+    console.log(ip);
+}
+
+main()
\ No newline at end of file