diff options
author | Antony Kellermann | 2018-07-09 21:00:17 -0400 |
---|---|---|
committer | Antony Kellermann | 2018-07-09 21:00:17 -0400 |
commit | c7672a05b059c5a5bc898a487c493fb265eac20d (patch) | |
tree | dcdec8cce9494f48af51bc651fcd774817f1a920 | |
parent | 5980bc4e84cc861134d952c123a46e9d48730441 (diff) | |
download | aur-c7672a05b059c5a5bc898a487c493fb265eac20d.tar.gz |
Implemented encrypting/decrypting button
-rw-r--r-- | gtk_win.c | 86 | ||||
-rw-r--r-- | gtk_win.h | 10 | ||||
-rw-r--r-- | window_main.glade | 176 |
3 files changed, 251 insertions, 21 deletions
diff --git a/gtk_win.c b/gtk_win.c index e45edbd950e4..2c635a8933c3 100644 --- a/gtk_win.c +++ b/gtk_win.c @@ -121,6 +121,92 @@ void on_load_button_clicked(GtkButton* button) { api_info_array_store_check_data(app.portfolio_data); check_list_add_api_data(); } + + GtkButton* lock_button = GTK_BUTTON(gtk_builder_get_object(app.builder, "lock_button")); + gtk_widget_set_sensitive(GTK_WIDGET(lock_button), TRUE); + if (app.password[0] == '\0') // Plaintext + gtk_button_set_label(lock_button, "Encrypt"); + else gtk_button_set_label(lock_button, "Decrypt"); +} + +void on_lock_button_clicked(GtkButton* button) { + if (strcmp(gtk_button_get_label(button), "Encrypt") == 0) { + gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(app.builder, "set_password_entry1")), + ""); + gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(app.builder, "set_password_entry2")), + ""); + gtk_widget_show(GTK_WIDGET(gtk_builder_get_object(app.builder, "set_password_dialog"))); + } else { + gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(app.builder, "decrypt_password_entry")), + ""); + gtk_widget_show(GTK_WIDGET(gtk_builder_get_object(app.builder, "decrypt_dialog"))); + } +} + +void on_set_password_dialog_response(GtkDialog* dialog, gint response_id) { + if (response_id == GTK_RESPONSE_CANCEL) + gtk_widget_hide(GTK_WIDGET(dialog)); + else on_set_password_entry_activate(NULL); +} + +void on_set_password_entry_activate(GtkEntry* entry) { + gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object(app.builder, "set_password_dialog"))); + GtkEntry* pass = GTK_ENTRY(gtk_builder_get_object(app.builder, "set_password_entry1")); + GtkEntry* pass_check = GTK_ENTRY(gtk_builder_get_object(app.builder, "set_password_entry2")); + const gchar* pass_str = gtk_entry_get_text(pass); + GValue gtext = G_VALUE_INIT; + g_value_init(>ext, G_TYPE_STRING); + GtkWidget* dialog = GTK_WIDGET(gtk_builder_get_object( + app.builder, "generic_check_window_error_dialog")); + if (strlen(pass_str) < 6 || strlen(pass_str) > 30) + g_value_set_string(>ext, "Your password must be between 6 and 30 characters."); + else if (strcmp(pass_str, gtk_entry_get_text(pass_check)) != 0) + g_value_set_string(>ext, "Your passwords did not match."); + else { // If passwords match + sprintf(app.password, "%s\n", pass_str); + g_value_set_string(>ext, "Success! Your portfolio will be encrypted when you close the " + "program."); + dialog = GTK_WIDGET(gtk_builder_get_object( + app.builder, "generic_check_window_success_dialog")); + + gtk_button_set_label(GTK_BUTTON(gtk_builder_get_object(app.builder, "lock_button")), + "Decrypt"); + } + + g_object_set_property(G_OBJECT(dialog), "text", >ext); + gtk_widget_show(dialog); +} + +void on_decrypt_dialog_response(GtkDialog* dialog, gint response_id) { + if (response_id == GTK_RESPONSE_CANCEL) + gtk_widget_hide(GTK_WIDGET(dialog)); + else on_decrypt_password_entry_activate(NULL); +} + +void on_decrypt_password_entry_activate(GtkEntry* entry) { + gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object(app.builder, "decrypt_dialog"))); + GValue gtext = G_VALUE_INIT; + g_value_init(>ext, G_TYPE_STRING); + GtkDialog* dialog; + const gchar* pass = gtk_entry_get_text(GTK_ENTRY( + gtk_builder_get_object(app.builder, "decrypt_password_entry"))); + gchar mod_pass[strlen(pass) + 1]; + sprintf(mod_pass, "%s\n", pass); + if (strcmp(app.password, mod_pass) == 0) { // Success + memset(app.password, '\0', PASS_MAX); + g_value_set_string(>ext, "Successfully decrypted."); + dialog = GTK_DIALOG(gtk_builder_get_object(app.builder, + "generic_check_window_success_dialog")); + + gtk_button_set_label(GTK_BUTTON(gtk_builder_get_object(app.builder, "lock_button")), + "Encrypt"); + } else { + g_value_set_string(>ext, "Wrong password!."); + dialog = GTK_DIALOG(gtk_builder_get_object(app.builder, + "generic_check_window_error_dialog")); + } + g_object_set_property(G_OBJECT(dialog), "text", >ext); + gtk_widget_show(GTK_WIDGET(dialog)); } void on_modify_button_clicked(GtkButton* button) { diff --git a/gtk_win.h b/gtk_win.h index b8f5110af4a5..254291575928 100644 --- a/gtk_win.h +++ b/gtk_win.h @@ -29,6 +29,16 @@ void check_list_add_api_data(void); void on_load_button_clicked(GtkButton* button); +void on_lock_button_clicked(GtkButton* button); + +void on_set_password_dialog_response(GtkDialog* dialog, gint response_id); + +void on_set_password_entry_activate(GtkEntry* entry); + +void on_decrypt_dialog_response(GtkDialog* dialog, gint response_id); + +void on_decrypt_password_entry_activate(GtkEntry* entry); + void on_modify_button_clicked(GtkButton* button); void on_modify_entry_activate(GtkEntry* entry, gpointer dialog); diff --git a/window_main.glade b/window_main.glade index ad596b15c22e..a877bc127e13 100644 --- a/window_main.glade +++ b/window_main.glade @@ -98,11 +98,13 @@ https://github.com/aokellermann/ </packing> </child> <child> - <object class="GtkLockButton" id="lock_button"> + <object class="GtkButton" id="lock_button"> + <property name="label" translatable="yes">Encrypt/Decrypt</property> <property name="visible">True</property> + <property name="sensitive">False</property> <property name="can_focus">True</property> - <property name="text_lock" translatable="yes">Lock Portfolio</property> - <property name="text_unlock" translatable="yes">Unlock Portfolio</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_lock_button_clicked" swapped="no"/> </object> <packing> <property name="expand">True</property> @@ -159,24 +161,6 @@ https://github.com/aokellermann/ <property name="position">0</property> </packing> </child> - <child> - <object class="GtkSearchEntry" id="search_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="halign">end</property> - <property name="hexpand">True</property> - <property name="caps_lock_warning">False</property> - <property name="primary_icon_name">edit-find-symbolic</property> - <property name="primary_icon_activatable">False</property> - <property name="primary_icon_sensitive">False</property> - <property name="input_purpose">alpha</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> </object> <packing> <property name="resize">False</property> @@ -494,6 +478,35 @@ https://github.com/aokellermann/ </object> </child> </object> + <object class="GtkMessageDialog" id="generic_check_window_success_dialog"> + <property name="can_focus">False</property> + <property name="type_hint">dialog</property> + <property name="transient_for">check_window</property> + <property name="buttons">ok</property> + <signal name="delete-event" handler="gtk_widget_hide_on_delete" swapped="no"/> + <signal name="response" handler="gtk_widget_hide" swapped="no"/> + <child> + <placeholder/> + </child> + <child internal-child="vbox"> + <object class="GtkBox"> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkButtonBox"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + </object> <object class="GtkMessageDialog" id="get_password_dialog"> <property name="can_focus">False</property> <property name="modal">True</property> @@ -627,4 +640,125 @@ https://github.com/aokellermann/ </object> </child> </object> + <object class="GtkMessageDialog" id="set_password_dialog"> + <property name="can_focus">False</property> + <property name="modal">True</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">dialog</property> + <property name="skip_taskbar_hint">True</property> + <property name="urgency_hint">True</property> + <property name="transient_for">check_window</property> + <property name="message_type">question</property> + <property name="buttons">ok-cancel</property> + <property name="text" translatable="yes">Choose a password:</property> + <signal name="close" handler="gtk_widget_hide" swapped="no"/> + <signal name="delete-event" handler="gtk_widget_hide_on_delete" swapped="no"/> + <signal name="response" handler="on_set_password_dialog_response" swapped="no"/> + <child> + <placeholder/> + </child> + <child internal-child="vbox"> + <object class="GtkBox"> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkButtonBox"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="set_password_entry1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">●</property> + <property name="max_width_chars">31</property> + <property name="placeholder_text" translatable="yes">password</property> + <property name="input_purpose">password</property> + <signal name="activate" handler="on_set_password_entry_activate" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="set_password_entry2"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">●</property> + <property name="max_width_chars">31</property> + <property name="placeholder_text" translatable="yes">enter the password again</property> + <signal name="activate" handler="on_set_password_entry_activate" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + </object> + </child> + </object> + <object class="GtkMessageDialog" id="decrypt_dialog"> + <property name="can_focus">False</property> + <property name="modal">True</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">dialog</property> + <property name="skip_taskbar_hint">True</property> + <property name="urgency_hint">True</property> + <property name="transient_for">check_window</property> + <property name="message_type">question</property> + <property name="buttons">ok-cancel</property> + <property name="text" translatable="yes">Enter your password:</property> + <signal name="close" handler="gtk_widget_hide" swapped="no"/> + <signal name="destroy-event" handler="gtk_widget_hide_on_delete" swapped="no"/> + <signal name="response" handler="on_decrypt_dialog_response" swapped="no"/> + <child> + <placeholder/> + </child> + <child internal-child="vbox"> + <object class="GtkBox"> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkButtonBox"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="decrypt_password_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">●</property> + <property name="max_width_chars">31</property> + <property name="input_purpose">password</property> + <signal name="activate" handler="on_decrypt_password_entry_activate" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + </child> + </object> </interface> |