anastasis-gtk

Demonstrator GUI for Anastasis
Log | Files | Refs | README | LICENSE

anastasis-gtk_handle-challenge-totp.c (3687B)


      1 /*
      2      This file is part of anastasis-gtk.
      3      Copyright (C) 2021 Anastasis SARL
      4 
      5      Anastasis is free software; you can redistribute it and/or modify
      6      it under the terms of the GNU General Public License as published
      7      by the Free Software Foundation; either version 3, or (at your
      8      option) any later version.
      9 
     10      Anastasis is distributed in the hope that it will be useful, but
     11      WITHOUT ANY WARRANTY; without even the implied warranty of
     12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13      General Public License for more details.
     14 
     15      You should have received a copy of the GNU General Public License
     16      along with Anastasis; see the file COPYING.  If not, write to the
     17      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     18      Boston, MA 02110-1301, USA.
     19 */
     20 
     21 /**
     22  * @file src/anastasis/anastasis-gtk_handle-challenge-totp.c
     23  * @brief Handle dialogs for code returned to challenge address (TOTP)
     24  * @author Christian Grothoff
     25  */
     26 #include <gnunet/gnunet_util_lib.h>
     27 #include "anastasis-gtk_action.h"
     28 #include "anastasis-gtk_helper.h"
     29 #include "anastasis-gtk_handle-identity-changed.h"
     30 #include <jansson.h>
     31 
     32 
     33 /**
     34  * Function called from the secure question challenge dialog upon completion.
     35  *
     36  * @param dialog the pseudonym selection dialog
     37  * @param response_id response totp from the dialog
     38  * @param user_data the builder of the dialog
     39  */
     40 void
     41 anastasis_gtk_c_totp_dialog_response_cb (GtkDialog *dialog,
     42                                          gint response_id,
     43                                          gpointer user_data)
     44 {
     45   GtkBuilder *builder = GTK_BUILDER (user_data);
     46   GtkEntry *q;
     47   const char *qs;
     48   json_t *args;
     49   unsigned long long pin;
     50   char dummy;
     51 
     52   if (GTK_RESPONSE_OK != response_id)
     53   {
     54     gtk_widget_destroy (GTK_WIDGET (dialog));
     55     g_object_unref (G_OBJECT (builder));
     56     GNUNET_assert (NULL == AG_ra);
     57     AG_ra = ANASTASIS_redux_action (AG_redux_state,
     58                                     "back",
     59                                     NULL,
     60                                     &AG_action_cb,
     61                                     NULL);
     62     return;
     63   }
     64   q = GTK_ENTRY (gtk_builder_get_object (builder,
     65                                          "anastasis_gtk_c_totp_entry"));
     66   qs = gtk_entry_get_text (q);
     67   if (1 != sscanf (qs,
     68                    "%llu%c",
     69                    &pin,
     70                    &dummy))
     71   {
     72     GNUNET_break (0);
     73     return;
     74   }
     75   args = GNUNET_JSON_PACK (
     76     GNUNET_JSON_pack_uint64 ("pin",
     77                              pin));
     78   gtk_widget_destroy (GTK_WIDGET (dialog));
     79   g_object_unref (G_OBJECT (builder));
     80   AG_freeze ();
     81   AG_ra = ANASTASIS_redux_action (AG_redux_state,
     82                                   "solve_challenge",
     83                                   args,
     84                                   &AG_action_cb,
     85                                   NULL);
     86   json_decref (args);
     87 }
     88 
     89 
     90 void
     91 anastasis_gtk_c_totp_dialog_answer_entry_changed_cb (GtkEntry *entry,
     92                                                      gpointer user_data)
     93 {
     94   GtkBuilder *builder = GTK_BUILDER (user_data);
     95   GtkEntry *a;
     96   const char *as;
     97   unsigned int pin;
     98   char dummy;
     99   bool ok;
    100 
    101   a = GTK_ENTRY (gtk_builder_get_object (builder,
    102                                          "anastasis_gtk_c_totp_entry"));
    103   as = gtk_entry_get_text (a);
    104   ok = ( (NULL != as) &&
    105          (8 == strlen (as)) &&
    106          (1 == sscanf (as,
    107                        "%u%c",
    108                        &pin,
    109                        &dummy)) );
    110   gtk_widget_set_sensitive (
    111     GTK_WIDGET (gtk_builder_get_object (builder,
    112                                         "anastasis_gtk_c_totp_dialog_btn_ok")),
    113     ok);
    114 }