summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2018-02-26 15:58:10 +1100
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2018-02-27 11:43:37 +1100
commitfb8dbd274b4b2c4df52d09d2fe303ccdacdf546b (patch)
tree2c9f045c242ea2ee4c043423861f82ba424bbf1b
parent7e0b9da2ae2f96d24c711c0ad4d12bb193ec49c0 (diff)
downloadtalos-petitboot-fb8dbd274b4b2c4df52d09d2fe303ccdacdf546b.zip
talos-petitboot-fb8dbd274b4b2c4df52d09d2fe303ccdacdf546b.tar.gz
ui/ncurses: Validate URL fieldv1.7.0
Make sure the URL field is a valid URL before allowing the user to proceed. Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
-rw-r--r--ui/ncurses/nc-config.c1
-rw-r--r--ui/ncurses/nc-widgets.c16
-rw-r--r--ui/ncurses/nc-widgets.h1
3 files changed, 18 insertions, 0 deletions
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);
OpenPOWER on IntegriCloud