From 8fab4bc4d664b973d630129e3c336a05c53accf1 Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Fri, 6 Dec 2024 11:24:51 +0100 Subject: [PATCH] [maykinmedia/objects-api#481] Fix models and migrations --- ...enauth_identifier_alter_tokenauth_token.py | 43 ------------------- src/objecttypes/token/models.py | 14 +++--- 2 files changed, 7 insertions(+), 50 deletions(-) diff --git a/src/objecttypes/token/migrations/0009_tokenauth_identifier_alter_tokenauth_token.py b/src/objecttypes/token/migrations/0009_tokenauth_identifier_alter_tokenauth_token.py index 9bb20fa..caa6c34 100644 --- a/src/objecttypes/token/migrations/0009_tokenauth_identifier_alter_tokenauth_token.py +++ b/src/objecttypes/token/migrations/0009_tokenauth_identifier_alter_tokenauth_token.py @@ -4,12 +4,9 @@ from django.db import migrations, models from django.db.migrations.state import StateApps -from django.db.models.aggregates import Count import objecttypes.token.validators -from objecttypes.token.utils import get_token - logger = logging.getLogger(__name__) @@ -29,37 +26,6 @@ def _generate_unique_identifiers(apps: StateApps, schema_editor) -> None: token.save(update_fields=("identifier",)) -def _generate_unique_tokens(apps: StateApps, schema_editor) -> None: - TokenAuth = apps.get_model("token", "TokenAuth") - - duplicate_token_values = ( - TokenAuth.objects.values("token") - .annotate(Count("id")) - .order_by() - .filter(id__count__gt=1) - ) - - duplicate_tokens = TokenAuth.objects.filter( - token__in=[item["token"] for item in duplicate_token_values] - ) - - existing_tokens = set( - TokenAuth.objects.exclude( - id__in=[token.id for token in duplicate_tokens] - ).values_list("token", flat=True) - ) - - for token in duplicate_tokens: - _token: str = get_token(existing_tokens=existing_tokens) - - logger.debug(f"Generated a new token for {token.pk}") - - token.token = _token - token.save(update_fields=("token",)) - - existing_tokens.add(token) - - class Migration(migrations.Migration): dependencies = [ ("token", "0008_alter_tokenauth_token"), @@ -75,15 +41,6 @@ class Migration(migrations.Migration): code=_generate_unique_identifiers, reverse_code=migrations.RunPython.noop, ), - migrations.RunPython( - code=_generate_unique_tokens, - reverse_code=migrations.RunPython.noop, - ), - migrations.AlterField( - model_name="tokenauth", - name="token", - field=models.CharField(max_length=40, unique=True, verbose_name="token"), - ), migrations.AlterField( model_name="tokenauth", name="identifier", diff --git a/src/objecttypes/token/models.py b/src/objecttypes/token/models.py index 4234c3e..cf011b8 100644 --- a/src/objecttypes/token/models.py +++ b/src/objecttypes/token/models.py @@ -1,6 +1,8 @@ +import secrets + from django.db import models from django.utils.translation import gettext_lazy as _ -from objecttypes.token.utils import get_token + from objecttypes.token.validators import validate_whitespace @@ -59,12 +61,10 @@ class Meta: verbose_name = _("token authorization") verbose_name_plural = _("token authorizations") - def __str__(self): - return self.contact_person - def save(self, *args, **kwargs): if not self.token: - existing_tokens = TokenAuth.objects.values_list("token", flat=True) - self.token = get_token(existing_tokens=existing_tokens) - + self.token = self.generate_token() return super().save(*args, **kwargs) + + def generate_token(self): + return secrets.token_hex(20)