diff options
author | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2018-02-26 15:58:10 +1100 |
---|---|---|
committer | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2018-02-27 11:43:37 +1100 |
commit | fb8dbd274b4b2c4df52d09d2fe303ccdacdf546b (patch) | |
tree | 2c9f045c242ea2ee4c043423861f82ba424bbf1b /ui/ncurses | |
parent | 7e0b9da2ae2f96d24c711c0ad4d12bb193ec49c0 (diff) | |
download | talos-petitboot-fb8dbd274b4b2c4df52d09d2fe303ccdacdf546b.tar.gz talos-petitboot-fb8dbd274b4b2c4df52d09d2fe303ccdacdf546b.zip |
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>
Diffstat (limited to 'ui/ncurses')
-rw-r--r-- | ui/ncurses/nc-config.c | 1 | ||||
-rw-r--r-- | ui/ncurses/nc-widgets.c | 16 | ||||
-rw-r--r-- | ui/ncurses/nc-widgets.h | 1 |
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); |