diff options
Diffstat (limited to 'src/gui/dialogs/identity.c')
-rw-r--r-- | src/gui/dialogs/identity.c | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/src/gui/dialogs/identity.c b/src/gui/dialogs/identity.c new file mode 100644 index 0000000..0f6a111 --- /dev/null +++ b/src/gui/dialogs/identity.c @@ -0,0 +1,189 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * identity.c - (re)définition de l'identité de l'utilisateur + * + * Copyright (C) 2017 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Chrysalide is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "identity.h" + + +#include <string.h> + + +#include <i18n.h> + + +#include "../panels/log.h" +#include "../../analysis/db/keymgn.h" + + + +/* Applique la nouvelle définition d'identité. */ +static void update_identity(GtkButton *button, GtkBuilder *); + + + +/****************************************************************************** +* * +* Paramètres : parent = fenêtre principale de l'éditeur. * +* outb = constructeur à détruire après usage. [OUT] * +* * +* Description : Propose une édition des informations conernant l'utilisateur.* +* * +* Retour : Adresse de la fenêtre mise en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkWidget *create_identity_dialog(GtkWindow *parent, GtkBuilder **outb) +{ + GtkWidget *result; /* Fenêtre à renvoyer */ + GtkBuilder *builder; /* Constructeur utilisé */ + x509_entries entries; /* Eléments identitaires */ + GtkEntry *entry; /* Zone de saisie à initialiser*/ + + builder = gtk_builder_new_from_resource("/org/chrysalide/gui/dialogs/identity.ui"); + *outb = builder; + + result = GTK_WIDGET(gtk_builder_get_object(builder, "window")); + + gtk_window_set_transient_for(GTK_WINDOW(result), parent); + + /* Mise à jour de l'interface */ + + load_identity(true, &entries); + + if (entries.country != NULL) + { + entry = GTK_ENTRY(gtk_builder_get_object(builder, "c")); + gtk_entry_set_text(entry, entries.country); + } + + if (entries.state != NULL) + { + entry = GTK_ENTRY(gtk_builder_get_object(builder, "st")); + gtk_entry_set_text(entry, entries.state); + } + + if (entries.locality != NULL) + { + entry = GTK_ENTRY(gtk_builder_get_object(builder, "l")); + gtk_entry_set_text(entry, entries.locality); + } + + if (entries.organisation != NULL) + { + entry = GTK_ENTRY(gtk_builder_get_object(builder, "o")); + gtk_entry_set_text(entry, entries.organisation); + } + + if (entries.organisational_unit != NULL) + { + entry = GTK_ENTRY(gtk_builder_get_object(builder, "ou")); + gtk_entry_set_text(entry, entries.organisational_unit); + } + + if (entries.country != NULL) + { + entry = GTK_ENTRY(gtk_builder_get_object(builder, "cn")); + gtk_entry_set_text(entry, entries.common_name); + + gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1); + + } + + /* Connexion des signaux */ + + gtk_builder_add_callback_symbols(builder, + "update_identity", G_CALLBACK(update_identity), + NULL); + + gtk_builder_connect_signals(builder, builder); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : button = bouton à l'origine de la procédure. * +* builder = espace de référencement global. * +* * +* Description : Applique la nouvelle définition d'identité. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void update_identity(GtkButton *button, GtkBuilder *builder) +{ + GtkEntry *entry; /* Zone de saisie à consulter */ + const gchar *data; /* Données internes à GTK */ + x509_entries entries; /* Nouvelle identité à pousser */ + bool status; /* Bilan de la mise à jour */ + + /* Récupération des éléments */ + + entry = GTK_ENTRY(gtk_builder_get_object(builder, "c")); + data = gtk_entry_get_text(entry); + + entries.country = (strlen(data) > 0 ? strdup(data) : NULL); + + entry = GTK_ENTRY(gtk_builder_get_object(builder, "st")); + data = gtk_entry_get_text(entry); + + entries.state = (strlen(data) > 0 ? strdup(data) : NULL); + + entry = GTK_ENTRY(gtk_builder_get_object(builder, "l")); + data = gtk_entry_get_text(entry); + + entries.locality = (strlen(data) > 0 ? strdup(data) : NULL); + + entry = GTK_ENTRY(gtk_builder_get_object(builder, "o")); + data = gtk_entry_get_text(entry); + + entries.organisation = (strlen(data) > 0 ? strdup(data) : NULL); + + entry = GTK_ENTRY(gtk_builder_get_object(builder, "ou")); + data = gtk_entry_get_text(entry); + + entries.organisational_unit = (strlen(data) > 0 ? strdup(data) : NULL); + + entry = GTK_ENTRY(gtk_builder_get_object(builder, "cn")); + data = gtk_entry_get_text(entry); + + entries.common_name = (strlen(data) > 0 ? strdup(data) : NULL); + + /* Application de la nouvelle définition */ + + status = register_standalone_certs(&entries); + + free_x509_entries(&entries); + + if (status) + log_simple_message(LMT_INFO, _("New identity has been loaded with success!")); + else + log_simple_message(LMT_ERROR, _("Failure while loading the new identity...")); + +} |