From 04cb9d727764da3c0d3ba30783ba25dc828e3899 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20St=C4=99pniowski?= Date: Tue, 16 Sep 2008 10:32:34 +0200 Subject: [PATCH 1/1] Generating random hash for each created shelf. --- apps/catalogue/forms.py | 3 ++- apps/catalogue/utils.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/apps/catalogue/forms.py b/apps/catalogue/forms.py index 6506deb45..688e5edd0 100644 --- a/apps/catalogue/forms.py +++ b/apps/catalogue/forms.py @@ -4,6 +4,7 @@ from slughifi import slughifi from catalogue.models import Tag from catalogue.fields import JQueryAutoCompleteField +from catalogue import utils class SearchForm(forms.Form): @@ -46,7 +47,7 @@ class NewSetForm(forms.Form): def save(self, user, commit=True): name = self.cleaned_data['name'] - new_set = Tag(name=name, slug=slughifi(name), sort_key=slughifi(name), + new_set = Tag(name=name, slug=utils.get_random_hash(name), sort_key=slughifi(name), category='set', user=user) new_set.save() diff --git a/apps/catalogue/utils.py b/apps/catalogue/utils.py index d1cee5045..72b097392 100644 --- a/apps/catalogue/utils.py +++ b/apps/catalogue/utils.py @@ -1,4 +1,25 @@ # -*- coding: utf-8 -*- +import random +import time +from base64 import urlsafe_b64encode + +from django.utils.hashcompat import sha_constructor +from django.conf import settings + + +# Use the system (hardware-based) random number generator if it exists. +if hasattr(random, 'SystemRandom'): + randrange = random.SystemRandom().randrange +else: + randrange = random.randrange +MAX_SESSION_KEY = 18446744073709551616L # 2 << 63 + + +def get_random_hash(seed): + sha_digest = sha_constructor('%s%s%s%s' % + (randrange(0, MAX_SESSION_KEY), time.time(), unicode(seed).encode('utf-8', 'replace'), + settings.SECRET_KEY)).digest() + return urlsafe_b64encode(sha_digest).replace('=', '').replace('_', '-').lower() def split_tags(tags): -- 2.20.1