|
Packit Service |
c6b9b0 |
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
Packit Service |
c6b9b0 |
/*
|
|
Packit Service |
c6b9b0 |
* Copyright © 2012 – 2017 Red Hat, Inc.
|
|
Packit Service |
c6b9b0 |
*
|
|
Packit Service |
c6b9b0 |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
c6b9b0 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
c6b9b0 |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
c6b9b0 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit Service |
c6b9b0 |
*
|
|
Packit Service |
c6b9b0 |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
c6b9b0 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
c6b9b0 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
c6b9b0 |
* Lesser General Public License for more details.
|
|
Packit Service |
c6b9b0 |
*
|
|
Packit Service |
c6b9b0 |
* You should have received a copy of the GNU Lesser General
|
|
Packit Service |
c6b9b0 |
* Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
#include "config.h"
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
#include <glib/gi18n-lib.h>
|
|
Packit Service |
c6b9b0 |
#include <libsecret/secret.h>
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
#ifdef GOA_TELEPATHY_ENABLED
|
|
Packit Service |
c6b9b0 |
#include <telepathy-glib/telepathy-glib.h>
|
|
Packit Service |
c6b9b0 |
#endif
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
#include "goautils.h"
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static const SecretSchema secret_password_schema =
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
"org.gnome.OnlineAccounts", SECRET_SCHEMA_DONT_MATCH_NAME,
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
{ "goa-identity", SECRET_SCHEMA_ATTRIBUTE_STRING },
|
|
Packit Service |
c6b9b0 |
{ "NULL", 0 }
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
};
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
typedef struct
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaClient *client;
|
|
Packit Service |
c6b9b0 |
GoaObject *object;
|
|
Packit Service |
c6b9b0 |
GoaProvider *provider;
|
|
Packit Service |
c6b9b0 |
} AttentionNeededData;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static AttentionNeededData *
|
|
Packit Service |
c6b9b0 |
attention_needed_data_new (GoaClient *client, GoaObject *object, GoaProvider *provider)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AttentionNeededData *data;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
data = g_slice_new0 (AttentionNeededData);
|
|
Packit Service |
c6b9b0 |
data->client = g_object_ref (client);
|
|
Packit Service |
c6b9b0 |
data->object = g_object_ref (object);
|
|
Packit Service |
c6b9b0 |
data->provider = g_object_ref (provider);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return data;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
attention_needed_data_free (AttentionNeededData *data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_object_unref (data->client);
|
|
Packit Service |
c6b9b0 |
g_object_unref (data->object);
|
|
Packit Service |
c6b9b0 |
g_object_unref (data->provider);
|
|
Packit Service |
c6b9b0 |
g_slice_free (AttentionNeededData, data);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_utils_account_add_attention_needed_info_bar_response (GtkInfoBar *info_bar,
|
|
Packit Service |
c6b9b0 |
gint response_id,
|
|
Packit Service |
c6b9b0 |
gpointer user_data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AttentionNeededData *data = (AttentionNeededData *) user_data;
|
|
Packit Service |
c6b9b0 |
GtkWidget *parent;
|
|
Packit Service |
c6b9b0 |
GError *error;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_if_fail (response_id == GTK_RESPONSE_OK);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
parent = gtk_widget_get_toplevel (GTK_WIDGET (info_bar));
|
|
Packit Service |
c6b9b0 |
if (!gtk_widget_is_toplevel (parent))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Unable to find a toplevel GtkWindow");
|
|
Packit Service |
c6b9b0 |
return;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
if (!goa_provider_refresh_account (data->provider, data->client, data->object, GTK_WINDOW (parent), &error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (!(error->domain == GOA_ERROR && error->code == GOA_ERROR_DIALOG_DISMISSED))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GtkWidget *dialog;
|
|
Packit Service |
c6b9b0 |
dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
|
|
Packit Service |
c6b9b0 |
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
Packit Service |
c6b9b0 |
GTK_MESSAGE_ERROR,
|
|
Packit Service |
c6b9b0 |
GTK_BUTTONS_CLOSE,
|
|
Packit Service |
c6b9b0 |
_("Error logging into the account"));
|
|
Packit Service |
c6b9b0 |
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
|
|
Packit Service |
c6b9b0 |
"%s",
|
|
Packit Service |
c6b9b0 |
error->message);
|
|
Packit Service |
c6b9b0 |
gtk_widget_show_all (dialog);
|
|
Packit Service |
c6b9b0 |
gtk_dialog_run (GTK_DIALOG (dialog));
|
|
Packit Service |
c6b9b0 |
gtk_widget_destroy (dialog);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
void
|
|
Packit Service |
c6b9b0 |
goa_utils_account_add_attention_needed (GoaClient *client, GoaObject *object, GoaProvider *provider, GtkBox *vbox)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AttentionNeededData *data;
|
|
Packit Service |
c6b9b0 |
GoaAccount *account;
|
|
Packit Service |
c6b9b0 |
GtkWidget *button;
|
|
Packit Service |
c6b9b0 |
GtkWidget *content_area;
|
|
Packit Service |
c6b9b0 |
GtkWidget *info_bar;
|
|
Packit Service |
c6b9b0 |
GtkWidget *label;
|
|
Packit Service |
c6b9b0 |
GtkWidget *labels_grid;
|
|
Packit Service |
c6b9b0 |
gchar *markup = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
account = goa_object_peek_account (object);
|
|
Packit Service |
c6b9b0 |
if (!goa_account_get_attention_needed (account))
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
info_bar = gtk_info_bar_new ();
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (vbox), info_bar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_margin_start (content_area, 6);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
labels_grid = gtk_grid_new ();
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_halign (labels_grid, GTK_ALIGN_FILL);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_hexpand (labels_grid, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_valign (labels_grid, GTK_ALIGN_CENTER);
|
|
Packit Service |
c6b9b0 |
gtk_orientable_set_orientation (GTK_ORIENTABLE (labels_grid), GTK_ORIENTATION_VERTICAL);
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_column_spacing (GTK_GRID (labels_grid), 0);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (content_area), labels_grid);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
label = gtk_label_new ("");
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
|
Packit Service |
c6b9b0 |
markup = g_strdup_printf ("%s", _("Credentials have expired"));
|
|
Packit Service |
c6b9b0 |
gtk_label_set_markup (GTK_LABEL (label), markup);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (labels_grid), label);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
label = gtk_label_new (_("Sign in to enable this account."));
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (labels_grid), label);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
button = gtk_info_bar_add_button (GTK_INFO_BAR (info_bar), _("_Sign In"), GTK_RESPONSE_OK);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_margin_end (button, 6);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
data = attention_needed_data_new (client, object, provider);
|
|
Packit Service |
c6b9b0 |
g_signal_connect_data (info_bar,
|
|
Packit Service |
c6b9b0 |
"response",
|
|
Packit Service |
c6b9b0 |
G_CALLBACK (goa_utils_account_add_attention_needed_info_bar_response),
|
|
Packit Service |
c6b9b0 |
data,
|
|
Packit Service |
c6b9b0 |
(GClosureNotify) attention_needed_data_free,
|
|
Packit Service |
c6b9b0 |
0);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_free (markup);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
void
|
|
Packit Service |
c6b9b0 |
goa_utils_account_add_header (GoaObject *object, GtkGrid *grid, gint row)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GIcon *icon;
|
|
Packit Service |
c6b9b0 |
GoaAccount *account;
|
|
Packit Service |
c6b9b0 |
GtkWidget *image;
|
|
Packit Service |
c6b9b0 |
GtkWidget *label;
|
|
Packit Service |
c6b9b0 |
const gchar *icon_str;
|
|
Packit Service |
c6b9b0 |
const gchar *identity;
|
|
Packit Service |
c6b9b0 |
const gchar *name;
|
|
Packit Service |
c6b9b0 |
gchar *markup;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
account = goa_object_peek_account (object);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
icon_str = goa_account_get_provider_icon (account);
|
|
Packit Service |
c6b9b0 |
icon = g_icon_new_for_string (icon_str, NULL);
|
|
Packit Service |
c6b9b0 |
image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_DIALOG);
|
|
Packit Service |
c6b9b0 |
g_object_unref (icon);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_halign (image, GTK_ALIGN_END);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_hexpand (image, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_margin_bottom (image, 12);
|
|
Packit Service |
c6b9b0 |
gtk_grid_attach (grid, image, 0, row, 1, 1);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
name = goa_account_get_provider_name (account);
|
|
Packit Service |
c6b9b0 |
identity = goa_account_get_presentation_identity (account);
|
|
Packit Service |
c6b9b0 |
markup = g_strdup_printf ("%s\n%s",
|
|
Packit Service |
c6b9b0 |
name,
|
|
Packit Service |
c6b9b0 |
(identity == NULL || identity[0] == '\0') ? "\xe2\x80\x94" : identity);
|
|
Packit Service |
c6b9b0 |
label = gtk_label_new (NULL);
|
|
Packit Service |
c6b9b0 |
gtk_label_set_markup (GTK_LABEL (label), markup);
|
|
Packit Service |
c6b9b0 |
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
|
|
Packit Service |
c6b9b0 |
gtk_label_set_max_width_chars (GTK_LABEL (label), 24);
|
|
Packit Service |
c6b9b0 |
gtk_label_set_width_chars (GTK_LABEL (label), 24);
|
|
Packit Service |
c6b9b0 |
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_margin_bottom (label, 12);
|
|
Packit Service |
c6b9b0 |
g_free (markup);
|
|
Packit Service |
c6b9b0 |
gtk_grid_attach (grid, label, 1, row, 3, 1);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
void
|
|
Packit Service |
c6b9b0 |
goa_utils_initialize_client_factory (void)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
static gsize once_init_value = 0;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (g_once_init_enter (&once_init_value))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
#ifdef GOA_TELEPATHY_ENABLED
|
|
Packit Service |
c6b9b0 |
TpSimpleClientFactory *factory;
|
|
Packit Service |
c6b9b0 |
TpAccountManager *account_manager;
|
|
Packit Service |
c6b9b0 |
GQuark account_features[] = {TP_ACCOUNT_FEATURE_ADDRESSING,
|
|
Packit Service |
c6b9b0 |
TP_ACCOUNT_FEATURE_STORAGE,
|
|
Packit Service |
c6b9b0 |
TP_ACCOUNT_FEATURE_CONNECTION,
|
|
Packit Service |
c6b9b0 |
0};
|
|
Packit Service |
c6b9b0 |
GQuark connection_features[] = {TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS,
|
|
Packit Service |
c6b9b0 |
TP_CONNECTION_FEATURE_CONTACT_INFO,
|
|
Packit Service |
c6b9b0 |
0};
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* We make sure that new instances of Telepathy objects will have all
|
|
Packit Service |
c6b9b0 |
* the features we need.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
factory = tp_simple_client_factory_new (NULL);
|
|
Packit Service |
c6b9b0 |
tp_simple_client_factory_add_account_features (factory, account_features);
|
|
Packit Service |
c6b9b0 |
tp_simple_client_factory_add_connection_features (factory, connection_features);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
account_manager = tp_account_manager_new_with_factory (factory);
|
|
Packit Service |
c6b9b0 |
tp_account_manager_set_default (account_manager);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_object_unref (account_manager);
|
|
Packit Service |
c6b9b0 |
g_object_unref (factory);
|
|
Packit Service |
c6b9b0 |
#endif
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_once_init_leave (&once_init_value, 1);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gboolean
|
|
Packit Service |
c6b9b0 |
goa_utils_check_duplicate (GoaClient *client,
|
|
Packit Service |
c6b9b0 |
const gchar *identity,
|
|
Packit Service |
c6b9b0 |
const gchar *presentation_identity,
|
|
Packit Service |
c6b9b0 |
const gchar *provider_type,
|
|
Packit Service |
c6b9b0 |
GoaPeekInterfaceFunc func,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GList *accounts;
|
|
Packit Service |
c6b9b0 |
GList *l;
|
|
Packit Service |
c6b9b0 |
gboolean ret = FALSE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
accounts = goa_client_get_accounts (client);
|
|
Packit Service |
c6b9b0 |
for (l = accounts; l != NULL; l = l->next)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaObject *object = GOA_OBJECT (l->data);
|
|
Packit Service |
c6b9b0 |
GoaAccount *account;
|
|
Packit Service |
c6b9b0 |
gpointer *interface;
|
|
Packit Service |
c6b9b0 |
const gchar *identity_from_object;
|
|
Packit Service |
c6b9b0 |
const gchar *presentation_identity_from_object;
|
|
Packit Service |
c6b9b0 |
const gchar *provider_type_from_object;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
account = goa_object_peek_account (object);
|
|
Packit Service |
c6b9b0 |
interface = (*func) (object);
|
|
Packit Service |
c6b9b0 |
if (interface == NULL)
|
|
Packit Service |
c6b9b0 |
continue;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
provider_type_from_object = goa_account_get_provider_type (account);
|
|
Packit Service |
c6b9b0 |
if (g_strcmp0 (provider_type_from_object, provider_type) != 0)
|
|
Packit Service |
c6b9b0 |
continue;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
identity_from_object = goa_account_get_identity (account);
|
|
Packit Service |
c6b9b0 |
presentation_identity_from_object = goa_account_get_presentation_identity (account);
|
|
Packit Service |
c6b9b0 |
if (g_strcmp0 (identity_from_object, identity) == 0
|
|
Packit Service |
c6b9b0 |
&& g_strcmp0 (presentation_identity_from_object, presentation_identity) == 0)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
const gchar *provider_name;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
provider_name = goa_account_get_provider_name (account);
|
|
Packit Service |
c6b9b0 |
g_set_error (error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_ACCOUNT_EXISTS,
|
|
Packit Service |
c6b9b0 |
_("A %s account already exists for %s"),
|
|
Packit Service |
c6b9b0 |
provider_name,
|
|
Packit Service |
c6b9b0 |
presentation_identity);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
ret = TRUE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_list_free_full (accounts, g_object_unref);
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gchar *
|
|
Packit Service |
c6b9b0 |
goa_utils_data_input_stream_read_line (GDataInputStream *stream,
|
|
Packit Service |
c6b9b0 |
gsize *length,
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GError *local_error = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *ret = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
ret = g_data_input_stream_read_line (stream, length, cancellable, &local_error);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* Handle g_data_input_stream_read_line returning NULL without
|
|
Packit Service |
c6b9b0 |
* setting an error when there was no content to read.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
if (ret == NULL && local_error == NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_set_error (&local_error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_FAILED, /* TODO: more specific */
|
|
Packit Service |
c6b9b0 |
_("Could not parse response"));
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (local_error != NULL)
|
|
Packit Service |
c6b9b0 |
g_propagate_error (error, local_error);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
void
|
|
Packit Service |
c6b9b0 |
goa_utils_set_dialog_title (GoaProvider *provider, GtkDialog *dialog, gboolean add_account)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *provider_name;
|
|
Packit Service |
c6b9b0 |
gchar *title;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
provider_name = goa_provider_get_provider_name (GOA_PROVIDER (provider), NULL);
|
|
Packit Service |
c6b9b0 |
/* Translators: this is the title of the "Add Account" and "Refresh
|
|
Packit Service |
c6b9b0 |
* Account" dialogs. The %s is the name of the provider. eg.,
|
|
Packit Service |
c6b9b0 |
* 'Google'.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
title = g_strdup_printf (_("%s Account"), provider_name);
|
|
Packit Service |
c6b9b0 |
gtk_window_set_title (GTK_WINDOW (dialog), title);
|
|
Packit Service |
c6b9b0 |
g_free (title);
|
|
Packit Service |
c6b9b0 |
g_free (provider_name);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gboolean
|
|
Packit Service |
c6b9b0 |
goa_utils_delete_credentials_for_account_sync (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GoaAccount *object,
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
const gchar *id;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_PROVIDER (provider), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_ACCOUNT (object), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
id = goa_account_get_id (object);
|
|
Packit Service |
c6b9b0 |
return goa_utils_delete_credentials_for_id_sync (provider, id, cancellable, error);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gboolean
|
|
Packit Service |
c6b9b0 |
goa_utils_delete_credentials_for_id_sync (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
const gchar *id,
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gboolean ret = FALSE;
|
|
Packit Service |
c6b9b0 |
gchar *password_key = NULL;
|
|
Packit Service |
c6b9b0 |
GError *sec_error = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_PROVIDER (provider), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (id != NULL && id[0] != '\0', FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
password_key = g_strdup_printf ("%s:gen%d:%s",
|
|
Packit Service |
c6b9b0 |
goa_provider_get_provider_type (provider),
|
|
Packit Service |
c6b9b0 |
goa_provider_get_credentials_generation (provider),
|
|
Packit Service |
c6b9b0 |
id);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
secret_password_clear_sync (&secret_password_schema,
|
|
Packit Service |
c6b9b0 |
cancellable,
|
|
Packit Service |
c6b9b0 |
&sec_error,
|
|
Packit Service |
c6b9b0 |
"goa-identity", password_key,
|
|
Packit Service |
c6b9b0 |
NULL);
|
|
Packit Service |
c6b9b0 |
if (sec_error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("secret_password_clear_sync() failed: %s", sec_error->message);
|
|
Packit Service |
c6b9b0 |
g_set_error_literal (error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_FAILED, /* TODO: more specific */
|
|
Packit Service |
c6b9b0 |
_("Failed to delete credentials from the keyring"));
|
|
Packit Service |
c6b9b0 |
g_error_free (sec_error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_debug ("Cleared keyring credentials for id: %s", id);
|
|
Packit Service |
c6b9b0 |
ret = TRUE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_free (password_key);
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
GVariant *
|
|
Packit Service |
c6b9b0 |
goa_utils_lookup_credentials_sync (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GoaObject *object,
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *password_key = NULL;
|
|
Packit Service |
c6b9b0 |
GVariant *ret = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *password = NULL;
|
|
Packit Service |
c6b9b0 |
const gchar *id;
|
|
Packit Service |
c6b9b0 |
GError *sec_error = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_PROVIDER (provider), NULL);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_OBJECT (object) && goa_object_peek_account (object) != NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
id = goa_account_get_id (goa_object_peek_account (object));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
password_key = g_strdup_printf ("%s:gen%d:%s",
|
|
Packit Service |
c6b9b0 |
goa_provider_get_provider_type (provider),
|
|
Packit Service |
c6b9b0 |
goa_provider_get_credentials_generation (provider),
|
|
Packit Service |
c6b9b0 |
id);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
password = secret_password_lookup_sync (&secret_password_schema,
|
|
Packit Service |
c6b9b0 |
cancellable,
|
|
Packit Service |
c6b9b0 |
&sec_error,
|
|
Packit Service |
c6b9b0 |
"goa-identity", password_key,
|
|
Packit Service |
c6b9b0 |
NULL);
|
|
Packit Service |
c6b9b0 |
if (sec_error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("secret_password_lookup_sync() failed: %s", sec_error->message);
|
|
Packit Service |
c6b9b0 |
g_set_error_literal (error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_FAILED, /* TODO: more specific */
|
|
Packit Service |
c6b9b0 |
_("Failed to retrieve credentials from the keyring"));
|
|
Packit Service |
c6b9b0 |
g_error_free (sec_error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else if (password == NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("secret_password_lookup_sync() returned NULL");
|
|
Packit Service |
c6b9b0 |
g_set_error_literal (error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_FAILED, /* TODO: more specific */
|
|
Packit Service |
c6b9b0 |
_("No credentials found in the keyring"));
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_debug ("Retrieved keyring credentials for id: %s", id);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
ret = g_variant_parse (NULL, /* GVariantType */
|
|
Packit Service |
c6b9b0 |
password,
|
|
Packit Service |
c6b9b0 |
NULL, /* limit */
|
|
Packit Service |
c6b9b0 |
NULL, /* endptr */
|
|
Packit Service |
c6b9b0 |
error);
|
|
Packit Service |
c6b9b0 |
if (ret == NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (error, _("Error parsing result obtained from the keyring: "));
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (g_variant_is_floating (ret))
|
|
Packit Service |
c6b9b0 |
g_variant_ref_sink (ret);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_free (password);
|
|
Packit Service |
c6b9b0 |
g_free (password_key);
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gboolean
|
|
Packit Service |
c6b9b0 |
goa_utils_store_credentials_for_id_sync (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
const gchar *id,
|
|
Packit Service |
c6b9b0 |
GVariant *credentials,
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gboolean ret = FALSE;
|
|
Packit Service |
c6b9b0 |
gchar *credentials_str;
|
|
Packit Service |
c6b9b0 |
gchar *password_description;
|
|
Packit Service |
c6b9b0 |
gchar *password_key;
|
|
Packit Service |
c6b9b0 |
GError *sec_error = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_PROVIDER (provider), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (id != NULL && id[0] != '\0', FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (credentials != NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
credentials_str = g_variant_print (credentials, TRUE);
|
|
Packit Service |
c6b9b0 |
g_variant_ref_sink (credentials);
|
|
Packit Service |
c6b9b0 |
g_variant_unref (credentials);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
password_key = g_strdup_printf ("%s:gen%d:%s",
|
|
Packit Service |
c6b9b0 |
goa_provider_get_provider_type (provider),
|
|
Packit Service |
c6b9b0 |
goa_provider_get_credentials_generation (provider),
|
|
Packit Service |
c6b9b0 |
id);
|
|
Packit Service |
c6b9b0 |
/* Translators: The %s is the type of the provider, e.g. 'google' or 'yahoo' */
|
|
Packit Service |
c6b9b0 |
password_description = g_strdup_printf (_("GOA %s credentials for identity %s"),
|
|
Packit Service |
c6b9b0 |
goa_provider_get_provider_type (GOA_PROVIDER (provider)),
|
|
Packit Service |
c6b9b0 |
id);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!secret_password_store_sync (&secret_password_schema,
|
|
Packit Service |
c6b9b0 |
SECRET_COLLECTION_DEFAULT, /* default keyring */
|
|
Packit Service |
c6b9b0 |
password_description,
|
|
Packit Service |
c6b9b0 |
credentials_str,
|
|
Packit Service |
c6b9b0 |
cancellable,
|
|
Packit Service |
c6b9b0 |
&sec_error,
|
|
Packit Service |
c6b9b0 |
"goa-identity", password_key,
|
|
Packit Service |
c6b9b0 |
NULL))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("secret_password_store_sync() failed: %s", sec_error->message);
|
|
Packit Service |
c6b9b0 |
g_set_error_literal (error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_FAILED, /* TODO: more specific */
|
|
Packit Service |
c6b9b0 |
_("Failed to store credentials in the keyring"));
|
|
Packit Service |
c6b9b0 |
g_error_free (sec_error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_debug ("Stored keyring credentials for identity: %s", id);
|
|
Packit Service |
c6b9b0 |
ret = TRUE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_free (credentials_str);
|
|
Packit Service |
c6b9b0 |
g_free (password_key);
|
|
Packit Service |
c6b9b0 |
g_free (password_description);
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gboolean
|
|
Packit Service |
c6b9b0 |
goa_utils_store_credentials_for_object_sync (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GoaObject *object,
|
|
Packit Service |
c6b9b0 |
GVariant *credentials,
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
const gchar *id;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_PROVIDER (provider), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_OBJECT (object) && goa_object_peek_account (object) != NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (credentials != NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
id = goa_account_get_id (goa_object_peek_account (object));
|
|
Packit Service |
c6b9b0 |
return goa_utils_store_credentials_for_id_sync (provider, id, credentials, cancellable, error);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gboolean
|
|
Packit Service |
c6b9b0 |
goa_utils_keyfile_copy_group (GKeyFile *src_key_file,
|
|
Packit Service |
c6b9b0 |
const gchar *src_group_name,
|
|
Packit Service |
c6b9b0 |
GKeyFile *dest_key_file,
|
|
Packit Service |
c6b9b0 |
const gchar *dest_group_name)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GError *error;
|
|
Packit Service |
c6b9b0 |
gboolean ret_val = FALSE;
|
|
Packit Service |
c6b9b0 |
gchar **keys = NULL;
|
|
Packit Service |
c6b9b0 |
gsize i;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
keys = g_key_file_get_keys (src_key_file, src_group_name, NULL, &error);
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Error getting keys from group %s: %s (%s, %d)",
|
|
Packit Service |
c6b9b0 |
src_group_name,
|
|
Packit Service |
c6b9b0 |
error->message,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (error->domain),
|
|
Packit Service |
c6b9b0 |
error->code);
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for (i = 0; keys[i] != NULL; i++)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *dest_value;
|
|
Packit Service |
c6b9b0 |
gchar *src_value;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
src_value = g_key_file_get_value (src_key_file, src_group_name, keys[i], &error);
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Error reading key %s from group %s: %s (%s, %d)",
|
|
Packit Service |
c6b9b0 |
keys[i],
|
|
Packit Service |
c6b9b0 |
src_group_name,
|
|
Packit Service |
c6b9b0 |
error->message,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (error->domain),
|
|
Packit Service |
c6b9b0 |
error->code);
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
continue;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
dest_value = g_key_file_get_value (dest_key_file, dest_group_name, keys[i], &error);
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (!g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)
|
|
Packit Service |
c6b9b0 |
&& !g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Error reading key %s from group %s: %s (%s, %d)",
|
|
Packit Service |
c6b9b0 |
keys[i],
|
|
Packit Service |
c6b9b0 |
src_group_name,
|
|
Packit Service |
c6b9b0 |
error->message,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (error->domain),
|
|
Packit Service |
c6b9b0 |
error->code);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (g_strcmp0 (dest_value, src_value) != 0)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_key_file_set_value (dest_key_file, dest_group_name, keys[i], src_value);
|
|
Packit Service |
c6b9b0 |
ret_val = TRUE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_free (dest_value);
|
|
Packit Service |
c6b9b0 |
g_free (src_value);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_strfreev (keys);
|
|
Packit Service |
c6b9b0 |
return ret_val;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gboolean
|
|
Packit Service |
c6b9b0 |
goa_utils_keyfile_get_boolean (GKeyFile *key_file, const gchar *group_name, const gchar *key)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GError *error;
|
|
Packit Service |
c6b9b0 |
gboolean ret;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
ret = g_key_file_get_boolean (key_file, group_name, key, &error);
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (!g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Error reading key %s from group %s in keyfile: %s (%s, %d)",
|
|
Packit Service |
c6b9b0 |
key,
|
|
Packit Service |
c6b9b0 |
group_name,
|
|
Packit Service |
c6b9b0 |
error->message,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (error->domain),
|
|
Packit Service |
c6b9b0 |
error->code);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
void
|
|
Packit Service |
c6b9b0 |
goa_utils_keyfile_remove_key (GoaAccount *account, const gchar *key)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GError *error;
|
|
Packit Service |
c6b9b0 |
GKeyFile *key_file;
|
|
Packit Service |
c6b9b0 |
gchar *group;
|
|
Packit Service |
c6b9b0 |
gchar *path;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
path = g_strdup_printf ("%s/goa-1.0/accounts.conf", g_get_user_config_dir ());
|
|
Packit Service |
c6b9b0 |
group = g_strdup_printf ("Account %s", goa_account_get_id (account));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
key_file = g_key_file_new ();
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
if (!g_key_file_load_from_file (key_file,
|
|
Packit Service |
c6b9b0 |
path,
|
|
Packit Service |
c6b9b0 |
G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS,
|
|
Packit Service |
c6b9b0 |
&error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Error loading keyfile %s: %s (%s, %d)",
|
|
Packit Service |
c6b9b0 |
path,
|
|
Packit Service |
c6b9b0 |
error->message,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (error->domain),
|
|
Packit Service |
c6b9b0 |
error->code);
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!g_key_file_remove_key (key_file, group, key, NULL))
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
if (!g_key_file_save_to_file (key_file, path, &error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (&error, "Error writing key-value-file %s: ", path);
|
|
Packit Service |
c6b9b0 |
g_warning ("%s (%s, %d)", error->message, g_quark_to_string (error->domain), error->code);
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_key_file_unref (key_file);
|
|
Packit Service |
c6b9b0 |
g_free (group);
|
|
Packit Service |
c6b9b0 |
g_free (path);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
void
|
|
Packit Service |
c6b9b0 |
goa_utils_keyfile_set_boolean (GoaAccount *account, const gchar *key, gboolean value)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GError *error;
|
|
Packit Service |
c6b9b0 |
GKeyFile *key_file;
|
|
Packit Service |
c6b9b0 |
gboolean needs_update = FALSE;
|
|
Packit Service |
c6b9b0 |
gboolean old_value;
|
|
Packit Service |
c6b9b0 |
gchar *group;
|
|
Packit Service |
c6b9b0 |
gchar *path;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
path = g_strdup_printf ("%s/goa-1.0/accounts.conf", g_get_user_config_dir ());
|
|
Packit Service |
c6b9b0 |
group = g_strdup_printf ("Account %s", goa_account_get_id (account));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
key_file = g_key_file_new ();
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
if (!g_key_file_load_from_file (key_file,
|
|
Packit Service |
c6b9b0 |
path,
|
|
Packit Service |
c6b9b0 |
G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS,
|
|
Packit Service |
c6b9b0 |
&error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Error loading keyfile %s: %s (%s, %d)",
|
|
Packit Service |
c6b9b0 |
path,
|
|
Packit Service |
c6b9b0 |
error->message,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (error->domain),
|
|
Packit Service |
c6b9b0 |
error->code);
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
old_value = g_key_file_get_boolean (key_file, group, key, &error);
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Error reading key %s from keyfile %s: %s (%s, %d)",
|
|
Packit Service |
c6b9b0 |
key,
|
|
Packit Service |
c6b9b0 |
path,
|
|
Packit Service |
c6b9b0 |
error->message,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (error->domain),
|
|
Packit Service |
c6b9b0 |
error->code);
|
|
Packit Service |
c6b9b0 |
needs_update = TRUE;
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else if (old_value != value)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
needs_update = TRUE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!needs_update)
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_key_file_set_boolean (key_file, group, key, value);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
if (!g_key_file_save_to_file (key_file, path, &error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (&error, "Error writing key-value-file %s: ", path);
|
|
Packit Service |
c6b9b0 |
g_warning ("%s (%s, %d)", error->message, g_quark_to_string (error->domain), error->code);
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_key_file_unref (key_file);
|
|
Packit Service |
c6b9b0 |
g_free (group);
|
|
Packit Service |
c6b9b0 |
g_free (path);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
void
|
|
Packit Service |
c6b9b0 |
goa_utils_keyfile_set_string (GoaAccount *account, const gchar *key, const gchar *value)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GError *error;
|
|
Packit Service |
c6b9b0 |
GKeyFile *key_file;
|
|
Packit Service |
c6b9b0 |
gboolean needs_update = FALSE;
|
|
Packit Service |
c6b9b0 |
gchar *group;
|
|
Packit Service |
c6b9b0 |
gchar *old_value = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *path;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
path = g_strdup_printf ("%s/goa-1.0/accounts.conf", g_get_user_config_dir ());
|
|
Packit Service |
c6b9b0 |
group = g_strdup_printf ("Account %s", goa_account_get_id (account));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
key_file = g_key_file_new ();
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
if (!g_key_file_load_from_file (key_file,
|
|
Packit Service |
c6b9b0 |
path,
|
|
Packit Service |
c6b9b0 |
G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS,
|
|
Packit Service |
c6b9b0 |
&error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Error loading keyfile %s: %s (%s, %d)",
|
|
Packit Service |
c6b9b0 |
path,
|
|
Packit Service |
c6b9b0 |
error->message,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (error->domain),
|
|
Packit Service |
c6b9b0 |
error->code);
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
old_value = g_key_file_get_string (key_file, group, key, &error);
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_warning ("Error reading key %s from keyfile %s: %s (%s, %d)",
|
|
Packit Service |
c6b9b0 |
key,
|
|
Packit Service |
c6b9b0 |
path,
|
|
Packit Service |
c6b9b0 |
error->message,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (error->domain),
|
|
Packit Service |
c6b9b0 |
error->code);
|
|
Packit Service |
c6b9b0 |
needs_update = TRUE;
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else if (g_strcmp0 (old_value, value) != 0)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
needs_update = TRUE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!needs_update)
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_key_file_set_string (key_file, group, key, value);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
if (!g_key_file_save_to_file (key_file, path, &error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (&error, "Error writing key-value-file %s: ", path);
|
|
Packit Service |
c6b9b0 |
g_warning ("%s (%s, %d)", error->message, g_quark_to_string (error->domain), error->code);
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_key_file_unref (key_file);
|
|
Packit Service |
c6b9b0 |
g_free (group);
|
|
Packit Service |
c6b9b0 |
g_free (old_value);
|
|
Packit Service |
c6b9b0 |
g_free (path);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gboolean
|
|
Packit Service |
c6b9b0 |
goa_utils_parse_email_address (const gchar *email, gchar **out_username, gchar **out_domain)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *at;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (email == NULL || email[0] == '\0')
|
|
Packit Service |
c6b9b0 |
return FALSE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
at = strchr (email, '@');
|
|
Packit Service |
c6b9b0 |
if (at == NULL || at == email || *(at + 1) == '\0')
|
|
Packit Service |
c6b9b0 |
return FALSE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (out_username != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
*out_username = g_strdup (email);
|
|
Packit Service |
c6b9b0 |
(*out_username)[at - email] = '\0';
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (out_domain != NULL)
|
|
Packit Service |
c6b9b0 |
*out_domain = g_strdup (at + 1);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return TRUE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
void
|
|
Packit Service |
c6b9b0 |
goa_utils_set_error_soup (GError **err, SoupMessage *msg)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *error_msg = NULL;
|
|
Packit Service |
c6b9b0 |
gint error_code = GOA_ERROR_FAILED; /* TODO: more specific */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
switch (msg->status_code)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
case SOUP_STATUS_CANT_RESOLVE:
|
|
Packit Service |
c6b9b0 |
error_msg = g_strdup (_("Cannot resolve hostname"));
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
case SOUP_STATUS_CANT_RESOLVE_PROXY:
|
|
Packit Service |
c6b9b0 |
error_msg = g_strdup (_("Cannot resolve proxy hostname"));
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
case SOUP_STATUS_INTERNAL_SERVER_ERROR:
|
|
Packit Service |
c6b9b0 |
case SOUP_STATUS_NOT_FOUND:
|
|
Packit Service |
c6b9b0 |
error_msg = g_strdup (_("Cannot find WebDAV endpoint"));
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
case SOUP_STATUS_UNAUTHORIZED:
|
|
Packit Service |
c6b9b0 |
error_msg = g_strdup (_("Authentication failed"));
|
|
Packit Service |
c6b9b0 |
error_code = GOA_ERROR_NOT_AUTHORIZED;
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
default:
|
|
Packit Service |
c6b9b0 |
error_msg = g_strdup_printf (_("Code: %u — Unexpected response from server"), msg->status_code);
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_set_error_literal (err, GOA_ERROR, error_code, error_msg);
|
|
Packit Service |
c6b9b0 |
g_free (error_msg);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
void
|
|
Packit Service |
c6b9b0 |
goa_utils_set_error_ssl (GError **err, GTlsCertificateFlags flags)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
const gchar *error_msg;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
switch (flags)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
case G_TLS_CERTIFICATE_UNKNOWN_CA:
|
|
Packit Service |
c6b9b0 |
error_msg = _("The signing certificate authority is not known.");
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
case G_TLS_CERTIFICATE_BAD_IDENTITY:
|
|
Packit Service |
c6b9b0 |
error_msg = _("The certificate does not match the expected identity of the site that it was "
|
|
Packit Service |
c6b9b0 |
"retrieved from.");
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
case G_TLS_CERTIFICATE_NOT_ACTIVATED:
|
|
Packit Service |
c6b9b0 |
error_msg = _("The certificate’s activation time is still in the future.");
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
case G_TLS_CERTIFICATE_EXPIRED:
|
|
Packit Service |
c6b9b0 |
error_msg = _("The certificate has expired.");
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
case G_TLS_CERTIFICATE_REVOKED:
|
|
Packit Service |
c6b9b0 |
error_msg = _("The certificate has been revoked.");
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
case G_TLS_CERTIFICATE_INSECURE:
|
|
Packit Service |
c6b9b0 |
error_msg = _("The certificate’s algorithm is considered insecure.");
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
case G_TLS_CERTIFICATE_GENERIC_ERROR:
|
|
Packit Service |
c6b9b0 |
case G_TLS_CERTIFICATE_VALIDATE_ALL:
|
|
Packit Service |
c6b9b0 |
default:
|
|
Packit Service |
c6b9b0 |
error_msg = _("Invalid certificate.");
|
|
Packit Service |
c6b9b0 |
break;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_set_error_literal (err, GOA_ERROR, GOA_ERROR_SSL, error_msg);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gboolean
|
|
Packit Service |
c6b9b0 |
goa_utils_get_credentials (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GoaObject *object,
|
|
Packit Service |
c6b9b0 |
const gchar *id,
|
|
Packit Service |
c6b9b0 |
gchar **out_username,
|
|
Packit Service |
c6b9b0 |
gchar **out_password,
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GVariant *credentials = NULL;
|
|
Packit Service |
c6b9b0 |
GoaAccount *account = NULL;
|
|
Packit Service |
c6b9b0 |
gboolean ret = FALSE;
|
|
Packit Service |
c6b9b0 |
gchar *username = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *password = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
credentials = goa_utils_lookup_credentials_sync (provider,
|
|
Packit Service |
c6b9b0 |
object,
|
|
Packit Service |
c6b9b0 |
cancellable,
|
|
Packit Service |
c6b9b0 |
error);
|
|
Packit Service |
c6b9b0 |
if (credentials == NULL)
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
account = goa_object_get_account (object);
|
|
Packit Service |
c6b9b0 |
username = goa_account_dup_identity (account);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!g_variant_lookup (credentials, id, "s", &password))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_set_error (error, GOA_ERROR, GOA_ERROR_FAILED, /* TODO: more specific */
|
|
Packit Service |
c6b9b0 |
_("Did not find %s with identity “%s” in credentials"),
|
|
Packit Service |
c6b9b0 |
id, username);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (out_username)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
*out_username = username;
|
|
Packit Service |
c6b9b0 |
username = NULL;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (out_password)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
*out_password = password;
|
|
Packit Service |
c6b9b0 |
password = NULL;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
ret = TRUE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_clear_object (&account);
|
|
Packit Service |
c6b9b0 |
g_clear_pointer (&credentials, (GDestroyNotify) g_variant_unref);
|
|
Packit Service |
c6b9b0 |
g_free (username);
|
|
Packit Service |
c6b9b0 |
g_free (password);
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|