admin.py 3.1 KB

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