Plain is headed towards 1.0! Subscribe for development updates →

 1import binascii
 2import os
 3import uuid
 4
 5from plain import models
 6
 7
 8def generate_token():
 9    return binascii.hexlify(os.urandom(20)).decode()
10
11
12@models.register_model
13class APIKey(models.Model):
14    uuid = models.UUIDField(default=uuid.uuid4)
15    created_at = models.DateTimeField(auto_now_add=True)
16    updated_at = models.DateTimeField(auto_now=True)
17    expires_at = models.DateTimeField(required=False, allow_null=True)
18    last_used_at = models.DateTimeField(required=False, allow_null=True)
19
20    name = models.CharField(max_length=255, required=False)
21
22    token = models.CharField(max_length=40, default=generate_token)
23
24    api_version = models.CharField(max_length=255, required=False)
25
26    class Meta:
27        constraints = [
28            models.UniqueConstraint(
29                fields=["uuid"], name="plainapi_apikey_unique_uuid"
30            ),
31            models.UniqueConstraint(
32                fields=["token"], name="plainapi_apikey_unique_token"
33            ),
34        ]
35
36    def __str__(self):
37        return self.name or str(self.uuid)