Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Refactored backend code to use settings in config for two subs
instead of hardcoded references. Done in the dumbest way to avoid
breaking anything. Still should be refactored at some point
to support arbitrary numbers of subs with arbitrary flair sets.
  • Loading branch information
baudtack committed Nov 2, 2017
1 parent 7e7cf81 commit b678dc7
Show file tree
Hide file tree
Showing 10 changed files with 49 additions and 44 deletions.
2 changes: 1 addition & 1 deletion api/controllers/AuthController.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ module.exports = {
return res.redirect(url);
});
};
let modPermissions = await Reddit.getModeratorPermissions(sails.config.reddit.adminRefreshToken, user.name, 'pokemontrades');
let modPermissions = await Reddit.getModeratorPermissions(sails.config.reddit.adminRefreshToken, user.name, sails.config.reddit.tradeSub);
if (modPermissions) { //User is a mod, set isMod to true
User.update(user.name, {isMod: true, modPermissions}).exec(function () {
/* Redirect to the mod authentication page, or to the desired url if this was mod authentication.*/
Expand Down
18 changes: 9 additions & 9 deletions api/controllers/FlairController.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ module.exports = {
return res.status(404).json(await Flairs.getApps());
}
var user = await User.findOne(app.user);
var shortened = app.sub === 'pokemontrades' ? 'ptrades' : 'svex';
var shortened = app.sub === sails.config.reddit.tradeSub ? sails.config.reddit.tradeSubShort : sails.config.reddit.eggSubShort;
var relevant_flair = Flairs.makeNewCSSClass(_.get(user, 'flair.' + shortened + '.flair_css_class') || '', app.flair, app.sub);
user.flair[shortened].flair_css_class = relevant_flair;
await Reddit.setUserFlair(req.user.redToken, user.name, relevant_flair, user.flair[shortened].flair_text, app.sub);
Expand Down Expand Up @@ -118,18 +118,18 @@ module.exports = {
var newsvFlair = _.get(req, "user.flair.svex.flair_css_class") || "";
newsvFlair = newsvFlair.replace(/2/, "");
var promises = [];
promises.push(Reddit.setUserFlair(refreshToken, req.user.name, newPFlair, flairs.ptrades, "PokemonTrades"));
promises.push(Reddit.setUserFlair(refreshToken, req.user.name, newsvFlair, flairs.svex, "SVExchange"));
promises.push(Reddit.setUserFlair(refreshToken, req.user.name, newPFlair, flairs.ptrades, sails.config.reddit.tradeSub));
promises.push(Reddit.setUserFlair(refreshToken, req.user.name, newsvFlair, flairs.svex, sails.config.reddit.eggSub));
promises.push(User.update({name: req.user.name}, {loggedFriendCodes: friend_codes}));

if (!blockReport && (users_with_matching_fcs.length !== 0 || matching_ip_usernames.length !== 0 || flagged.length)) {
var message = 'The user /u/' + req.user.name + ' set the following flairs:\n\n' + flairs.ptrades + '\n\n' + flairs.svex + '\n\n';
if (users_with_matching_fcs.length !== 0) {
message += 'This flair contains a friend code that matches ' + '/u/' + matching_fc_usernames.join(', /u/') + '\'s friend code: ' + matching_friend_codes + '\n\n';
var altNote = "Alt of " + matching_fc_usernames;
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', 'pokemontrades', req.user.name, altNote, 'spamwarn', ''));
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', sails.config.reddit.tradeSub, req.user.name, altNote, 'spamwarn', ''));
var otherAltNote = "Alt of " + req.user.name;
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', 'pokemontrades', matching_fc_usernames, otherAltNote, 'spamwarn', ''));
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', sails.config.reddit.tradeSub, matching_fc_usernames, otherAltNote, 'spamwarn', ''));
if (identical_banned_fcs.length) {
message += '**This flair contains a banned friend code: ' + identical_banned_fcs + '**\n\n';
} else if (flagged.length && similar_banned_fcs.length) {
Expand All @@ -138,19 +138,19 @@ module.exports = {
}
if (matching_ip_usernames.length !== 0) {
message += 'This user may be an alt of the user' + (matching_ip_usernames.length === 1 ? '' : 's') + ' /u/' + matching_ip_usernames.join(', /u/') + '.\n\n';
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', 'pokemontrades', req.user.name, altNote, 'spamwarn', ''));
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', 'pokemontrades', matching_fc_usernames, otherAltNote, 'spamwarn', ''));
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', sails.config.reddit.tradeSub, req.user.name, altNote, 'spamwarn', ''));
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', sails.config.reddit.tradeSub, matching_fc_usernames, otherAltNote, 'spamwarn', ''));
if (matching_ip_banned_users.length) {
message += '**' + '/u/' + matching_ip_banned_users.map(user => user.name).join(', /u/') + ' is banned.**\n\n';
}
}
if (flagged.length) {
message += 'The friend code' + (flagged.length === 1 ? ' ' + flagged + ' is' : 's ' + flagged.join(', ') + ' are') + ' invalid.\n\n';
var formattedNote = "Invalid friend code" + (flagged.length == 1 ? "" : "s") + ": " + flagged.join(', ');
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', 'pokemontrades', req.user.name, formattedNote, 'spamwarn', ''));
promises.push(Usernotes.addUsernote(refreshToken, 'FlairHQ', sails.config.reddit.tradeSub, req.user.name, formattedNote, 'spamwarn', ''));
}
message = message.slice(0,-2);
promises.push(Reddit.sendPrivateMessage(refreshToken, "FlairHQ notification", message, "/r/pokemontrades"));
promises.push(Reddit.sendPrivateMessage(refreshToken, "FlairHQ notification", message, "/r/" + sails.config.reddit.tradeSub));
}
Promise.all(promises).then(function () {
Event.create([{
Expand Down
18 changes: 9 additions & 9 deletions api/controllers/UserController.js
Original file line number Diff line number Diff line change
Expand Up @@ -207,19 +207,19 @@ module.exports = {
let igns = _.compact(flair_texts).map(text => text.split(' || ')[1]).join(', ');
var promises = [];
if (flairs) {
promises.push(Ban.banFromSub(req.user.redToken, req.params.username, req.params.banMessage, req.params.banNote, 'pokemontrades', req.params.duration));
promises.push(Ban.banFromSub(req.user.redToken, req.params.username, req.params.banMessage, req.params.banNote, 'SVExchange', req.params.duration));
promises.push(Ban.banFromSub(req.user.redToken, req.params.username, req.params.banMessage, req.params.banNote, sails.config.reddit.tradeSub, req.params.duration));
promises.push(Ban.banFromSub(req.user.redToken, req.params.username, req.params.banMessage, req.params.banNote, sails.config.reddit.eggSub, req.params.duration));
}
if (!req.params.duration) {
if (flairs) {
promises.push(Ban.giveBannedUserFlair(req.user.redToken, req.params.username, flairs[0] && flairs[0].flair_css_class, flairs[0] && flairs[0].flair_text, 'pokemontrades'));
promises.push(Ban.giveBannedUserFlair(req.user.redToken, req.params.username, flairs[0] && flairs[1].flair_css_class, flairs[1] && flairs[1].flair_text, 'SVExchange'));
promises.push(Ban.addUsernote(req.user.redToken, req.user.name, 'pokemontrades', req.params.username, req.params.banNote));
promises.push(Ban.addUsernote(req.user.redToken, req.user.name, 'SVExchange', req.params.username, req.params.banNote));
promises.push(Ban.giveBannedUserFlair(req.user.redToken, req.params.username, flairs[0] && flairs[0].flair_css_class, flairs[0] && flairs[0].flair_text, sails.config.reddit.tradeSub));
promises.push(Ban.giveBannedUserFlair(req.user.redToken, req.params.username, flairs[0] && flairs[1].flair_css_class, flairs[1] && flairs[1].flair_text, sails.config.reddit.eggSub));
promises.push(Ban.addUsernote(req.user.redToken, req.user.name, sails.config.reddit.tradeSub, req.params.username, req.params.banNote));
promises.push(Ban.addUsernote(req.user.redToken, req.user.name, sails.config.reddit.eggSub, req.params.username, req.params.banNote));
}
promises.push(Ban.markTSVThreads(req.user.redToken, req.params.username));
promises.push(Ban.updateAutomod(req.user.redToken, req.params.username, 'pokemontrades', unique_fcs));
promises.push(Ban.updateAutomod(req.user.redToken, req.params.username, 'SVExchange', unique_fcs));
promises.push(Ban.updateAutomod(req.user.redToken, req.params.username, sails.config.reddit.tradeSub, unique_fcs));
promises.push(Ban.updateAutomod(req.user.redToken, req.params.username, sails.config.reddit.eggSub, unique_fcs));
promises.push(Ban.updateBanlist(req.user.redToken, req.params.username, req.params.banlistEntry, unique_fcs, igns, req.params.knownAlt, req.params.tradeNote));
promises.push(Ban.localBanUser(req.params.username));
}
Expand Down Expand Up @@ -264,7 +264,7 @@ module.exports = {
},

clearSession: function (req, res) {
Reddit.getModeratorPermissions(sails.config.reddit.adminRefreshToken, req.user.name, 'pokemontrades').then(function (permissions) {
Reddit.getModeratorPermissions(sails.config.reddit.adminRefreshToken, req.user.name, sails.config.reddit.tradeSub).then(function (permissions) {
if (_.includes(permissions, 'all') || _.includes(permissions, 'access')) { //User is a mod, clear session
Sessions.destroy({session: {'contains': '"user":"' + req.allParams().name + '"'}}).exec(function (err) {
if (err) {
Expand Down
2 changes: 1 addition & 1 deletion api/models/Modmail.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ module.exports = {
body: 'string', //Body of the message
author: 'string', //Username of the message author
subreddit: { //The subreddit that the modmail was sent to
enum: ['pokemontrades', 'SVExchange']
enum: [sails.config.reddit.tradSub, sails.config.reddit.eggSub]
},
first_message_name: { //The fullname of the first message in this chain, or null if this is the first message
stringOrNull: true
Expand Down
4 changes: 2 additions & 2 deletions api/services/Ban.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ exports.updateBanlist = async function (redToken, username, banlistEntry, friend
if (valid_FCs.length) {
friend_codes = valid_FCs;
}
var current_list = await Reddit.getWikiPage(redToken, 'pokemontrades', 'banlist');
var current_list = await Reddit.getWikiPage(redToken, sails.config.reddit.tradeSub, 'banlist');
var lines = current_list.replace(/\r/g, '').split("\n");
var start_index = lines.indexOf('[//]:# (BEGIN BANLIST)') + 3;
var end_index = lines.indexOf('[//]:# (END BANLIST)');
Expand Down Expand Up @@ -124,7 +124,7 @@ exports.updateBanlist = async function (redToken, username, banlistEntry, friend
updated_content = lines.slice(0, start_index).concat(new_line).concat(lines.slice(start_index)).join('\n');
}
try {
await Reddit.editWikiPage(redToken, 'pokemontrades', 'banlist', updated_content, '');
await Reddit.editWikiPage(redToken, sails.config.reddit.tradeSub, 'banlist', updated_content, '');
} catch (e) {
sails.log.error(e);
throw {error: 'Failed to update public banlist'};
Expand Down
32 changes: 16 additions & 16 deletions api/services/Flairs.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,26 +61,26 @@ exports.applied = function (apps, flair) {
};
exports.inPokemonTradesTrader = function (flair) {
if (flair) {
return flair.sub === "pokemontrades" && !flair.involvement && !flair.giveaways;
return flair.sub === sails.config.reddit.tradeSub && !flair.involvement && !flair.giveaways;
}
};
exports.inPokemonTradesHelper = function (flair) {
if (flair) {
return flair.sub === "pokemontrades" && (flair.involvement > 0 || flair.giveaways > 0);
return flair.sub === sails.config.reddit.tradeSub && (flair.involvement > 0 || flair.giveaways > 0);
}
};
exports.inSVExchangeHatcher = function (flair) {
if (flair) {
return flair.sub === "svexchange" && flair.eggs > 0;
return flair.sub === sails.config.reddit.eggSub && flair.eggs > 0;
}
};
exports.inSVExchangeGiver = function (flair) {
if (flair) {
return flair.sub === "svexchange" && flair.giveaways > 0;
return flair.sub === sails.config.reddit.eggSub && flair.giveaways > 0;
}
};
exports.userHasFlair = function (user, flair) {
if (flair.sub === 'pokemontrades') {
if (flair.sub === sails.config.reddit.tradeSub) {
if (!user || !user.flair || !user.flair.ptrades || !user.flair.ptrades.flair_css_class) {
return false;
}
Expand Down Expand Up @@ -116,7 +116,7 @@ exports.canUserApply = function (refs, applicationFlair, currentFlairs) {
return false;
}
var userHasDefaultFlair = currentFlairs.filter(function (flair) {
return flair.sub === 'pokemontrades';
return flair.sub === sails.config.reddit.tradeSub;
}).length === 0;
if (userHasDefaultFlair && applicationFlair.name === 'involvement') {
return false;
Expand All @@ -129,9 +129,9 @@ exports.canUserApply = function (refs, applicationFlair, currentFlairs) {
userInvolvement = _.filter(refs, referenceService.isInvolvement).length,
userEgg = _.filter(refs, referenceService.isEgg).length,
userGiveaway = referenceService.numberOfEggChecks(refs) + referenceService.numberOfEggsGivenAway(refs);
if (applicationFlair.sub === "pokemontrades") {
if (applicationFlair.sub === sails.config.reddit.tradeSub) {
userGiveaway = _.filter(refs, function (e) {
return referenceService.isGiveaway(e) && e.url.indexOf("pokemontrades") > -1;
return referenceService.isGiveaway(e) && e.url.indexOf(sails.config.reddit.tradeSub) > -1;
}).length;
}
for (var i = 0; i < currentFlairs.length; i++) {
Expand Down Expand Up @@ -163,7 +163,7 @@ exports.formattedRequirements = function (flair, flairs) {
formatted += reqs.involvement + (reqs.involvement > 1 ? ' free tradebacks/redemptions, ' : ' free tradeback/redemption, ');
}
if (reqs.giveaways) {
if (reqs.sub === 'pokemontrades') { // reqs.giveaways means two different things on the two subs
if (reqs.sub === sails.config.reddit.tradeSub) { // reqs.giveaways means two different things on the two subs
formatted += reqs.giveaways + (reqs.giveaways > 1 ? ' giveaways, ' : ' giveaway, ');
} else {
formatted += reqs.giveaways + (reqs.giveaways > 1 ? ' eggs checked/given away, ' : ' egg checked/given away, ');
Expand Down Expand Up @@ -253,15 +253,15 @@ exports.makeNewCSSClass = function (previous_flair, new_addition, subreddit) {
return new_addition;
}
if (new_addition === 'banned') {
if (subreddit === 'pokemontrades') {
if (subreddit === sails.config.reddit.tradeSub) {
return previous_flair.replace(/^banned$/, '').replace(/([^ ]+)( .*)?$/, '$1 ') + 'banned';
}
return previous_flair.replace(/ ?banned/, '').replace(/(.)$/, '$1 ') + 'banned';
}
if (new_addition === 'involvement') {
return previous_flair.replace(/( |$)/, '1$1');
}
if (subreddit === 'pokemontrades' || !/ribbon/.test(previous_flair + new_addition)) {
if (subreddit === sails.config.reddit.tradeSub || !/ribbon/.test(previous_flair + new_addition)) {
return previous_flair.replace(/[^ 1]*/, new_addition);
}
if (/ribbon/.test(previous_flair)) {
Expand Down Expand Up @@ -327,13 +327,13 @@ exports.refreshAppClaim = function (ref, mod_username) {
// Guess what app a mod is working on based on the links they click
var query = {};
if (References.isTrade(ref)) {
query = {sub: 'pokemontrades', flair: {not: 'involvement'}};
} else if (References.isInvolvement(ref) || References.isGiveaway(ref) && /reddit\.com\/r\/pokemontrades/.test(ref.url)) {
query = {sub: 'pokemontrades', flair: 'involvement'};
query = {sub: sails.config.reddit.tradeSub, flair: {not: 'involvement'}};
} else if (References.isInvolvement(ref) || References.isGiveaway(ref) && new Regex("reddit\.com\/r\/" + sails.config.reddit.tradeSub + "/").test(ref.url)) {
query = {sub: sails.config.reddit.tradeSub, flair: 'involvement'};
} else if (References.isEgg(ref)) {
query = {sub: 'svexchange', flair: {$not: /ribbon$/}};
query = {sub: sails.config.reddit.eggSub, flair: {$not: /ribbon$/}};
} else if (References.isEggCheck(ref) || References.isGiveaway(ref) && /reddit\.com\/r\/SVExchange/.test(ref.url)) {
query = {sub: 'svexchange', flair: {endsWith: 'ribbon'}};
query = {sub: sails.config.reddit.eggSub, flair: {endsWith: 'ribbon'}};
} else {
return [];
}
Expand Down
4 changes: 2 additions & 2 deletions api/services/Reddit.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ exports.getFlair = async function (refreshToken, user, subreddit) {
};

exports.getBothFlairs = async function (refreshToken, user) {
var ptradesFlairPromise = exports.getFlair(refreshToken, user, 'pokemontrades');
var svexFlairPromise = exports.getFlair(refreshToken, user, 'SVExchange');
var ptradesFlairPromise = exports.getFlair(refreshToken, user, sails.config.reddit.tradeSub);
var svexFlairPromise = exports.getFlair(refreshToken, user, sails.config.reddit.eggSub);
return Promise.all([ptradesFlairPromise, svexFlairPromise]);
};

Expand Down
4 changes: 2 additions & 2 deletions api/services/References.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ exports.numberOfPokemonGivenAway = function (refs) {
return 0;
}
refs.filter(function (item) {
return exports.isGiveaway(item) && item.url.indexOf("pokemontrades") !== -1;
return exports.isGiveaway(item) && item.url.indexOf(sails.config.reddit.tradeSub) !== -1;
}).forEach(function (ref) {
givenAway += (ref.number || 0);
});
Expand All @@ -114,7 +114,7 @@ exports.numberOfEggsGivenAway = function (refs) {
return 0;
}
refs.filter(function (item) {
return exports.isGiveaway(item) && item.url.indexOf("SVExchange") > -1;
return exports.isGiveaway(item) && item.url.indexOf(sails.config.reddit.eggSub) > -1;
}).forEach(function (ref) {
givenAway += (ref.number || 0);
});
Expand Down
7 changes: 6 additions & 1 deletion config/local.example.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,12 @@ module.exports = {
clientIDSecret: "SECRET ID GOES HERE",
redirectURL: "http://localhost:1337/auth/reddit/callback",
adminRefreshToken: "ADMIN REFRESH TOKEN GOES HERE",
userAgent: 'FlairHQ development version by /u/DEVELOPERS_USERNAME || hq.porygon.co/info || v' + require('../package.json').version
userAgent: 'FlairHQ development version by /u/DEVELOPERS_USERNAME || hq.porygon.co/info || v' + require('../package.json').version,
tradeSub: 'flairhqdevtesting',
tradeSubShort: 'tsub',
eggSub: 'flairhqdevtestingeggs',
eggSubShort: 'esub'

},
connections: {
"default": "mongo",
Expand Down
2 changes: 1 addition & 1 deletion config/schedule.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module.exports.schedule = {
cron : "0 8 * * *",
task : function (context, sails) {
sails.log.info('[Daily task]: Updating modmail archives...');
Promise.all([Modmails.updateArchive('pokemontrades'), Modmails.updateArchive('SVExchange')]).then(function (results) {
Promise.all([Modmails.updateArchive(sails.config.reddit.tradeSub), Modmails.updateArchive(sails.config.reddit.eggSub)]).then(function (results) {
sails.log.info('[Daily task]: Finished updating modmail archives.');
}, function (error) {
sails.log.error('There was an issue updating the modmail archives.');
Expand Down

0 comments on commit b678dc7

Please sign in to comment.