Hello,

On 01/28/2016 12:20 PM, Pavel Vomacka wrote:
'Issue new certificate' dialog now validates whether user fills 'principal' and 
'csr' field.
In case that one of these fields is empty then it does not allow to submit the 
dialog.

https://fedorahosted.org/freeipa/ticket/5432
I'm sending edited patch. One useless section is removed. The textarea for CSR is moved to another section which has the same layout. The method for creating content was useless, too. So it is removed in this patch.

--
Pavel Vomacka
>From 975ee191d3ccde82af30370a73970d10b52fb5aa Mon Sep 17 00:00:00 2001
From: Pavel Vomacka <pvoma...@redhat.com>
Date: Thu, 28 Jan 2016 17:37:29 +0100
Subject: [PATCH] Add validation to Issue new certificate dialog

'Issue new certificate' dialog now validates whether user fills 'principal' and 'csr' field.
In case that one of these fields is empty then it does not allow to submit the dialog.

https://fedorahosted.org/freeipa/ticket/5432
---
 install/ui/src/freeipa/certificate.js | 72 +++++++++++++++++++++++++----------
 install/ui/src/freeipa/details.js     |  5 +++
 2 files changed, 56 insertions(+), 21 deletions(-)

diff --git a/install/ui/src/freeipa/certificate.js b/install/ui/src/freeipa/certificate.js
index 93f3cfc68a95bfb8014aaf96d1b571568ac605dc..505a16fb8e031775989fcf141ffa7e65fd868472 100755
--- a/install/ui/src/freeipa/certificate.js
+++ b/install/ui/src/freeipa/certificate.js
@@ -30,10 +30,11 @@ define([
     './reg',
     './rpc',
     './text',
+    './widget',
     './dialog'],
     function(
         lang, builder, metadata_provider, IPA, $, menu,
-        phases, reg, rpc, text) {
+        phases, reg, rpc, text, widget_mod) {
 
 var exp = IPA.cert = {};
 
@@ -399,11 +400,35 @@ IPA.cert.request_dialog = function(spec) {
     spec = spec || {};
 
     spec.sections = spec.sections || [];
-    var section = { fields: [] };
-    spec.sections.push(section);
+    var section0 = { fields: [] };
+	var section_csr = {
+		show_header: false,
+		fields: [
+			{
+				field: false, // the section does not contain any field.
+				$type: 'html',
+				name: 'message_html_widget',
+				html: spec.message
+			},
+			{
+				$type: 'textarea',
+				name: 'textarea_cert',
+				required: true
+			}
+		],
+		layout:
+		{
+			$factory: widget_mod.fluid_layout,
+			widget_cls : "col-sm-12 controls",
+			label_cls : "hide"
+		}
+	};
+
+	spec.sections.push(section0);
+	spec.sections.push(section_csr);
 
     if (spec.show_principal) {
-        section.fields.push(
+        section0.fields.push(
             {
                 $type: 'text',
                 name: 'principal',
@@ -418,7 +443,7 @@ IPA.cert.request_dialog = function(spec) {
             }
         );
     }
-    section.fields.push(
+    section0.fields.push(
         {
             $type: 'entity_select',
             name: 'profile_id',
@@ -443,8 +468,26 @@ IPA.cert.request_dialog = function(spec) {
         click: function() {
             var values = {};
             that.save(values);
-            var request = $.trim(that.textarea.val());
-            values.request = IPA.cert.pem_csr_format(request);
+
+			// check requested fields
+			if (!that.validate()) {
+				var dialog_fields = that.fields.get_fields();
+
+				for (var i=0; i<dialog_fields.length; i++) {
+					var current_field = dialog_fields[i];
+
+					if (!current_field.valid) {
+						current_field.widget.focus_input();
+						break;
+					}
+				}
+
+				return;
+			}
+
+			// get csr from textarea
+			var request = $.trim(that.get_field('textarea_cert').get_value());
+			values.request = IPA.cert.pem_csr_format(request);
 
             if (that.request) {
                 that.request(values);
@@ -461,19 +504,6 @@ IPA.cert.request_dialog = function(spec) {
         }
     });
 
-    that.create_content = function() {
-        that.dialog_create_content();
-        var node = $("<div/>", {
-            'class': 'col-sm-12'
-        });
-        node.append(that.message);
-        that.textarea = $('<textarea/>', {
-            'class': 'certificate'
-        }).appendTo(node);
-        that.body_node.append(node);
-        return that.body_node;
-    };
-
     return that;
 };
 
@@ -1519,4 +1549,4 @@ phases.on('post-metadata', exp.create_cert_metadata);
 phases.on('profile', exp.remove_menu_item, 20);
 
 return exp;
-});
\ No newline at end of file
+});
diff --git a/install/ui/src/freeipa/details.js b/install/ui/src/freeipa/details.js
index c708a878b7d6d29815535b7508da0c4cc30a3b5c..36dbb99fca3440b29ba280283c6c9e098f67d6d6 100644
--- a/install/ui/src/freeipa/details.js
+++ b/install/ui/src/freeipa/details.js
@@ -295,6 +295,11 @@ exp.section_builder = IPA.section_builder = function(spec) {
 
         var widget = that.widget_builder.build_widget(field_spec, section.widgets);
 
+        if (field_spec.field === false) {
+            // widget doesn't have field, skip
+            return;
+        }
+
         if (section.$field_adapter && !field_spec.adapter) {
             field_spec.adapter = section.$field_adapter;
         }
-- 
2.5.0

-- 
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code

Reply via email to