1
0

admin.py 3.1 KB

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