diff mbox series

[2/2] ui/ncurses: Validate URL field

Message ID 20180226052728.12631-2-sam@mendozajonas.com
State Accepted
Headers show
Series [1/2] discover/platform-powerpc: Avoid confusing gateway and URL | expand

Commit Message

Sam Mendoza-Jonas Feb. 26, 2018, 5:27 a.m. UTC
Make sure the URL field is a valid URL before allowing the user to
proceed.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
---
 ui/ncurses/nc-config.c  |  1 +
 ui/ncurses/nc-widgets.c | 16 ++++++++++++++++
 ui/ncurses/nc-widgets.h |  1 +
 3 files changed, 18 insertions(+)
diff mbox series

Patch

diff --git a/ui/ncurses/nc-config.c b/ui/ncurses/nc-config.c
index 8ffa5ef..5c0f23b 100644
--- a/ui/ncurses/nc-config.c
+++ b/ui/ncurses/nc-config.c
@@ -1042,6 +1042,7 @@  static void config_screen_setup_widgets(struct config_screen *screen,
 
 	screen->widgets.url_l = widget_new_label(set, 0, 0, _("URL:"));
 	screen->widgets.url_f = widget_new_textbox(set, 0, 0, 32, url);
+	widget_textbox_set_validator_url(screen->widgets.url_f);
 	screen->widgets.url_help_l =
 		widget_new_label(set, 0, 0, _("(eg. tftp://)"));
 
diff --git a/ui/ncurses/nc-widgets.c b/ui/ncurses/nc-widgets.c
index 15cec80..93c882b 100644
--- a/ui/ncurses/nc-widgets.c
+++ b/ui/ncurses/nc-widgets.c
@@ -53,6 +53,7 @@ 
 #include <util/util.h>
 #include <i18n/i18n.h>
 #include <fold/fold.h>
+#include <url/url.h>
 
 #include "nc-cui.h"
 #include "nc-widgets.h"
@@ -83,6 +84,7 @@  struct nc_widgetset {
 
 	/* custom validators */
 	FIELDTYPE *ipv4_multi_type;
+	FIELDTYPE *url_type;
 };
 
 struct nc_widget {
@@ -399,6 +401,20 @@  void widget_textbox_set_validator_integer(struct nc_widget_textbox *textbox,
 	set_field_type(textbox->widget.field, TYPE_INTEGER, 1, min, max);
 }
 
+static bool check_url_field(FIELD *field,
+		const void *arg __attribute__((unused)))
+{
+	return is_url(field_buffer(field, 0));
+}
+
+void widget_textbox_set_validator_url(struct nc_widget_textbox *textbox)
+{
+	if (!textbox->set->url_type)
+		textbox->set->url_type = new_fieldtype(check_url_field, NULL);
+
+	set_field_type(textbox->widget.field, textbox->set->url_type);
+}
+
 void widget_textbox_set_validator_ipv4(struct nc_widget_textbox *textbox)
 {
 	set_field_type(textbox->widget.field, TYPE_IPV4);
diff --git a/ui/ncurses/nc-widgets.h b/ui/ncurses/nc-widgets.h
index 4b67da7..aa9263f 100644
--- a/ui/ncurses/nc-widgets.h
+++ b/ui/ncurses/nc-widgets.h
@@ -42,6 +42,7 @@  void widget_textbox_set_validator_integer(struct nc_widget_textbox *textbox,
 		long min, long max);
 void widget_textbox_set_validator_ipv4(struct nc_widget_textbox *textbox);
 void widget_textbox_set_validator_ipv4_multi(struct nc_widget_textbox *textbox);
+void widget_textbox_set_validator_url(struct nc_widget_textbox *textbox);
 
 void widget_subset_add_option(struct nc_widget_subset *subset, const char *text);
 void widget_subset_make_active(struct nc_widget_subset *subset, int idx);