""" Admin configuration for the security app. """ from django.contrib import admin from apps.security.models import ( BackupCode, MFAFactor, RateLimit, RefreshToken, SecurityEvent, Session, TokenBlacklist, TrustedDevice, ) @admin.register(Session) class SessionAdmin(admin.ModelAdmin): list_display = ("user", "ip_address", "is_active", "expires_at", "created_at") list_filter = ("revoked_at",) search_fields = ("user__email", "ip_address") readonly_fields = ("user", "fingerprint", "ip_address", "user_agent", "created_at") ordering = ("-created_at",) def is_active(self, obj) -> bool: return obj.is_active is_active.boolean = True @admin.register(RefreshToken) class RefreshTokenAdmin(admin.ModelAdmin): list_display = ("user", "is_active", "rotated_from", "expires_at", "created_at") search_fields = ("user__email",) ordering = ("-created_at",) def is_active(self, obj) -> bool: return obj.is_active is_active.boolean = True @admin.register(TokenBlacklist) class TokenBlacklistAdmin(admin.ModelAdmin): list_display = ("token_id", "user", "reason", "revoked_at") search_fields = ("token_id", "user__email") ordering = ("-revoked_at",) @admin.register(MFAFactor) class MFAFactorAdmin(admin.ModelAdmin): list_display = ("user", "type", "enabled", "created_at") list_filter = ("type", "enabled") search_fields = ("user__email",) @admin.register(BackupCode) class BackupCodeAdmin(admin.ModelAdmin): list_display = ("user", "is_used", "created_at") list_filter = ("used_at",) search_fields = ("user__email",) def is_used(self, obj) -> bool: return obj.is_used is_used.boolean = True @admin.register(TrustedDevice) class TrustedDeviceAdmin(admin.ModelAdmin): list_display = ("user", "device_id", "approved", "last_used_at") list_filter = ("approved",) search_fields = ("user__email", "device_id") @admin.register(SecurityEvent) class SecurityEventAdmin(admin.ModelAdmin): list_display = ("user", "event_type", "created_at") list_filter = ("event_type",) search_fields = ("user__email",) readonly_fields = ("user", "event_type", "metadata", "created_at") ordering = ("-created_at",) @admin.register(RateLimit) class RateLimitAdmin(admin.ModelAdmin): list_display = ("key", "attempts", "is_blocked", "blocked_until", "updated_at") search_fields = ("key",) def is_blocked(self, obj) -> bool: return obj.is_blocked is_blocked.boolean = True