-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathadmin.py
More file actions
50 lines (37 loc) · 1.47 KB
/
admin.py
File metadata and controls
50 lines (37 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from django.apps import apps
from django.contrib import admin
from django.contrib.auth import get_user_model
ModelAdmin = admin.ModelAdmin
try:
from unfold import admin as unfold_admin
ModelAdmin = unfold_admin.ModelAdmin
except ImportError:
pass
from .models import BaseAPIKey
User = get_user_model()
class BaseAPIKeyAdmin(ModelAdmin):
list_display = ("id", "user", "name", "encrypted_api_key", "is_expired")
def is_expired(self, obj):
return obj.is_expired
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
if obj is None: # Only set default for new objects
form.base_fields["user"].initial = request.user
return form
def save_model(self, request, obj, form, change):
if obj.pk is None:
unencrypted_api_key = obj.__class__.objects.generate_unencrypted_api_key()
encrypted_api_key = obj.__class__.objects.encrypt(unencrypted_value=unencrypted_api_key)
self.message_user(request=request, message=f"Your API Key is {unencrypted_api_key}")
obj.encrypted_api_key = encrypted_api_key
super().save_model(request, obj, form, change)
for APIKeyClass in [
ModelClass
for ModelClass in apps.get_models()
if isinstance(ModelClass, type)
and issubclass(ModelClass, BaseAPIKey)
and not ModelClass._meta.abstract
]:
@admin.register(APIKeyClass)
class _APIKeyAdmin(BaseAPIKeyAdmin):
pass