Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 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.
- global.is_dev = false;
- const http = require("http");
- const https = require("https");
- const fs = require("fs");
- const path = require("path");
- const url = require("url");
- const net = require('net');
- const zlib = require("zlib");
- const child_process = require("child_process");
- require("./fortnite.js");
- require("./const.js");
- const konsole_web = require("./settings");
- function readStream(str) {
- return new Promise(resolve => {
- let x = [];
- str.on("data", data => {
- x.push(data);
- });
- str.on("end", () => {
- resolve(x);
- });
- })
- }
- const epicProxy = https.createServer({
- key: global.key,
- cert: global.cert,
- }, async (req, res) => {
- if (req.headers.host === "konsole.jrn") {
- konsole_web(req, res);
- return;
- }
- var urlObj = url.parse(req.url);
- let to_write = null;
- if (req.headers["content-type"] && req.headers["content-type"].split(";")[0] === "application/json") {
- let buf = await readStream(req);
- try {
- let json = JSON.parse(buf.join(""));
- if (typeof json.itemToSlot === "string" && json.itemToSlot.startsWith("K:")) {
- json.itemToSlot = json.itemToSlot.substr(2);
- }
- let tw = Buffer.from(JSON.stringify(json));
- req.headers["content-length"] = Buffer.byteLength(tw);
- to_write = [tw];
- } catch (e) {
- to_write = buf;
- }
- }
- let s_req = https.request({
- host: req.headers.host,
- port: 443,
- method: req.method,
- headers: req.headers,
- path: urlObj.path
- }, async s_res => {
- let sock = s_res;
- if (s_res.headers["content-encoding"] === "gzip" || s_res.headers["content-encoding"] === "deflate") {
- sock = sock.pipe(zlib.createUnzip());
- delete s_res.headers["content-encoding"];
- }
- if (s_res.headers["content-type"] && s_res.headers["content-type"].split(";")[0] === "application/json") {
- let buf = await readStream(sock);
- try {
- let json = JSON.parse(buf.join(""));
- if (typeof json.displayName === "string" && settings.override_name !== null) {
- if (typeof json.displayName === "string") {
- json.displayName = settings.override_name;
- }
- }
- if (Array.isArray(json)) {
- for (let i = 0; i < json.length; i++) {
- if (typeof json[i] === "object" && json[i].uniqueFilename === "3460cbe1c57d4a838ace32951a4d7171") {
- json[i].hash = "";
- json[i].hash256 = "";
- json[i].length = 0;
- json[i].uploaded = new Date().toISOString();
- }
- }
- }
- if (settings.add_items
- && json.profileChanges
- && json.profileChanges[0]
- && json.profileChanges[0].profile
- && json.profileChanges[0].profile.items) {
- let litems = json.profileChanges[0].profile.items;
- json.profileChanges[0].profile.items["K:"] = {
- "templateId": "GiftBox:gb_makegoodstw",
- "attributes": {
- "max_level_bonus":0,
- "fromAccountId":"34a02cf8f4414e29b15921876da36f9a",
- "lootList":global.items.map(i => ({
- itemType: i,
- itemGuid: i,
- itemProfile: "athena",
- quantity: 1
- })),
- "level":100,
- "item_seen":false,
- "xp":0,
- "giftedOn":"2018-10-30T03:33:03.937Z",
- "params":{"SubGame":"Athena"},
- "favorite":false
- },
- "quantity":1
- }
- global.items.forEach(item => {
- if (!Object.keys(litems).find(i => litems[i].templateId === item)) {
- json.profileChanges[0].profile.items[item] = {
- "templateId": item,
- "attributes": {
- "max_level_bonus": 0,
- "level": 100,
- "item_seen": true,
- "xp": 0,
- "variants": [],
- "favorite": false
- },
- "quantity": 1
- }
- }
- });
- }
- let tw = Buffer.from(JSON.stringify(json));
- s_res.headers["content-length"] = Buffer.byteLength(tw);
- res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
- res.end(tw);
- } catch (e) {
- res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
- for (let i = 0; i < buf.length; i++) {
- res.write(buf[i]);
- }
- res.end();
- }
- } else if (/^\/fortnite\/api\/cloudstorage\/system\//.test(urlObj.path) && 0) {
- let buf = await readStream(sock);
- let text = buf.join("");
- let nt = "";
- if (text !== nt) {
- let tw = Buffer.from(nt);
- s_res.headers["content-length"] = Buffer.byteLength(tw);
- res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
- res.end(tw);
- } else {
- res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
- for (let i = 0; i < buf.length; i++) {
- res.write(buf[i]);
- }
- res.end();
- }
- } else {
- res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
- sock.pipe(res);
- }
- });
- if (to_write !== null) {
- for (let i = 0; i < to_write.length; i++) {
- s_req.write(to_write[i]);
- }
- s_req.end();
- } else {
- req.pipe(s_req);
- }
- s_req.on("error", e => {
- res.end(e.toString());
- });
- }).listen(0, "127.0.0.1", () => {
- epicProxy.port = epicProxy.address().port;
- });
- var server = http.createServer(function (req, res) {
- // http proxy kinda sucks, don't use unless you have to
- var urlObj = url.parse(req.url);
- if (urlObj.host === "konsole.jrn") {
- res.writeHead(301, {
- Location: "https://" + urlObj.host + urlObj.path
- });
- res.end();
- return;
- }
- let s_req = http.request({
- protocol: urlObj.protocol,
- host: urlObj.hostname,
- port: urlObj.port,
- method: req.method,
- headers: req.headers,
- path: urlObj.path
- }, s_res => {
- res.writeHead(s_res.statusCode, s_res.statusMessage, s_res.headers);
- s_res.pipe(res);
- });
- req.pipe(s_req);
- s_req.on("error", e => {
- res.writeHead(502);
- res.end(e.toString());
- });
- }).listen(global.is_dev ? 7777 : 0, "127.0.0.1", () => {
- let port = server.address().port;
- if (!global.is_dev) {
- child_process.exec('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f');
- 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');
- }
- });
- var regex_hostport = /^([^:]+)(:([0-9]+))?$/;
- var getHostPortFromString = function (hostString, defaultPort) {
- var host = hostString;
- var port = defaultPort;
- var result = regex_hostport.exec(hostString);
- if (result != null) {
- host = result[1];
- if (result[2] != null) {
- port = result[3];
- }
- }
- return ([host, port]);
- };
- server.on('connect', function (req, socket, bodyhead) {
- var hostPort = getHostPortFromString(req.url, 443);
- if (hostPort[0] === "konsole.jrn" || (hostPort[0].endsWith(".ol.epicgames.com") && hostPort[0].indexOf("matchmaking") === -1 && hostPort[0] !== "xmpp-service-prod.ol.epicgames.com")) {
- hostPort = ["127.0.0.1", epicProxy.port];
- }
- var proxySocket = new net.Socket();
- proxySocket.connect(parseInt(hostPort[1]), hostPort[0], function () {
- proxySocket.write(bodyhead);
- socket.write("HTTP/" + req.httpVersion + " 200\r\n\r\n");
- }
- );
- proxySocket.on('data', function (chunk) {
- socket.write(chunk);
- });
- proxySocket.on('end', function () {
- socket.end();
- });
- proxySocket.on('error', function () {
- socket.write("HTTP/" + req.httpVersion + " 500\r\n\r\n");
- socket.end();
- });
- socket.on('data', function (chunk) {
- proxySocket.write(chunk);
- });
- socket.on('end', function () {
- proxySocket.end();
- });
- socket.on('error', function () {
- proxySocket.end();
- });
- });
- process.stdin.resume();
- function exit() {
- child_process.execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f');
- child_process.execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyServer /t REG_SZ /d "" /f');
- process.exit();
- }
- if (!global.is_dev) {
- process.on("beforeExit", exit);
- process.on("exit", exit);
- process.on("SIGINT", exit);
- process.on("SIGTERM", exit);
- process.on("SIGKILL", exit);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement