From 6731de13eab82469ac0ccd365cf84586b08ee0c5 Mon Sep 17 00:00:00 2001 From: gumi Date: Sat, 25 May 2019 21:07:57 -0400 Subject: use integrated nodemailer and connect to tmwa-admin directly --- .gitignore | 2 + package.json | 28 ++-- src/api.js | 16 +- src/routers/tmwa/middlewares/account.js | 276 ++++++++++++++++++-------------- 4 files changed, 172 insertions(+), 150 deletions(-) diff --git a/.gitignore b/.gitignore index 7297aeb..5b55916 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ /node_modules /package-lock.json /online.txt +/account.txt +/athena.txt diff --git a/package.json b/package.json index 7201388..5dadaad 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,23 @@ { "name": "tmw-api", - "version": "1.1.0", + "version": "2.0.0", "description": "TMW RESTful API", "author": "The Mana World", "license": "CC0-1.0", "config": { "port": 8080, "timezone": "UTC", - "sql": { - "host": "localhost", - "user": "db user", - "password": "db password", - "database": "db", - "table": "table" - }, "recaptcha": { "secret": "recaptcha secret key" }, "tmwa": { "name": "The Mana World Legacy Server", - "url": "tmwa://server.themanaworld.org:6901" + "url": "tmwa://server.themanaworld.org:6901", + "root": "/mnt/tmwAthena/tmwa-server-data", + "home": "/home/tmw" + }, + "mailer": { + "from": "The Mana World " } }, "repository": { @@ -36,11 +34,11 @@ "start": "node ." }, "dependencies": { - "express": "^4.16.3", - "mysql": "^2.15.0", - "random-number-csprng": "^1.0.2" + "express": "^4.17.0", + "nodemailer": "^6.2.1", + "random-number-csprng": "^1.0.2", + "ripgrep-bin": "^11.0.1", + "uuid": "^3.3.2" }, - "devDependencies": { - "nsp": "^3.2.1" - } + "devDependencies": {} } diff --git a/src/api.js b/src/api.js index 4e1e6f8..33cfb42 100644 --- a/src/api.js +++ b/src/api.js @@ -1,5 +1,4 @@ const express = require("express"); // from npm registry -const mysql = require("mysql"); // from npm registry const https = require("https"); // built-in const api = express(); @@ -13,6 +12,9 @@ if (process.env.npm_package_config_port === undefined) { // config common to all routers: api.locals = Object.assign({ rate_limiting: new Set(), // XXX: or do we want routers to each have their own rate limiter? + mailer: { + from: process.env.npm_package_config_mailer_from, + } }, api.locals); @@ -95,16 +97,8 @@ const tmwa_router = new (require("./routers/tmwa"))({ timezone: process.env.npm_package_config_timezone, name: process.env.npm_package_config_tmwa_name, url: process.env.npm_package_config_tmwa_url, - db_pool: mysql.createPool({ - connectionLimit: 10, - host : process.env.npm_package_config_sql_host, - user : process.env.npm_package_config_sql_user, - password : process.env.npm_package_config_sql_password, - database : process.env.npm_package_config_sql_database - }), - db_tables: { - register: process.env.npm_package_config_sql_table, - }, + root: process.env.npm_package_config_tmwa_root, + home: process.env.npm_package_config_tmwa_home, }, api, checkCaptcha, checkRateLimiting); global_router.use("/tmwa", tmwa_router); diff --git a/src/routers/tmwa/middlewares/account.js b/src/routers/tmwa/middlewares/account.js index 9c3afce..3c82dbc 100644 --- a/src/routers/tmwa/middlewares/account.js +++ b/src/routers/tmwa/middlewares/account.js @@ -1,4 +1,93 @@ -const randomNumber = require("random-number-csprng"); +// this whole file would be a lot prettier with typescript interfaces +"use strict"; +const uuidv4 = require("uuid/v4"); +const execFile = require("child_process").execFile; +const spawn = require("child_process").spawn; +const ripgrep = require("ripgrep-bin"); +const nodemailer = require("nodemailer"); + +const execAsync = (cmd, par) => + new Promise((resolve, reject) => + execFile(cmd, par, (error, stdout, stderr) => + resolve(error ? "" : (stdout ? stdout : stderr)))); + +const tmwa_account_regex = new RegExp("^(?[0-9]+)\t(?[^\t]+)\t[^\t]+\t(?