1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- from django.contrib import admin, messages
- from django.shortcuts import redirect, render
- from .forms import ActivateUserKeyForm
- from .models import UserKey, SecretRole, Secret
- @admin.register(UserKey)
- class UserKeyAdmin(admin.ModelAdmin):
- actions = ['activate_selected']
- list_display = ['user', 'is_filled', 'is_active', 'created']
- fields = ['user', 'public_key', 'is_active', 'last_updated']
- readonly_fields = ['is_active', 'last_updated']
- def get_readonly_fields(self, request, obj=None):
- # Don't allow a user to modify an existing public key directly.
- if obj and obj.public_key:
- return ['public_key'] + self.readonly_fields
- return self.readonly_fields
- def get_actions(self, request):
- # Bulk deletion is disabled at the manager level, so remove the action from the admin site for this model.
- actions = super(UserKeyAdmin, self).get_actions(request)
- if 'delete_selected' in actions:
- del actions['delete_selected']
- if not request.user.has_perm('secrets.activate_userkey'):
- del actions['activate_selected']
- return actions
- def activate_selected(modeladmin, request, queryset):
- """
- Enable bulk activation of UserKeys
- """
- try:
- my_userkey = UserKey.objects.get(user=request.user)
- except UserKey.DoesNotExist:
- messages.error(request, "You do not have an active User Key.")
- return redirect('/admin/secrets/userkey/')
- if 'activate' in request.POST:
- form = ActivateUserKeyForm(request.POST)
- if form.is_valid():
- try:
- master_key = my_userkey.get_master_key(form.cleaned_data['secret_key'])
- for uk in form.cleaned_data['_selected_action']:
- uk.activate(master_key)
- return redirect('/admin/secrets/userkey/')
- except ValueError:
- messages.error(request, "Invalid private key provided. Unable to retrieve master key.")
- else:
- form = ActivateUserKeyForm(initial={'_selected_action': request.POST.getlist(admin.ACTION_CHECKBOX_NAME)})
- return render(request, 'activate_keys.html', {
- 'form': form,
- })
- activate_selected.short_description = "Activate selected user keys"
- @admin.register(SecretRole)
- class SecretRoleAdmin(admin.ModelAdmin):
- list_display = ['name', 'slug']
- prepopulated_fields = {
- 'slug': ['name'],
- }
- @admin.register(Secret)
- class SecretAdmin(admin.ModelAdmin):
- list_display = ['device', 'role', 'name', 'created', 'last_updated']
- fields = ['device', 'role', 'name', 'hash', 'created', 'last_updated']
- readonly_fields = ['device', 'hash', 'created', 'last_updated']
|