|
Packit Service |
c6b9b0 |
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
Packit Service |
c6b9b0 |
/*
|
|
Packit Service |
c6b9b0 |
* Copyright © 2011 – 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 |
|
|
Packit Service |
c6b9b0 |
#include "goaimapauthlogin.h"
|
|
Packit Service |
c6b9b0 |
#include "goamailclient.h"
|
|
Packit Service |
c6b9b0 |
#include "goaimapsmtpprovider.h"
|
|
Packit Service |
c6b9b0 |
#include "goaprovider.h"
|
|
Packit Service |
c6b9b0 |
#include "goasmtpauth.h"
|
|
Packit Service |
c6b9b0 |
#include "goautils.h"
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
struct _GoaImapSmtpProvider
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaProvider parent_instance;
|
|
Packit Service |
c6b9b0 |
};
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
G_DEFINE_TYPE_WITH_CODE (GoaImapSmtpProvider, goa_imap_smtp_provider, GOA_TYPE_PROVIDER,
|
|
Packit Service |
c6b9b0 |
goa_provider_ensure_extension_points_registered ();
|
|
Packit Service |
c6b9b0 |
g_io_extension_point_implement (GOA_PROVIDER_EXTENSION_POINT_NAME,
|
|
Packit Service |
c6b9b0 |
g_define_type_id,
|
|
Packit Service |
c6b9b0 |
GOA_IMAP_SMTP_NAME,
|
|
Packit Service |
c6b9b0 |
0));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static const gchar *
|
|
Packit Service |
c6b9b0 |
get_provider_type (GoaProvider *provider)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return GOA_IMAP_SMTP_NAME;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gchar *
|
|
Packit Service |
c6b9b0 |
get_provider_name (GoaProvider *provider, GoaObject *object)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return g_strdup (_("IMAP and SMTP"));
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GoaProviderGroup
|
|
Packit Service |
c6b9b0 |
get_provider_group (GoaProvider *provider)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return GOA_PROVIDER_GROUP_MAIL;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GoaProviderFeatures
|
|
Packit Service |
c6b9b0 |
get_provider_features (GoaProvider *_provider)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return GOA_PROVIDER_FEATURE_MAIL;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GIcon *
|
|
Packit Service |
c6b9b0 |
get_provider_icon (GoaProvider *provider, GoaObject *object)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return g_themed_icon_new_with_default_fallbacks ("mail-unread-symbolic");
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gboolean on_handle_get_password (GoaPasswordBased *interface,
|
|
Packit Service |
c6b9b0 |
GDBusMethodInvocation *invocation,
|
|
Packit Service |
c6b9b0 |
const gchar *id,
|
|
Packit Service |
c6b9b0 |
gpointer user_data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gboolean
|
|
Packit Service |
c6b9b0 |
build_object (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GoaObjectSkeleton *object,
|
|
Packit Service |
c6b9b0 |
GKeyFile *key_file,
|
|
Packit Service |
c6b9b0 |
const gchar *group,
|
|
Packit Service |
c6b9b0 |
GDBusConnection *connection,
|
|
Packit Service |
c6b9b0 |
gboolean just_added,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaAccount *account = NULL;
|
|
Packit Service |
c6b9b0 |
GoaMail *mail = NULL;
|
|
Packit Service |
c6b9b0 |
GoaPasswordBased *password_based = NULL;
|
|
Packit Service |
c6b9b0 |
gboolean enabled;
|
|
Packit Service |
c6b9b0 |
gboolean imap_accept_ssl_errors;
|
|
Packit Service |
c6b9b0 |
gboolean imap_use_ssl;
|
|
Packit Service |
c6b9b0 |
gboolean imap_use_tls;
|
|
Packit Service |
c6b9b0 |
gboolean ret = FALSE;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_accept_ssl_errors;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_auth_login = FALSE;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_auth_plain = FALSE;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_use_auth;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_use_ssl;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_use_tls;
|
|
Packit Service |
c6b9b0 |
gchar *email_address = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *imap_host = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *imap_username = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *name = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *smtp_host = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *smtp_username = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* Chain up */
|
|
Packit Service |
c6b9b0 |
if (!GOA_PROVIDER_CLASS (goa_imap_smtp_provider_parent_class)->build_object (provider,
|
|
Packit Service |
c6b9b0 |
object,
|
|
Packit Service |
c6b9b0 |
key_file,
|
|
Packit Service |
c6b9b0 |
group,
|
|
Packit Service |
c6b9b0 |
connection,
|
|
Packit Service |
c6b9b0 |
just_added,
|
|
Packit Service |
c6b9b0 |
error))
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
password_based = goa_object_get_password_based (GOA_OBJECT (object));
|
|
Packit Service |
c6b9b0 |
if (password_based == NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
password_based = goa_password_based_skeleton_new ();
|
|
Packit Service |
c6b9b0 |
/* Ensure D-Bus method invocations run in their own thread */
|
|
Packit Service |
c6b9b0 |
g_dbus_interface_skeleton_set_flags (G_DBUS_INTERFACE_SKELETON (password_based),
|
|
Packit Service |
c6b9b0 |
G_DBUS_INTERFACE_SKELETON_FLAGS_HANDLE_METHOD_INVOCATIONS_IN_THREAD);
|
|
Packit Service |
c6b9b0 |
goa_object_skeleton_set_password_based (object, password_based);
|
|
Packit Service |
c6b9b0 |
g_signal_connect (password_based,
|
|
Packit Service |
c6b9b0 |
"handle-get-password",
|
|
Packit Service |
c6b9b0 |
G_CALLBACK (on_handle_get_password),
|
|
Packit Service |
c6b9b0 |
NULL);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
account = goa_object_get_account (GOA_OBJECT (object));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* Email */
|
|
Packit Service |
c6b9b0 |
mail = goa_object_get_mail (GOA_OBJECT (object));
|
|
Packit Service |
c6b9b0 |
enabled = g_key_file_get_boolean (key_file, group, "Enabled", NULL);
|
|
Packit Service |
c6b9b0 |
if (enabled)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (mail == NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
email_address = g_key_file_get_string (key_file, group, "EmailAddress", NULL);
|
|
Packit Service |
c6b9b0 |
name = g_key_file_get_string (key_file, group, "Name", NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_host = g_key_file_get_string (key_file, group, "ImapHost", NULL);
|
|
Packit Service |
c6b9b0 |
imap_username = g_key_file_get_string (key_file, group, "ImapUserName", NULL);
|
|
Packit Service |
c6b9b0 |
if (imap_username == NULL)
|
|
Packit Service |
c6b9b0 |
imap_username = g_strdup (g_get_user_name ());
|
|
Packit Service |
c6b9b0 |
imap_use_ssl = g_key_file_get_boolean (key_file, group, "ImapUseSsl", NULL);
|
|
Packit Service |
c6b9b0 |
imap_use_tls = g_key_file_get_boolean (key_file, group, "ImapUseTls", NULL);
|
|
Packit Service |
c6b9b0 |
imap_accept_ssl_errors = g_key_file_get_boolean (key_file, group, "ImapAcceptSslErrors", NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_host = g_key_file_get_string (key_file, group, "SmtpHost", NULL);
|
|
Packit Service |
c6b9b0 |
smtp_use_auth = g_key_file_get_boolean (key_file, group, "SmtpUseAuth", NULL);
|
|
Packit Service |
c6b9b0 |
if (smtp_use_auth)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
smtp_username = g_key_file_get_string (key_file, group, "SmtpUserName", NULL);
|
|
Packit Service |
c6b9b0 |
if (smtp_username == NULL)
|
|
Packit Service |
c6b9b0 |
smtp_username = g_strdup (g_get_user_name ());
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_auth_login = g_key_file_get_boolean (key_file, group, "SmtpAuthLogin", NULL);
|
|
Packit Service |
c6b9b0 |
smtp_auth_plain = g_key_file_get_boolean (key_file, group, "SmtpAuthPlain", NULL);
|
|
Packit Service |
c6b9b0 |
/* For backwards compatibility: if authentication is
|
|
Packit Service |
c6b9b0 |
* used, assume PLAIN as the SASL scheme if nothing is
|
|
Packit Service |
c6b9b0 |
* specified.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
if (!smtp_auth_login && !smtp_auth_plain)
|
|
Packit Service |
c6b9b0 |
smtp_auth_plain = TRUE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
smtp_use_ssl = g_key_file_get_boolean (key_file, group, "SmtpUseSsl", NULL);
|
|
Packit Service |
c6b9b0 |
smtp_use_tls = g_key_file_get_boolean (key_file, group, "SmtpUseTls", NULL);
|
|
Packit Service |
c6b9b0 |
smtp_accept_ssl_errors = g_key_file_get_boolean (key_file, group, "SmtpAcceptSslErrors", NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
mail = goa_mail_skeleton_new ();
|
|
Packit Service |
c6b9b0 |
g_object_set (G_OBJECT (mail),
|
|
Packit Service |
c6b9b0 |
"email-address", email_address,
|
|
Packit Service |
c6b9b0 |
"name", name,
|
|
Packit Service |
c6b9b0 |
"imap-supported", TRUE,
|
|
Packit Service |
c6b9b0 |
"imap-host", imap_host,
|
|
Packit Service |
c6b9b0 |
"imap-user-name", imap_username,
|
|
Packit Service |
c6b9b0 |
"imap-use-ssl", imap_use_ssl,
|
|
Packit Service |
c6b9b0 |
"imap-use-tls", imap_use_tls,
|
|
Packit Service |
c6b9b0 |
"imap-accept-ssl-errors", imap_accept_ssl_errors,
|
|
Packit Service |
c6b9b0 |
"smtp-supported", TRUE,
|
|
Packit Service |
c6b9b0 |
"smtp-host", smtp_host,
|
|
Packit Service |
c6b9b0 |
"smtp-user-name", smtp_username,
|
|
Packit Service |
c6b9b0 |
"smtp-use-auth", smtp_use_auth,
|
|
Packit Service |
c6b9b0 |
"smtp-auth-login", smtp_auth_login,
|
|
Packit Service |
c6b9b0 |
"smtp-auth-plain", smtp_auth_plain,
|
|
Packit Service |
c6b9b0 |
"smtp-use-ssl", smtp_use_ssl,
|
|
Packit Service |
c6b9b0 |
"smtp-use-tls", smtp_use_tls,
|
|
Packit Service |
c6b9b0 |
"smtp-accept-ssl-errors", smtp_accept_ssl_errors,
|
|
Packit Service |
c6b9b0 |
NULL);
|
|
Packit Service |
c6b9b0 |
goa_object_skeleton_set_mail (object, mail);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (mail != NULL)
|
|
Packit Service |
c6b9b0 |
goa_object_skeleton_set_mail (object, NULL);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (just_added)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
goa_account_set_mail_disabled (account, !enabled);
|
|
Packit Service |
c6b9b0 |
g_signal_connect (account,
|
|
Packit Service |
c6b9b0 |
"notify::mail-disabled",
|
|
Packit Service |
c6b9b0 |
G_CALLBACK (goa_util_account_notify_property_cb),
|
|
Packit Service |
c6b9b0 |
(gpointer) "Enabled");
|
|
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_object (&mail);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&password_based);
|
|
Packit Service |
c6b9b0 |
g_free (email_address);
|
|
Packit Service |
c6b9b0 |
g_free (imap_host);
|
|
Packit Service |
c6b9b0 |
g_free (imap_username);
|
|
Packit Service |
c6b9b0 |
g_free (name);
|
|
Packit Service |
c6b9b0 |
g_free (smtp_host);
|
|
Packit Service |
c6b9b0 |
g_free (smtp_username);
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GoaTlsType
|
|
Packit Service |
c6b9b0 |
get_tls_type_from_object (GoaObject *object, const gchar *ssl_key, const gchar *starttls_key)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaTlsType tls_type;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (goa_util_lookup_keyfile_boolean (object, ssl_key))
|
|
Packit Service |
c6b9b0 |
tls_type = GOA_TLS_TYPE_SSL;
|
|
Packit Service |
c6b9b0 |
else if (goa_util_lookup_keyfile_boolean (object, starttls_key))
|
|
Packit Service |
c6b9b0 |
tls_type = GOA_TLS_TYPE_STARTTLS;
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
tls_type = GOA_TLS_TYPE_NONE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return tls_type;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GoaTlsType
|
|
Packit Service |
c6b9b0 |
get_tls_type_from_string_id (const gchar *str)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaTlsType tls_type;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (g_strcmp0 (str, "none") == 0)
|
|
Packit Service |
c6b9b0 |
tls_type = GOA_TLS_TYPE_NONE;
|
|
Packit Service |
c6b9b0 |
else if (g_strcmp0 (str, "starttls") == 0)
|
|
Packit Service |
c6b9b0 |
tls_type = GOA_TLS_TYPE_STARTTLS;
|
|
Packit Service |
c6b9b0 |
else if (g_strcmp0 (str, "ssl") == 0)
|
|
Packit Service |
c6b9b0 |
tls_type = GOA_TLS_TYPE_SSL;
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
g_assert_not_reached ();
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return tls_type;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gboolean
|
|
Packit Service |
c6b9b0 |
ensure_credentials_sync (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GoaObject *object,
|
|
Packit Service |
c6b9b0 |
gint *out_expires_in,
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GVariant *credentials = NULL;
|
|
Packit Service |
c6b9b0 |
GoaMailAuth *imap_auth = NULL;
|
|
Packit Service |
c6b9b0 |
GoaMailAuth *smtp_auth = NULL;
|
|
Packit Service |
c6b9b0 |
GoaMailClient *mail_client = NULL;
|
|
Packit Service |
c6b9b0 |
GoaTlsType imap_tls_type;
|
|
Packit Service |
c6b9b0 |
GoaTlsType smtp_tls_type;
|
|
Packit Service |
c6b9b0 |
gboolean imap_accept_ssl_errors;
|
|
Packit Service |
c6b9b0 |
gboolean ret = FALSE;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_accept_ssl_errors;
|
|
Packit Service |
c6b9b0 |
gchar *domain = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *email_address = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *imap_password = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *imap_server = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *imap_username = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *smtp_password = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *smtp_server = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *smtp_username = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!goa_utils_get_credentials (provider, object, "imap-password", NULL, &imap_password, cancellable, error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
(*error)->domain = GOA_ERROR;
|
|
Packit Service |
c6b9b0 |
(*error)->code = GOA_ERROR_NOT_AUTHORIZED;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
mail_client = goa_mail_client_new ();
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* IMAP */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_accept_ssl_errors = goa_util_lookup_keyfile_boolean (object, "ImapAcceptSslErrors");
|
|
Packit Service |
c6b9b0 |
imap_server = goa_util_lookup_keyfile_string (object, "ImapHost");
|
|
Packit Service |
c6b9b0 |
imap_username = goa_util_lookup_keyfile_string (object, "ImapUserName");
|
|
Packit Service |
c6b9b0 |
imap_tls_type = get_tls_type_from_object (object, "ImapUseSsl", "ImapUseTls");
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_auth = goa_imap_auth_login_new (imap_username, imap_password);
|
|
Packit Service |
c6b9b0 |
if (!goa_mail_client_check_sync (mail_client,
|
|
Packit Service |
c6b9b0 |
imap_server,
|
|
Packit Service |
c6b9b0 |
imap_tls_type,
|
|
Packit Service |
c6b9b0 |
imap_accept_ssl_errors,
|
|
Packit Service |
c6b9b0 |
(imap_tls_type == GOA_TLS_TYPE_SSL) ? 993 : 143,
|
|
Packit Service |
c6b9b0 |
imap_auth,
|
|
Packit Service |
c6b9b0 |
cancellable,
|
|
Packit Service |
c6b9b0 |
error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (error,
|
|
Packit Service |
c6b9b0 |
/* Translators: the first %s is a field name. The
|
|
Packit Service |
c6b9b0 |
* second %s is the IMAP
|
|
Packit Service |
c6b9b0 |
* username (eg., rishi), and the (%s, %d)
|
|
Packit Service |
c6b9b0 |
* is the error domain and code.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
_("Invalid %s with username “%s” (%s, %d): "),
|
|
Packit Service |
c6b9b0 |
"imap-password",
|
|
Packit Service |
c6b9b0 |
imap_username,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string ((*error)->domain),
|
|
Packit Service |
c6b9b0 |
(*error)->code);
|
|
Packit Service |
c6b9b0 |
(*error)->domain = GOA_ERROR;
|
|
Packit Service |
c6b9b0 |
(*error)->code = GOA_ERROR_NOT_AUTHORIZED;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* SMTP */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!goa_util_lookup_keyfile_boolean (object, "SmtpUseAuth"))
|
|
Packit Service |
c6b9b0 |
goto smtp_done;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!goa_utils_get_credentials (provider, object, "smtp-password", NULL, &smtp_password, cancellable, error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
(*error)->domain = GOA_ERROR;
|
|
Packit Service |
c6b9b0 |
(*error)->code = GOA_ERROR_NOT_AUTHORIZED;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_accept_ssl_errors = goa_util_lookup_keyfile_boolean (object, "SmtpAcceptSslErrors");
|
|
Packit Service |
c6b9b0 |
smtp_server = goa_util_lookup_keyfile_string (object, "SmtpHost");
|
|
Packit Service |
c6b9b0 |
smtp_username = goa_util_lookup_keyfile_string (object, "SmtpUserName");
|
|
Packit Service |
c6b9b0 |
smtp_tls_type = get_tls_type_from_object (object, "SmtpUseSsl", "SmtpUseTls");
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
email_address = goa_util_lookup_keyfile_string (object, "EmailAddress");
|
|
Packit Service |
c6b9b0 |
goa_utils_parse_email_address (email_address, NULL, &domain);
|
|
Packit Service |
c6b9b0 |
smtp_auth = goa_smtp_auth_new (domain, smtp_username, smtp_password);
|
|
Packit Service |
c6b9b0 |
if (!goa_mail_client_check_sync (mail_client,
|
|
Packit Service |
c6b9b0 |
smtp_server,
|
|
Packit Service |
c6b9b0 |
smtp_tls_type,
|
|
Packit Service |
c6b9b0 |
smtp_accept_ssl_errors,
|
|
Packit Service |
c6b9b0 |
(smtp_tls_type == GOA_TLS_TYPE_SSL) ? 465 : 587,
|
|
Packit Service |
c6b9b0 |
smtp_auth,
|
|
Packit Service |
c6b9b0 |
cancellable,
|
|
Packit Service |
c6b9b0 |
error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (error,
|
|
Packit Service |
c6b9b0 |
/* Translators: the first %s is a field name. The
|
|
Packit Service |
c6b9b0 |
* second %s is the SMTP
|
|
Packit Service |
c6b9b0 |
* username (eg., rishi), and the (%s, %d)
|
|
Packit Service |
c6b9b0 |
* is the error domain and code.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
_("Invalid %s with username “%s” (%s, %d): "),
|
|
Packit Service |
c6b9b0 |
"smtp-password",
|
|
Packit Service |
c6b9b0 |
smtp_username,
|
|
Packit Service |
c6b9b0 |
g_quark_to_string ((*error)->domain),
|
|
Packit Service |
c6b9b0 |
(*error)->code);
|
|
Packit Service |
c6b9b0 |
(*error)->domain = GOA_ERROR;
|
|
Packit Service |
c6b9b0 |
(*error)->code = GOA_ERROR_NOT_AUTHORIZED;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_done:
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (out_expires_in != NULL)
|
|
Packit Service |
c6b9b0 |
*out_expires_in = 0;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
ret = TRUE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_clear_object (&imap_auth);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&smtp_auth);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&mail_client);
|
|
Packit Service |
c6b9b0 |
g_free (domain);
|
|
Packit Service |
c6b9b0 |
g_free (email_address);
|
|
Packit Service |
c6b9b0 |
g_free (imap_password);
|
|
Packit Service |
c6b9b0 |
g_free (imap_server);
|
|
Packit Service |
c6b9b0 |
g_free (imap_username);
|
|
Packit Service |
c6b9b0 |
g_free (smtp_password);
|
|
Packit Service |
c6b9b0 |
g_free (smtp_server);
|
|
Packit Service |
c6b9b0 |
g_free (smtp_username);
|
|
Packit Service |
c6b9b0 |
g_clear_pointer (&credentials, (GDestroyNotify) g_variant_unref);
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
add_combo_box (GtkWidget *grid,
|
|
Packit Service |
c6b9b0 |
gint row,
|
|
Packit Service |
c6b9b0 |
const gchar *text,
|
|
Packit Service |
c6b9b0 |
GtkWidget **out_combo_box)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GtkStyleContext *context;
|
|
Packit Service |
c6b9b0 |
GtkWidget *label;
|
|
Packit Service |
c6b9b0 |
GtkWidget *combo_box;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
label = gtk_label_new_with_mnemonic (text);
|
|
Packit Service |
c6b9b0 |
context = gtk_widget_get_style_context (label);
|
|
Packit Service |
c6b9b0 |
gtk_style_context_add_class (context, GTK_STYLE_CLASS_DIM_LABEL);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_halign (label, GTK_ALIGN_END);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_hexpand (label, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_grid_attach (GTK_GRID (grid), label, 0, row, 1, 1);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
combo_box = gtk_combo_box_text_new ();
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_hexpand (combo_box, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_grid_attach (GTK_GRID (grid), combo_box, 1, row, 3, 1);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo_box);
|
|
Packit Service |
c6b9b0 |
if (out_combo_box != NULL)
|
|
Packit Service |
c6b9b0 |
*out_combo_box = combo_box;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
add_entry (GtkWidget *grid,
|
|
Packit Service |
c6b9b0 |
gint row,
|
|
Packit Service |
c6b9b0 |
const gchar *text,
|
|
Packit Service |
c6b9b0 |
GtkWidget **out_entry)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GtkStyleContext *context;
|
|
Packit Service |
c6b9b0 |
GtkWidget *label;
|
|
Packit Service |
c6b9b0 |
GtkWidget *entry;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
label = gtk_label_new_with_mnemonic (text);
|
|
Packit Service |
c6b9b0 |
context = gtk_widget_get_style_context (label);
|
|
Packit Service |
c6b9b0 |
gtk_style_context_add_class (context, GTK_STYLE_CLASS_DIM_LABEL);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_halign (label, GTK_ALIGN_END);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_hexpand (label, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_grid_attach (GTK_GRID (grid), label, 0, row, 1, 1);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
entry = gtk_entry_new ();
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_hexpand (entry, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_grid_attach (GTK_GRID (grid), entry, 1, row, 3, 1);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
|
|
Packit Service |
c6b9b0 |
if (out_entry != NULL)
|
|
Packit Service |
c6b9b0 |
*out_entry = entry;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
typedef struct
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
GtkDialog *dialog;
|
|
Packit Service |
c6b9b0 |
GMainLoop *loop;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
GtkWidget *cluebar;
|
|
Packit Service |
c6b9b0 |
GtkWidget *cluebar_label;
|
|
Packit Service |
c6b9b0 |
GtkWidget *notebook;
|
|
Packit Service |
c6b9b0 |
GtkWidget *forward_button;
|
|
Packit Service |
c6b9b0 |
GtkWidget *progress_grid;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
GtkWidget *email_address;
|
|
Packit Service |
c6b9b0 |
GtkWidget *name;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
GtkWidget *imap_server;
|
|
Packit Service |
c6b9b0 |
GtkWidget *imap_username;
|
|
Packit Service |
c6b9b0 |
GtkWidget *imap_password;
|
|
Packit Service |
c6b9b0 |
GtkWidget *imap_encryption;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
GtkWidget *smtp_server;
|
|
Packit Service |
c6b9b0 |
GtkWidget *smtp_username;
|
|
Packit Service |
c6b9b0 |
GtkWidget *smtp_password;
|
|
Packit Service |
c6b9b0 |
GtkWidget *smtp_encryption;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gchar *account_object_path;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
GError *error;
|
|
Packit Service |
c6b9b0 |
} AddAccountData;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
on_email_address_changed (GtkEditable *editable, gpointer user_data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AddAccountData *data = user_data;
|
|
Packit Service |
c6b9b0 |
gboolean can_add;
|
|
Packit Service |
c6b9b0 |
const gchar *email;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
email = gtk_entry_get_text (GTK_ENTRY (data->email_address));
|
|
Packit Service |
c6b9b0 |
can_add = goa_utils_parse_email_address (email, NULL, NULL);
|
|
Packit Service |
c6b9b0 |
gtk_dialog_set_response_sensitive (data->dialog, GTK_RESPONSE_OK, can_add);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
on_imap_changed (GtkEditable *editable, gpointer user_data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AddAccountData *data = user_data;
|
|
Packit Service |
c6b9b0 |
gboolean can_add;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
can_add = gtk_entry_get_text_length (GTK_ENTRY (data->imap_password)) != 0
|
|
Packit Service |
c6b9b0 |
&& gtk_entry_get_text_length (GTK_ENTRY (data->imap_server)) != 0
|
|
Packit Service |
c6b9b0 |
&& gtk_entry_get_text_length (GTK_ENTRY (data->imap_username)) != 0;
|
|
Packit Service |
c6b9b0 |
gtk_dialog_set_response_sensitive (data->dialog, GTK_RESPONSE_OK, can_add);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
on_smtp_changed (GtkEditable *editable, gpointer user_data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AddAccountData *data = user_data;
|
|
Packit Service |
c6b9b0 |
gboolean can_add = FALSE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (gtk_entry_get_text_length (GTK_ENTRY (data->smtp_server)) == 0)
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* If you provide a password then you must provide a username, and
|
|
Packit Service |
c6b9b0 |
* vice versa. If the server does not require authentication then
|
|
Packit Service |
c6b9b0 |
* both should be left empty.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
if (gtk_entry_get_text_length (GTK_ENTRY (data->smtp_password)) != 0
|
|
Packit Service |
c6b9b0 |
&& gtk_entry_get_text_length (GTK_ENTRY (data->smtp_username)) == 0)
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (gtk_entry_get_text_length (GTK_ENTRY (data->smtp_password)) == 0
|
|
Packit Service |
c6b9b0 |
&& gtk_entry_get_text_length (GTK_ENTRY (data->smtp_username)) != 0)
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
can_add = TRUE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
gtk_dialog_set_response_sensitive (data->dialog, GTK_RESPONSE_OK, can_add);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
create_encryption_ui (GtkWidget *grid,
|
|
Packit Service |
c6b9b0 |
gint row,
|
|
Packit Service |
c6b9b0 |
GtkWidget **out_combo_box)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
/* Translators: the following four strings are used to show a
|
|
Packit Service |
c6b9b0 |
* combo box similar to the one in the evolution module.
|
|
Packit Service |
c6b9b0 |
* Encryption: None
|
|
Packit Service |
c6b9b0 |
* STARTTLS after connecting
|
|
Packit Service |
c6b9b0 |
* SSL on a dedicated port
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
add_combo_box (grid, row, _("_Encryption"), out_combo_box);
|
|
Packit Service |
c6b9b0 |
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (*out_combo_box),
|
|
Packit Service |
c6b9b0 |
"none",
|
|
Packit Service |
c6b9b0 |
_("None"));
|
|
Packit Service |
c6b9b0 |
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (*out_combo_box),
|
|
Packit Service |
c6b9b0 |
"starttls",
|
|
Packit Service |
c6b9b0 |
_("STARTTLS after connecting"));
|
|
Packit Service |
c6b9b0 |
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (*out_combo_box),
|
|
Packit Service |
c6b9b0 |
"ssl",
|
|
Packit Service |
c6b9b0 |
_("SSL on a dedicated port"));
|
|
Packit Service |
c6b9b0 |
gtk_combo_box_set_active_id (GTK_COMBO_BOX (*out_combo_box), "starttls");
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
show_progress_ui (GtkContainer *container, gboolean progress)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GList *children;
|
|
Packit Service |
c6b9b0 |
GList *l;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
children = gtk_container_get_children (container);
|
|
Packit Service |
c6b9b0 |
for (l = children; l != NULL; l = l->next)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GtkWidget *widget = GTK_WIDGET (l->data);
|
|
Packit Service |
c6b9b0 |
gdouble opacity;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
opacity = progress ? 1.0 : 0.0;
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_opacity (widget, opacity);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_list_free (children);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
create_account_details_ui (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GtkDialog *dialog,
|
|
Packit Service |
c6b9b0 |
GtkBox *vbox,
|
|
Packit Service |
c6b9b0 |
gboolean new_account,
|
|
Packit Service |
c6b9b0 |
AddAccountData *data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GtkWidget *grid0;
|
|
Packit Service |
c6b9b0 |
GtkWidget *grid1;
|
|
Packit Service |
c6b9b0 |
GtkWidget *label;
|
|
Packit Service |
c6b9b0 |
GtkWidget *spinner;
|
|
Packit Service |
c6b9b0 |
gint row;
|
|
Packit Service |
c6b9b0 |
gint width;
|
|
Packit Service |
c6b9b0 |
const gchar *real_name;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
goa_utils_set_dialog_title (provider, dialog, new_account);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
grid0 = gtk_grid_new ();
|
|
Packit Service |
c6b9b0 |
gtk_container_set_border_width (GTK_CONTAINER (grid0), 5);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_margin_bottom (grid0, 6);
|
|
Packit Service |
c6b9b0 |
gtk_orientable_set_orientation (GTK_ORIENTABLE (grid0), GTK_ORIENTATION_VERTICAL);
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_row_spacing (GTK_GRID (grid0), 12);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (vbox), grid0);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
data->cluebar = gtk_info_bar_new ();
|
|
Packit Service |
c6b9b0 |
gtk_info_bar_set_message_type (GTK_INFO_BAR (data->cluebar), GTK_MESSAGE_ERROR);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_hexpand (data->cluebar, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data->cluebar, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (grid0), data->cluebar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
data->cluebar_label = gtk_label_new ("");
|
|
Packit Service |
c6b9b0 |
gtk_label_set_line_wrap (GTK_LABEL (data->cluebar_label), TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_label_set_max_width_chars (GTK_LABEL (data->cluebar_label), 36);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (gtk_info_bar_get_content_area (GTK_INFO_BAR (data->cluebar))),
|
|
Packit Service |
c6b9b0 |
data->cluebar_label);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
data->notebook = gtk_notebook_new ();
|
|
Packit Service |
c6b9b0 |
gtk_notebook_set_show_border (GTK_NOTEBOOK (data->notebook), FALSE);
|
|
Packit Service |
c6b9b0 |
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (data->notebook), FALSE);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (grid0), data->notebook);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* Introduction*/
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (new_account)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
grid1 = gtk_grid_new ();
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_column_spacing (GTK_GRID (grid1), 12);
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_row_spacing (GTK_GRID (grid1), 12);
|
|
Packit Service |
c6b9b0 |
gtk_notebook_append_page (GTK_NOTEBOOK (data->notebook), grid1, NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
row = 0;
|
|
Packit Service |
c6b9b0 |
add_entry (grid1, row++, _("_E-mail"), &data->email_address);
|
|
Packit Service |
c6b9b0 |
add_entry (grid1, row++, _("_Name"), &data->name);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
real_name = g_get_real_name ();
|
|
Packit Service |
c6b9b0 |
if (g_strcmp0 (real_name, "Unknown") != 0)
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data->name), real_name);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_signal_connect (data->email_address, "changed", G_CALLBACK (on_email_address_changed), data);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* IMAP */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
grid1 = gtk_grid_new ();
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_column_spacing (GTK_GRID (grid1), 12);
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_row_spacing (GTK_GRID (grid1), 12);
|
|
Packit Service |
c6b9b0 |
gtk_notebook_append_page (GTK_NOTEBOOK (data->notebook), grid1, NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
row = 0;
|
|
Packit Service |
c6b9b0 |
add_entry (grid1, row++, _("IMAP _Server"), &data->imap_server);
|
|
Packit Service |
c6b9b0 |
add_entry (grid1, row++, _("User_name"), &data->imap_username);
|
|
Packit Service |
c6b9b0 |
add_entry (grid1, row++, _("_Password"), &data->imap_password);
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_visibility (GTK_ENTRY (data->imap_password), FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (new_account)
|
|
Packit Service |
c6b9b0 |
create_encryption_ui (grid1, row++, &data->imap_encryption);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_signal_connect (data->imap_server, "changed", G_CALLBACK (on_imap_changed), data);
|
|
Packit Service |
c6b9b0 |
g_signal_connect (data->imap_username, "changed", G_CALLBACK (on_imap_changed), data);
|
|
Packit Service |
c6b9b0 |
g_signal_connect (data->imap_password, "changed", G_CALLBACK (on_imap_changed), data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* SMTP */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
grid1 = gtk_grid_new ();
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_column_spacing (GTK_GRID (grid1), 12);
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_row_spacing (GTK_GRID (grid1), 12);
|
|
Packit Service |
c6b9b0 |
gtk_notebook_append_page (GTK_NOTEBOOK (data->notebook), grid1, NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
row = 0;
|
|
Packit Service |
c6b9b0 |
add_entry (grid1, row++, _("SMTP _Server"), &data->smtp_server);
|
|
Packit Service |
c6b9b0 |
add_entry (grid1, row++, _("User_name"), &data->smtp_username);
|
|
Packit Service |
c6b9b0 |
add_entry (grid1, row++, _("_Password"), &data->smtp_password);
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_visibility (GTK_ENTRY (data->smtp_password), FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (new_account)
|
|
Packit Service |
c6b9b0 |
create_encryption_ui (grid1, row++, &data->smtp_encryption);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_signal_connect (data->smtp_server, "changed", G_CALLBACK (on_smtp_changed), data);
|
|
Packit Service |
c6b9b0 |
g_signal_connect (data->smtp_username, "changed", G_CALLBACK (on_smtp_changed), data);
|
|
Packit Service |
c6b9b0 |
g_signal_connect (data->smtp_password, "changed", G_CALLBACK (on_smtp_changed), data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* -- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_dialog_add_button (data->dialog, _("_Cancel"), GTK_RESPONSE_CANCEL);
|
|
Packit Service |
c6b9b0 |
data->forward_button = gtk_dialog_add_button (data->dialog, _("_Forward"), GTK_RESPONSE_OK);
|
|
Packit Service |
c6b9b0 |
gtk_dialog_set_default_response (data->dialog, GTK_RESPONSE_OK);
|
|
Packit Service |
c6b9b0 |
gtk_dialog_set_response_sensitive (data->dialog, GTK_RESPONSE_OK, FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
data->progress_grid = gtk_grid_new ();
|
|
Packit Service |
c6b9b0 |
gtk_orientable_set_orientation (GTK_ORIENTABLE (data->progress_grid), GTK_ORIENTATION_HORIZONTAL);
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_column_spacing (GTK_GRID (data->progress_grid), 3);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (grid0), data->progress_grid);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
spinner = gtk_spinner_new ();
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_opacity (spinner, 0.0);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_size_request (spinner, 20, 20);
|
|
Packit Service |
c6b9b0 |
gtk_spinner_start (GTK_SPINNER (spinner));
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (data->progress_grid), spinner);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
label = gtk_label_new (_("Connecting…"));
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_opacity (label, 0.0);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (data->progress_grid), label);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (new_account)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gtk_window_get_size (GTK_WINDOW (data->dialog), &width, NULL);
|
|
Packit Service |
c6b9b0 |
gtk_window_set_default_size (GTK_WINDOW (data->dialog), width, -1);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GtkWindow *parent;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* Keep in sync with GoaPanelAddAccountDialog in
|
|
Packit Service |
c6b9b0 |
* gnome-control-center.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
parent = gtk_window_get_transient_for (GTK_WINDOW (data->dialog));
|
|
Packit Service |
c6b9b0 |
if (parent != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gtk_window_get_size (parent, &width, NULL);
|
|
Packit Service |
c6b9b0 |
gtk_window_set_default_size (GTK_WINDOW (data->dialog), (gint) (0.5 * width), -1);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
guess_imap_smtp (AddAccountData *data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
const gchar *email_address;
|
|
Packit Service |
c6b9b0 |
gchar *imap_server = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *smtp_server = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *username = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *domain = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
email_address = gtk_entry_get_text (GTK_ENTRY (data->email_address));
|
|
Packit Service |
c6b9b0 |
if (!goa_utils_parse_email_address (email_address, &username, &domain))
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* TODO: Consult http://api.gnome.org/evolution/autoconfig/1.1/<domain> */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_server = g_strconcat ("imap.", domain, NULL);
|
|
Packit Service |
c6b9b0 |
smtp_server = g_strconcat ("smtp.", domain, NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data->imap_username), username);
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data->smtp_username), username);
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data->imap_server), imap_server);
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data->smtp_server), smtp_server);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_free (imap_server);
|
|
Packit Service |
c6b9b0 |
g_free (smtp_server);
|
|
Packit Service |
c6b9b0 |
g_free (username);
|
|
Packit Service |
c6b9b0 |
g_free (domain);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
add_account_cb (GoaManager *manager, GAsyncResult *res, gpointer user_data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AddAccountData *data = user_data;
|
|
Packit Service |
c6b9b0 |
goa_manager_call_add_account_finish (manager,
|
|
Packit Service |
c6b9b0 |
&data->account_object_path,
|
|
Packit Service |
c6b9b0 |
res,
|
|
Packit Service |
c6b9b0 |
&data->error);
|
|
Packit Service |
c6b9b0 |
g_main_loop_quit (data->loop);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer user_data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AddAccountData *data = user_data;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (response_id == GTK_RESPONSE_CANCEL || response_id == GTK_RESPONSE_DELETE_EVENT)
|
|
Packit Service |
c6b9b0 |
g_cancellable_cancel (data->cancellable);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
mail_check_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaMailClient *client = GOA_MAIL_CLIENT (source_object);
|
|
Packit Service |
c6b9b0 |
AddAccountData *data = user_data;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
goa_mail_client_check_finish (client, res, &data->error);
|
|
Packit Service |
c6b9b0 |
g_main_loop_quit (data->loop);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_sensitive (data->forward_button, TRUE);
|
|
Packit Service |
c6b9b0 |
show_progress_ui (GTK_CONTAINER (data->progress_grid), FALSE);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GoaObject *
|
|
Packit Service |
c6b9b0 |
add_account (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GoaClient *client,
|
|
Packit Service |
c6b9b0 |
GtkDialog *dialog,
|
|
Packit Service |
c6b9b0 |
GtkBox *vbox,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AddAccountData data;
|
|
Packit Service |
c6b9b0 |
GVariantBuilder credentials;
|
|
Packit Service |
c6b9b0 |
GVariantBuilder details;
|
|
Packit Service |
c6b9b0 |
GoaMailAuth *imap_auth = NULL;
|
|
Packit Service |
c6b9b0 |
GoaMailAuth *smtp_auth = NULL;
|
|
Packit Service |
c6b9b0 |
GoaMailClient *mail_client = NULL;
|
|
Packit Service |
c6b9b0 |
GoaObject *ret = NULL;
|
|
Packit Service |
c6b9b0 |
GoaTlsType imap_tls_type;
|
|
Packit Service |
c6b9b0 |
GoaTlsType smtp_tls_type;
|
|
Packit Service |
c6b9b0 |
gboolean imap_accept_ssl_errors;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_accept_ssl_errors;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_auth_login;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_auth_plain;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_use_auth;
|
|
Packit Service |
c6b9b0 |
const gchar *email_address;
|
|
Packit Service |
c6b9b0 |
const gchar *encryption;
|
|
Packit Service |
c6b9b0 |
const gchar *imap_password;
|
|
Packit Service |
c6b9b0 |
const gchar *imap_server;
|
|
Packit Service |
c6b9b0 |
const gchar *imap_username;
|
|
Packit Service |
c6b9b0 |
const gchar *name;
|
|
Packit Service |
c6b9b0 |
const gchar *provider_type;
|
|
Packit Service |
c6b9b0 |
const gchar *smtp_password;
|
|
Packit Service |
c6b9b0 |
const gchar *smtp_server;
|
|
Packit Service |
c6b9b0 |
const gchar *smtp_username;
|
|
Packit Service |
c6b9b0 |
gchar *domain = NULL;
|
|
Packit Service |
c6b9b0 |
gint response;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
memset (&data, 0, sizeof (AddAccountData));
|
|
Packit Service |
c6b9b0 |
data.cancellable = g_cancellable_new ();
|
|
Packit Service |
c6b9b0 |
data.loop = g_main_loop_new (NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
data.dialog = dialog;
|
|
Packit Service |
c6b9b0 |
data.error = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
create_account_details_ui (provider, dialog, vbox, TRUE, &data);
|
|
Packit Service |
c6b9b0 |
gtk_widget_show_all (GTK_WIDGET (vbox));
|
|
Packit Service |
c6b9b0 |
g_signal_connect (dialog, "response", G_CALLBACK (dialog_response_cb), &data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
mail_client = goa_mail_client_new ();
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* Introduction */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_notebook_set_current_page (GTK_NOTEBOOK (data.notebook), 0);
|
|
Packit Service |
c6b9b0 |
gtk_widget_grab_focus (data.email_address);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
|
Packit Service |
c6b9b0 |
if (response != GTK_RESPONSE_OK)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_set_error (&data.error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_DIALOG_DISMISSED,
|
|
Packit Service |
c6b9b0 |
_("Dialog was dismissed"));
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
email_address = gtk_entry_get_text (GTK_ENTRY (data.email_address));
|
|
Packit Service |
c6b9b0 |
name = gtk_entry_get_text (GTK_ENTRY (data.name));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* See if there's already an account of this type with the
|
|
Packit Service |
c6b9b0 |
* given identity
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
provider_type = goa_provider_get_provider_type (provider);
|
|
Packit Service |
c6b9b0 |
if (!goa_utils_check_duplicate (client,
|
|
Packit Service |
c6b9b0 |
email_address,
|
|
Packit Service |
c6b9b0 |
email_address,
|
|
Packit Service |
c6b9b0 |
provider_type,
|
|
Packit Service |
c6b9b0 |
(GoaPeekInterfaceFunc) goa_object_peek_password_based,
|
|
Packit Service |
c6b9b0 |
&data.error))
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
guess_imap_smtp (&data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* IMAP */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_notebook_next_page (GTK_NOTEBOOK (data.notebook));
|
|
Packit Service |
c6b9b0 |
gtk_widget_grab_focus (data.imap_password);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_accept_ssl_errors = FALSE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_again:
|
|
Packit Service |
c6b9b0 |
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
|
Packit Service |
c6b9b0 |
if (response != GTK_RESPONSE_OK)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_set_error (&data.error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_DIALOG_DISMISSED,
|
|
Packit Service |
c6b9b0 |
_("Dialog was dismissed"));
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_hide (data.cluebar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
encryption = gtk_combo_box_get_active_id (GTK_COMBO_BOX (data.imap_encryption));
|
|
Packit Service |
c6b9b0 |
imap_tls_type = get_tls_type_from_string_id (encryption);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_password = gtk_entry_get_text (GTK_ENTRY (data.imap_password));
|
|
Packit Service |
c6b9b0 |
imap_server = gtk_entry_get_text (GTK_ENTRY (data.imap_server));
|
|
Packit Service |
c6b9b0 |
imap_username = gtk_entry_get_text (GTK_ENTRY (data.imap_username));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_cancellable_reset (data.cancellable);
|
|
Packit Service |
c6b9b0 |
imap_auth = goa_imap_auth_login_new (imap_username, imap_password);
|
|
Packit Service |
c6b9b0 |
goa_mail_client_check (mail_client,
|
|
Packit Service |
c6b9b0 |
imap_server,
|
|
Packit Service |
c6b9b0 |
imap_tls_type,
|
|
Packit Service |
c6b9b0 |
imap_accept_ssl_errors,
|
|
Packit Service |
c6b9b0 |
(imap_tls_type == GOA_TLS_TYPE_SSL) ? 993 : 143,
|
|
Packit Service |
c6b9b0 |
imap_auth,
|
|
Packit Service |
c6b9b0 |
data.cancellable,
|
|
Packit Service |
c6b9b0 |
mail_check_cb,
|
|
Packit Service |
c6b9b0 |
&data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_sensitive (data.forward_button, FALSE);
|
|
Packit Service |
c6b9b0 |
show_progress_ui (GTK_CONTAINER (data.progress_grid), TRUE);
|
|
Packit Service |
c6b9b0 |
g_main_loop_run (data.loop);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (g_cancellable_is_cancelled (data.cancellable))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (&data.error,
|
|
Packit Service |
c6b9b0 |
_("Dialog was dismissed (%s, %d): "),
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (data.error->domain),
|
|
Packit Service |
c6b9b0 |
data.error->code);
|
|
Packit Service |
c6b9b0 |
data.error->domain = GOA_ERROR;
|
|
Packit Service |
c6b9b0 |
data.error->code = GOA_ERROR_DIALOG_DISMISSED;
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else if (data.error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *markup;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (data.error->code == GOA_ERROR_SSL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gtk_button_set_label (GTK_BUTTON (data.forward_button), _("_Ignore"));
|
|
Packit Service |
c6b9b0 |
imap_accept_ssl_errors = TRUE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gtk_button_set_label (GTK_BUTTON (data.forward_button), _("_Try Again"));
|
|
Packit Service |
c6b9b0 |
imap_accept_ssl_errors = FALSE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
markup = g_strdup_printf ("%s\n%s",
|
|
Packit Service |
c6b9b0 |
_("Error connecting to IMAP server"),
|
|
Packit Service |
c6b9b0 |
data.error->message);
|
|
Packit Service |
c6b9b0 |
g_clear_error (&data.error);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_label_set_markup (GTK_LABEL (data.cluebar_label), markup);
|
|
Packit Service |
c6b9b0 |
g_free (markup);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, FALSE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_show_all (data.cluebar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_clear_object (&imap_auth);
|
|
Packit Service |
c6b9b0 |
goto imap_again;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_hide (data.cluebar);
|
|
Packit Service |
c6b9b0 |
gtk_button_set_label (GTK_BUTTON (data.forward_button), _("_Forward"));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* SMTP */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* Re-use the username and password from the IMAP page */
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data.smtp_username), imap_username);
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data.smtp_password), imap_password);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_notebook_next_page (GTK_NOTEBOOK (data.notebook));
|
|
Packit Service |
c6b9b0 |
gtk_widget_grab_focus (data.smtp_password);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_accept_ssl_errors = FALSE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_again:
|
|
Packit Service |
c6b9b0 |
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
|
Packit Service |
c6b9b0 |
if (response != GTK_RESPONSE_OK)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_set_error (&data.error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_DIALOG_DISMISSED,
|
|
Packit Service |
c6b9b0 |
_("Dialog was dismissed"));
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_hide (data.cluebar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
encryption = gtk_combo_box_get_active_id (GTK_COMBO_BOX (data.smtp_encryption));
|
|
Packit Service |
c6b9b0 |
smtp_tls_type = get_tls_type_from_string_id (encryption);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_password = gtk_entry_get_text (GTK_ENTRY (data.smtp_password));
|
|
Packit Service |
c6b9b0 |
smtp_server = gtk_entry_get_text (GTK_ENTRY (data.smtp_server));
|
|
Packit Service |
c6b9b0 |
smtp_username = gtk_entry_get_text (GTK_ENTRY (data.smtp_username));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_cancellable_reset (data.cancellable);
|
|
Packit Service |
c6b9b0 |
goa_utils_parse_email_address (email_address, NULL, &domain);
|
|
Packit Service |
c6b9b0 |
smtp_auth = goa_smtp_auth_new (domain, smtp_username, smtp_password);
|
|
Packit Service |
c6b9b0 |
goa_mail_client_check (mail_client,
|
|
Packit Service |
c6b9b0 |
smtp_server,
|
|
Packit Service |
c6b9b0 |
smtp_tls_type,
|
|
Packit Service |
c6b9b0 |
smtp_accept_ssl_errors,
|
|
Packit Service |
c6b9b0 |
(smtp_tls_type == GOA_TLS_TYPE_SSL) ? 465 : 587,
|
|
Packit Service |
c6b9b0 |
smtp_auth,
|
|
Packit Service |
c6b9b0 |
data.cancellable,
|
|
Packit Service |
c6b9b0 |
mail_check_cb,
|
|
Packit Service |
c6b9b0 |
&data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_sensitive (data.forward_button, FALSE);
|
|
Packit Service |
c6b9b0 |
show_progress_ui (GTK_CONTAINER (data.progress_grid), TRUE);
|
|
Packit Service |
c6b9b0 |
g_main_loop_run (data.loop);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_use_auth = goa_mail_auth_is_needed (smtp_auth);
|
|
Packit Service |
c6b9b0 |
smtp_auth_login = goa_smtp_auth_is_login (GOA_SMTP_AUTH (smtp_auth));
|
|
Packit Service |
c6b9b0 |
smtp_auth_plain = goa_smtp_auth_is_plain (GOA_SMTP_AUTH (smtp_auth));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (g_cancellable_is_cancelled (data.cancellable))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (&data.error,
|
|
Packit Service |
c6b9b0 |
_("Dialog was dismissed (%s, %d): "),
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (data.error->domain),
|
|
Packit Service |
c6b9b0 |
data.error->code);
|
|
Packit Service |
c6b9b0 |
data.error->domain = GOA_ERROR;
|
|
Packit Service |
c6b9b0 |
data.error->code = GOA_ERROR_DIALOG_DISMISSED;
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else if (data.error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *markup;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (data.error->code == GOA_ERROR_SSL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gtk_button_set_label (GTK_BUTTON (data.forward_button), _("_Ignore"));
|
|
Packit Service |
c6b9b0 |
smtp_accept_ssl_errors = TRUE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gtk_button_set_label (GTK_BUTTON (data.forward_button), _("_Try Again"));
|
|
Packit Service |
c6b9b0 |
smtp_accept_ssl_errors = FALSE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
markup = g_strdup_printf ("%s\n%s",
|
|
Packit Service |
c6b9b0 |
_("Error connecting to SMTP server"),
|
|
Packit Service |
c6b9b0 |
data.error->message);
|
|
Packit Service |
c6b9b0 |
g_clear_error (&data.error);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_label_set_markup (GTK_LABEL (data.cluebar_label), markup);
|
|
Packit Service |
c6b9b0 |
g_free (markup);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, FALSE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_show_all (data.cluebar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_clear_object (&smtp_auth);
|
|
Packit Service |
c6b9b0 |
g_clear_pointer (&domain, g_free);
|
|
Packit Service |
c6b9b0 |
goto smtp_again;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_hide (GTK_WIDGET (dialog));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_variant_builder_init (&credentials, G_VARIANT_TYPE_VARDICT);
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&credentials, "{sv}", "imap-password", g_variant_new_string (imap_password));
|
|
Packit Service |
c6b9b0 |
if (smtp_use_auth)
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&credentials, "{sv}", "smtp-password", g_variant_new_string (smtp_password));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_variant_builder_init (&details, G_VARIANT_TYPE ("a{ss}"));
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "Enabled", "true");
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "EmailAddress", email_address);
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "Name", name);
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "ImapHost", imap_server);
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "ImapUserName", imap_username);
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}",
|
|
Packit Service |
c6b9b0 |
"ImapUseSsl", (imap_tls_type == GOA_TLS_TYPE_SSL) ? "true" : "false");
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}",
|
|
Packit Service |
c6b9b0 |
"ImapUseTls", (imap_tls_type == GOA_TLS_TYPE_STARTTLS) ? "true" : "false");
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}",
|
|
Packit Service |
c6b9b0 |
"ImapAcceptSslErrors", (imap_accept_ssl_errors) ? "true" : "false");
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "SmtpHost", smtp_server);
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "SmtpUseAuth", (smtp_use_auth) ? "true" : "false");
|
|
Packit Service |
c6b9b0 |
if (smtp_use_auth)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "SmtpUserName", smtp_username);
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "SmtpAuthLogin", (smtp_auth_login) ? "true" : "false");
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}", "SmtpAuthPlain", (smtp_auth_plain) ? "true" : "false");
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}",
|
|
Packit Service |
c6b9b0 |
"SmtpUseSsl", (smtp_tls_type == GOA_TLS_TYPE_SSL) ? "true" : "false");
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}",
|
|
Packit Service |
c6b9b0 |
"SmtpUseTls", (smtp_tls_type == GOA_TLS_TYPE_STARTTLS) ? "true" : "false");
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&details, "{ss}",
|
|
Packit Service |
c6b9b0 |
"SmtpAcceptSslErrors", (smtp_accept_ssl_errors) ? "true" : "false");
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* OK, everything is dandy, add the account */
|
|
Packit Service |
c6b9b0 |
/* we want the GoaClient to update before this method returns (so it
|
|
Packit Service |
c6b9b0 |
* can create a proxy for the new object) so run the mainloop while
|
|
Packit Service |
c6b9b0 |
* waiting for this to complete
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
goa_manager_call_add_account (goa_client_get_manager (client),
|
|
Packit Service |
c6b9b0 |
goa_provider_get_provider_type (provider),
|
|
Packit Service |
c6b9b0 |
email_address,
|
|
Packit Service |
c6b9b0 |
email_address,
|
|
Packit Service |
c6b9b0 |
g_variant_builder_end (&credentials),
|
|
Packit Service |
c6b9b0 |
g_variant_builder_end (&details),
|
|
Packit Service |
c6b9b0 |
NULL, /* GCancellable* */
|
|
Packit Service |
c6b9b0 |
(GAsyncReadyCallback) add_account_cb,
|
|
Packit Service |
c6b9b0 |
&data);
|
|
Packit Service |
c6b9b0 |
g_main_loop_run (data.loop);
|
|
Packit Service |
c6b9b0 |
if (data.error != NULL)
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
ret = GOA_OBJECT (g_dbus_object_manager_get_object (goa_client_get_object_manager (client),
|
|
Packit Service |
c6b9b0 |
data.account_object_path));
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
/* We might have an object even when data.error is set.
|
|
Packit Service |
c6b9b0 |
* eg., if we failed to store the credentials in the keyring.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
if (data.error != NULL)
|
|
Packit Service |
c6b9b0 |
g_propagate_error (error, data.error);
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
g_assert (ret != NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_signal_handlers_disconnect_by_func (dialog, dialog_response_cb, &data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_free (domain);
|
|
Packit Service |
c6b9b0 |
g_free (data.account_object_path);
|
|
Packit Service |
c6b9b0 |
g_clear_pointer (&data.loop, (GDestroyNotify) g_main_loop_unref);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&data.cancellable);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&imap_auth);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&smtp_auth);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&mail_client);
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gboolean
|
|
Packit Service |
c6b9b0 |
refresh_account (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GoaClient *client,
|
|
Packit Service |
c6b9b0 |
GoaObject *object,
|
|
Packit Service |
c6b9b0 |
GtkWindow *parent,
|
|
Packit Service |
c6b9b0 |
GError **error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
AddAccountData data;
|
|
Packit Service |
c6b9b0 |
GVariantBuilder builder;
|
|
Packit Service |
c6b9b0 |
GoaAccount *account;
|
|
Packit Service |
c6b9b0 |
GoaMailAuth *imap_auth = NULL;
|
|
Packit Service |
c6b9b0 |
GoaMailAuth *smtp_auth = NULL;
|
|
Packit Service |
c6b9b0 |
GoaMailClient *mail_client = NULL;
|
|
Packit Service |
c6b9b0 |
GoaTlsType imap_tls_type;
|
|
Packit Service |
c6b9b0 |
GoaTlsType smtp_tls_type;
|
|
Packit Service |
c6b9b0 |
GtkWidget *dialog;
|
|
Packit Service |
c6b9b0 |
GtkWidget *vbox;
|
|
Packit Service |
c6b9b0 |
gboolean imap_accept_ssl_errors;
|
|
Packit Service |
c6b9b0 |
gboolean ret = FALSE;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_accept_ssl_errors;
|
|
Packit Service |
c6b9b0 |
gboolean smtp_use_auth;
|
|
Packit Service |
c6b9b0 |
const gchar *imap_password;
|
|
Packit Service |
c6b9b0 |
const gchar *smtp_password;
|
|
Packit Service |
c6b9b0 |
gchar *domain = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *email_address = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *imap_server = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *imap_username = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *smtp_server = NULL;
|
|
Packit Service |
c6b9b0 |
gchar *smtp_username = NULL;
|
|
Packit Service |
c6b9b0 |
gint response;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_IMAP_SMTP_PROVIDER (provider), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_CLIENT (client), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_OBJECT (object), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (parent == NULL || GTK_IS_WINDOW (parent), FALSE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
dialog = gtk_dialog_new_with_buttons (NULL,
|
|
Packit Service |
c6b9b0 |
parent,
|
|
Packit Service |
c6b9b0 |
GTK_DIALOG_MODAL
|
|
Packit Service |
c6b9b0 |
| GTK_DIALOG_DESTROY_WITH_PARENT
|
|
Packit Service |
c6b9b0 |
| GTK_DIALOG_USE_HEADER_BAR,
|
|
Packit Service |
c6b9b0 |
NULL,
|
|
Packit Service |
c6b9b0 |
NULL);
|
|
Packit Service |
c6b9b0 |
gtk_container_set_border_width (GTK_CONTAINER (dialog), 12);
|
|
Packit Service |
c6b9b0 |
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
|
|
Packit Service |
c6b9b0 |
gtk_box_set_spacing (GTK_BOX (vbox), 12);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
memset (&data, 0, sizeof (AddAccountData));
|
|
Packit Service |
c6b9b0 |
data.cancellable = g_cancellable_new ();
|
|
Packit Service |
c6b9b0 |
data.loop = g_main_loop_new (NULL, FALSE);
|
|
Packit Service |
c6b9b0 |
data.dialog = GTK_DIALOG (dialog);
|
|
Packit Service |
c6b9b0 |
data.error = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
create_account_details_ui (provider, GTK_DIALOG (dialog), GTK_BOX (vbox), FALSE, &data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
email_address = goa_util_lookup_keyfile_string (object, "EmailAddress");
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_accept_ssl_errors = goa_util_lookup_keyfile_boolean (object, "ImapAcceptSslErrors");
|
|
Packit Service |
c6b9b0 |
smtp_accept_ssl_errors = goa_util_lookup_keyfile_boolean (object, "SmtpAcceptSslErrors");
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_tls_type = get_tls_type_from_object (object, "ImapUseSsl", "ImapUseTls");
|
|
Packit Service |
c6b9b0 |
smtp_tls_type = get_tls_type_from_object (object, "SmtpUseSsl", "SmtpUseTls");
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_server = goa_util_lookup_keyfile_string (object, "ImapHost");
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data.imap_server), imap_server);
|
|
Packit Service |
c6b9b0 |
gtk_editable_set_editable (GTK_EDITABLE (data.imap_server), FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_username = goa_util_lookup_keyfile_string (object, "ImapUserName");
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data.imap_username), imap_username);
|
|
Packit Service |
c6b9b0 |
gtk_editable_set_editable (GTK_EDITABLE (data.imap_username), FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_use_auth = goa_util_lookup_keyfile_boolean (object, "SmtpUseAuth");
|
|
Packit Service |
c6b9b0 |
if (smtp_use_auth)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
smtp_server = goa_util_lookup_keyfile_string (object, "SmtpHost");
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data.smtp_server), smtp_server);
|
|
Packit Service |
c6b9b0 |
gtk_editable_set_editable (GTK_EDITABLE (data.smtp_server), FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_username = goa_util_lookup_keyfile_string (object, "SmtpUserName");
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data.smtp_username), smtp_username);
|
|
Packit Service |
c6b9b0 |
gtk_editable_set_editable (GTK_EDITABLE (data.smtp_username), FALSE);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_show_all (dialog);
|
|
Packit Service |
c6b9b0 |
g_signal_connect (dialog, "response", G_CALLBACK (dialog_response_cb), &data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
mail_client = goa_mail_client_new ();
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* IMAP */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_notebook_set_current_page (GTK_NOTEBOOK (data.notebook), 0);
|
|
Packit Service |
c6b9b0 |
gtk_widget_grab_focus (data.imap_password);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_again:
|
|
Packit Service |
c6b9b0 |
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
|
Packit Service |
c6b9b0 |
if (response != GTK_RESPONSE_OK)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_set_error (&data.error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_DIALOG_DISMISSED,
|
|
Packit Service |
c6b9b0 |
_("Dialog was dismissed"));
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_hide (data.cluebar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
imap_password = gtk_entry_get_text (GTK_ENTRY (data.imap_password));
|
|
Packit Service |
c6b9b0 |
g_cancellable_reset (data.cancellable);
|
|
Packit Service |
c6b9b0 |
imap_auth = goa_imap_auth_login_new (imap_username, imap_password);
|
|
Packit Service |
c6b9b0 |
goa_mail_client_check (mail_client,
|
|
Packit Service |
c6b9b0 |
imap_server,
|
|
Packit Service |
c6b9b0 |
imap_tls_type,
|
|
Packit Service |
c6b9b0 |
imap_accept_ssl_errors,
|
|
Packit Service |
c6b9b0 |
(imap_tls_type == GOA_TLS_TYPE_SSL) ? 993 : 143,
|
|
Packit Service |
c6b9b0 |
imap_auth,
|
|
Packit Service |
c6b9b0 |
data.cancellable,
|
|
Packit Service |
c6b9b0 |
mail_check_cb,
|
|
Packit Service |
c6b9b0 |
&data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_sensitive (data.forward_button, FALSE);
|
|
Packit Service |
c6b9b0 |
show_progress_ui (GTK_CONTAINER (data.progress_grid), TRUE);
|
|
Packit Service |
c6b9b0 |
g_main_loop_run (data.loop);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (g_cancellable_is_cancelled (data.cancellable))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (&data.error,
|
|
Packit Service |
c6b9b0 |
_("Dialog was dismissed (%s, %d): "),
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (data.error->domain),
|
|
Packit Service |
c6b9b0 |
data.error->code);
|
|
Packit Service |
c6b9b0 |
data.error->domain = GOA_ERROR;
|
|
Packit Service |
c6b9b0 |
data.error->code = GOA_ERROR_DIALOG_DISMISSED;
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else if (data.error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *markup;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
markup = g_strdup_printf ("%s\n%s",
|
|
Packit Service |
c6b9b0 |
_("Error connecting to IMAP server"),
|
|
Packit Service |
c6b9b0 |
data.error->message);
|
|
Packit Service |
c6b9b0 |
g_clear_error (&data.error);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_label_set_markup (GTK_LABEL (data.cluebar_label), markup);
|
|
Packit Service |
c6b9b0 |
g_free (markup);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_button_set_label (GTK_BUTTON (data.forward_button), _("_Try Again"));
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, FALSE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_show_all (data.cluebar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_clear_object (&imap_auth);
|
|
Packit Service |
c6b9b0 |
goto imap_again;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_hide (data.cluebar);
|
|
Packit Service |
c6b9b0 |
gtk_button_set_label (GTK_BUTTON (data.forward_button), _("_Forward"));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* SMTP */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!smtp_use_auth)
|
|
Packit Service |
c6b9b0 |
goto smtp_done;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* Re-use the password from the IMAP page */
|
|
Packit Service |
c6b9b0 |
gtk_entry_set_text (GTK_ENTRY (data.smtp_password), imap_password);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_notebook_next_page (GTK_NOTEBOOK (data.notebook));
|
|
Packit Service |
c6b9b0 |
gtk_widget_grab_focus (data.smtp_password);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_again:
|
|
Packit Service |
c6b9b0 |
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
|
Packit Service |
c6b9b0 |
if (response != GTK_RESPONSE_OK)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_set_error (&data.error,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR,
|
|
Packit Service |
c6b9b0 |
GOA_ERROR_DIALOG_DISMISSED,
|
|
Packit Service |
c6b9b0 |
_("Dialog was dismissed"));
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_hide (data.cluebar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_password = gtk_entry_get_text (GTK_ENTRY (data.smtp_password));
|
|
Packit Service |
c6b9b0 |
g_cancellable_reset (data.cancellable);
|
|
Packit Service |
c6b9b0 |
goa_utils_parse_email_address (email_address, NULL, &domain);
|
|
Packit Service |
c6b9b0 |
smtp_auth = goa_smtp_auth_new (domain, smtp_username, smtp_password);
|
|
Packit Service |
c6b9b0 |
goa_mail_client_check (mail_client,
|
|
Packit Service |
c6b9b0 |
smtp_server,
|
|
Packit Service |
c6b9b0 |
smtp_tls_type,
|
|
Packit Service |
c6b9b0 |
smtp_accept_ssl_errors,
|
|
Packit Service |
c6b9b0 |
(smtp_tls_type == GOA_TLS_TYPE_SSL) ? 465 : 587,
|
|
Packit Service |
c6b9b0 |
smtp_auth,
|
|
Packit Service |
c6b9b0 |
data.cancellable,
|
|
Packit Service |
c6b9b0 |
mail_check_cb,
|
|
Packit Service |
c6b9b0 |
&data);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_sensitive (data.forward_button, FALSE);
|
|
Packit Service |
c6b9b0 |
show_progress_ui (GTK_CONTAINER (data.progress_grid), TRUE);
|
|
Packit Service |
c6b9b0 |
g_main_loop_run (data.loop);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (g_cancellable_is_cancelled (data.cancellable))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_prefix_error (&data.error,
|
|
Packit Service |
c6b9b0 |
_("Dialog was dismissed (%s, %d): "),
|
|
Packit Service |
c6b9b0 |
g_quark_to_string (data.error->domain),
|
|
Packit Service |
c6b9b0 |
data.error->code);
|
|
Packit Service |
c6b9b0 |
data.error->domain = GOA_ERROR;
|
|
Packit Service |
c6b9b0 |
data.error->code = GOA_ERROR_DIALOG_DISMISSED;
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else if (data.error != NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *markup;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
markup = g_strdup_printf ("%s\n%s",
|
|
Packit Service |
c6b9b0 |
_("Error connecting to SMTP server"),
|
|
Packit Service |
c6b9b0 |
data.error->message);
|
|
Packit Service |
c6b9b0 |
g_clear_error (&data.error);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_label_set_markup (GTK_LABEL (data.cluebar_label), markup);
|
|
Packit Service |
c6b9b0 |
g_free (markup);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_button_set_label (GTK_BUTTON (data.forward_button), _("_Try Again"));
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_no_show_all (data.cluebar, FALSE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_show_all (data.cluebar);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_clear_object (&smtp_auth);
|
|
Packit Service |
c6b9b0 |
g_clear_pointer (&domain, g_free);
|
|
Packit Service |
c6b9b0 |
goto smtp_again;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
smtp_done:
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* TODO: run in worker thread */
|
|
Packit Service |
c6b9b0 |
g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&builder, "{sv}", "imap-password", g_variant_new_string (imap_password));
|
|
Packit Service |
c6b9b0 |
if (smtp_use_auth)
|
|
Packit Service |
c6b9b0 |
g_variant_builder_add (&builder, "{sv}", "smtp-password", g_variant_new_string (smtp_password));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (!goa_utils_store_credentials_for_object_sync (provider,
|
|
Packit Service |
c6b9b0 |
object,
|
|
Packit Service |
c6b9b0 |
g_variant_builder_end (&builder),
|
|
Packit Service |
c6b9b0 |
NULL, /* GCancellable */
|
|
Packit Service |
c6b9b0 |
&data.error))
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
account = goa_object_peek_account (object);
|
|
Packit Service |
c6b9b0 |
goa_account_call_ensure_credentials (account,
|
|
Packit Service |
c6b9b0 |
NULL, /* GCancellable */
|
|
Packit Service |
c6b9b0 |
NULL, NULL); /* callback, user_data */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
ret = TRUE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
if (data.error != NULL)
|
|
Packit Service |
c6b9b0 |
g_propagate_error (error, data.error);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
gtk_widget_destroy (dialog);
|
|
Packit Service |
c6b9b0 |
g_free (domain);
|
|
Packit Service |
c6b9b0 |
g_free (email_address);
|
|
Packit Service |
c6b9b0 |
g_free (imap_server);
|
|
Packit Service |
c6b9b0 |
g_free (imap_username);
|
|
Packit Service |
c6b9b0 |
g_free (smtp_server);
|
|
Packit Service |
c6b9b0 |
g_free (smtp_username);
|
|
Packit Service |
c6b9b0 |
g_clear_pointer (&data.loop, (GDestroyNotify) g_main_loop_unref);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&data.cancellable);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&imap_auth);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&smtp_auth);
|
|
Packit Service |
c6b9b0 |
g_clear_object (&mail_client);
|
|
Packit Service |
c6b9b0 |
return ret;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
show_label (GtkWidget *grid, gint row, const gchar *left, const gchar *right)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GtkStyleContext *context;
|
|
Packit Service |
c6b9b0 |
GtkWidget *label;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
label = gtk_label_new (left);
|
|
Packit Service |
c6b9b0 |
context = gtk_widget_get_style_context (label);
|
|
Packit Service |
c6b9b0 |
gtk_style_context_add_class (context, GTK_STYLE_CLASS_DIM_LABEL);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_halign (label, GTK_ALIGN_END);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_hexpand (label, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_grid_attach (GTK_GRID (grid), label, 0, row, 1, 1);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
label = gtk_label_new (right);
|
|
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_grid_attach (GTK_GRID (grid), label, 1, row, 3, 1);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
show_account (GoaProvider *provider,
|
|
Packit Service |
c6b9b0 |
GoaClient *client,
|
|
Packit Service |
c6b9b0 |
GoaObject *object,
|
|
Packit Service |
c6b9b0 |
GtkBox *vbox,
|
|
Packit Service |
c6b9b0 |
G_GNUC_UNUSED GtkGrid *dummy1,
|
|
Packit Service |
c6b9b0 |
G_GNUC_UNUSED GtkGrid *dummy2)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GtkWidget *grid;
|
|
Packit Service |
c6b9b0 |
const gchar *username;
|
|
Packit Service |
c6b9b0 |
gchar *value_str;
|
|
Packit Service |
c6b9b0 |
gchar *value_str_1;
|
|
Packit Service |
c6b9b0 |
gint row = 0;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
goa_utils_account_add_attention_needed (client, object, provider, vbox);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
grid = gtk_grid_new ();
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_halign (grid, GTK_ALIGN_CENTER);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_hexpand (grid, TRUE);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_margin_end (grid, 72);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_margin_start (grid, 72);
|
|
Packit Service |
c6b9b0 |
gtk_widget_set_margin_top (grid, 24);
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
|
|
Packit Service |
c6b9b0 |
gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
|
|
Packit Service |
c6b9b0 |
gtk_container_add (GTK_CONTAINER (vbox), grid);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
goa_utils_account_add_header (object, GTK_GRID (grid), row++);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
username = g_get_user_name ();
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
value_str = goa_util_lookup_keyfile_string (object, "EmailAddress");
|
|
Packit Service |
c6b9b0 |
show_label (GTK_WIDGET (grid), row++, _("E-mail"), value_str);
|
|
Packit Service |
c6b9b0 |
g_free (value_str);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
value_str = goa_util_lookup_keyfile_string (object, "Name");
|
|
Packit Service |
c6b9b0 |
show_label (GTK_WIDGET (grid), row++, _("Name"), value_str);
|
|
Packit Service |
c6b9b0 |
g_free (value_str);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
value_str = goa_util_lookup_keyfile_string (object, "ImapHost");
|
|
Packit Service |
c6b9b0 |
value_str_1 = goa_util_lookup_keyfile_string (object, "ImapUserName");
|
|
Packit Service |
c6b9b0 |
if (g_strcmp0 (username, value_str_1) != 0)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *tmp;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
tmp = g_strconcat (value_str_1, "@", value_str, NULL);
|
|
Packit Service |
c6b9b0 |
show_label (GTK_WIDGET (grid), row++, _("IMAP"), tmp);
|
|
Packit Service |
c6b9b0 |
g_free (tmp);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
show_label (GTK_WIDGET (grid), row++, _("IMAP"), value_str);
|
|
Packit Service |
c6b9b0 |
g_free (value_str_1);
|
|
Packit Service |
c6b9b0 |
g_free (value_str);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
value_str = goa_util_lookup_keyfile_string (object, "SmtpHost");
|
|
Packit Service |
c6b9b0 |
value_str_1 = goa_util_lookup_keyfile_string (object, "SmtpUserName");
|
|
Packit Service |
c6b9b0 |
if (value_str_1 != NULL && g_strcmp0 (username, value_str_1) != 0)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
gchar *tmp;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
tmp = g_strconcat (value_str_1, "@", value_str, NULL);
|
|
Packit Service |
c6b9b0 |
show_label (GTK_WIDGET (grid), row++, _("SMTP"), tmp);
|
|
Packit Service |
c6b9b0 |
g_free (tmp);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
show_label (GTK_WIDGET (grid), row++, _("SMTP"), value_str);
|
|
Packit Service |
c6b9b0 |
g_free (value_str_1);
|
|
Packit Service |
c6b9b0 |
g_free (value_str);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_imap_smtp_provider_init (GoaImapSmtpProvider *provider)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_imap_smtp_provider_class_init (GoaImapSmtpProviderClass *klass)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaProviderClass *provider_class;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
provider_class = GOA_PROVIDER_CLASS (klass);
|
|
Packit Service |
c6b9b0 |
provider_class->get_provider_type = get_provider_type;
|
|
Packit Service |
c6b9b0 |
provider_class->get_provider_name = get_provider_name;
|
|
Packit Service |
c6b9b0 |
provider_class->get_provider_group = get_provider_group;
|
|
Packit Service |
c6b9b0 |
provider_class->get_provider_features = get_provider_features;
|
|
Packit Service |
c6b9b0 |
provider_class->get_provider_icon = get_provider_icon;
|
|
Packit Service |
c6b9b0 |
provider_class->add_account = add_account;
|
|
Packit Service |
c6b9b0 |
provider_class->refresh_account = refresh_account;
|
|
Packit Service |
c6b9b0 |
provider_class->build_object = build_object;
|
|
Packit Service |
c6b9b0 |
provider_class->show_account = show_account;
|
|
Packit Service |
c6b9b0 |
provider_class->ensure_credentials_sync = ensure_credentials_sync;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* ---------------------------------------------------------------------------------------------------- */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gboolean
|
|
Packit Service |
c6b9b0 |
on_handle_get_password (GoaPasswordBased *interface,
|
|
Packit Service |
c6b9b0 |
GDBusMethodInvocation *invocation,
|
|
Packit Service |
c6b9b0 |
const gchar *id,
|
|
Packit Service |
c6b9b0 |
gpointer user_data)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaObject *object;
|
|
Packit Service |
c6b9b0 |
GoaAccount *account;
|
|
Packit Service |
c6b9b0 |
GoaProvider *provider;
|
|
Packit Service |
c6b9b0 |
GError *error;
|
|
Packit Service |
c6b9b0 |
const gchar *account_id;
|
|
Packit Service |
c6b9b0 |
const gchar *method_name;
|
|
Packit Service |
c6b9b0 |
const gchar *provider_type;
|
|
Packit Service |
c6b9b0 |
gchar *password = NULL;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* TODO: maybe log what app is requesting access */
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
object = GOA_OBJECT (g_dbus_interface_get_object (G_DBUS_INTERFACE (interface)));
|
|
Packit Service |
c6b9b0 |
account = goa_object_peek_account (object);
|
|
Packit Service |
c6b9b0 |
account_id = goa_account_get_id (account);
|
|
Packit Service |
c6b9b0 |
provider_type = goa_account_get_provider_type (account);
|
|
Packit Service |
c6b9b0 |
method_name = g_dbus_method_invocation_get_method_name (invocation);
|
|
Packit Service |
c6b9b0 |
g_debug ("Handling %s for account (%s, %s)", method_name, provider_type, account_id);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
provider = goa_provider_get_for_provider_type (provider_type);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
if (!goa_utils_get_credentials (provider, object, id, NULL, &password, NULL, &error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_dbus_method_invocation_take_error (invocation, error);
|
|
Packit Service |
c6b9b0 |
goto out;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
goa_password_based_complete_get_password (interface, invocation, password);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
out:
|
|
Packit Service |
c6b9b0 |
g_free (password);
|
|
Packit Service |
c6b9b0 |
g_object_unref (provider);
|
|
Packit Service |
c6b9b0 |
return TRUE; /* invocation was handled */
|
|
Packit Service |
c6b9b0 |
}
|