40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
import secrets
|
|
import string
|
|
|
|
from django.db import models
|
|
|
|
|
|
def generate_access_token():
|
|
return secrets.token_hex(16)
|
|
|
|
|
|
def generate_access_password():
|
|
return "".join(
|
|
secrets.choice(string.ascii_letters + string.digits) for _ in range(8)
|
|
)
|
|
|
|
|
|
class ExternalAccess(models.Model):
|
|
project = models.ForeignKey(
|
|
"projects.Project", on_delete=models.CASCADE, related_name="external_accesses"
|
|
)
|
|
access_token = models.CharField(
|
|
max_length=255, unique=True, default=generate_access_token
|
|
)
|
|
password = models.CharField(max_length=255, default=generate_access_password)
|
|
is_active = models.BooleanField(default=True)
|
|
last_accessed_at = models.DateTimeField(blank=True, null=True)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
class Meta:
|
|
db_table = "external_access"
|
|
verbose_name = "External Access"
|
|
verbose_name_plural = "External Accesses"
|
|
indexes = [
|
|
models.Index(fields=["project", "is_active"]),
|
|
]
|
|
|
|
def __str__(self):
|
|
return f"ExternalAccess for {self.project.name}"
|