|
1 | | -from django.contrib import admin |
| 1 | +from django import forms |
| 2 | +from django.contrib import admin, messages |
| 3 | +from django.contrib.auth import get_user_model |
2 | 4 |
|
3 | 5 | from knox import models |
| 6 | +from knox.settings import CONSTANTS |
| 7 | + |
| 8 | + |
| 9 | +class AuthTokenCreateForm(forms.ModelForm): |
| 10 | + |
| 11 | + def __init__(self, *args, **kwargs): |
| 12 | + super(AuthTokenCreateForm, self).__init__(*args, **kwargs) |
| 13 | + self.token = None |
| 14 | + |
| 15 | + class Meta: |
| 16 | + model = models.AuthToken |
| 17 | + fields = ['user', 'expiry'] |
| 18 | + |
| 19 | + def save(self, commit=True): |
| 20 | + obj = super(AuthTokenCreateForm, self).save(commit=False) |
| 21 | + digest, token = models.get_digest_token() |
| 22 | + obj.digest = digest |
| 23 | + obj.token_key = token[:CONSTANTS.TOKEN_KEY_LENGTH] |
| 24 | + self.token = token |
| 25 | + if commit: |
| 26 | + obj.save() |
| 27 | + obj.save_m2m() |
| 28 | + return obj |
4 | 29 |
|
5 | 30 |
|
6 | 31 | @admin.register(models.AuthToken) |
7 | 32 | class AuthTokenAdmin(admin.ModelAdmin): |
| 33 | + add_form = AuthTokenCreateForm |
8 | 34 | list_display = ('digest', 'user', 'created', 'expiry',) |
| 35 | + # We dont know how a custom User model looks like, but is must have a USERNAME_FIELD |
| 36 | + search_fields = ['digest', 'token_key', 'user__'+get_user_model().USERNAME_FIELD] |
9 | 37 | fields = () |
10 | 38 | raw_id_fields = ('user',) |
| 39 | + |
| 40 | + def get_form(self, request, obj=None, **kwargs): |
| 41 | + defaults = {} |
| 42 | + if obj is None: |
| 43 | + defaults['form'] = self.add_form |
| 44 | + defaults.update(kwargs) |
| 45 | + return super(AuthTokenAdmin, self).get_form(request, obj, **defaults) |
| 46 | + |
| 47 | + def save_model(self, request, obj, form, change): |
| 48 | + if not change: |
| 49 | + self.message_user(request, "TOKEN " + form.token, messages.INFO) |
| 50 | + super(AuthTokenAdmin, self).save_model(request, obj, form, change) |
0 commit comments