# HG changeset patch # User neko259 # Date 2015-08-22 12:38:04 # Node ID dd1093e1ab9d3628a064f95867326894b63de9b9 # Parent 34238f7944913b533e696cea75b952df9ca113a1 Tripcode collision preventer diff --git a/boards/abstracts/settingsmanager.py b/boards/abstracts/settingsmanager.py --- a/boards/abstracts/settingsmanager.py +++ b/boards/abstracts/settingsmanager.py @@ -1,7 +1,12 @@ import uuid -from django.shortcuts import get_object_or_404 + +import boards +from boards.abstracts.tripcode import Tripcode + from boards.models import Tag +MAX_TRIPCODE_COLLISIONS = 50 + __author__ = 'neko259' SESSION_SETTING = 'setting' @@ -119,10 +124,25 @@ class SettingsManager: self.set_setting(SETTING_HIDDEN_TAGS, tags) def get_tripcode(self): - return self.get_setting(SETTING_TRIPCODE, str(uuid.uuid4())) + tripcode = self.get_setting(SETTING_TRIPCODE) + if tripcode is None: + self.reset_tripcode() + tripcode = self.get_setting(SETTING_TRIPCODE) + return tripcode def reset_tripcode(self): - self.set_setting(SETTING_TRIPCODE, str(uuid.uuid4())) + tripcode = Tripcode(str(uuid.uuid4())) + + # If we cannot find a collision-free tripcode, then let the collision + # be destiny + collision_counter = 0 + while boards.models.Post.objects.filter( + tripcode__startswith=tripcode.get_short_text()).exists()\ + and collision_counter < MAX_TRIPCODE_COLLISIONS: + tripcode = Tripcode(str(uuid.uuid4())) + collision_counter += 1 + print('Tripcode collision detected') # FIXME Use proper logging + self.set_setting(SETTING_TRIPCODE, tripcode.get_full_text()) class SessionSettingsManager(SettingsManager): diff --git a/boards/abstracts/tripcode.py b/boards/abstracts/tripcode.py --- a/boards/abstracts/tripcode.py +++ b/boards/abstracts/tripcode.py @@ -21,7 +21,10 @@ class Tripcode: def get_short_text(self): return self.tripcode[:8] + def get_full_text(self): + return self.tripcode + def get_view(self): - return '{}'\ - .format(self.get_color(), self.get_background(), - self.get_short_text()) \ No newline at end of file + return '{}'\ + .format(self.get_full_text(), self.get_color(), self.get_background(), + self.get_short_text())