diff options
author | Antenore Gatta <antenore@simbiosi.org> | 2019-03-29 04:37:04 +0300 |
---|---|---|
committer | Antenore Gatta <antenore@simbiosi.org> | 2019-03-29 04:37:04 +0300 |
commit | 04a061e6e7ba26561b95d9db2456d2266b644b9f (patch) | |
tree | 116db5a7457f69c054ebf7da1b8a55079e344d1d | |
parent | e134dbd2f1d8478f49b0483bbf0c57feae71c661 (diff) |
WIP: core unlock code - password validation
-rw-r--r-- | data/ui/remmina_preferences.glade | 4 | ||||
-rw-r--r-- | src/remmina_file_editor.c | 1 | ||||
-rw-r--r-- | src/remmina_pref.h | 1 | ||||
-rw-r--r-- | src/remmina_pref_dialog.c | 45 | ||||
-rw-r--r-- | src/remmina_pref_dialog.h | 2 |
5 files changed, 53 insertions, 0 deletions
diff --git a/data/ui/remmina_preferences.glade b/data/ui/remmina_preferences.glade index 95748c8f7..b792e0d4d 100644 --- a/data/ui/remmina_preferences.glade +++ b/data/ui/remmina_preferences.glade @@ -1507,6 +1507,10 @@ Author: Antenore Gatta <property name="visibility">False</property> <property name="invisible_char">•</property> <property name="input_purpose">password</property> + <signal name="changed" handler="remmina_pref_dialog_entry_on_changed" swapped="no"/> + <style> + <class name="unlock_repassword"/> + </style> </object> <packing> <property name="left_attach">1</property> diff --git a/src/remmina_file_editor.c b/src/remmina_file_editor.c index 314a962c6..d96ee94b0 100644 --- a/src/remmina_file_editor.c +++ b/src/remmina_file_editor.c @@ -1379,6 +1379,7 @@ static void remmina_file_editor_entry_on_changed(GtkEditable* editable, RemminaF priv = gfe->priv; if (remmina_file_get_filename(priv->remmina_file) == NULL) { remmina_file_generate_filename(priv->remmina_file); + /* TODO Probably to be removed */ remmina_file_editor_check_profile(gfe); } else { remmina_file_delete(remmina_file_get_filename(priv->remmina_file)); diff --git a/src/remmina_pref.h b/src/remmina_pref.h index 35e91659c..4ff2d27a0 100644 --- a/src/remmina_pref.h +++ b/src/remmina_pref.h @@ -118,6 +118,7 @@ typedef struct _RemminaPref { gboolean save_view_mode; gboolean use_master_password; const gchar *unlock_password; + const gchar *unlock_repassword; gint unlock_timeout; gint default_action; gint scale_quality; diff --git a/src/remmina_pref_dialog.c b/src/remmina_pref_dialog.c index 6b810da33..ed9ae10e0 100644 --- a/src/remmina_pref_dialog.c +++ b/src/remmina_pref_dialog.c @@ -147,6 +147,47 @@ void remmina_pref_on_button_keystrokes_clicked(GtkWidget *widget, gpointer user_ gtk_widget_destroy(GTK_WIDGET(dialog)); } +void remmina_pref_dialog_entry_on_changed(GtkEditable* editable, RemminaPrefDialog *dialog) +{ + TRACE_CALL(__func__); + GtkCssProvider *provider; + const gchar *color; + const gchar *password; + const gchar *repassword; + + provider = gtk_css_provider_new(); + + password = gtk_entry_get_text(remmina_pref_dialog->unlock_password); + repassword = gtk_entry_get_text(remmina_pref_dialog->unlock_repassword); + if (g_strcmp0(password, repassword) == 0) { + color = g_strdup("green"); + } else { + color = g_strdup("red"); + } + + if (repassword == NULL || repassword[0] == '\0') + color = g_strdup("inherit"); + + g_print("Password is %s\n", password); + g_print("Re-typed password is %s\n", repassword); + g_print("Color is %s\n", color); + + gtk_css_provider_load_from_data(provider, + g_strdup_printf ( + ".unlock_repassword {\n" + " color: %s;\n" + "}\n" + , color) + , -1, NULL); + gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), + GTK_STYLE_PROVIDER(provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + + gtk_widget_queue_draw(GTK_WIDGET(remmina_pref_dialog->unlock_repassword)); + g_object_unref(provider); + +} + void remmina_pref_dialog_on_close_clicked(GtkWidget *widget, RemminaPrefDialog *dialog) { TRACE_CALL(__func__); @@ -168,6 +209,7 @@ void remmina_pref_on_dialog_destroy(GtkWidget *widget, gpointer user_data) remmina_pref.save_view_mode = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_options_remember_last_view_mode)); remmina_pref.use_master_password = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_use_master_password)); remmina_pref.unlock_password = gtk_entry_get_text(remmina_pref_dialog->unlock_password); + remmina_pref.unlock_repassword = gtk_entry_get_text(remmina_pref_dialog->unlock_repassword); remmina_pref.screenshot_path = gtk_file_chooser_get_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path); remmina_pref.fullscreen_on_auto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto)); remmina_pref.always_show_tab = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_tabs)); @@ -577,6 +619,8 @@ GtkDialog* remmina_pref_dialog_new(gint default_tab, GtkWindow *parent) remmina_pref_dialog->switch_options_remember_last_view_mode = GTK_SWITCH(GET_OBJECT("switch_options_remember_last_view_mode")); remmina_pref_dialog->switch_security_use_master_password = GTK_SWITCH(GET_OBJECT("switch_security_use_master_password")); remmina_pref_dialog->unlock_password = GTK_ENTRY(GET_OBJECT("unlock_password")); + remmina_pref_dialog->unlock_repassword = GTK_ENTRY(GET_OBJECT("unlock_repassword")); + //gtk_style_context_add_class(gtk_widget_get_style_context(GTK_WIDGET(remmina_pref_dialog->unlock_repassword)), "unlock_repassword"); remmina_pref_dialog->checkbutton_options_save_settings = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_options_save_settings")); remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_fullscreen_on_auto")); remmina_pref_dialog->checkbutton_appearance_show_tabs = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_show_tabs")); @@ -659,6 +703,7 @@ GtkDialog* remmina_pref_dialog_new(gint default_tab, GtkWindow *parent) /* Connect signals */ gtk_builder_connect_signals(remmina_pref_dialog->builder, NULL); + //g_signal_connect(G_OBJECT(remmina_pref_dialog->unlock_repassword), "changed", G_CALLBACK(remmina_pref_dialog_entry_on_changed), remmina_pref_dialog); /* Initialize the window and load the preferences */ remmina_pref_dialog_init(); diff --git a/src/remmina_pref_dialog.h b/src/remmina_pref_dialog.h index 6d8b95d04..6c276f8c4 100644 --- a/src/remmina_pref_dialog.h +++ b/src/remmina_pref_dialog.h @@ -57,6 +57,7 @@ typedef struct _RemminaPrefDialog { GtkSwitch *switch_security_use_master_password; GtkEntry *unlock_timeout; GtkEntry *unlock_password; + GtkEntry *unlock_repassword; GtkCheckButton *checkbutton_options_save_settings; GtkCheckButton *checkbutton_appearance_fullscreen_on_auto; GtkCheckButton *checkbutton_appearance_show_tabs; @@ -148,6 +149,7 @@ G_BEGIN_DECLS GtkDialog* remmina_pref_dialog_new(gint default_tab, GtkWindow *parent); /* Get the current PrefDialog or NULL if not initialized */ GtkDialog* remmina_pref_dialog_get_dialog(void); +void remmina_pref_dialog_entry_on_changed(GtkEditable* editable, RemminaPrefDialog *dialog); G_END_DECLS |