From 0dbc3afe0cf46f9dd09439e88d4292901e5c69cd Mon Sep 17 00:00:00 2001
From: Őry Máté <ory.mate@cloud.bme.hu>
Date: Wed, 12 Nov 2014 13:05:08 +0100
Subject: [PATCH] network: fix ipv6 conversion

---
 circle/firewall/models.py |  2 ++
 circle/network/views.py   | 16 ++++++++--------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/circle/firewall/models.py b/circle/firewall/models.py
index 321b2e6..29fcb35 100644
--- a/circle/firewall/models.py
+++ b/circle/firewall/models.py
@@ -414,6 +414,8 @@ class Vlan(AclBase, models.Model):
 
     def convert_ipv4_to_ipv6(self, ipv4):
         """Convert IPv4 address string to IPv6 address string."""
+        if isinstance(ipv4, basestring):
+            ipv4 = IPAddress(ipv4, 4)
         nums = {ascii_letters[i]: int(ipv4.words[i]) for i in range(4)}
         return IPAddress(self.ipv6_template % nums)
 
diff --git a/circle/network/views.py b/circle/network/views.py
index fd7596c..698139f 100644
--- a/circle/network/views.py
+++ b/circle/network/views.py
@@ -444,19 +444,19 @@ class HostCreate(LoginRequiredMixin, SuperuserRequiredMixin,
     def _get_ajax(self, *args, **kwargs):
         GET = self.request.GET
         result = {}
-        if "vlan" in GET:
-            vlan = get_object_or_404(Vlan.objects, pk=GET["vlan"])
+        vlan = get_object_or_404(Vlan.objects, pk=GET.get("vlan", ""))
+        if "ipv4" in GET:
+            try:
+                result["ipv6"] = vlan.convert_ipv4_to_ipv6(GET["ipv4"])
+            except:
+                result["ipv6"] = ""
+        else:
             try:
                 result.update(vlan.get_new_address())
             except ValidationError:
                 result["ipv4"] = ""
                 result["ipv6"] = ""
-            if "ipv4" in GET:
-                try:
-                    result["ipv6"] = vlan.convert_ipv4_to_ipv6(GET["ipv4"])
-                except:
-                    result["ipv6"] = ""
-            return JsonResponse({k: unicode(result[k] or "") for k in result})
+        return JsonResponse({k: unicode(result[k] or "") for k in result})
 
     def get(self, *args, **kwargs):
         if self.request.is_ajax():
--
libgit2 0.26.0