You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ra...@apache.org on 2015/04/29 07:43:48 UTC

[04/50] git commit: updated refs/heads/master to 0b83559

volume upload: fixed the UI after the change to move params to header.

Signed-off-by: Rajani Karuturi <ra...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/da1d8f9d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/da1d8f9d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/da1d8f9d

Branch: refs/heads/master
Commit: da1d8f9dce524db33d61ce8427e288aa753478a2
Parents: dc870b5
Author: ramamurtis <ra...@citrix.com>
Authored: Fri Feb 20 16:19:54 2015 +0530
Committer: Rajani Karuturi <ra...@gmail.com>
Committed: Fri Feb 27 17:40:06 2015 +0530

----------------------------------------------------------------------
 .../debian/config/etc/init.d/cloud-early-config |  10 ++
 systemvm/scripts/config_ssl.sh                  |   9 ++
 ui/scripts/storage.js                           |  27 ++--
 ui/scripts/templates.js                         |  44 ++----
 ui/scripts/ui/dialog.js                         | 157 +++++++++++--------
 5 files changed, 136 insertions(+), 111 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/da1d8f9d/systemvm/patches/debian/config/etc/init.d/cloud-early-config
----------------------------------------------------------------------
diff --git a/systemvm/patches/debian/config/etc/init.d/cloud-early-config b/systemvm/patches/debian/config/etc/init.d/cloud-early-config
index 0edd11e..5b98a0c 100755
--- a/systemvm/patches/debian/config/etc/init.d/cloud-early-config
+++ b/systemvm/patches/debian/config/etc/init.d/cloud-early-config
@@ -1159,9 +1159,11 @@ setup_secstorage() {
   log_it "setting up apache2 for post upload of volume/template"
   a2enmod proxy
   a2enmod proxy_http
+  a2enmod headers
 
   SSL_FILE="/etc/apache2/sites-available/default-ssl"
   PATTERN="RewriteRule ^\/upload\/(.*)"
+  CORS_PATTERN="Header set Access-Control-Allow-Origin"
   if [ -f $SSL_FILE ]; then
     if grep -q "$PATTERN" $SSL_FILE ; then
       log_it "rewrite rules already exist in file $SSL_FILE"
@@ -1172,6 +1174,14 @@ setup_secstorage() {
         sed -i -e "s/<\/VirtualHost>/RewriteCond %{REQUEST_METHOD} =POST \n&/" $SSL_FILE
         sed -i -e "s/<\/VirtualHost>/RewriteRule ^\/upload\/(.*) http:\/\/127.0.0.1:8210\/upload?uuid=\$1 [P,L] \n&/" $SSL_FILE
     fi
+    if grep -q "$CORS_PATTERN" $SSL_FILE ; then
+      log_it "cors rules already exist in file $SSL_FILE"
+    else
+        log_it "adding cors rules to file: $SSL_FILE"
+        sed -i -e "s/<\/VirtualHost>/Header always set Access-Control-Allow-Origin \"*\" \n&/" $SSL_FILE
+        sed -i -e "s/<\/VirtualHost>/Header always set Access-Control-Allow-Methods \"POST, OPTIONS\" \n&/" $SSL_FILE
+        sed -i -e "s/<\/VirtualHost>/Header always set Access-Control-Allow-Headers \"x-requested-with, Content-Type, origin, authorization, accept, client-security-token, x-signature, x-metadata, x-expires\" \n&/" $SSL_FILE
+    fi
   fi
 
   service apache2 restart

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/da1d8f9d/systemvm/scripts/config_ssl.sh
----------------------------------------------------------------------
diff --git a/systemvm/scripts/config_ssl.sh b/systemvm/scripts/config_ssl.sh
index 8022b78..cd8059c 100755
--- a/systemvm/scripts/config_ssl.sh
+++ b/systemvm/scripts/config_ssl.sh
@@ -61,6 +61,7 @@ config_apache2_conf() {
 
   SSL_FILE="/etc/apache2/sites-available/default-ssl"
   PATTERN="RewriteRule ^\/upload\/(.*)"
+  CORS_PATTERN="Header set Access-Control-Allow-Origin"
   if [ -f $SSL_FILE ]; then
     if grep -q "$PATTERN" $SSL_FILE ; then
       echo "rewrite rules already exist in file $SSL_FILE"
@@ -71,6 +72,14 @@ config_apache2_conf() {
         sed -i -e "s/<\/VirtualHost>/RewriteCond %{REQUEST_METHOD} =POST \n&/" $SSL_FILE
         sed -i -e "s/<\/VirtualHost>/RewriteRule ^\/upload\/(.*) http:\/\/127.0.0.1:8210\/upload?uuid=\$1 [P,L] \n&/" $SSL_FILE
     fi
+    if grep -q "$CORS_PATTERN" $SSL_FILE ; then
+      echo "cors rules already exist in file $SSL_FILE"
+    else
+        echo "adding cors rules to file: $SSL_FILE"
+        sed -i -e "s/<\/VirtualHost>/Header always set Access-Control-Allow-Origin \"*\" \n&/" $SSL_FILE
+        sed -i -e "s/<\/VirtualHost>/Header always set Access-Control-Allow-Methods \"POST, OPTIONS\" \n&/" $SSL_FILE
+        sed -i -e "s/<\/VirtualHost>/Header always set Access-Control-Allow-Headers \"x-requested-with, Content-Type, origin, authorization, accept, client-security-token, x-signature, x-metadata, x-expires\" \n&/" $SSL_FILE
+    fi
   fi
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/da1d8f9d/ui/scripts/storage.js
----------------------------------------------------------------------
diff --git a/ui/scripts/storage.js b/ui/scripts/storage.js
index 3ca19b3..68e3ec1 100644
--- a/ui/scripts/storage.js
+++ b/ui/scripts/storage.js
@@ -454,28 +454,25 @@
 
                                                 args.response.success({
                                                     url: uploadparams.postURL,
+                                                    ajaxPost: true,
                                                     data: {
-                                                        signature: uploadparams.signature,
-                                                        expires: uploadparams.expires,
-                                                        metadata: uploadparams.metadata
+                                                        'X-signature': uploadparams.signature,
+                                                        'X-expires': uploadparams.expires,
+                                                        'X-metadata': uploadparams.metadata
                                                     }
                                                 });
-                                                
-                                                cloudStack.dialog.notice({
-                                                    message: "This volume file has been uploaded. Please check its status at Stroage menu > Volumes > " + args.data.name + " > Status field."
-                                                });
                                             }
                                         });
                                     },
                                     postUpload: function(args) {
-                                        console.log("postUpload() is hit");
-                                        // Called when upload is done to do 
-                                        // verification checks;
-                                        // i.e., poll the server to verify successful upload
-                                        //
-                                        // success() will close the dialog and call standard action
-                                        // error() will keep dialog open if user wants to re-submit
-                                        args.response.success();
+                                        if(args.error) {
+                                            args.response.error(args.errorMsg);
+                                        } else {
+                                            cloudStack.dialog.notice({
+                                                message: "This volume file has been uploaded. Please check its status at Stroage menu > Volumes > " + args.data.name + " > Status field."
+                                            });
+                                            args.response.success();
+                                        }
                                     }
                                 },                                
                                 fields: {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/da1d8f9d/ui/scripts/templates.js
----------------------------------------------------------------------
diff --git a/ui/scripts/templates.js b/ui/scripts/templates.js
index 4fe0944..c060a0c 100644
--- a/ui/scripts/templates.js
+++ b/ui/scripts/templates.js
@@ -636,48 +636,30 @@
                                             data: data,
                                             async: false,
                                             success: function(json) {                                                
-                                                /*                        						
-												{
-												    "postuploadtemplateresponse": {
-												        "getuploadparams": {
-												            "id": "d5bdaf23-dcb9-4eef-9b94-81870490f457",
-												            "postURL": "https://10.223.67.4/upload/d5bdaf23-dcb9-4eef-9b94-81870490f457",
-												            "metadata": "7jCvmzKuMBStM/qEjx9HjSAISd+f3VAUqC9CkYmq92O+SznYov415LUndZ4KuLAtGNY37VeePs8X+0oyaVSj+cjD+KKoBJuynjBJViAQQYKT/amcOdrkloBA4DgNEAn16p32Z2qI4+Ky1ecDAtg1vkYNoz9ReaKbehM3n5MIFPonhnYBEmbVSZkCIbVbJeh+vmYs9Y3SHtcG+0gWiU06YQ4KGl7Wc03wp3wusAlj7+L+fEBha54Rx+C7aS6UPZgm8/+atUUric6xiGMsx603NUElcLWE+gQ7PTimsIr6ySvcmc3D0n6JK6A7bc72sfPrHEbnNPD+5+qXJsBcXPLtEAG2WwduarwZ",
-												            "timeout": "2015-01-20T01:01:02.548Z",
-												            "signature": "NLXv5YsNuUn7NKC+ZP5JtSM26MY="
-												        }
-												    }
-												}
-                                                */
-
-                                                var uploadparams = json.postuploadtemplateresponse.getuploadparams; //son.postuploadtemplateresponse.getuploadparams is an object, not an array of object.
+                                                var uploadparams = json.postuploadtemplateresponse.getuploadparams;
                                                 var templateId = uploadparams.id;
                                                
                                                 args.response.success({
                                                     url: uploadparams.postURL,
+                                                    ajaxPost: true,
                                                     data: {
-                                                        signature: uploadparams.signature,
-                                                        expires: uploadparams.timeout,
-                                                        metadata: uploadparams.metadata
+                                                        'X-signature': uploadparams.signature,
+                                                        'X-expires': uploadparams.expires,
+                                                        'X-metadata': uploadparams.metadata
                                                     }
                                                 });   
-                                                   
-                                                cloudStack.dialog.notice({ 
-                                                	message: "This template file has been uploaded. Please check its status at Templates menu > " + args.data.name + " > Zones tab > click a zone > Status field and Ready field."
-                                                });
-                                                
                                             }
                                         });                                        
                                     },
                                     postUpload: function(args) {
-                                        console.log("postUpload() is hit");
-                                        // Called when upload is done to do 
-                                        // verification checks;
-                                        // i.e., poll the server to verify successful upload
-                                        //
-                                        // success() will close the dialog and call standard action
-                                        // error() will keep dialog open if user wants to re-submit
-                                        args.response.success();
+                                        if(args.error) {
+                                            args.response.error(args.errorMsg);
+                                        } else {
+                                            cloudStack.dialog.notice({
+                                                message: "This template file has been uploaded. Please check its status at Templates menu > " + args.data.name + " > Zones tab > click a zone > Status field and Ready field."
+                                            });
+                                            args.response.success();
+                                        }
                                     }
                                 },
                                 fields: {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/da1d8f9d/ui/scripts/ui/dialog.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui/dialog.js b/ui/scripts/ui/dialog.js
index 86703d5..38d248d 100644
--- a/ui/scripts/ui/dialog.js
+++ b/ui/scripts/ui/dialog.js
@@ -690,76 +690,103 @@
                         context: args.context,
                         response: {
                             success: function(successArgs) {
-                                //
-                                // Move file field into iframe; keep visible for consistency
-                                //
-                                var $uploadFrame = $('<iframe>');
-                                var $frameForm = $('<form>').attr({
-                                    method: 'POST',
-                                    action: successArgs.url,
-                                    enctype: 'multipart/form-data'
-                                });
                                 var $file = $form.find('input[type=file]');
-                                var $field = $file.closest('.form-item .value');
-                                
-                                // Add additional passed data
-                                $.map(successArgs.data, function(v, k) {
-                                    var $hidden = $('<input>').attr({
-                                        type: 'hidden',
-                                        name: k,
-                                        value: v
+                                var postUploadArgs = {
+                                    $form: $form,
+                                    data: data,
+                                    context: args.context,
+                                    response: {
+                                        success: function() {
+                                            args.after({
+                                                data: data,
+                                                ref: args.ref, // For backwards compatibility; use context
+                                                context: args.context,
+                                                $form: $form
+                                            });
+
+                                            $('div.overlay').remove();
+                                            $form.find('.loading-overlay').remove();
+                                            $('div.loading-overlay').remove();
+
+                                            $('.tooltip-box').remove();
+                                            $formContainer.remove();
+                                            $(this).dialog('destroy');
+
+                                            $('.hovered-elem').hide();
+                                        },
+                                        error: function(msg) {
+                                            $('div.overlay').remove();
+                                            $form.find('.loading-overlay').remove();
+                                            $('div.loading-overlay').remove();
+
+                                            cloudStack.dialog.error({ message: msg });
+                                        }
+                                    }
+                                };
+                                var postUploadArgsWithStatus = $.extend(true, {}, postUploadArgs);
+
+                                if(successArgs.ajaxPost) {
+                                    var request = new FormData();
+                                    request.append('file', $file.prop("files")[0]);
+                                    $.ajax({
+                                            type: 'POST',
+                                            url: successArgs.url,
+                                            data: request,
+                                            dataType : 'html',
+                                            processData: false,
+                                            contentType: false,
+                                            headers: successArgs.data,
+                                            success: function(r) {
+                                                postUploadArgsWithStatus.error = false;
+                                                args.form.fileUpload.postUpload(postUploadArgsWithStatus);
+                                            },
+                                            error: function(r) {
+                                                postUploadArgsWithStatus.error = true;
+                                                postUploadArgsWithStatus.errorMsg = r.responseText;
+                                                args.form.fileUpload.postUpload(postUploadArgsWithStatus);
+                                            }
+                                        });
+                                } else {
+                                    //
+                                    // Move file field into iframe; keep visible for consistency
+                                    //
+                                    var $uploadFrame = $('<iframe>');
+                                    var $frameForm = $('<form>').attr({
+                                        method: 'POST',
+                                        action: successArgs.url,
+                                        enctype: 'multipart/form-data'
                                     });
+                                    var $field = $file.closest('.form-item .value');
+
+                                    // Add additional passed data
+                                    $.map(successArgs.data, function(v, k) {
+                                        var $hidden = $('<input>').attr({
+                                            type: 'hidden',
+                                            name: k,
+                                            value: v
+                                        });
 
-                                    $hidden.appendTo($frameForm);
-                                });                                
-                                
-                                console.log("The following object is a hidden HTML form that will submit local file with hidden field signature/expires/metadata:");
-                                console.log($frameForm);                                
-                                
-                                $uploadFrame.css({ width: $field.outerWidth(), height: $field.height() }).show();
-                                $frameForm.append($file);
-                                $field.append($uploadFrame);
-                                $uploadFrame.contents().find('html body').append($frameForm);
-                                $frameForm.submit(function() {
-                                	console.log("callback() in $frameForm.submit(callback(){}) is triggered");
-                                    $uploadFrame.load(function() {
-                                    	console.log("callback() in $uploadFrame.load(callback(){}) is triggered");
-                                        args.form.fileUpload.postUpload({
-                                            $form: $form,
-                                            formData: data,
-                                            context: args.context,
-                                            response: {
-                                                success: function() {
-                                                    args.after({
-                                                        data: data,
-                                                        ref: args.ref, // For backwards compatibility; use context
-                                                        context: args.context,
-                                                        $form: $form
-                                                    });
-
-                                                    $('div.overlay').remove();
-                                                    $form.find('.loading-overlay').remove();
-                                                    $('div.loading-overlay').remove();
-                                                    
-                                                    $('.tooltip-box').remove();
-                                                    $formContainer.remove();
-                                                    $(this).dialog('destroy');
-
-                                                    $('.hovered-elem').hide();
-                                                },
-                                                error: function(msg) {
-                                                	$('div.overlay').remove();
-                                                    $form.find('.loading-overlay').remove();
-                                                    $('div.loading-overlay').remove();
-                                                    
-                                                    cloudStack.dialog.error({ message: msg });
-                                                }
-                                            }
+                                        $hidden.appendTo($frameForm);
+
+                                    });
+
+                                    console.log("The following object is a hidden HTML form that will submit local file with hidden field signature/expires/metadata:");
+                                    console.log($frameForm);
+
+                                    $uploadFrame.css({ width: $field.outerWidth(), height: $field.height() }).show();
+                                    $frameForm.append($file);
+                                    $field.append($uploadFrame);
+                                    $uploadFrame.contents().find('html body').append($frameForm);
+                                    $frameForm.submit(function() {
+                                        console.log("callback() in $frameForm.submit(callback(){}) is triggered");
+                                        $uploadFrame.load(function() {
+                                            console.log("callback() in $uploadFrame.load(callback(){}) is triggered");
+                                            args.form.fileUpload.postUpload(postUploadArgs);
                                         });
+                                        return true;
                                     });
-                                    return true;
-                                });
-                                $frameForm.submit();
+                                    $frameForm.submit();
+                                }
                             },
                             error: function(msg) {
                                 cloudStack.dialog.error({ message: msg });