You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
47 lines
1.5 KiB
47 lines
1.5 KiB
from django.db import models |
|
from django.contrib.auth import get_user_model |
|
import uuid |
|
import secrets |
|
|
|
User = get_user_model() |
|
|
|
class MasterKey(models.Model): |
|
key_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) |
|
key_value = models.CharField(max_length=255, unique=True) |
|
description = models.CharField(max_length=255, blank=True) |
|
created_at = models.DateTimeField(auto_now_add=True) |
|
last_used = models.DateTimeField(null=True, blank=True) |
|
is_active = models.BooleanField(default=True) |
|
permissions = models.JSONField(default=list) |
|
|
|
def __str__(self): |
|
return f"Master Key: {self.key_id}" |
|
|
|
@classmethod |
|
def generate_key(cls, description="", permissions=None): |
|
"""Generate a new secure master key""" |
|
if permissions is None: |
|
permissions = [] |
|
|
|
# Generate a secure random token |
|
key_value = secrets.token_urlsafe(64) |
|
|
|
return cls.objects.create( |
|
key_value=key_value, |
|
description=description, |
|
permissions=permissions |
|
) |
|
|
|
class AiModel(models.Model): |
|
name = models.CharField(max_length=255) |
|
|
|
class Conversation(models.Model): |
|
title = models.CharField(max_length=255) |
|
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="conversations") |
|
|
|
class Message(models.Model): |
|
content = models.TextField() |
|
role = models.CharField(max_length=255) |
|
conversation = models.ForeignKey(Conversation, on_delete=models.CASCADE, related_name="messages") |
|
|
|
|
|
|