From 4bb2f0684a8e0ded95d7ae4c07944c007b7d7e63 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Tue, 17 Dec 2019 15:26:55 +0100 Subject: [PATCH] Support updating authenticator keys via remote config updates --- common/flatpak-dir.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index b687f085f..607deb493 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -13622,6 +13622,22 @@ _flatpak_dir_fetch_remote_state_metadata_branch (FlatpakDir *self, return TRUE; } +static gboolean +strv_contains_prefix (const gchar * const *strv, + const gchar *str) +{ + g_return_val_if_fail (strv != NULL, FALSE); + g_return_val_if_fail (str != NULL, FALSE); + + for (; *strv != NULL; strv++) + { + if (g_str_has_prefix (str, *strv)) + return TRUE; + } + + return FALSE; +} + gboolean flatpak_dir_update_remote_configuration_for_state (FlatpakDir *self, FlatpakRemoteState *remote_state, @@ -13642,9 +13658,15 @@ flatpak_dir_update_remote_configuration_for_state (FlatpakDir *self, "xa.default-branch", "xa.gpg-keys", "xa.redirect-url", + "xa.authenticator-name", + "xa.authenticator-install", OSTREE_META_KEY_DEPLOY_COLLECTION_ID, NULL }; + static const char *const supported_param_prefixes[] = { + "xa.authenticator-options.", + NULL + }; g_autoptr(GPtrArray) updated_params = NULL; GVariantIter iter; g_autoptr(GBytes) gpg_keys = NULL; @@ -13662,7 +13684,8 @@ flatpak_dir_update_remote_configuration_for_state (FlatpakDir *self, while (g_variant_iter_next (&iter, "{sv}", &key, &value_var)) { - if (g_strv_contains (supported_params, key)) + if (g_strv_contains (supported_params, key) || + strv_contains_prefix (supported_param_prefixes, key)) { if (strcmp (key, "xa.gpg-keys") == 0) { @@ -13694,6 +13717,15 @@ flatpak_dir_update_remote_configuration_for_state (FlatpakDir *self, g_ptr_array_add (updated_params, g_strdup (value)); } } + else if (g_variant_is_of_type (value_var, G_VARIANT_TYPE_BOOLEAN)) + { + gboolean value = g_variant_get_boolean (value_var); + g_ptr_array_add (updated_params, g_strdup (key)); + if (value) + g_ptr_array_add (updated_params, g_strdup ("true")); + else + g_ptr_array_add (updated_params, g_strdup ("false")); + } } g_variant_unref (value_var);