anastasis-gtk

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

commit e39415981af2848da9155b1407730c5118e760e8
parent 26af54aa831f2e84774951a5d9e0754820a26d35
Author: Christian Grothoff <christian@grothoff.org>
Date:   Sat, 27 Nov 2021 22:26:07 +0100

fix #7078

Diffstat:
Mcontrib/anastasis_gtk_edit_providers.glade | 6++++--
Mcontrib/anastasis_gtk_main_window.glade | 13++++++++++---
Msrc/anastasis/anastasis-gtk_action.c | 55+++++++++++++++++++++++++++++++++++++++++++++++++++----
Msrc/anastasis/anastasis-gtk_handle-auth-edit-provider-clicked.c | 8++++++++
Msrc/anastasis/anastasis-gtk_helper.h | 24++++++++++++++++++++----
5 files changed, 93 insertions(+), 13 deletions(-)

diff --git a/contrib/anastasis_gtk_edit_providers.glade b/contrib/anastasis_gtk_edit_providers.glade @@ -43,6 +43,8 @@ Author: Christian Grothoff <column type="gboolean"/> <!-- column-name not_sensitive --> <column type="gboolean"/> + <!-- column-name business_name --> + <column type="gchararray"/> </columns> </object> <object class="GtkDialog" id="edit_provider_dialog"> @@ -225,11 +227,11 @@ Author: Christian Grothoff <object class="GtkTreeViewColumn" id="url_column"> <property name="spacing">5</property> <property name="sizing">autosize</property> - <property name="title" translatable="yes">URL</property> + <property name="title" translatable="yes">Provider</property> <child> <object class="GtkCellRendererText" id="url_renderer"/> <attributes> - <attribute name="text">0</attribute> + <attribute name="text">7</attribute> </attributes> </child> </object> diff --git a/contrib/anastasis_gtk_main_window.glade b/contrib/anastasis_gtk_main_window.glade @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.38.2 +<!-- Generated with glade 3.38.2 Copyright (C) 2019-2021 Anastasis SARL @@ -172,6 +172,8 @@ Author: Christian Grothoff, Dennis Neufeld <column type="gchararray"/> <!-- column-name success_flag --> <column type="gboolean"/> + <!-- column-name provider_name --> + <column type="gchararray"/> </columns> </object> <object class="GtkListStore" id="challenge_status_liststore"> @@ -322,6 +324,8 @@ Author: Christian Grothoff, Dennis Neufeld <column type="guint"/> <!-- column-name was_solved --> <column type="gboolean"/> + <!-- column-name provider_name --> + <column type="gchararray"/> </columns> </object> <object class="GtkAdjustment" id="policy_version_adjustment"> @@ -1929,6 +1933,9 @@ with &lt;a href="https://www.ngi.eu/ngi-projects/ledger/"&gt;funding&lt;/a&gt; f <child> <placeholder/> </child> + <child> + <placeholder/> + </child> </object> </child> <child type="label"> @@ -2229,7 +2236,7 @@ You can also use "back" to add additional authentication methods.</property> <child> <object class="GtkCellRendererText" id="provider_url_column"/> <attributes> - <attribute name="text">3</attribute> + <attribute name="text">9</attribute> </attributes> </child> </object> @@ -3082,7 +3089,7 @@ date of your secret's recovery data.</property> <child> <object class="GtkCellRendererText" id="provider_url"/> <attributes> - <attribute name="text">0</attribute> + <attribute name="text">4</attribute> </attributes> </child> </object> diff --git a/src/anastasis/anastasis-gtk_action.c b/src/anastasis/anastasis-gtk_action.c @@ -65,6 +65,47 @@ bool AG_in_secret_name_editing; #define DEBUG 0 + +/** + * Lookup provider name by provider URL in our state. + * + * @param provider_url URL to lookup name for + * @return provider name, or if unknown, the @a provider_url + */ +static const char * +lookup_provider_name (const char *provider_url) +{ + json_t *providers; + json_t *provider; + const char *name; + struct GNUNET_JSON_Specification spec[] = { + GNUNET_JSON_spec_mark_optional ( + GNUNET_JSON_spec_string ("business_name", + &name)), + GNUNET_JSON_spec_end () + }; + + providers = json_object_get (AG_redux_state, + "authentication_providers"); + provider = json_object_get (providers, + provider_url); + if (NULL == provider) + return provider_url; + if (GNUNET_OK != + GNUNET_JSON_parse (provider, + spec, + NULL, NULL)) + { + GNUNET_break (0); + json_dumpf (provider, + stderr, + JSON_INDENT (2)); + return provider_url; + } + return name; +} + + /** * Prepare window for selection of the continent. */ @@ -931,10 +972,10 @@ action_policies_reviewing (void) json_array_foreach (methods, mindex, method) { uint32_t imethod; - const char *provider; + const char *provider_url; struct GNUNET_JSON_Specification mspec[] = { GNUNET_JSON_spec_string ("provider", - &provider), + &provider_url), GNUNET_JSON_spec_uint32 ("authentication_method", &imethod), GNUNET_JSON_spec_end () @@ -969,6 +1010,7 @@ action_policies_reviewing (void) GNUNET_JSON_spec_end () }; struct TALER_Amount method_cost; + const char *provider_name; if (GNUNET_OK != GNUNET_JSON_parse (jmethod, @@ -979,13 +1021,14 @@ action_policies_reviewing (void) continue; } if (GNUNET_OK != - lookup_recovery_cost (provider, + lookup_recovery_cost (provider_url, type, &method_cost)) { GNUNET_break (0); continue; } + provider_name = lookup_provider_name (provider_url); gtk_tree_store_insert_with_values ( ts, &miter, @@ -998,7 +1041,7 @@ action_policies_reviewing (void) AG_PRMC_COST, TALER_amount2s (&method_cost), AG_PRMC_PROVIDER_URL, - provider, + provider_url, AG_PRMC_EXPIRATION_TIME_STR, "N/A", AG_PRMC_POLICY_INDEX, @@ -1007,6 +1050,8 @@ action_policies_reviewing (void) TRUE, AG_PRMC_METHOD_INDEX, (guint) mindex, + AG_PRMC_PROVIDER_NAME, + provider_name, -1); if (NULL == summary) { @@ -1586,6 +1631,8 @@ action_backup_finished (void) GNUNET_STRINGS_absolute_time_to_string (pexp), AG_BPC_SUCCESS_FLAG, true, + AG_BPC_PROVIDER_NAME, + lookup_provider_name (url), -1); } { diff --git a/src/anastasis/anastasis-gtk_handle-auth-edit-provider-clicked.c b/src/anastasis/anastasis-gtk_handle-auth-edit-provider-clicked.c @@ -318,6 +318,7 @@ url_add_button_clicked_cb (GtkButton *button, AG_PMC_PROVIDER_ENABLED, true, AG_PMC_PROVIDER_SENSITIVE, false, AG_PMC_PROVIDER_NOT_SENSITIVE, true, + AG_PMC_PROVIDER_NAME, url, -1); gtk_entry_set_text (entry, ""); @@ -448,11 +449,15 @@ anastasis_gtk_edit_provider_list_clicked_cb (GtkButton *object, uint32_t ec; struct TALER_Amount ll; bool disabled = false; + const char *name = NULL; struct GNUNET_JSON_Specification spec[] = { GNUNET_JSON_spec_mark_optional ( GNUNET_JSON_spec_uint32 ("http_status", &http_code)), GNUNET_JSON_spec_mark_optional ( + GNUNET_JSON_spec_string ("business_name", + &name)), + GNUNET_JSON_spec_mark_optional ( GNUNET_JSON_spec_bool ("disabled", &disabled)), GNUNET_JSON_spec_mark_optional ( @@ -520,6 +525,8 @@ anastasis_gtk_edit_provider_list_clicked_cb (GtkButton *object, (unsigned int) ec); color = "red"; } + if (NULL == name) + name = url; gtk_list_store_insert_with_values ( ls, NULL, @@ -531,6 +538,7 @@ anastasis_gtk_edit_provider_list_clicked_cb (GtkButton *object, AG_PMC_PROVIDER_ENABLED, ! disabled, AG_PMC_PROVIDER_SENSITIVE, sensitive, AG_PMC_PROVIDER_NOT_SENSITIVE, ! sensitive, + AG_PMC_PROVIDER_NAME, name, -1); GNUNET_free (status); } diff --git a/src/anastasis/anastasis-gtk_helper.h b/src/anastasis/anastasis-gtk_helper.h @@ -163,7 +163,7 @@ enum AG_ChallengeStatusModelColumns enum AG_ProviderModelColumns { /** - * A gchararray. Contains the providers base URL. + * A gchararray. Contains the provider's base URL. */ AG_PMC_PROVIDER_URL = 0, @@ -195,7 +195,13 @@ enum AG_ProviderModelColumns /** * A gboolean. false if this provider can be enabled. */ - AG_PMC_PROVIDER_NOT_SENSITIVE = 6 + AG_PMC_PROVIDER_NOT_SENSITIVE = 6, + + /** + * A gchararray. Contains the provider's business name, if known, + * otherwise the provider's base URL. + */ + AG_PMC_PROVIDER_NAME = 7, }; @@ -223,7 +229,12 @@ enum AG_BackupProviderColumns /** * A gboolean. */ - AG_BPC_SUCCESS_FLAG = 3 + AG_BPC_SUCCESS_FLAG = 3, + + /** + * A gchararray. + */ + AG_BPC_PROVIDER_NAME = 4 }; @@ -336,7 +347,12 @@ enum AG_PolicyReviewModelColumns /** * A gboolean. True on lines representing solved challenges. */ - AG_PRMC_WAS_SOLVED + AG_PRMC_WAS_SOLVED = 8, + + /** + * Name of the provider (if known, otherwise the provider's URL). + */ + AG_PRMC_PROVIDER_NAME = 9 };