source-dialog: ask for user credentials
When the unlogged ping fails, ask for user and password.
This commit is contained in:
committed by
Erick Pérez Castellanos
parent
701d5a437c
commit
2b31fdc3f1
+108
-1
@@ -115,6 +115,10 @@ static void url_entry_text_changed (GObject *ob
|
||||
|
||||
static gboolean validate_url_cb (GcalSourceDialog *dialog);
|
||||
|
||||
static gint prompt_credentials (GcalSourceDialog *dialog,
|
||||
gchar **username,
|
||||
gchar **password);
|
||||
|
||||
static void discover_sources_cb (GObject *source,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data);
|
||||
@@ -577,7 +581,32 @@ validate_url_cb (GcalSourceDialog *dialog)
|
||||
*/
|
||||
if (priv->prompt_password)
|
||||
{
|
||||
// FIXME: finish this mess
|
||||
gint response;
|
||||
gchar *user, *password;
|
||||
|
||||
response = prompt_credentials (dialog, &user, &password);
|
||||
|
||||
/*
|
||||
* User entered username and password, let's try
|
||||
* with it.
|
||||
*/
|
||||
if (response == GTK_RESPONSE_OK)
|
||||
{
|
||||
ENamedParameters *credentials = e_named_parameters_new ();
|
||||
e_named_parameters_set (credentials, E_SOURCE_CREDENTIAL_USERNAME, user);
|
||||
e_named_parameters_set (credentials, E_SOURCE_CREDENTIAL_PASSWORD, password);
|
||||
|
||||
e_webdav_discover_sources (source, gtk_entry_get_text (GTK_ENTRY (priv->calendar_address_entry)),
|
||||
E_WEBDAV_DISCOVER_SUPPORTS_EVENTS, credentials, NULL, discover_sources_cb,
|
||||
dialog);
|
||||
|
||||
e_named_parameters_free (credentials);
|
||||
}
|
||||
|
||||
if (user)
|
||||
g_free (user);
|
||||
if (password)
|
||||
g_free (password);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -597,6 +626,78 @@ out:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gint
|
||||
prompt_credentials (GcalSourceDialog *dialog,
|
||||
gchar **username,
|
||||
gchar **password)
|
||||
{
|
||||
GtkWidget *password_entry;
|
||||
GtkWidget *prompt_dialog;
|
||||
GtkWidget *name_entry;
|
||||
GtkWidget *grid, *label;
|
||||
GtkWidget *button;
|
||||
gint response;
|
||||
|
||||
// Name entry
|
||||
name_entry = gtk_entry_new ();
|
||||
gtk_widget_set_hexpand (name_entry, TRUE);
|
||||
|
||||
// Password entry
|
||||
password_entry = g_object_new (GTK_TYPE_ENTRY,
|
||||
"visibility", FALSE,
|
||||
"hexpand", TRUE,
|
||||
NULL);
|
||||
|
||||
prompt_dialog = gtk_dialog_new_with_buttons (_("Enter your username and password"), GTK_WINDOW (dialog),
|
||||
GTK_DIALOG_MODAL | GTK_DIALOG_USE_HEADER_BAR,
|
||||
_("Cancel"), GTK_RESPONSE_CANCEL,
|
||||
_("Connect"), GTK_RESPONSE_OK, NULL);
|
||||
|
||||
// Set the "Connect" button style
|
||||
button = gtk_dialog_get_widget_for_response (GTK_DIALOG (prompt_dialog), GTK_RESPONSE_OK);
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (button), "suggested-action");
|
||||
|
||||
// Add some labels
|
||||
grid = gtk_grid_new ();
|
||||
g_object_set (grid,
|
||||
"border-width", 12,
|
||||
"column-spacing", 12,
|
||||
"row-spacing", 6,
|
||||
"expand", TRUE,
|
||||
NULL);
|
||||
|
||||
label = gtk_label_new (_("User"));
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (label), "dim-label");
|
||||
gtk_label_set_xalign (GTK_LABEL (label), 1.0);
|
||||
gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
|
||||
|
||||
label = gtk_label_new (_("Password"));
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (label), "dim-label");
|
||||
gtk_label_set_xalign (GTK_LABEL (label), 1.0);
|
||||
gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1);
|
||||
|
||||
// Add entries
|
||||
gtk_grid_attach (GTK_GRID (grid), name_entry, 1, 0, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (grid), password_entry, 1, 1, 1, 1);
|
||||
|
||||
// Insert into the dialog
|
||||
gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (prompt_dialog))), grid);
|
||||
gtk_widget_show_all (grid);
|
||||
|
||||
// Show the dialog, then destroy it
|
||||
response = gtk_dialog_run (GTK_DIALOG (prompt_dialog));
|
||||
|
||||
if (username)
|
||||
*username = g_strdup (gtk_entry_get_text (GTK_ENTRY (name_entry)));
|
||||
|
||||
if (password)
|
||||
*password = g_strdup (gtk_entry_get_text (GTK_ENTRY (password_entry)));
|
||||
|
||||
gtk_widget_destroy (prompt_dialog);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
static void
|
||||
discover_sources_cb (GObject *source,
|
||||
GAsyncResult *result,
|
||||
@@ -643,6 +744,12 @@ discover_sources_cb (GObject *source,
|
||||
if (n_sources > 1)
|
||||
{
|
||||
/* TODO: show a list of calendars */
|
||||
for (aux = discovered_sources; aux != NULL; aux = aux->next)
|
||||
{
|
||||
src = discovered_sources->data;
|
||||
|
||||
g_message ("Discovered source '%s' at '%s'", src->display_name, src->href);
|
||||
}
|
||||
}
|
||||
else if (n_sources == 1)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user