You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by se...@apache.org on 2013/07/29 12:02:50 UTC

git commit: updated refs/heads/ldapplugin to ec064b3

Updated Branches:
  refs/heads/ldapplugin eaa414337 -> ec064b307


New LDAP UI

Signed-off-by: Sebastien Goasguen <ru...@gmail.com>


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

Branch: refs/heads/ldapplugin
Commit: ec064b307734dcb1d4304454de466d6e70e019fb
Parents: eaa4143
Author: Ian Duffy <ia...@ianduffy.ie>
Authored: Mon Jul 29 05:58:00 2013 -0400
Committer: Sebastien Goasguen <ru...@gmail.com>
Committed: Mon Jul 29 05:58:00 2013 -0400

----------------------------------------------------------------------
 .../ldap/test/resources/cloudstack.org.ldif     | 263 +++++++++++++++++++
 ui/css/cloudstack3.css                          | 117 +++++----
 ui/index.jsp                                    |   8 +-
 ui/scripts/accounts.js                          |   2 +-
 ui/scripts/accountsWizard.js                    | 190 +++++++++++---
 ui/scripts/sharedFunctions.js                   |  16 ++
 ui/scripts/ui-custom/accountsWizard.js          | 141 ++++++----
 7 files changed, 603 insertions(+), 134 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec064b30/plugins/user-authenticators/ldap/test/resources/cloudstack.org.ldif
----------------------------------------------------------------------
diff --git a/plugins/user-authenticators/ldap/test/resources/cloudstack.org.ldif b/plugins/user-authenticators/ldap/test/resources/cloudstack.org.ldif
index b20de81..f46a383 100644
--- a/plugins/user-authenticators/ldap/test/resources/cloudstack.org.ldif
+++ b/plugins/user-authenticators/ldap/test/resources/cloudstack.org.ldif
@@ -17,3 +17,266 @@ givenName: Ryan
 mail: rmurphy@cloudstack.org
 uid: rmurphy
 userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Barbara Brewer,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Barbara Brewer
+sn: Brewer
+mail: bbrewer@cloudstack.org
+uid: bbrewer
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Zak Wilkinson,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Zak Wilkinson
+givenname: Zak
+sn: Wilkinson
+uid: zwilkinson
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Archie Shingleton,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Archie Shingleton
+sn: Shingleton
+givenName: Archie
+mail: ashingleton@cloudstack.org
+uid: ashingleton
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Cletus Pears,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Cletus Pears
+sn: Pears
+givenName: Cletus
+mail: cpears@cloudstack.org
+uid: cpears
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Teisha Milewski,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Teisha Milewski
+sn: Milewski
+givenName: Teisha
+mail: tmilewski@cloudstack.org
+uid: tmilewski
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Eloy Para,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Eloy Para
+sn: Para
+givenName: Eloy
+mail: epara@cloudstack.org
+uid: epara
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Elaine Lamb,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Elaine Lamb
+sn: Lamb
+givenName: Elaine
+mail: elamb@cloudstack.org
+uid: elamb
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Soon Griffen,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Soon Griffen
+sn: Griffen
+givenName: Soon
+mail: sgriffen@cloudstack.org
+uid: sgriffen
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Tran Neisler,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Tran Neisler
+sn: Neisler
+givenName: Tran
+mail: tneisler@cloudstack.org
+uid: tneisler
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Mirella Zeck,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Mirella Zeck
+sn: Zeck
+givenName: Mirella
+mail: mzeck@cloudstack.org
+uid: mzeck
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Greg Hoskin,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Greg Hoskin
+sn: Hoskin
+givenName: Greg
+mail: ghoskin@cloudstack.org
+uid: ghoskin
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Johanne Runyon,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Johanne Runyon
+sn: Runyon
+givenName: Johanne
+mail: jrunyon@cloudstack.org
+uid: jrunyon
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Mabelle Waiters,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Mabelle Waiters
+sn: Waiters
+givenName: Mabelle
+mail: mwaiters@cloudstack.org
+uid: mwaiters
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Phillip Fruge,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Phillip Fruge
+sn: Fruge
+givenName: Phillip
+mail: pfruge@cloudstack.org
+uid: pfruge
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Jayna Ridenhour,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Jayna Ridenhour
+sn: Ridenhour
+givenName: Jayna
+mail: jridenhour@cloudstack.org
+uid: jridenhour
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Marlyn Mandujano,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Marlyn Mandujano
+sn: Mandujano
+givenName: Marlyn
+mail: mmandujano@cloudstack.org
+uid: mmandujano
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Shaunna Scherer,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Shaunna Scherer
+sn: Scherer
+givenName: Shaunna
+mail: sscherer@cloudstack.org
+uid: sscherer
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Adriana Bozek,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Adriana Bozek
+sn: Bozek
+givenName: Adriana
+mail: abozek@cloudstack.org
+uid: abozek
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Silvana Chipman,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Silvana Chipman
+sn: Chipman
+givenName: Silvana
+mail: schipman@cloudstack.org
+uid: schipman
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Marion Wasden,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Marion Wasden
+sn: Wasden
+givenName: Marion
+mail: mwasden@cloudstack.org
+uid: mwasden
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Anisa Casson,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Anisa Casson
+sn: Casson
+givenName: Anisa
+mail: acasson@cloudstack.org
+uid: acasson
+userpassword:: cGFzc3dvcmQ=
+
+dn: cn=Cammy Petri,dc=cloudstack,dc=org
+objectClass: inetOrgPerson
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+cn: Cammy Petri
+sn: Petri
+givenName: Cammy
+mail: cpetri@cloudstack.org
+uid: cpetri
+userpassword:: cGFzc3dvcmQ=
+

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec064b30/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 93658db..a419194 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -12268,84 +12268,97 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
 }
 
 .accounts-wizard table {
-  margin: 0;
-  width: 100%;
-  table-layout: fixed;
+    margin: 0;
+    width: 100%;
+    table-layout: fixed;
+}
+.accounts-wizard .ui-button {
+    display: inline-block !important;
+    float: none !important;
 }
-
 .accounts-wizard td:last-child {
-  border: none;
+    border: none;
 }
-
 .accounts-wizard tbody tr:nth-child(even) {
-  background: #DFE1E3;
+    background: #DFE1E3;
 }
-
 .accounts-wizard tbody tr:nth-child(odd) {
-  background: #F2F0F0;
+    background: #F2F0F0;
 }
-
 .accounts-wizard .content {
-  display: inline-block;
+    display: inline-block;
 }
-
 .accounts-wizard .content:last-child {
-  margin-left: 14px;
+    margin-left: 14px;
 }
-
-.accounts-wizard .select-container {
-  overflow: auto;
+.accounts-wizard .input-area {
+    width: 320px;
+    font-size: 13px;
+    color: #485867;
+    text-shadow: 0px 2px 1px #FFFFFF;
 }
-
-.accounts-wizard .input-area{
-  width: 320px;
-  font-size: 15px;
-  color: #485867;
-  text-shadow: 0px 2px 1px #FFFFFF;
-}
-
 .ldap-account-choice {
-  border: none !important;
-  border-radius: 0 0 0 0 !important;
+    border: none !important;
+    border-radius: 0 0 0 0 !important;
 }
-
 .manual-account-details .name {
-  margin-top: 2px;
-  width: 100px;
-  float: left;
-  padding-bottom:10px;
+    margin-top: 2px;
+    width: 100px;
+    float: left;
+    padding-bottom:10px;
+}
+.manual-account-details {
+    height: auto !important;
+    overflow: visible !important;
+    overflow-x: visible !important;
+}
+.manual-account-details label.error {
+    display: block;
+    font-size: 10px;
 }
-
 .manual-account-details .value {
-  float: left;
+    float: left;
 }
-
 .manual-account-details .form-item:after {
-  content: ".";
-  display: block;
-  clear: both;
-  visibility: hidden;
-  line-height: 0;
-  height: 0;
+    content:".";
+    display: block;
+    clear: both;
+    visibility: hidden;
+    line-height: 0;
+    height: 0;
 }
-
 .manual-account-details .form-item {
-  padding: 10px;
-  width: 278px;
+    padding: 5px;
+    width: 100%;
+    -webkit-box-sizing: border-box;
+    -moz-box-sizing: border-box;
+    box-sizing: border-box;
 }
-
 .manual-account-details select, .manual-account-details input {
-  width: 150px;
+    width: 150px;
+}
+.manual-account-details input {
+    background: #F6F6F6;
+    -moz-border-radius: 4px;
+    -webkit-border-radius: 4px;
+    -khtml-border-radius: 4px;
+    border-radius: 4px;
+    border-radius: 4px 4px 4px 4px;
+    border: 1px solid #AFAFAF;
+    -moz-box-shadow: inset 0px 1px #727272;
+    -webkit-box-shadow: inset 0px 1px #727272;
+    -o-box-shadow: inset 0px 1px #727272;
+    box-shadow: inset 0px 1px #727272;
+    -moz-box-shadow: inset 0px 1px 0px #727272;
+    -webkit-box-shadow: inset 0px 1px 0px #727272;
+    -o-box-shadow: inset 0px 1px 0px #727272;
 }
-
 .manual-account-details > *:nth-child(even) {
-  background: #DFE1E3;
+    background: #DFE1E3;
 }
-
 .manual-account-details > *:nth-child(odd) {
-  background: #F2F0F0;
+    background: #F2F0F0;
 }
-
 .manual-account-details .value {
-  display: inline-block;
-}
\ No newline at end of file
+    display: inline-block;
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec064b30/ui/index.jsp
----------------------------------------------------------------------
diff --git a/ui/index.jsp b/ui/index.jsp
index 813dbcb..e193c22 100644
--- a/ui/index.jsp
+++ b/ui/index.jsp
@@ -473,8 +473,8 @@ under the License.
       <div class="multi-wizard accounts-wizard">
         <form>
           <div class="steps">
-              <div class="content">
-                <div class="select-container ldap-account-choice">
+              <div class="content ldap-account-choice">
+                <div class="select-container">
                   <table>
                     <thead>
                       <tr>
@@ -496,8 +496,8 @@ under the License.
           </div>
         </form>
         <div class="buttons">
-          <div class="button cancel"><span><fmt:message key="label.cancel"/></span></div>
-          <div class="button next"><span><fmt:message key="label.add"/></span></div>
+          <button class="cancel ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span><fmt:message key="label.cancel"/></span></button>
+          <button class="next ok ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span><fmt:message key="label.add"/></span></button>
         </div>
       </div>
       <!-- Zone wizard -->

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec064b30/ui/scripts/accounts.js
----------------------------------------------------------------------
diff --git a/ui/scripts/accounts.js b/ui/scripts/accounts.js
index e3e28e4..43b242d 100644
--- a/ui/scripts/accounts.js
+++ b/ui/scripts/accounts.js
@@ -1287,7 +1287,7 @@
                                     $.ajax({
                                         url: createURL('updateUser'),
                                         data: data,
-                                        type: "POST",                                        
+                                        type: "POST",
                                         success: function(json) {
                                             args.response.success({
                                                 data: json.updateuserresponse.user

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec064b30/ui/scripts/accountsWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/accountsWizard.js b/ui/scripts/accountsWizard.js
index a350085..70ef082 100644
--- a/ui/scripts/accountsWizard.js
+++ b/ui/scripts/accountsWizard.js
@@ -18,7 +18,57 @@
 (function(cloudStack, $) {
     cloudStack.accountsWizard = {
 
-        manuallyInputtedAccountInformation: {
+        informationWithinLdap: {
+            username: {
+                label: 'label.username',
+                validation: {
+                    required: true
+                },
+                docID: 'helpAccountUsername'
+            },
+            password: {
+                label: 'label.password',
+                validation: {
+                    required: true
+                },
+                isPassword: true,
+                id: 'password',
+                docID: 'helpAccountPassword'
+            },
+            'password-confirm': {
+                label: 'label.confirm.password',
+                validation: {
+                    required: true,
+                    equalTo: '#password'
+                },
+                isPassword: true,
+                docID: 'helpAccountConfirmPassword'
+            },
+            email: {
+                label: 'label.email',
+                validation: {
+                    required: true,
+                    email: true
+                },
+                docID: 'helpAccountEmail'
+            },
+            firstname: {
+                label: 'label.first.name',
+                validation: {
+                    required: true
+                },
+                docID: 'helpAccountFirstName'
+            },
+            lastname: {
+                label: 'label.last.name',
+                validation: {
+                    required: true
+                },
+                docID: 'helpAccountLastName'
+            }
+        },
+
+        informationNotInLdap: {
             domainid: {
                 label: 'label.domain',
                 docID: 'helpAccountDomain',
@@ -48,7 +98,7 @@
                                     description: this.path
                                 });
 
-                                if (this.level == 0)
+                                if (this.level === 0)
                                     rootDomainId = this.id;
                             });
                             args.response.success({
@@ -62,8 +112,8 @@
                 label: 'label.account',
                 docID: 'helpAccountAccount',
                 validation: {
-                    required: true
-                },
+                    required: false
+                }
             },
             accounttype: {
                 label: 'label.type',
@@ -116,43 +166,123 @@
 
         action: function(args) {
             var array1 = [];
+            var ldapStatus = isLdapEnabled();
+            console.log("creating user: " + args.username);
+            array1.push("&username=" + args.username);
+
+            if (!ldapStatus) {
+                var password = args.data.password;
+                if (md5Hashed) {
+                    password = $.md5(password);
+                }
+                array1.push("&email=" + args.data.email);
+                array1.push("&firstname=" + args.data.firstname);
+                array1.push("&lastname=" + args.data.lastname);
+
+                var password = args.data.password;
+                if (md5Hashed) {
+                    password = $.md5(password);
+                }
+                array1.push("&password=" + password);
+            }
 
-            array1.push("&username=" + args.data.username);
             array1.push("&domainid=" + args.data.domainid);
 
-            if (args.data.account != null && args.data.account.length != 0) {
-                array1.push("&account=" + args.data.account);
+            var account = args.data.account;
+            if (account === null || account.length === 0) {
+                account = args.username;
             }
+            array1.push("&account=" + account);
 
-            if (args.data.accounttype == "1" && args.data.domainid != rootDomainId) {
-                args.data.accounttype = "2";
+            var accountType = args.data.accounttype;
+            if (args.data.accounttype == "1" && args.data.domainid != rootDomainId) { //if account type is admin, but domain is not Root domain
+                accountType = "2"; // Change accounttype from root-domain("1") to domain-admin("2")
             }
-            array1.push("&accountType=" + args.data.accounttype);
+            array1.push("&accounttype=" + accountType);
 
-            if (args.data.timezone != null && args.data.timezone.length != 0) {
+            if (args.data.timezone !== null && args.data.timezone.length > 0) {
                 array1.push("&timezone=" + args.data.timezone);
             }
 
-            if (args.data.networkdomain != null && args.data.networkdomain != 0) {
-                array1.push("&networkDomain=" + args.data.networkdomain);
+            if (args.data.networkdomain !== null && args.data.networkdomain.length > 0) {
+                array1.push("&networkdomain=" + args.data.networkdomain);
             }
 
-            console.log(array1.join(""));
-            console.log(args.data);
-
-		$.ajax({
-			url: createURL("ldapCreateAccount" + array1.join("")),
-			dataType: "json",
-			success: function(json) {
-				var item = json.createaccountresponse.account;
-				args.response.success({
-					data: item
-				});
-			},
-			error: function(XMLHttpResponse) {
-				args.response.error(parseXMLHttpResponse(XMLHttpResponse));
-			}
-		});
+            if (ldapStatus) {
+                console.log("doing an ldap add");
+                $.ajax({
+                    url: createURL('ldapCreateAccount' + array1.join("")),
+                    dataType: "json",
+                    async: false,
+                    success: function(json) {
+                        var item = json.createaccountresponse.account;
+                        args.response.success({
+                            data: item
+                        });
+                    },
+                    error: function(XMLHttpResponse) {
+                        args.response.error(parseXMLHttpResponse(XMLHttpResponse));
+                    }
+                });
+            } else {
+                console.log("doing normal user add");
+                $.ajax({
+                    url: createURL('createAccount' + array1.join("")),
+                    dataType: "json",
+                    async: false,
+                    success: function(json) {
+                        var item = json.createaccountresponse.account;
+                        args.response.success({
+                            data: item
+                        });
+                    },
+                    error: function(XMLHttpResponse) {
+                        args.response.error(parseXMLHttpResponse(XMLHttpResponse));
+                    }
+                });
+            }
         }
-    }
+        /*
+                action: function(args) {
+                    var array1 = [];
+
+                    var username = args.data.username;
+
+                    array1.push("&domainid=" + args.data.domainid);
+
+                    if (args.data.account != null && args.data.account.length != 0) {
+                        array1.push("&account=" + args.data.account);
+                    }
+
+                    if (args.data.accounttype == "1" && args.data.domainid != rootDomainId) {
+                        args.data.accounttype = "2";
+                    }
+                    array1.push("&accountType=" + args.data.accounttype);
+
+                    if (args.data.timezone != null && args.data.timezone.length != 0) {
+                        array1.push("&timezone=" + args.data.timezone);
+                    }
+                    if (args.data.networkdomain != null && args.data.networkdomain != 0) {
+                        array1.push("&networkDomain=" + args.data.networkdomain);
+                    }
+
+                    for (var i = 0; i < username.length; i++) {
+                        $.ajax({
+                            url: createURL("ldapCreateAccount&username=" + username[i] + array1.join("")),
+                            dataType: "json",
+                            async: false,
+                            success: function(json) {
+                                var item = json.createaccountresponse.account;
+                                args.response.success({
+                                    data: item
+                                });
+                            },
+                            error: function(XMLHttpResponse) {
+                                args.response.error(parseXMLHttpResponse(XMLHttpResponse));
+                            }
+                        });
+                    }
+                }
+                */
+    };
 }(cloudStack, jQuery));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec064b30/ui/scripts/sharedFunctions.js
----------------------------------------------------------------------
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index 6c1b009..a9df896 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -699,6 +699,22 @@ var addGuestNetworkDialog = {
 }
 
 
+    function isLdapEnabled() {
+        var result;
+        $.ajax({
+            url: createURL("listLdapConfigurations"),
+            dataType: "json",
+            async: false,
+            success: function(json) {
+                result = (json.ldapconfigurationresponse.count > 0);
+            },
+            error: function(json) {
+                result = false;
+            }
+        });
+        return result;
+    }
+
 // Role Functions
 
     function isAdmin() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec064b30/ui/scripts/ui-custom/accountsWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/accountsWizard.js b/ui/scripts/ui-custom/accountsWizard.js
index 4037788..7951553 100644
--- a/ui/scripts/ui-custom/accountsWizard.js
+++ b/ui/scripts/ui-custom/accountsWizard.js
@@ -19,7 +19,7 @@
     cloudStack.uiCustom.accountsWizard = function(args) {
         return function(listViewArgs) {
             var context = listViewArgs.context;
-
+            var ldapStatus = isLdapEnabled();
             var accountsWizard = function(data) {
                 var $wizard = $('#template').find('div.accounts-wizard').clone();
                 var $form = $wizard.find('form');
@@ -33,82 +33,129 @@
 
                 var completeAction = function() {
                     var data = cloudStack.serializeForm($form);
-                    args.action({
-                        context: context,
-                        data: data,
-                        response: {
-                            success: function(args) {
-                                $('.list-view').listView('refresh');
-                                close();
-                            },
-                            error: function(message) {
-                                close();
-                                if(message) {
-                                    cloudStack.dialog.notice({
-                                        message: message
-                                    });
+                    var username = data.username;
+                    var bulkAdd = (username instanceof Array);
+                    if (bulkAdd) {
+                        console.log("doing bulk add");
+                        for (var i = 0; i < username.length; i++) {
+                            console.log("creating user " + username[i]);
+                            args.action({
+                                context: context,
+                                data: data,
+                                username: username[i],
+                                response: {
+                                    error: function(message) {
+                                        if (message) {
+                                            cloudStack.dialog.notice({
+                                                message: message
+                                            });
+                                        }
+                                    }
                                 }
-                            }
+                            });
                         }
-                    });
-                }
+                    } else {
+                        args.action({
+                            context: context,
+                            data: data,
+                            username: username,
+                            response: {
+                                error: function(message) {
+                                    if (message) {
+                                        cloudStack.dialog.notice({
+                                            message: message
+                                        });
+                                    }
+                                }
+                            }
+                        });
+                    }
+                };
 
                 $wizard.click(function(event) {
                     var $target = $(event.target);
-                    if ($target.closest('div.button.next').size()) {
+                    if ($target.closest('button.next').size()) {
                         $form.validate();
                         if ($form.valid()) {
                             completeAction();
+                            $(window).trigger('cloudStack.fullRefresh');
+                            close();
                             return true;
-                        } else {
-                            return false;
                         }
                     }
 
-                    if ($target.closest('div.button.cancel').size()) {
+                    if ($target.closest('button.cancel').size()) {
                         close();
                         return false;
                     }
                 });
 
-                var form = cloudStack.dialog.createForm({
+                if (ldapStatus) {
+                    var $table = $wizard.find('.ldap-account-choice tbody');
+                    $.ajax({
+                        url: createURL("listAllLdapUsers"),
+                        dataType: "json",
+                        async: false,
+                        success: function(json) {
+                            $(json.ldapuserresponse.LdapUser).each(function() {
+                                var result = $("<tr>");
+                                result.append("<td><input type=\"checkbox\" class=\"required\" name=\"username\" value=\"" + this.username + "\"></td>");
+                                result.append("<td>" + this.firstname + " " + this.lastname + "</td>");
+                                result.append("<td>" + this.username + "</td>");
+                                result.append("<td>" + this.email + "</td>");
+                                $table.append(result);
+                            });
+                        }
+                    });
+                } else {
+                    var informationWithinLdap = cloudStack.dialog.createForm({
+                        context: context,
+                        noDialog: true,
+                        form: {
+                            title: '',
+                            fields: args.informationWithinLdap
+                        }
+                    });
+
+                    //console.log(informationWithinLdap.$formContainer);
+                    var informationWithinLdapForm = informationWithinLdap.$formContainer.find('form .form-item');
+                    informationWithinLdapForm.find('.value #label_username').addClass('required');
+                    informationWithinLdapForm.find('.value #password').addClass('required');
+                    informationWithinLdapForm.find('.value #label_confirm_password').addClass('required');
+                    informationWithinLdapForm.find('.value #label_confirm_password').attr('equalTo', '#password');
+                    informationWithinLdapForm.find('.value #label_email').addClass('required');
+                    informationWithinLdapForm.find('.value #label_first_name').addClass('required');
+                    informationWithinLdapForm.find('.value #label_last_name').addClass('required');
+                    $wizard.find('.manual-account-details').append(informationWithinLdapForm).children().css('background', 'none');
+                    $wizard.find('.ldap-account-choice').css('display', 'none');
+                    $wizard.removeClass('multi-wizard');
+                }
+
+                var informationNotInLdap = cloudStack.dialog.createForm({
                     context: context,
                     noDialog: true,
                     form: {
                         title: '',
-                        fields: args.manuallyInputtedAccountInformation
+                        fields: args.informationNotInLdap
                     }
                 });
 
-                var $manualDetails = form.$formContainer.find('form .form-item');
-                $wizard.find('.manual-account-details').append($manualDetails);
-
-                var $table = $wizard.find('.ldap-account-choice tbody');
-
-                $.ajax({
-                    url: createURL("listAllLdapUsers"),
-                    dataType: "json",
-                    async: false,
-                    success: function(json) {
-                        $(json.ldapuserresponse.LdapUser).each(function() {
-                            var result = $("<tr>");
-                            result.append("<td><input type=\"radio\" class=\"required\" name=\"username\" value=\"" + this.username + "\"></td>");
-                            result.append("<td>" + this.firstname + " " + this.lastname + "</td>");
-                            result.append("<td>" + this.username + "</td>");
-                            result.append("<td>" + this.email + "</td>");
-                            $table.append(result);
-                        })
-                    }
-                });
+                var informationNotInLdapForm = informationNotInLdap.$formContainer.find('form .form-item');
+                informationNotInLdapForm.find('.value #label_domain').addClass('required');
+                informationNotInLdapForm.find('.value #label_type').addClass('required');
+                if (!ldapStatus) {
+                    informationNotInLdapForm.css('background', 'none');
+                }
+                $wizard.find('.manual-account-details').append(informationNotInLdapForm);
 
                 return $wizard.dialog({
                     title: _l('label.add.account'),
-                    width: 800,
-                    height: 500,
+                    width: ldapStatus ? 800 : 330,
+                    height: ldapStatus ? 500 : 500,
                     closeOnEscape: false,
                     zIndex: 5000
                 }).closest('.ui-dialog').overlay();
-            }
+            };
 
             accountsWizard(args);
         };