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 --- src/api.js | 16 +- src/routers/tmwa/middlewares/account.js | 276 ++++++++++++++++++-------------- 2 files changed, 157 insertions(+), 135 deletions(-) (limited to 'src') 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(?