From: Marek Stępniowski Date: Tue, 16 Sep 2008 08:32:34 +0000 (+0200) Subject: Generating random hash for each created shelf. X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/04cb9d727764da3c0d3ba30783ba25dc828e3899?ds=inline Generating random hash for each created shelf. --- 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):