From 5b73786653887c754ef945eb6666eeed9d446146 Mon Sep 17 00:00:00 2001
From: Jerry Seutter <jseutter@gmail.com>
Date: Mon, 10 Nov 2014 11:28:19 -0700
Subject: [PATCH] Move image path manipulation to server side

---
 gns3server/modules/dynamips/backends/vm.py | 13 ++++++++-----
 gns3server/modules/iou/__init__.py         | 13 ++++++++-----
 gns3server/modules/qemu/qemu_vm.py         | 20 ++++++++++++--------
 3 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/gns3server/modules/dynamips/backends/vm.py b/gns3server/modules/dynamips/backends/vm.py
index 0aa2491e..67c0bb73 100644
--- a/gns3server/modules/dynamips/backends/vm.py
+++ b/gns3server/modules/dynamips/backends/vm.py
@@ -17,6 +17,7 @@
 
 import os
 import base64
+import ntpath
 import time
 from gns3server.modules import IModule
 from gns3dms.cloud.rackspace_ctrl import get_provider
@@ -148,13 +149,15 @@ class VM(object):
         else:
             if not os.path.exists(self.images_directory):
                 os.mkdir(self.images_directory)
-            if request.get("cloud_path", None):
+            cloud_path = request.get("cloud_path", None)
+            if cloud_path is not None:
                 # Download the image from cloud files
-                cloud_path = request.get("cloud_path")
-                full_cloud_path = "/".join((cloud_path, image))
-
+                _, filename = ntpath.split(image)
+                src = '{}/{}'.format(cloud_path, filename)
                 provider = get_provider(self._cloud_settings)
-                provider.download_file(full_cloud_path, updated_image_path)
+                log.debug("Downloading file from {} to {}...".format(src, updated_image_path))
+                provider.download_file(src, updated_image_path)
+                log.debug("Download of {} complete.".format(src))
                 image = updated_image_path
 
         try:
diff --git a/gns3server/modules/iou/__init__.py b/gns3server/modules/iou/__init__.py
index 6243c14e..e9e1bb51 100644
--- a/gns3server/modules/iou/__init__.py
+++ b/gns3server/modules/iou/__init__.py
@@ -21,6 +21,7 @@ IOU server module.
 
 import os
 import base64
+import ntpath
 import stat
 import tempfile
 import socket
@@ -303,13 +304,15 @@ class IOU(IModule):
         else:
             if not os.path.exists(self.images_directory):
                 os.mkdir(self.images_directory)
-            if request.get("cloud_path", None):
+            cloud_path = request.get("cloud_path", None)
+            if cloud_path is not None:
                 # Download the image from cloud files
-                cloud_path = request.get("cloud_path")
-                full_cloud_path = "/".join((cloud_path, iou_path))
-
+                _, filename = ntpath.split(iou_path)
+                src = '{}/{}'.format(cloud_path, filename)
                 provider = get_provider(self._cloud_settings)
-                provider.download_file(full_cloud_path, updated_iou_path)
+                log.debug("Downloading file from {} to {}...".format(src, updated_iou_path))
+                provider.download_file(src, updated_iou_path)
+                log.debug("Download of {} complete.".format(src))
                 # Make file executable
                 st = os.stat(updated_iou_path)
                 os.chmod(updated_iou_path, st.st_mode | stat.S_IEXEC)
diff --git a/gns3server/modules/qemu/qemu_vm.py b/gns3server/modules/qemu/qemu_vm.py
index ffdd299d..47effa6e 100644
--- a/gns3server/modules/qemu/qemu_vm.py
+++ b/gns3server/modules/qemu/qemu_vm.py
@@ -577,21 +577,25 @@ class QemuVM(object):
                 if self.hda_disk_image != "":
                     _, filename = ntpath.split(self.hda_disk_image)
                     src = '{}/{}'.format(self.cloud_path, filename)
-                    dest = os.path.join(self.working_dir, filename)
-                    if not os.path.isfile(dest):
+                    dst = os.path.join(self.working_dir, filename)
+                    if not os.path.isfile(dst):
                         cloud_settings = Config.instance().cloud_settings()
                         provider = get_provider(cloud_settings)
-                        provider.download_file(src, dest)
-                    self.hda_disk_image = dest
+                        log.debug("Downloading file from {} to {}...".format(src, dst))
+                        provider.download_file(src, dst)
+                        log.debug("Download of {} complete.".format(src))
+                    self.hda_disk_image = dst
                 if self.hdb_disk_image != "":
                     _, filename = ntpath.split(self.hdb_disk_image)
                     src = '{}/{}'.format(self.cloud_path, filename)
-                    dest = os.path.join(self.working_dir, filename)
-                    if not os.path.isfile(dest):
+                    dst = os.path.join(self.working_dir, filename)
+                    if not os.path.isfile(dst):
                         cloud_settings = Config.instance().cloud_settings()
                         provider = get_provider(cloud_settings)
-                        provider.download_file(src, dest)
-                    self.hdb_disk_image = dest
+                        log.debug("Downloading file from {} to {}...".format(src, dst))
+                        provider.download_file(src, dst)
+                        log.debug("Download of {} complete.".format(src))
+                    self.hdb_disk_image = dst
 
             self._command = self._build_command()
             try: