Files

70 lines
2.1 KiB
Python

import secrets
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils import timezone
def generate_api_key():
return f"asp_{secrets.token_urlsafe(32)}"
class User(AbstractUser):
class AuthType(models.TextChoices):
LOCAL = "local", "Local Password"
LDAP = "ldap", "LDAP"
avatar_attachment = models.ForeignKey(
"attachments.Attachment",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="avatar_users",
)
mobile_phone = models.CharField(max_length=20, blank=True, default="")
auth_type = models.CharField(max_length=20, choices=AuthType.choices, default=AuthType.LOCAL)
notify_on_playbook_completion = models.BooleanField(default=True)
notify_on_case_assignment = models.BooleanField(default=True)
class Meta:
db_table = "users"
def __str__(self):
return self.get_full_name() or self.username
@property
def role(self):
if self.is_superuser:
return "admin"
groups = set(self.groups.values_list("name", flat=True))
if "viewer" in groups:
return "viewer"
if "user" in groups:
return "user"
return "user"
class UserApiKey(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="api_keys")
name = models.CharField(max_length=100)
key = models.CharField(max_length=128, unique=True, default=generate_api_key)
expires_at = models.DateTimeField(null=True, blank=True)
last_used_at = models.DateTimeField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = "user_api_keys"
ordering = ["-created_at"]
def __str__(self):
return f"{self.name} ({self.user})"
@property
def is_expired(self):
return bool(self.expires_at and self.expires_at <= timezone.now())
def refresh_key(self):
self.key = generate_api_key()
return self.key