Coverage for django_napse/auth/models/keys/key.py: 81%
21 statements
« prev ^ index » next coverage.py v7.4.3, created at 2024-03-12 13:49 +0000
« prev ^ index » next coverage.py v7.4.3, created at 2024-03-12 13:49 +0000
1import contextlib
3from django.db import IntegrityError, models
4from rest_framework_api_key.models import APIKey
6from django_napse.auth.models.permissions import KeyPermission
7from django_napse.utils.errors import NapseKeyError
10class NapseAPIKey(APIKey):
11 is_master_key = models.BooleanField(default=False)
12 description = models.TextField(blank=True)
14 def save(self, *args, **kwargs) -> None:
15 if self.is_master_key:
16 self.name = "Napse Master Key"
17 if self.is_master_key and NapseAPIKey.objects.filter(is_master_key=True).count() > (1 if self.pk else 0):
18 error_msg = "Only one master key can exist at a time."
19 raise NapseKeyError.DuplicateMasterkey(error_msg)
20 return super().save(*args, **kwargs)
22 def add_permission(self, space, permission):
23 with contextlib.suppress(IntegrityError):
24 KeyPermission.objects.create(key=self, space=space, permission_type=permission)
26 def revoke(self):
27 self.revoked = True
28 self.save()