From 2c60afae4373ee0cc0320e4036b63942f9f60760 Mon Sep 17 00:00:00 2001 From: ECHibiki Date: Wed, 27 Oct 2021 10:52:50 -0400 Subject: [PATCH] duplicate saftey --- package-lock.json | 2 +- src/channel/anonymouspost.js | 92 ++++++++++++-------------------------------- 2 files changed, 26 insertions(+), 68 deletions(-) diff --git a/package-lock.json b/package-lock.json index c979190f..56dd711b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "CyTube", - "version": "3.82.6", + "version": "3.82.8", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/channel/anonymouspost.js b/src/channel/anonymouspost.js index eead18c1..e7bb50c5 100755 --- a/src/channel/anonymouspost.js +++ b/src/channel/anonymouspost.js @@ -10,7 +10,7 @@ function makeIPHash(ip) { numeric += ip.charAt(i); } } - numeric = parseInt(numeric); + numeric = parseInt(numeric); return makeID((numeric * 13) % 1000000); } @@ -26,71 +26,14 @@ function makeID(id_number){ return processed_string; } +// Xaekai on Jan 14, 2019 function convertNumToIDChar(num){ - switch(num){ - case "0": return 'a'; - case "1": return 'b'; - case "2": return 'c'; - case "3": return 'd'; - case "4": return 'e'; - case "5": return 'f'; - case "6": return 'g'; - case "7": return 'h'; - case "8": return 'i'; - case "9": return 'j'; - case "10": return 'k'; - case "11": return 'l'; - case "12": return 'm'; - case "13": return 'n'; - case "14": return 'o'; - case "15": return 'p'; - case "16": return 'q'; - case "17": return 'r'; - case "18": return 's'; - case "19": return 't'; - case "20": return 'u'; - case "21": return 'v'; - case "22": return 'w'; - case "23": return 'x'; - case "24": return 'y'; - case "25": return 'z'; - case "26": return 'A'; - case "27": return 'B'; - case "28": return 'C'; - case "29": return 'D'; - case "30": return 'E'; - case "31": return 'F'; - case "32": return 'G'; - case "33": return 'H'; - case "34": return 'I'; - case "35": return 'J'; - case "36": return 'K'; - case "37": return 'L'; - case "38": return 'M'; - case "39": return 'N'; - case "40": return 'O'; - case "41": return 'P'; - case "42": return 'Q'; - case "43": return 'R'; - case "44": return 'S'; - case "45": return 'T'; - case "46": return 'U'; - case "47": return 'V'; - case "48": return 'W'; - case "49": return 'X'; - case "50": return 'Y'; - case "51": return 'Z'; - case "52": return '1'; - case "53": return '2'; - case "54": return '3'; - case "55": return '4'; - case "56": return '5'; - case "57": return '6'; - case "58": return '7'; - case "59": return '8'; - case "60": return '9'; - case "61": return '0'; - + const i = parseInt(num, 10); + switch(true){ + case i > -1 && i < 26: return String.fromCharCode(i+97); + case i > 25 && i < 52: return String.fromCharCode(i+39); + case i > 51 && i < 61: return String.fromCharCode(i-3); + case i === 61: return '0'; } console.log('notret'); } @@ -105,13 +48,28 @@ AnonymousPost.prototype.onUserPreJoin = function (user, data, cb) { const opts = this.channel.modules.options; var anonymousPosting = opts.get("allow_anon_chat"); if(anonymousPosting && user.isAnonymous()){ - user.guestLogin("Anonymous-" + makeIPHash(user.realip) +""); + var hash = makeIPHash(user.realip); + var anon_name = "Anonymous-" + hash; + var duplicate_solution = 0; + var duplicate_found = false; + do{ + duplicate_found = false; + user.channel.users.forEach((user, i) => { + if (!duplicated_found && user.account.name == anon_name){ + duplicate_solution++; + anon_name = "Anonymous-" + hash + duplicate_solution; + duplicate_found = true; + } + }); + } + while(duplicated_found); + user.guestLogin(anon_name); cb(null, ChannelModule.PASSTHROUGH); } else{ cb(null, ChannelModule.PASSTHROUGH); } -}; +}; module.exports = AnonymousPost; //# sourceMappingURL=anonymouspost.js.map \ No newline at end of file -- 2.11.4.GIT