from django.contrib import admin from django.utils import timezone from api.oidc.models import BackchannelClient, BackchannelDelivery @admin.register(BackchannelClient) class BackchannelClientAdmin(admin.ModelAdmin): list_display = ("application", "logout_uri", "enabled") list_select_related = ("application",) def has_add_permission(self, request): return request.user.is_superuser def has_change_permission(self, request, obj=None): return request.user.is_superuser def has_delete_permission(self, request, obj=None): return request.user.is_superuser @admin.register(BackchannelDelivery) class BackchannelDeliveryAdmin(admin.ModelAdmin): list_display = ( "id", "client", "identity", "state", "attempts", "next_attempt_at", "last_error", ) list_filter = ("state",) list_select_related = ("client__application", "identity__application") readonly_fields = tuple(field.name for field in BackchannelDelivery._meta.fields) actions = ("retry_failed",) @admin.action(description="Повторить неудавшуюся отправку") def retry_failed(self, request, queryset): if not request.user.is_superuser: return queryset.filter(state="failed").update( state="pending", next_attempt_at=timezone.now(), completed_at=None, locked_until=None, lock_token="", last_error="", ) def has_add_permission(self, request): return False def has_change_permission(self, request, obj=None): return request.user.is_superuser def has_delete_permission(self, request, obj=None): return False