From 3e9981fec6fa1afeb7d4828e6774a3d405ad00f5 Mon Sep 17 00:00:00 2001 From: Byron Ruth Date: Thu, 27 Feb 2014 18:11:47 -0500 Subject: [PATCH 1/2] Enhance ApiToken admin to auto-generate tokens on save Fix #156 --- serrano/admin.py | 15 ++++++++++++++- serrano/models.py | 4 ++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/serrano/admin.py b/serrano/admin.py index bc3897d..3d79237 100644 --- a/serrano/admin.py +++ b/serrano/admin.py @@ -1,4 +1,17 @@ from django.contrib import admin from .models import ApiToken -admin.site.register(ApiToken) + +class ApiTokenAdmin(admin.ModelAdmin): + list_display = ('user', 'token', 'revoked', 'created') + list_editable = ('revoked',) + list_filter = ('user', 'revoked') + fields = ('user', 'token_display', 'revoked') + readonly_fields = ('token_display',) + + def token_display(self, instance): + if instance.pk: + return instance.token + return '(available once saved)' + +admin.site.register(ApiToken, ApiTokenAdmin) diff --git a/serrano/models.py b/serrano/models.py index a35553a..0be08bd 100644 --- a/serrano/models.py +++ b/serrano/models.py @@ -19,7 +19,7 @@ def get_active_token(self, token): class ApiToken(models.Model): "Token for use as authentication for API access." user = models.ForeignKey(User) - token = models.CharField(max_length=32) + token = models.CharField(max_length=32, editable=False) revoked = models.BooleanField(default=False) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) @@ -35,4 +35,4 @@ def __unicode__(self): def save(self, *args, **kwargs): if not self.token: self.token = generate_random_token(32, test=unique_token) - return super(self.__class__, self).save(*args, **kwargs) + return super(ApiToken, self).save(*args, **kwargs) From 0ef86934fe2114794fed834ece88eecdbe332998 Mon Sep 17 00:00:00 2001 From: Byron Ruth Date: Thu, 27 Feb 2014 18:14:40 -0500 Subject: [PATCH 2/2] Update custom token display in admin --- serrano/admin.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/serrano/admin.py b/serrano/admin.py index 3d79237..fc7bc96 100644 --- a/serrano/admin.py +++ b/serrano/admin.py @@ -12,6 +12,9 @@ class ApiTokenAdmin(admin.ModelAdmin): def token_display(self, instance): if instance.pk: return instance.token - return '(available once saved)' + return '(displayed once saved)' + + token_display.short_description = 'Token' + token_display.allow_tags = True admin.site.register(ApiToken, ApiTokenAdmin)