From 172702565e9f8a83c235f61b82e57d673940501f Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 15 Sep 2016 22:20:52 -0400 Subject: [PATCH] show username and email history --- public/language/en_GB/user.json | 4 +++- src/controllers/accounts/info.js | 6 +++++- src/user/info.js | 24 ++++++++++++++++++++++++ src/user/profile.js | 4 +++- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/public/language/en_GB/user.json b/public/language/en_GB/user.json index 44cc5bfa94..4dfd450cff 100644 --- a/public/language/en_GB/user.json +++ b/public/language/en_GB/user.json @@ -140,5 +140,7 @@ "info.banned-until": "Banned until %1", "info.banned-permanently": "Banned permanently", "info.banned-reason-label": "Reason", - "info.banned-no-reason": "No reason given." + "info.banned-no-reason": "No reason given.", + "info.username-history": "Username History", + "info.email-history": "Email History" } diff --git a/src/controllers/accounts/info.js b/src/controllers/accounts/info.js index 117c7ad47c..fad9cd4c24 100644 --- a/src/controllers/accounts/info.js +++ b/src/controllers/accounts/info.js @@ -21,7 +21,9 @@ infoController.get = function(req, res, callback) { } async.parallel({ history: async.apply(user.getModerationHistory, userData.uid), - sessions: async.apply(user.auth.getSessions, userData.uid, req.sessionID) + sessions: async.apply(user.auth.getSessions, userData.uid, req.sessionID), + usernames: async.apply(user.getUsernameHistory, userData.uid), + emails: async.apply(user.getEmailHistory, userData.uid) }, next); } ], function(err, data) { @@ -31,6 +33,8 @@ infoController.get = function(req, res, callback) { userData.history = data.history; userData.sessions = data.sessions; + userData.usernames = data.usernames; + userData.emails = data.emails; userData.title = '[[pages:account/info]]'; userData.breadcrumbs = helpers.buildBreadcrumbs([{text: userData.username, url: '/user/' + userData.userslug}, {text: '[[user:account_info]]'}]); diff --git a/src/user/info.js b/src/user/info.js index bd4eded9f5..49d03ed90c 100644 --- a/src/user/info.js +++ b/src/user/info.js @@ -61,6 +61,30 @@ module.exports = function(User) { }); }; + User.getEmailHistory = function(uid, callback) { + db.getSortedSetRevRangeWithScores('user:' + uid + ':emails', 0, -1, function(err, data) { + callback(err, data.map(function(set) { + set.timestamp = set.score; + set.timestampISO = new Date(set.score).toISOString(); + set.value = set.value.split(':')[0]; + delete set.score; + return set; + })); + }); + }; + + User.getUsernameHistory = function(uid, callback) { + db.getSortedSetRevRangeWithScores('user:' + uid + ':usernames', 0, -1, function(err, data) { + callback(err, data.map(function(set) { + set.timestamp = set.score; + set.timestampISO = new Date(set.score).toISOString(); + set.value = set.value.split(':')[0]; + delete set.score; + return set; + })); + }); + }; + function getFlagMetadata(data, callback) { var pids = data.flags.map(function(flagObj) { return parseInt(flagObj.value, 10); diff --git a/src/user/profile.js b/src/user/profile.js index 34fb24467c..d3a172ec79 100644 --- a/src/user/profile.js +++ b/src/user/profile.js @@ -178,6 +178,7 @@ module.exports = function(User) { function(next) { db.sortedSetAdd('email:uid', uid, newEmail.toLowerCase(), next); }, + async.apply(db.sortedSetAdd, 'user:' + uid + ':emails', Date.now(), newEmail + ':' + Date.now()), function(next) { db.sortedSetAdd('email:sorted', 0, newEmail.toLowerCase() + ':' + uid, next); }, @@ -219,7 +220,8 @@ module.exports = function(User) { function(next) { async.series([ async.apply(db.sortedSetRemove, 'username:sorted', userData.username.toLowerCase() + ':' + uid), - async.apply(db.sortedSetAdd, 'username:sorted', 0, newUsername.toLowerCase() + ':' + uid) + async.apply(db.sortedSetAdd, 'username:sorted', 0, newUsername.toLowerCase() + ':' + uid), + async.apply(db.sortedSetAdd, 'user:' + uid + ':usernames', Date.now(), newUsername + ':' + Date.now()) ], next); }, ], callback);