From 29e86e40329c24e5216f9457d4b9fe28642e1395 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Sat, 1 Jun 2019 01:39:11 +1000 Subject: [PATCH] Added 3 second delay to account creation to sidestep a bug --- server/accounts.js | 36 +++++++++++++++++++------------- src/actions/profile.js | 7 +++++++ src/components/pages/profile.jsx | 9 ++++++-- src/reducers/profile.js | 7 ++++++- 4 files changed, 41 insertions(+), 18 deletions(-) diff --git a/server/accounts.js b/server/accounts.js index ed34016..ebbd5e6 100644 --- a/server/accounts.js +++ b/server/accounts.js @@ -69,7 +69,7 @@ const signupRequest = (connection) => (req, res) => { //build the verification email let addr = `http://${process.env.WEB_ADDRESS}/verifyrequest?email=${fields.email}&verify=${rand}`; let msg = 'Hello! Please visit the following address to verify your account: '; - let msgHtml = `

${msg}${addr}

`; +// let msgHtml = `

${msg}${addr}

`; //BUGFIX: is gmail being cruel? let sentinel = false; @@ -80,7 +80,7 @@ const signupRequest = (connection) => (req, res) => { to: fields.email, subject: 'Email Verification', text: msg + addr, - html: msgHtml +// html: msgHtml }, (err, reply) => { if (err) { //final check let msg = log('Something went wrong (did you use a valid email?)', err); @@ -90,7 +90,7 @@ const signupRequest = (connection) => (req, res) => { res.end(); } } else { - let msg = log('Verification email sent!', fields.email); + let msg = log('Verification email sent!', fields.email, fields.username, rand); if (!sentinel) { res.status(200).json({ msg: msg }); @@ -114,7 +114,6 @@ const verifyRequest = (connection) => (req, res) => { //correct number of results if (results.length !== 1) { -console.log(req.query.email); res.status(400).write(log('That account does not exist or this link has already been used.', req.query.email, req.query.verify)); res.end(); return; @@ -127,21 +126,28 @@ console.log(req.query.email); return; } - //move the data from signups to accounts - let query = 'INSERT INTO accounts (email, username, salt, hash) VALUES (?, ?, ?, ?);'; - connection.query(query, [results[0].email, results[0].username, results[0].salt, results[0].hash], (err) => { - if (err) throw err; + //BUGFIX: a delay to prevent the fail message appearing to the end user + setTimeout(() => { + log('Trying to create account', req.query.email); - //delete from signups - let query = 'DELETE FROM signups WHERE email = ?;'; - connection.query(query, [results[0].email], (err) => { + //move the data from signups to accounts + let query = 'INSERT IGNORE INTO accounts (email, username, salt, hash) VALUES (?, ?, ?, ?);'; + connection.query(query, [results[0].email, results[0].username, results[0].salt, results[0].hash], (err) => { if (err) throw err; - //TODO: prettier verification page - res.status(200).write(log('Verification succeeded!', req.query.email)); - res.end(); + //delete from signups + let query = 'DELETE FROM signups WHERE email = ?;'; + connection.query(query, [results[0].email], (err) => { + if (err) throw err; + + log('Account created', req.query.email); + }); }); - }); + }, 3000); //3 second delay on account creation + + //TODO: prettier verification page + res.status(200).write(log('Verification succeeded!', req.query.email)); + res.end(); }); }; diff --git a/src/actions/profile.js b/src/actions/profile.js index 9fc969c..17103bd 100644 --- a/src/actions/profile.js +++ b/src/actions/profile.js @@ -5,6 +5,7 @@ export const STORE_RECRUITS = 'STORE_RECRUITS'; export const STORE_SOLDIERS = 'STORE_SOLDIERS'; export const STORE_SPIES = 'STORE_SPIES'; export const STORE_SCIENTISTS = 'STORE_SCIENTISTS'; +export const CLEAR_PROFILE = 'CLEAR_PROFILE'; export const storeProfile = (username, gold, recruits, soldiers, spies, scientists) => { return { @@ -58,4 +59,10 @@ export const storeScientists = (scientists) => { type: STORE_SCIENTISTS, scientists: scientists }; +} + +export const clearProfile = () => { + return { + type: CLEAR_PROFILE + }; } \ No newline at end of file diff --git a/src/components/pages/profile.jsx b/src/components/pages/profile.jsx index 9516201..2b743e5 100644 --- a/src/components/pages/profile.jsx +++ b/src/components/pages/profile.jsx @@ -4,7 +4,7 @@ import { connect } from 'react-redux'; import queryString from 'query-string'; //actions -import { storeProfile } from '../../actions/profile.js'; +import { storeProfile, clearProfile } from '../../actions/profile.js'; //panels import CommonLinks from '../panels/common_links.jsx'; @@ -22,6 +22,10 @@ class Profile extends React.Component { this.sendRequest('/profilerequest', {username: this.state.params.username ? this.state.params.username : this.props.account.username}); } + componentWillUnmount() { + this.props.clearProfile(); + } + render() { let warningStyle = { display: this.state.warning.length > 0 ? 'flex' : 'none' @@ -343,7 +347,8 @@ const mapStoreToProps = (store) => { const mapDispatchToProps = (dispatch) => { return { - storeProfile: (username, gold, recruits, soldiers, spies, scientists) => dispatch(storeProfile(username, gold, recruits, soldiers, spies, scientists)) + storeProfile: (username, gold, recruits, soldiers, spies, scientists) => dispatch(storeProfile(username, gold, recruits, soldiers, spies, scientists)), + clearProfile: () => dispatch(clearProfile()) }; }; diff --git a/src/reducers/profile.js b/src/reducers/profile.js index 0291a8d..c4baa51 100644 --- a/src/reducers/profile.js +++ b/src/reducers/profile.js @@ -5,7 +5,8 @@ import { STORE_RECRUITS, STORE_SOLDIERS, STORE_SPIES, - STORE_SCIENTISTS + STORE_SCIENTISTS, + CLEAR_PROFILE } from '../actions/profile.js'; const initialStore = { @@ -53,6 +54,10 @@ export const profileReducer = (store = initialStore, action) => { case STORE_SCIENTISTS: newStore.scientists = action.scientists; break; + + case CLEAR_PROFILE: + newStore = JSON.parse(JSON.stringify(initialStore)); + break; }; return newStore;