Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.19 KB | None | 0 0
  1. // By default, Konsole starts on a random port and changes your proxy settings. When is_dev is true, it will start on port 7777 and will not change your proxy settings.
  2. global.is_dev = false;
  3. const http = require("http");
  4. const https = require("https");
  5. const fs = require("fs");
  6. const path = require("path");
  7. const url = require("url");
  8. const net = require('net');
  9. const zlib = require("zlib");
  10. const child_process = require("child_process");
  11. require("./fortnite.js");
  12. require("./const.js");
  13. const konsole_web = require("./settings");
  14. function readStream(str) {
  15. return new Promise(resolve => {
  16. let x = [];
  17. str.on("data", data => {
  18. x.push(data);
  19. });
  20. str.on("end", () => {
  21. resolve(x);
  22. });
  23. })
  24. }
  25. const epicProxy = https.createServer({
  26. key: global.key,
  27. cert: global.cert,
  28. }, async (req, res) => {
  29. if (req.headers.host === "konsole.jrn") {
  30. konsole_web(req, res);
  31. return;
  32. }
  33. var urlObj = url.parse(req.url);
  34. let to_write = null;
  35. if (req.headers["content-type"] && req.headers["content-type"].split(";")[0] === "application/json") {
  36. let buf = await readStream(req);
  37. try {
  38. let json = JSON.parse(buf.join(""));
  39. if (typeof json.itemToSlot === "string" && json.itemToSlot.startsWith("K:")) {
  40. json.itemToSlot = json.itemToSlot.substr(2);
  41. }
  42. let tw = Buffer.from(JSON.stringify(json));
  43. req.headers["content-length"] = Buffer.byteLength(tw);
  44. to_write = [tw];
  45. } catch (e) {
  46. to_write = buf;
  47. }
  48. }
  49. let s_req = https.request({
  50. host: req.headers.host,
  51. port: 443,
  52. method: req.method,
  53. headers: req.headers,
  54. path: urlObj.path
  55. }, async s_res => {
  56. let sock = s_res;
  57. if (s_res.headers["content-encoding"] === "gzip" || s_res.headers["content-encoding"] === "deflate") {
  58. sock = sock.pipe(zlib.createUnzip());
  59. delete s_res.headers["content-encoding"];
  60. }
  61. if (s_res.headers["content-type"] && s_res.headers["content-type"].split(";")[0] === "application/json") {
  62. let buf = await readStream(sock);
  63. try {
  64. let json = JSON.parse(buf.join(""));
  65. if (typeof json.displayName === "string" && settings.override_name !== null) {
  66. if (typeof json.displayName === "string") {
  67. json.displayName = settings.override_name;
  68. }
  69. }
  70. if (Array.isArray(json)) {
  71. for (let i = 0; i < json.length; i++) {
  72. if (typeof json[i] === "object" && json[i].uniqueFilename === "3460cbe1c57d4a838ace32951a4d7171") {
  73. json[i].hash = "";
  74. json[i].hash256 = "";
  75. json[i].length = 0;
  76. json[i].uploaded = new Date().toISOString();
  77. }
  78. }
  79. }
  80. if (settings.add_items
  81. && json.profileChanges
  82. && json.profileChanges[0]
  83. && json.profileChanges[0].profile
  84. && json.profileChanges[0].profile.items) {
  85. let litems = json.profileChanges[0].profile.items;
  86. json.profileChanges[0].profile.items["K:"] = {
  87. "templateId": "GiftBox:gb_makegoodstw",
  88. "attributes": {
  89. "max_level_bonus":0,
  90. "fromAccountId":"34a02cf8f4414e29b15921876da36f9a",
  91. "lootList":global.items.map(i => ({
  92. itemType: i,
  93. itemGuid: i,
  94. itemProfile: "athena",
  95. quantity: 1
  96. })),
  97. "level":100,
  98. "item_seen":false,
  99. "xp":0,
  100. "giftedOn":"2018-10-30T03:33:03.937Z",
  101. "params":{"SubGame":"Athena"},
  102. "favorite":false
  103. },
  104. "quantity":1
  105. }
  106. global.items.forEach(item => {
  107. if (!Object.keys(litems).find(i => litems[i].templateId === item)) {
  108. json.profileChanges[0].profile.items[item] = {
  109. "templateId": item,
  110. "attributes": {
  111. "max_level_bonus": 0,
  112. "level": 100,
  113. "item_seen": true,
  114. "xp": 0,
  115. "variants": [],
  116. "favorite": false
  117. },
  118. "quantity": 1
  119. }
  120. }
  121. });
  122. }
  123. let tw = Buffer.from(JSON.stringify(json));
  124. s_res.headers["content-length"] = Buffer.byteLength(tw);
  125. res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
  126. res.end(tw);
  127. } catch (e) {
  128. res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
  129. for (let i = 0; i < buf.length; i++) {
  130. res.write(buf[i]);
  131. }
  132. res.end();
  133. }
  134. } else if (/^\/fortnite\/api\/cloudstorage\/system\//.test(urlObj.path) && 0) {
  135. let buf = await readStream(sock);
  136. let text = buf.join("");
  137. let nt = "";
  138. if (text !== nt) {
  139. let tw = Buffer.from(nt);
  140. s_res.headers["content-length"] = Buffer.byteLength(tw);
  141. res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
  142. res.end(tw);
  143. } else {
  144. res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
  145. for (let i = 0; i < buf.length; i++) {
  146. res.write(buf[i]);
  147. }
  148. res.end();
  149. }
  150. } else {
  151. res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
  152. sock.pipe(res);
  153. }
  154. });
  155. if (to_write !== null) {
  156. for (let i = 0; i < to_write.length; i++) {
  157. s_req.write(to_write[i]);
  158. }
  159. s_req.end();
  160. } else {
  161. req.pipe(s_req);
  162. }
  163. s_req.on("error", e => {
  164. res.end(e.toString());
  165. });
  166. }).listen(0, "127.0.0.1", () => {
  167. epicProxy.port = epicProxy.address().port;
  168. });
  169. var server = http.createServer(function (req, res) {
  170. // http proxy kinda sucks, don't use unless you have to
  171. var urlObj = url.parse(req.url);
  172. if (urlObj.host === "konsole.jrn") {
  173. res.writeHead(301, {
  174. Location: "https://" + urlObj.host + urlObj.path
  175. });
  176. res.end();
  177. return;
  178. }
  179. let s_req = http.request({
  180. protocol: urlObj.protocol,
  181. host: urlObj.hostname,
  182. port: urlObj.port,
  183. method: req.method,
  184. headers: req.headers,
  185. path: urlObj.path
  186. }, s_res => {
  187. res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
  188. s_res.pipe(res);
  189. });
  190. req.pipe(s_req);
  191. s_req.on("error", e => {
  192. res.writeHead(502);
  193. res.end(e.toString());
  194. });
  195. }).listen(global.is_dev ? 7777 : 0, "127.0.0.1", () => {
  196. let port = server.address().port;
  197. if (!global.is_dev) {
  198. child_process.exec('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f');
  199. child_process.exec('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyServer /t REG_SZ /d https=127.0.0.1:' + port + ' /f');
  200. }
  201. });
  202. var regex_hostport = /^([^:]+)(:([0-9]+))?$/;
  203.  
  204. var getHostPortFromString = function (hostString, defaultPort) {
  205. var host = hostString;
  206. var port = defaultPort;
  207.  
  208. var result = regex_hostport.exec(hostString);
  209. if (result != null) {
  210. host = result[1];
  211. if (result[2] != null) {
  212. port = result[3];
  213. }
  214. }
  215.  
  216. return ([host, port]);
  217. };
  218.  
  219. server.on('connect', function (req, socket, bodyhead) {
  220. var hostPort = getHostPortFromString(req.url, 443);
  221. if (hostPort[0] === "konsole.jrn" || (hostPort[0].endsWith(".ol.epicgames.com") && hostPort[0].indexOf("matchmaking") === -1 && hostPort[0] !== "xmpp-service-prod.ol.epicgames.com")) {
  222. hostPort = ["127.0.0.1", epicProxy.port];
  223. }
  224. var proxySocket = new net.Socket();
  225. proxySocket.connect(parseInt(hostPort[1]), hostPort[0], function () {
  226. proxySocket.write(bodyhead);
  227. socket.write("HTTP/" + req.httpVersion + " 200\r\n\r\n");
  228. }
  229. );
  230. proxySocket.on('data', function (chunk) {
  231. socket.write(chunk);
  232. });
  233.  
  234. proxySocket.on('end', function () {
  235. socket.end();
  236. });
  237.  
  238. proxySocket.on('error', function () {
  239. socket.write("HTTP/" + req.httpVersion + " 500\r\n\r\n");
  240. socket.end();
  241. });
  242.  
  243. socket.on('data', function (chunk) {
  244. proxySocket.write(chunk);
  245. });
  246.  
  247. socket.on('end', function () {
  248. proxySocket.end();
  249. });
  250.  
  251. socket.on('error', function () {
  252. proxySocket.end();
  253. });
  254. });
  255. process.stdin.resume();
  256. function exit() {
  257. child_process.execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f');
  258. child_process.execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyServer /t REG_SZ /d "" /f');
  259. process.exit();
  260. }
  261. if (!global.is_dev) {
  262. process.on("beforeExit", exit);
  263. process.on("exit", exit);
  264. process.on("SIGINT", exit);
  265. process.on("SIGTERM", exit);
  266. process.on("SIGKILL", exit);
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement