Advertisement
Guest User

Untitled

a guest
Feb 7th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const app = (async () => {
  2.     const _PORT_ = 54302;
  3.     const express = require("express");
  4.     const http = require("http");
  5.     const socketio = require("socket.io");
  6.     const uuid = require("uuid4");
  7.     const enmap = require("enmap");
  8.     const fs = require("fs");
  9.     const fetch = require("node-fetch");
  10.     const { URLSearchParams } = require('url');
  11.  
  12.     const params = newParams = (function(obj) {
  13.         const $ = new URLSearchParams();
  14.         Object.keys(obj).forEach((name) => $.append(name, obj[name]));
  15.         return($);
  16.     });
  17.     const app = express();
  18.     app.use(express.static("web"));
  19.     const server = http.Server(app);
  20.     server.listen(_PORT_);
  21.     const io = socketio(server);
  22.     const enmaps = ((NAMES, ops = {}) => {
  23.         const $ = {};
  24.         NAMES.forEach((name) => $[name] = new enmap(Object.assign(ops, {name})));
  25.         return ($);
  26.     });
  27.     let images = {};
  28.     let IMAGES = fs.readdirSync("./web/images");
  29.     IMAGES.forEach(async (name) => images[name] = eval(fs.readFileSync(`./web/images/${name}`)));
  30.     let config = await enmaps(["ips", "players", "storages", "characters", "worlds", "verify"]);
  31.     let worlds = {};
  32.     const newWorld = (async (NAME) => {
  33.         if (config.worlds.has(NAME))
  34.             return (0);
  35.         const name = `world-${uuid()}`;
  36.         config.worlds.set(NAME, name);
  37.         loadWorld(NAME);
  38.         return (1);
  39.     });
  40.     const loadWorld = ((NAME) => {
  41.         if (!config.worlds.has(NAME))
  42.             return (0);
  43.         worlds[NAME] = new enmap({name: config.worlds.get(NAME), fetchAll: false});
  44.         return (1);
  45.     });
  46.     const unloadWorld = ((NAME) => {
  47.         if (!config.worlds.has(NAME) || !worlds[NAME])
  48.             return (0);
  49.         worlds[NAME].close();
  50.         delete worlds[NAME];
  51.         return (1);
  52.     });
  53.     const purgeWorld = ((NAME) => {
  54.         if (!config.worlds.has(NAME))
  55.             return (0);
  56.         config.worlds.delete(NAME);
  57.         worlds[NAME].destroy();
  58.         delete worlds[NAME];
  59.         return (1);
  60.     });
  61.     config.worlds.defer.then(() => {
  62.         config.worlds.indexes.forEach((NAME) => loadWorld(NAME));
  63.         newWorld("MainLand");
  64.     });
  65.  
  66.     setInterval(() => {
  67.         let unverified = config.players.findAll("verified", false);
  68.         unverified.forEach(async (data) => {
  69.             if ((Date.now() - data.created) > (1000 * 60 * 30)) {
  70.                 config.players.delete(data.id);
  71.                 config.characters.delete(data.id);
  72.                 if (config.verify.has(data.id))
  73.                     config.verify.delete(data.id);
  74.             }
  75.         });
  76.     }, 1000 * 60);
  77.  
  78.     let begin = worlds["MainLand"];
  79.  
  80.     io.on("connection", async (socket) => {
  81.         socket.id = uuid();
  82.         const ip = socket.conn.remoteAddress;
  83.         if (!config.ips.has(ip))const app = (async () => {
  84.     const _PORT_ = 54302;
  85.     const express = require("express");
  86.     const http = require("http");
  87.     const socketio = require("socket.io");
  88.     const uuid = require("uuid4");
  89.     const enmap = require("enmap");
  90.     const fs = require("fs");
  91.     const fetch = require("node-fetch");
  92.     const { URLSearchParams } = require('url');
  93.  
  94.     const params = newParams = (function(obj) {
  95.         const $ = new URLSearchParams();
  96.         Object.keys(obj).forEach((name) => $.append(name, obj[name]));
  97.         return($);
  98.     });
  99.     const app = express();
  100.     app.use(express.static("web"));
  101.     const server = http.Server(app);
  102.     server.listen(_PORT_);
  103.     const io = socketio(server);
  104.     const enmaps = (async (NAMES, ops = {}) => {
  105.         const $ = {};
  106.         NAMES.forEach(async (name) => $[name] = new enmap(Object.assign(ops, {name})));
  107.         return ($);
  108.     });
  109.     let images = {};
  110.     let IMAGES = fs.readdirSync("./web/images");
  111.     IMAGES.forEach(async (name) => images[name] = eval(fs.readFileSync(`./web/images/${name}`)));
  112.     let config = await enmaps(["ips", "players", "storages", "characters", "worlds", "verify"]);
  113.     let worlds = {};
  114.     const newWorld = (async (NAME) => {
  115.         if (config.worlds.has(NAME))
  116.             return (0);
  117.         const name = `world-${uuid()}`;
  118.         config.worlds.set(NAME, name);
  119.         loadWorld(NAME);
  120.         return (1);
  121.     });
  122.     const loadWorld = (async (NAME) => {
  123.         if (!config.worlds.has(NAME))
  124.             return (0);
  125.         worlds[NAME] = new enmap({name: config.worlds.get(NAME), fetchAll: false});
  126.         return (1);
  127.     });
  128.     const unloadWorld = (async (NAME) => {
  129.         if (!config.worlds.has(NAME) || !worlds[NAME])
  130.             return (0);
  131.         worlds[NAME].close();
  132.         delete worlds[NAME];
  133.         return (1);
  134.     });
  135.     const purgeWorld = (async (NAME) => {
  136.         if (!config.worlds.has(NAME))
  137.             return (0);
  138.         config.worlds.delete(NAME);
  139.         worlds[NAME].destroy();
  140.         delete worlds[NAME];
  141.         return (1);
  142.     });
  143.     config.worlds.defer.then(async () => {
  144.         config.worlds.indexes.forEach(async (NAME) => await loadWorld(NAME));
  145.         await newWorld("MainLand");
  146.     });
  147.  
  148.     setInterval(async () => {
  149.         let unverified = config.players.findAll("verified", false);
  150.         unverified.forEach(async (data) => {
  151.             if ((Date.now() - data.created) > (1000 * 60 * 30)) {
  152.                 config.players.delete(data.id);
  153.                 config.characters.delete(data.id);
  154.                 if (config.verify.has(data.id))
  155.                     config.verify.delete(data.id);
  156.             }
  157.         });
  158.     }, 1000 * 60);
  159.  
  160.     let begin = worlds["MainLand"];
  161.  
  162.     io.on("connection", async (socket) => {
  163.         socket.id = uuid();
  164.         const ip = socket.conn.remoteAddress;
  165.         if (!config.ips.has(ip))
  166.             config.ips.set(ip, {amount: 0});
  167.         console.log(`Client ${socket.id} opened!`);
  168.         socket.send = (async (...args) => socket.emit(...args));
  169.         socket.close = (async () => socket.disconnect(true));
  170.         const send = (async (...args) => socket.send(...args));
  171.         const on = (async (...args) => socket.on(...args));
  172.         on("disconnect", async (reason) => console.log(`Client ${socket.id} closed for "${reason}"`));
  173.         send("setID", socket.id);
  174.         on("query", async (data) => {
  175.             let id = data[1];
  176.             data = data[0];
  177.             let result = {status: false};
  178.             if (data.command === "confirm-code") {
  179.                 let {code} = data;
  180.                 if (config.verify.has(socket.playerID)) {
  181.                     let code2 = config.verify.get(socket.playerID);
  182.                     if (code === code2) {
  183.                         result.status = true;
  184.                         config.players.setProp(socket.playerID, "verified", true);
  185.                         send("update-player", config.players.get(socket.playerID));
  186.                         config.verify.delete(socket.playerID);
  187.                     } else {
  188.                         result.error = "Invalid code!";
  189.                     }
  190.                 } else {
  191.                     result.error = "No code sent yet!";
  192.                 }
  193.             }
  194.             if (data.command === "verify-email") {
  195.                 let {email} = data;
  196.                 let users = config.players.findAll("email", email);
  197.                 if (!users.length) {
  198.                     let code = uuid();
  199.                     config.verify.set(socket.playerID, code);
  200.                     config.players.set(socket.playerID, email, "email");
  201.                     send("update-player", config.players.get(socket.playerID));
  202.                     fetch("https://cryogena.net/emlAPI/eml.php", {
  203.                         method: "post",
  204.                         body: params({
  205.                             user: "verify@tomc.ml",
  206.                             pass: "Kamman55!",
  207.                             action: "send",
  208.                             to: email,
  209.                             subject: "ApexCraft Email Verification",
  210.                             body: `Your verification code for ApexCraft is: ${code}\n\nThis email was intended for: ${email}`
  211.                         })
  212.                     }).then(async (res) => {
  213.                         return (res.json())
  214.                     }).then(async (json) => {
  215.                         console.log(json);
  216.                     });
  217.                     result.status = true;
  218.                 } else {
  219.                     result.error = "Email in-use!";
  220.                 }
  221.             }
  222.             if (data.command === "restore-email") {
  223.                 const {email} = data;
  224.                 const user = config.players.find("email", email);
  225.                 if (!user) {
  226.                     result.error = "Email not found!";
  227.                 } else if(email.trim() === "") {
  228.                     result.error = "Email cannot be empty!";
  229.                 } else {
  230.                     result.status = true;
  231.                     const {id} = user;
  232.                     fetch("https://cryogena.net/emlAPI/eml.php", {
  233.                         method: "post",
  234.                         body: params({
  235.                             user: "verify@tomc.ml",
  236.                             pass: "Kamman55!",
  237.                             action: "send",
  238.                             to: email,
  239.                             subject: "ApexCraft Character Code",
  240.                             body: `Your character code for ApexCraft is: ${id}\n\nThis email was intended for: ${email}`
  241.                         })
  242.                     }).then(async (res) => {
  243.                         return (res.json())
  244.                     }).then(async (json) => {
  245.                         console.log(json);
  246.                     });
  247.                 }
  248.             }
  249.             if (data.command === "query-new") {
  250.                 let playersCreated = config.players.findAll("created_by", ip);
  251.                 if (playersCreated.length > 10) {
  252.                     result.error = "Too many characters created!<br>Please wait at most 30 minutes to generate a new character!";
  253.                 } else {
  254.                     result.status = true;
  255.                     let playerID = uuid();
  256.                     while (config.players.has(playerID)) {
  257.                         playerID = uuid();
  258.                     }
  259.                     result.id = playerID;
  260.                     config.players.set(playerID, {
  261.                         id: playerID,
  262.                         verified: false,
  263.                         email: "",
  264.                         username: `tempchar-${uuid()}`,
  265.                         created: Date.now(),
  266.                         created_by: ip
  267.                     });
  268.                     config.characters.set(playerID, {
  269.                         hp: [10, 10],
  270.                         xp: 0,
  271.                         location: {
  272.                             x: 0, y: 0, world: "MainLand"
  273.                         }
  274.                     });
  275.                     socket.playerID = playerID;
  276.                     send("update-player", config.players.get(socket.playerID));
  277.                     send("update-character", config.characters.get(socket.playerID));
  278.                 }
  279.             }
  280.             if (data.command === "restore-character") {
  281.                 console.log({data});
  282.                 let playerID = data.id;
  283.                 if (config.players.has(playerID)) {
  284.                     result.status = true;
  285.                     socket.playerID = playerID;
  286.                     send("update-player", config.players.get(socket.playerID));
  287.                     send("update-character", config.characters.get(socket.playerID));
  288.                 }
  289.             }
  290.             send(id, result);
  291.         });
  292.     });
  293. });
  294. app();
  295.             config.ips.set(ip, {amount: 0});
  296.         console.log(`Client ${socket.id} opened!`);
  297.         socket.send = ((...args) => socket.emit(...args));
  298.         socket.close = (() => socket.disconnect(true));
  299.         const send = ((...args) => socket.send(...args));
  300.         const on = ((...args) => socket.on(...args));
  301.         on("disconnect", (reason) => console.log(`Client ${socket.id} closed for "${reason}"`));
  302.         send("setID", socket.id);
  303.         on("query", async (data) => {
  304.             let id = data[1];
  305.             data = data[0];
  306.             let result = {status: false};
  307.             if (data.command === "confirm-code") {
  308.                 let {code} = data;
  309.                 if (config.verify.has(socket.playerID)) {
  310.                     let code2 = config.verify.get(socket.playerID);
  311.                     if (code === code2) {
  312.                         result.status = true;
  313.                         config.players.setProp(socket.playerID, "verified", true);
  314.                         send("update-player", config.players.get(socket.playerID));
  315.                         config.verify.delete(socket.playerID);
  316.                     } else {
  317.                         result.error = "Invalid code!";
  318.                     }
  319.                 } else {
  320.                     result.error = "No code sent yet!";
  321.                 }
  322.             }
  323.             if (data.command === "verify-email") {
  324.                 let {email} = data;
  325.                 let users = config.players.findAll("email", email);
  326.                 if (!users.length) {
  327.                     let code = uuid();
  328.                     config.verify.set(socket.playerID, code);
  329.                     config.players.set(socket.playerID, email, "email");
  330.                     send("update-player", config.players.get(socket.playerID));
  331.                     fetch("https://cryogena.net/emlAPI/eml.php", {
  332.                         method: "post",
  333.                         body: params({
  334.                             user: "verify@tomc.ml",
  335.                             pass: "**REDACTED**",
  336.                             action: "send",
  337.                             to: email,
  338.                             subject: "ApexCraft Email Verification",
  339.                             body: `Your verification code for ApexCraft is: ${code}\n\nThis email was intended for: ${email}`
  340.                         })
  341.                     }).then(async (res) => {
  342.                         return (res.json())
  343.                     }).then(async (json) => {
  344.                         console.log(json);
  345.                     });
  346.                     result.status = true;
  347.                 } else {
  348.                     result.error = "Email in-use!";
  349.                 }
  350.             }
  351.             if (data.command === "restore-email") {
  352.                 const {email} = data;
  353.                 const user = config.players.find("email", email);
  354.                 if (!user) {
  355.                     result.error = "Email not found!";
  356.                 } else if(email.trim() === "") {
  357.                     result.error = "Email cannot be empty!";
  358.                 } else {
  359.                     result.status = true;
  360.                     const {id} = user;
  361.                     fetch("https://cryogena.net/emlAPI/eml.php", {
  362.                         method: "post",
  363.                         body: params({
  364.                             user: "verify@tomc.ml",
  365.                             pass: "**REDACTED**",
  366.                             action: "send",
  367.                             to: email,
  368.                             subject: "ApexCraft Character Code",
  369.                             body: `Your character code for ApexCraft is: ${id}\n\nThis email was intended for: ${email}`
  370.                         })
  371.                     }).then(async (res) => {
  372.                         return (res.json())
  373.                     }).then(async (json) => {
  374.                         console.log(json);
  375.                     });
  376.                 }
  377.             }
  378.             if (data.command === "query-new") {
  379.                 let playersCreated = config.players.findAll("created_by", ip);
  380.                 if (playersCreated.length > 10) {
  381.                     result.error = "Too many characters created!<br>Please wait at most 30 minutes to generate a new character!";
  382.                 } else {
  383.                     result.status = true;
  384.                     let playerID = uuid();
  385.                     while (config.players.has(playerID)) {
  386.                         playerID = uuid();
  387.                     }
  388.                     result.id = playerID;
  389.                     config.players.set(playerID, {
  390.                         id: playerID,
  391.                         verified: false,
  392.                         email: "",
  393.                         username: `tempchar-${uuid()}`,
  394.                         created: Date.now(),
  395.                         created_by: ip
  396.                     });
  397.                     config.characters.set(playerID, {
  398.                         hp: [10, 10],
  399.                         xp: 0,
  400.                         location: {
  401.                             x: 0, y: 0, world: "MainLand"
  402.                         }
  403.                     });
  404.                     socket.playerID = playerID;
  405.                     send("update-player", config.players.get(socket.playerID));
  406.                     send("update-character", config.characters.get(socket.playerID));
  407.                 }
  408.             }
  409.             if (data.command === "restore-character") {
  410.                 console.log({data});
  411.                 let playerID = data.id;
  412.                 if (config.players.has(playerID)) {
  413.                     result.status = true;
  414.                     socket.playerID = playerID;
  415.                     send("update-player", config.players.get(socket.playerID));
  416.                     send("update-character", config.characters.get(socket.playerID));
  417.                 }
  418.             }
  419.             send(id, result);
  420.         });
  421.     });
  422. });
  423. app();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement