admin.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from django.contrib import admin, messages
  2. from django.shortcuts import redirect, render
  3. from .forms import ActivateUserKeyForm
  4. from .models import UserKey, SecretRole, Secret
  5. @admin.register(UserKey)
  6. class UserKeyAdmin(admin.ModelAdmin):
  7. actions = ['activate_selected']
  8. list_display = ['user', 'is_filled', 'is_active', 'created']
  9. fields = ['user', 'public_key', 'is_active', 'last_updated']
  10. readonly_fields = ['is_active', 'last_updated']
  11. def get_readonly_fields(self, request, obj=None):
  12. # Don't allow a user to modify an existing public key directly.
  13. if obj and obj.public_key:
  14. return ['public_key'] + self.readonly_fields
  15. return self.readonly_fields
  16. def get_actions(self, request):
  17. # Bulk deletion is disabled at the manager level, so remove the action from the admin site for this model.
  18. actions = super(UserKeyAdmin, self).get_actions(request)
  19. if 'delete_selected' in actions:
  20. del actions['delete_selected']
  21. if not request.user.has_perm('secrets.activate_userkey'):
  22. del actions['activate_selected']
  23. return actions
  24. def activate_selected(modeladmin, request, queryset):
  25. """
  26. Enable bulk activation of UserKeys
  27. """
  28. try:
  29. my_userkey = UserKey.objects.get(user=request.user)
  30. except UserKey.DoesNotExist:
  31. messages.error(request, "You do not have an active User Key.")
  32. return redirect('/admin/secrets/userkey/')
  33. if 'activate' in request.POST:
  34. form = ActivateUserKeyForm(request.POST)
  35. if form.is_valid():
  36. try:
  37. master_key = my_userkey.get_master_key(form.cleaned_data['secret_key'])
  38. for uk in form.cleaned_data['_selected_action']:
  39. uk.activate(master_key)
  40. return redirect('/admin/secrets/userkey/')
  41. except ValueError:
  42. messages.error(request, "Invalid private key provided. Unable to retrieve master key.")
  43. else:
  44. form = ActivateUserKeyForm(initial={'_selected_action': request.POST.getlist(admin.ACTION_CHECKBOX_NAME)})
  45. return render(request, 'activate_keys.html', {
  46. 'form': form,
  47. })
  48. activate_selected.short_description = "Activate selected user keys"
  49. @admin.register(SecretRole)
  50. class SecretRoleAdmin(admin.ModelAdmin):
  51. list_display = ['name', 'slug']
  52. prepopulated_fields = {
  53. 'slug': ['name'],
  54. }
  55. @admin.register(Secret)
  56. class SecretAdmin(admin.ModelAdmin):
  57. list_display = ['device', 'role', 'name', 'created', 'last_updated']
  58. fields = ['device', 'role', 'name', 'hash', 'created', 'last_updated']
  59. readonly_fields = ['device', 'hash', 'created', 'last_updated']