Browse Source

Implement a redirection for handling different backend types in URLs

Baptiste Jonglez 10 years ago
parent
commit
a2427bdfec
4 changed files with 27 additions and 2 deletions
  1. 8 0
      coin/offers/urls.py
  2. 17 2
      coin/offers/views.py
  3. 1 0
      coin/urls.py
  4. 1 0
      coin/vpn/models.py

+ 8 - 0
coin/offers/urls.py

@@ -0,0 +1,8 @@
+from django.conf.urls import patterns, url
+from coin.offers.views import ConfigurationRedirectView
+
+urlpatterns = patterns(
+    '',
+    # Redirect to the appropriate configuration backend.
+    url(r'^configuration/(?P<id>.+)$', ConfigurationRedirectView.as_view(), name="configuration-redirect"),
+)

+ 17 - 2
coin/offers/views.py

@@ -1,3 +1,18 @@
-from django.shortcuts import render
+from django.views.generic.base import RedirectView
+from django.shortcuts import get_object_or_404
+from django.core.urlresolvers import reverse
 
-# Create your views here.
+from coin.offers.models import OfferSubscription
+
+
+class ConfigurationRedirectView(RedirectView):
+    """Redirects to the appropriate view for the configuration backend of the
+    specified subscription."""
+
+    permanent = False
+
+    def get_redirect_url(self, *args, **kwargs):
+        subscription = get_object_or_404(OfferSubscription, pk=self.kwargs['id'],
+                                         member__user=self.request.user)
+        return reverse(subscription.configuration.url_namespace + ':' + subscription.configuration.backend_name,
+                       args=[subscription.configuration.pk])

+ 1 - 0
coin/urls.py

@@ -17,6 +17,7 @@ urlpatterns = patterns(
 
     url(r'^members/', include('coin.members.urls', namespace='members')),
     url(r'^billing/', include('coin.billing.urls', namespace='billing')),
+    url(r'^subscription/', include('coin.offers.urls', namespace='subscription')),
     url(r'^vpn/', include('coin.vpn.urls', namespace='vpn')),
 
     url(r'^admin/', include(admin.site.urls)),

+ 1 - 0
coin/vpn/models.py

@@ -13,6 +13,7 @@ from coin import validation
 
 
 class VPNSubscription(CoinLdapSyncMixin, models.Model):
+    url_namespace = "vpn"
     backend_name = "openvpn_ldap"
     administrative_subscription = models.OneToOneField(
         'offers.OfferSubscription',