mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2026-01-03 01:15:57 +10:00
- Create uuid_compat.py module that provides uuid7 for Python <3.14 using uuid_extensions package, and native uuid.uuid7 for Python 3.14+ - Update all model files and migrations to use archivebox.uuid_compat - Add uuid7 conditional dependency in pyproject.toml for Python <3.14 - Update requires-python to >=3.13 (from >=3.14) - Update GitHub workflows, lock_pkgs.sh to use Python 3.13 - Update tool configs (ruff, pyright, uv) for Python 3.13 This enables running ArchiveBox on Python 3.13 while maintaining forward compatibility with Python 3.14's native uuid7 support.
52 lines
1.8 KiB
Python
Executable File
52 lines
1.8 KiB
Python
Executable File
__package__ = 'archivebox.api'
|
|
|
|
import secrets
|
|
from archivebox.uuid_compat import uuid7
|
|
from datetime import timedelta
|
|
|
|
from django.conf import settings
|
|
from django.db import models
|
|
from django.utils import timezone
|
|
from django_stubs_ext.db.models import TypedModelMeta
|
|
from signal_webhooks.models import WebhookBase
|
|
|
|
|
|
def generate_secret_token() -> str:
|
|
return secrets.token_hex(16)
|
|
|
|
|
|
class APIToken(models.Model):
|
|
id = models.UUIDField(primary_key=True, default=uuid7, editable=False, unique=True)
|
|
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=None, null=False)
|
|
created_at = models.DateTimeField(default=timezone.now, db_index=True)
|
|
modified_at = models.DateTimeField(auto_now=True)
|
|
token = models.CharField(max_length=32, default=generate_secret_token, unique=True)
|
|
expires = models.DateTimeField(null=True, blank=True)
|
|
|
|
class Meta(TypedModelMeta):
|
|
verbose_name = "API Key"
|
|
verbose_name_plural = "API Keys"
|
|
|
|
def __str__(self) -> str:
|
|
return self.token
|
|
|
|
@property
|
|
def token_redacted(self):
|
|
return f'************{self.token[-4:]}'
|
|
|
|
def is_valid(self, for_date=None):
|
|
return not self.expires or self.expires >= (for_date or timezone.now())
|
|
|
|
|
|
class OutboundWebhook(WebhookBase):
|
|
id = models.UUIDField(primary_key=True, default=uuid7, editable=False, unique=True)
|
|
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=None, null=False)
|
|
created_at = models.DateTimeField(default=timezone.now, db_index=True)
|
|
modified_at = models.DateTimeField(auto_now=True)
|
|
|
|
class Meta(WebhookBase.Meta):
|
|
verbose_name = 'API Outbound Webhook'
|
|
|
|
def __str__(self) -> str:
|
|
return f'[{self.id}] {self.ref} -> {self.endpoint}'
|