Skip to content

Commit

Permalink
[maykinmedia/objects-api#481] Fix models and migrations
Browse files Browse the repository at this point in the history
  • Loading branch information
danielmursa-dev committed Dec 6, 2024
1 parent 9d9b1c9 commit 8fab4bc
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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__)


Expand All @@ -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"),
Expand All @@ -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",
Expand Down
14 changes: 7 additions & 7 deletions src/objecttypes/token/models.py
Original file line number Diff line number Diff line change
@@ -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


Expand Down Expand Up @@ -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)

0 comments on commit 8fab4bc

Please sign in to comment.