Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const app = (async () => {
- const _PORT_ = 54302;
- const express = require("express");
- const http = require("http");
- const socketio = require("socket.io");
- const uuid = require("uuid4");
- const enmap = require("enmap");
- const fs = require("fs");
- const fetch = require("node-fetch");
- const { URLSearchParams } = require('url');
- const params = newParams = (function(obj) {
- const $ = new URLSearchParams();
- Object.keys(obj).forEach((name) => $.append(name, obj[name]));
- return($);
- });
- const app = express();
- app.use(express.static("web"));
- const server = http.Server(app);
- server.listen(_PORT_);
- const io = socketio(server);
- const enmaps = ((NAMES, ops = {}) => {
- const $ = {};
- NAMES.forEach((name) => $[name] = new enmap(Object.assign(ops, {name})));
- return ($);
- });
- let images = {};
- let IMAGES = fs.readdirSync("./web/images");
- IMAGES.forEach(async (name) => images[name] = eval(fs.readFileSync(`./web/images/${name}`)));
- let config = await enmaps(["ips", "players", "storages", "characters", "worlds", "verify"]);
- let worlds = {};
- const newWorld = (async (NAME) => {
- if (config.worlds.has(NAME))
- return (0);
- const name = `world-${uuid()}`;
- config.worlds.set(NAME, name);
- loadWorld(NAME);
- return (1);
- });
- const loadWorld = ((NAME) => {
- if (!config.worlds.has(NAME))
- return (0);
- worlds[NAME] = new enmap({name: config.worlds.get(NAME), fetchAll: false});
- return (1);
- });
- const unloadWorld = ((NAME) => {
- if (!config.worlds.has(NAME) || !worlds[NAME])
- return (0);
- worlds[NAME].close();
- delete worlds[NAME];
- return (1);
- });
- const purgeWorld = ((NAME) => {
- if (!config.worlds.has(NAME))
- return (0);
- config.worlds.delete(NAME);
- worlds[NAME].destroy();
- delete worlds[NAME];
- return (1);
- });
- config.worlds.defer.then(() => {
- config.worlds.indexes.forEach((NAME) => loadWorld(NAME));
- newWorld("MainLand");
- });
- setInterval(() => {
- let unverified = config.players.findAll("verified", false);
- unverified.forEach(async (data) => {
- if ((Date.now() - data.created) > (1000 * 60 * 30)) {
- config.players.delete(data.id);
- config.characters.delete(data.id);
- if (config.verify.has(data.id))
- config.verify.delete(data.id);
- }
- });
- }, 1000 * 60);
- let begin = worlds["MainLand"];
- io.on("connection", async (socket) => {
- socket.id = uuid();
- const ip = socket.conn.remoteAddress;
- if (!config.ips.has(ip))const app = (async () => {
- const _PORT_ = 54302;
- const express = require("express");
- const http = require("http");
- const socketio = require("socket.io");
- const uuid = require("uuid4");
- const enmap = require("enmap");
- const fs = require("fs");
- const fetch = require("node-fetch");
- const { URLSearchParams } = require('url');
- const params = newParams = (function(obj) {
- const $ = new URLSearchParams();
- Object.keys(obj).forEach((name) => $.append(name, obj[name]));
- return($);
- });
- const app = express();
- app.use(express.static("web"));
- const server = http.Server(app);
- server.listen(_PORT_);
- const io = socketio(server);
- const enmaps = (async (NAMES, ops = {}) => {
- const $ = {};
- NAMES.forEach(async (name) => $[name] = new enmap(Object.assign(ops, {name})));
- return ($);
- });
- let images = {};
- let IMAGES = fs.readdirSync("./web/images");
- IMAGES.forEach(async (name) => images[name] = eval(fs.readFileSync(`./web/images/${name}`)));
- let config = await enmaps(["ips", "players", "storages", "characters", "worlds", "verify"]);
- let worlds = {};
- const newWorld = (async (NAME) => {
- if (config.worlds.has(NAME))
- return (0);
- const name = `world-${uuid()}`;
- config.worlds.set(NAME, name);
- loadWorld(NAME);
- return (1);
- });
- const loadWorld = (async (NAME) => {
- if (!config.worlds.has(NAME))
- return (0);
- worlds[NAME] = new enmap({name: config.worlds.get(NAME), fetchAll: false});
- return (1);
- });
- const unloadWorld = (async (NAME) => {
- if (!config.worlds.has(NAME) || !worlds[NAME])
- return (0);
- worlds[NAME].close();
- delete worlds[NAME];
- return (1);
- });
- const purgeWorld = (async (NAME) => {
- if (!config.worlds.has(NAME))
- return (0);
- config.worlds.delete(NAME);
- worlds[NAME].destroy();
- delete worlds[NAME];
- return (1);
- });
- config.worlds.defer.then(async () => {
- config.worlds.indexes.forEach(async (NAME) => await loadWorld(NAME));
- await newWorld("MainLand");
- });
- setInterval(async () => {
- let unverified = config.players.findAll("verified", false);
- unverified.forEach(async (data) => {
- if ((Date.now() - data.created) > (1000 * 60 * 30)) {
- config.players.delete(data.id);
- config.characters.delete(data.id);
- if (config.verify.has(data.id))
- config.verify.delete(data.id);
- }
- });
- }, 1000 * 60);
- let begin = worlds["MainLand"];
- io.on("connection", async (socket) => {
- socket.id = uuid();
- const ip = socket.conn.remoteAddress;
- if (!config.ips.has(ip))
- config.ips.set(ip, {amount: 0});
- console.log(`Client ${socket.id} opened!`);
- socket.send = (async (...args) => socket.emit(...args));
- socket.close = (async () => socket.disconnect(true));
- const send = (async (...args) => socket.send(...args));
- const on = (async (...args) => socket.on(...args));
- on("disconnect", async (reason) => console.log(`Client ${socket.id} closed for "${reason}"`));
- send("setID", socket.id);
- on("query", async (data) => {
- let id = data[1];
- data = data[0];
- let result = {status: false};
- if (data.command === "confirm-code") {
- let {code} = data;
- if (config.verify.has(socket.playerID)) {
- let code2 = config.verify.get(socket.playerID);
- if (code === code2) {
- result.status = true;
- config.players.setProp(socket.playerID, "verified", true);
- send("update-player", config.players.get(socket.playerID));
- config.verify.delete(socket.playerID);
- } else {
- result.error = "Invalid code!";
- }
- } else {
- result.error = "No code sent yet!";
- }
- }
- if (data.command === "verify-email") {
- let {email} = data;
- let users = config.players.findAll("email", email);
- if (!users.length) {
- let code = uuid();
- config.verify.set(socket.playerID, code);
- config.players.set(socket.playerID, email, "email");
- send("update-player", config.players.get(socket.playerID));
- fetch("https://cryogena.net/emlAPI/eml.php", {
- method: "post",
- body: params({
- user: "verify@tomc.ml",
- pass: "Kamman55!",
- action: "send",
- to: email,
- subject: "ApexCraft Email Verification",
- body: `Your verification code for ApexCraft is: ${code}\n\nThis email was intended for: ${email}`
- })
- }).then(async (res) => {
- return (res.json())
- }).then(async (json) => {
- console.log(json);
- });
- result.status = true;
- } else {
- result.error = "Email in-use!";
- }
- }
- if (data.command === "restore-email") {
- const {email} = data;
- const user = config.players.find("email", email);
- if (!user) {
- result.error = "Email not found!";
- } else if(email.trim() === "") {
- result.error = "Email cannot be empty!";
- } else {
- result.status = true;
- const {id} = user;
- fetch("https://cryogena.net/emlAPI/eml.php", {
- method: "post",
- body: params({
- user: "verify@tomc.ml",
- pass: "Kamman55!",
- action: "send",
- to: email,
- subject: "ApexCraft Character Code",
- body: `Your character code for ApexCraft is: ${id}\n\nThis email was intended for: ${email}`
- })
- }).then(async (res) => {
- return (res.json())
- }).then(async (json) => {
- console.log(json);
- });
- }
- }
- if (data.command === "query-new") {
- let playersCreated = config.players.findAll("created_by", ip);
- if (playersCreated.length > 10) {
- result.error = "Too many characters created!<br>Please wait at most 30 minutes to generate a new character!";
- } else {
- result.status = true;
- let playerID = uuid();
- while (config.players.has(playerID)) {
- playerID = uuid();
- }
- result.id = playerID;
- config.players.set(playerID, {
- id: playerID,
- verified: false,
- email: "",
- username: `tempchar-${uuid()}`,
- created: Date.now(),
- created_by: ip
- });
- config.characters.set(playerID, {
- hp: [10, 10],
- xp: 0,
- location: {
- x: 0, y: 0, world: "MainLand"
- }
- });
- socket.playerID = playerID;
- send("update-player", config.players.get(socket.playerID));
- send("update-character", config.characters.get(socket.playerID));
- }
- }
- if (data.command === "restore-character") {
- console.log({data});
- let playerID = data.id;
- if (config.players.has(playerID)) {
- result.status = true;
- socket.playerID = playerID;
- send("update-player", config.players.get(socket.playerID));
- send("update-character", config.characters.get(socket.playerID));
- }
- }
- send(id, result);
- });
- });
- });
- app();
- config.ips.set(ip, {amount: 0});
- console.log(`Client ${socket.id} opened!`);
- socket.send = ((...args) => socket.emit(...args));
- socket.close = (() => socket.disconnect(true));
- const send = ((...args) => socket.send(...args));
- const on = ((...args) => socket.on(...args));
- on("disconnect", (reason) => console.log(`Client ${socket.id} closed for "${reason}"`));
- send("setID", socket.id);
- on("query", async (data) => {
- let id = data[1];
- data = data[0];
- let result = {status: false};
- if (data.command === "confirm-code") {
- let {code} = data;
- if (config.verify.has(socket.playerID)) {
- let code2 = config.verify.get(socket.playerID);
- if (code === code2) {
- result.status = true;
- config.players.setProp(socket.playerID, "verified", true);
- send("update-player", config.players.get(socket.playerID));
- config.verify.delete(socket.playerID);
- } else {
- result.error = "Invalid code!";
- }
- } else {
- result.error = "No code sent yet!";
- }
- }
- if (data.command === "verify-email") {
- let {email} = data;
- let users = config.players.findAll("email", email);
- if (!users.length) {
- let code = uuid();
- config.verify.set(socket.playerID, code);
- config.players.set(socket.playerID, email, "email");
- send("update-player", config.players.get(socket.playerID));
- fetch("https://cryogena.net/emlAPI/eml.php", {
- method: "post",
- body: params({
- user: "verify@tomc.ml",
- pass: "**REDACTED**",
- action: "send",
- to: email,
- subject: "ApexCraft Email Verification",
- body: `Your verification code for ApexCraft is: ${code}\n\nThis email was intended for: ${email}`
- })
- }).then(async (res) => {
- return (res.json())
- }).then(async (json) => {
- console.log(json);
- });
- result.status = true;
- } else {
- result.error = "Email in-use!";
- }
- }
- if (data.command === "restore-email") {
- const {email} = data;
- const user = config.players.find("email", email);
- if (!user) {
- result.error = "Email not found!";
- } else if(email.trim() === "") {
- result.error = "Email cannot be empty!";
- } else {
- result.status = true;
- const {id} = user;
- fetch("https://cryogena.net/emlAPI/eml.php", {
- method: "post",
- body: params({
- user: "verify@tomc.ml",
- pass: "**REDACTED**",
- action: "send",
- to: email,
- subject: "ApexCraft Character Code",
- body: `Your character code for ApexCraft is: ${id}\n\nThis email was intended for: ${email}`
- })
- }).then(async (res) => {
- return (res.json())
- }).then(async (json) => {
- console.log(json);
- });
- }
- }
- if (data.command === "query-new") {
- let playersCreated = config.players.findAll("created_by", ip);
- if (playersCreated.length > 10) {
- result.error = "Too many characters created!<br>Please wait at most 30 minutes to generate a new character!";
- } else {
- result.status = true;
- let playerID = uuid();
- while (config.players.has(playerID)) {
- playerID = uuid();
- }
- result.id = playerID;
- config.players.set(playerID, {
- id: playerID,
- verified: false,
- email: "",
- username: `tempchar-${uuid()}`,
- created: Date.now(),
- created_by: ip
- });
- config.characters.set(playerID, {
- hp: [10, 10],
- xp: 0,
- location: {
- x: 0, y: 0, world: "MainLand"
- }
- });
- socket.playerID = playerID;
- send("update-player", config.players.get(socket.playerID));
- send("update-character", config.characters.get(socket.playerID));
- }
- }
- if (data.command === "restore-character") {
- console.log({data});
- let playerID = data.id;
- if (config.players.has(playerID)) {
- result.status = true;
- socket.playerID = playerID;
- send("update-player", config.players.get(socket.playerID));
- send("update-character", config.characters.get(socket.playerID));
- }
- }
- send(id, result);
- });
- });
- });
- app();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement