admin.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # -*- coding: utf-8 -*-
  2. from django.contrib import admin
  3. from coin.vpn.models import VPNSubscription
  4. from coin.vpn.forms import VPNSubscriptionForm
  5. class VPNAdmin(admin.ModelAdmin):
  6. list_display = ('administrative_subscription', 'activated', 'login',
  7. 'ipv4_endpoint', 'ipv6_endpoint', 'comment')
  8. list_filter = ('activated',)
  9. search_fields = ('login', 'comment',
  10. # TODO: searching on member directly doesn't work
  11. 'administrative_subscription__member__first_name',
  12. 'administrative_subscription__member__last_name',
  13. 'administrative_subscription__member__email')
  14. actions = ("generate_endpoints", "generate_endpoints_v4",
  15. "generate_endpoints_v6", "activate", "deactivate")
  16. exclude = ("password",)
  17. form = VPNSubscriptionForm
  18. def get_readonly_fields(self, request, obj=None):
  19. if obj:
  20. return ['login',]
  21. else:
  22. return []
  23. def set_activation(self, request, queryset, value):
  24. count = 0
  25. # We must update each object individually, because we want to run
  26. # the save() method to update the backend.
  27. for vpn in queryset:
  28. if vpn.activated != value:
  29. vpn.activated = value
  30. vpn.full_clean()
  31. vpn.save()
  32. count += 1
  33. action = "activated" if value else "deactivated"
  34. msg = "{} VPN subscription(s) {}.".format(count, action)
  35. self.message_user(request, msg)
  36. def activate(self, request, queryset):
  37. self.set_activation(request, queryset, True)
  38. activate.short_description = "Activate selected VPNs"
  39. def deactivate(self, request, queryset):
  40. self.set_activation(request, queryset, False)
  41. deactivate.short_description = "Deactivate selected VPNs"
  42. def generate_endpoints_generic(self, request, queryset, v4=True, v6=True):
  43. count = 0
  44. for vpn in queryset:
  45. if vpn.generate_endpoints(v4, v6):
  46. vpn.full_clean()
  47. vpn.save()
  48. count += 1
  49. msg = "{} VPN subscription(s) updated.".format(count)
  50. self.message_user(request, msg)
  51. def generate_endpoints(self, request, queryset):
  52. self.generate_endpoints_generic(request, queryset)
  53. generate_endpoints.short_description = "Generate IPv4 and IPv6 endpoints"
  54. def generate_endpoints_v4(self, request, queryset):
  55. self.generate_endpoints_generic(request, queryset, v6=False)
  56. generate_endpoints_v4.short_description = "Generate IPv4 endpoints"
  57. def generate_endpoints_v6(self, request, queryset):
  58. self.generate_endpoints_generic(request, queryset, v4=False)
  59. generate_endpoints_v6.short_description = "Generate IPv6 endpoints"
  60. admin.site.register(VPNSubscription, VPNAdmin)