-
Notifications
You must be signed in to change notification settings - Fork 105
Expand file tree
/
Copy pathadmin.py
More file actions
58 lines (46 loc) · 1.48 KB
/
admin.py
File metadata and controls
58 lines (46 loc) · 1.48 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
51
52
53
54
55
56
57
58
import typing
from django.contrib import admin, messages
from django.db import models
from django.http.request import HttpRequest
from .models import AbstractAPIKey
class APIKeyModelAdmin(admin.ModelAdmin):
model: typing.Type[AbstractAPIKey]
list_display = (
"prefix",
"name",
"created",
"expiry_date",
"_has_expired",
"revoked",
)
list_filter = ("created",)
search_fields = ("name", "prefix")
def get_readonly_fields(
self, request: HttpRequest, obj: models.Model = None
) -> typing.Tuple[str, ...]:
obj = typing.cast(AbstractAPIKey, obj)
fields: typing.Tuple[str, ...]
fields = ("prefix",)
if obj is not None and obj.revoked:
fields = fields + ("name", "revoked", "expiry_date")
return fields
def save_model(
self,
request: HttpRequest,
obj: AbstractAPIKey,
form: typing.Any = None,
change: bool = False,
) -> None:
created = not obj.pk
if created:
key = self.model.objects.assign_key(obj)
obj.save()
message = (
"The API key for {} is: {}. ".format(obj.name, key)
+ "Please store it somewhere safe: "
+ "you will not be able to see it again."
)
messages.add_message(request, messages.WARNING, message)
else:
obj.save()
APIKeyAdmin = APIKeyModelAdmin # Compatibility with <1.3