[evolution-rss] fix proxy authentication
- From: Lucian Langa <lucilanga src gnome org>
- To: svn-commits-list gnome org
- Subject: [evolution-rss] fix proxy authentication
- Date: Fri, 1 May 2009 16:11:12 -0400 (EDT)
commit 1cf7d7b6a00d093d34077cb423e7a4715877d5ff
Author: Lucian Langa <lucilanga gnome org>
Date: Thu Apr 30 22:15:53 2009 +0300
fix proxy authentication
---
ChangeLog | 6 +++
src/network-soup.c | 32 ++++++++------
src/rss.c | 113 ++++++++++++++++++++++++++++-----------------------
src/rss.h | 11 +++++-
4 files changed, 96 insertions(+), 66 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 618f405..c74c25c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-04-30 Lucian Langa <lucilanga gnome org>
+
+ * src/network-soup.c: let evolution manage proxy authentication
+ * src/rss.c (create_user_pass_dialog), (web_auth_dialog),
+ (proxy_auth_dialog): refactory user/pass dialog
+
2009-04-28 Lucian Langa <lucilanga gnome org>
* src/network-soup.c: let evolution manage proxy connections
diff --git a/src/network-soup.c b/src/network-soup.c
index 7fe8418..c8254cd 100644
--- a/src/network-soup.c
+++ b/src/network-soup.c
@@ -300,16 +300,23 @@ authenticate (SoupSession *session,
#endif
{
- g_print("proxy:\n");
- g_print("proxy:%d\n", soup_auth_is_for_proxy(auth));
- if (soup_auth_is_for_proxy(auth))
- return;
+ if (msg->status_code == SOUP_STATUS_PROXY_UNAUTHORIZED) {
+ g_print("proxy:%d\n", soup_auth_is_for_proxy(auth));
+ SoupURI *proxy_uri;
+ g_object_get (G_OBJECT(session),
+ "proxy-uri", &proxy_uri,
+ NULL);
+ g_print("user:%s\n", proxy_uri->user);
+ g_print("pass:%s\n", proxy_uri->password);
+ //proxy_auth_dialog("Proxy Authentication", proxy_uri->user, proxy_uri->password);
+ //g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
+ return;
+ }
gchar *user = g_hash_table_lookup(rf->hruser, data);
gchar *pass = g_hash_table_lookup(rf->hrpass, data);
- if (user && pass)
- {
+ if (user && pass) {
#if LIBSOUP_VERSION < 2003000
*username = g_strdup(user);
*password = g_strdup(pass);
@@ -317,17 +324,13 @@ authenticate (SoupSession *session,
if (!retrying)
soup_auth_authenticate (auth, user, pass);
#endif
- }
- else
- {
- if (rf->soup_auth_retry)
- {
+ } else {
+ if (rf->soup_auth_retry) {
//means we're already tested once and probably
//won't try again
rf->soup_auth_retry = FALSE;
- if (!read_up(data))
- {
- if (create_user_pass_dialog(data))
+ if (!read_up(data)) {
+ if (web_auth_dialog(data))
rf->soup_auth_retry = FALSE;
else
rf->soup_auth_retry = TRUE;
@@ -461,6 +464,7 @@ net_get_unblocking(const char *url,
{
SoupMessage *msg;
CallbackInfo *info = NULL;
+
SoupSession *soup_sess =
// soup_session_async_new_with_options(SOUP_SESSION_TIMEOUT, SS_TIMEOUT, NULL);
soup_session_async_new();
diff --git a/src/rss.c b/src/rss.c
index 70962f6..974395f 100644
--- a/src/rss.c
+++ b/src/rss.c
@@ -548,40 +548,22 @@ textcb(NetStatusType status, gpointer statusdata, gpointer data)
}
}
-gboolean
-create_user_pass_dialog(gchar *url)
-{
-GtkWidget *dialog1;
- GtkWidget *dialog_vbox1;
- GtkWidget *table1;
- GtkWidget *label1;
- GtkWidget *label2;
- GtkWidget *username;
- GtkWidget *password;
- GtkWidget *dialog_action_area1;
- GtkWidget *cancelbutton1;
- GtkWidget *okbutton1;
- GtkWidget *checkbutton1;
- GtkWidget *vbox1;
- GtkWidget *container;
- GtkWidget *container2;
- guint resp;
-
- GtkWidget *widget;
- GtkWidget *action_area;
- GtkWidget *content_area;
- // gint type = msg->flags & E_PASSWORDS_REMEMBER_MASK;
- // guint noreply = msg->noreply;
+
+GtkDialog *
+create_user_pass_dialog(RSS_AUTH *auth)
+{
+ GtkWidget *dialog1;
+ GtkWidget *username;
+ GtkWidget *password;
+ GtkWidget *checkbutton1;
+ GtkWidget *container;
+ GtkWidget *container2;
+ GtkWidget *widget;
+ GtkWidget *action_area;
+ GtkWidget *content_area;
gboolean visible;
AtkObject *a11y;
-// msg->noreply = 1;
-
- if (!rf->hruser)
- rf->hruser = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
- if (!rf->hrpass)
- rf->hrpass = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
-
widget = gtk_dialog_new_with_buttons (
_("Enter User/Pass for feed"), NULL, 0,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -630,7 +612,7 @@ GtkWidget *dialog1;
gtk_label_set_line_wrap (GTK_LABEL (widget), TRUE);
char *markup;
- markup = g_markup_printf_escaped (_("Enter your username and password for:\n '%s'"), url);
+ markup = g_markup_printf_escaped (_("Enter your username and password for:\n '%s'"), auth->url);
gtk_label_set_markup (GTK_LABEL (widget), markup);
g_free (markup);
gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
@@ -663,9 +645,8 @@ GtkWidget *dialog1;
gtk_table_attach (
GTK_TABLE (container2), username,
1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gchar *user = g_hash_table_lookup(rf->hruser, url);
- if (user)
- gtk_entry_set_text (GTK_ENTRY (username), user);
+ if (auth->user)
+ gtk_entry_set_text (GTK_ENTRY (username), auth->user);
widget = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (widget), _("Password: "));
@@ -684,9 +665,8 @@ GtkWidget *dialog1;
gtk_table_attach (
GTK_TABLE (container2), password,
1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gchar *pass = g_hash_table_lookup(rf->hrpass, url);
- if (pass)
- gtk_entry_set_text (GTK_ENTRY (password), pass);
+ if (auth->pass)
+ gtk_entry_set_text (GTK_ENTRY (password), auth->pass);
/* Caps Lock Label */
widget = gtk_label_new (NULL);
@@ -719,35 +699,66 @@ GtkWidget *dialog1;
GTK_TABLE (container), checkbutton1,
1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
- gint result = gtk_dialog_run(GTK_DIALOG(password_dialog));
- switch (result)
- {
+ return password_dialog;
+}
+
+gboolean
+web_auth_dialog(gchar *url)
+{
+ GtkDialog *dialog;
+ guint resp;
+
+ if (!rf->hruser)
+ rf->hruser = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
+ if (!rf->hrpass)
+ rf->hrpass = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
+
+ RSS_AUTH *auth_info = g_new0(RSS_AUTH, 1);
+ auth_info->user = g_hash_table_lookup(rf->hruser, url);
+ auth_info->pass = g_hash_table_lookup(rf->hruser, url);
+ dialog = create_user_pass_dialog(auth_info);
+ gint result = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (result) {
case GTK_RESPONSE_OK:
- if (user)
+ if (auth_info->user)
g_hash_table_remove(rf->hruser, url);
g_hash_table_insert(rf->hruser, url,
- g_strdup(gtk_entry_get_text (GTK_ENTRY (username))));
- if (pass)
+ g_strdup(gtk_entry_get_text (GTK_ENTRY (auth_info->username))));
+ if (auth_info->pass)
g_hash_table_remove(rf->hrpass, url);
g_hash_table_insert(rf->hrpass, url,
- g_strdup(gtk_entry_get_text (GTK_ENTRY (password))));
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton1)))
+ g_strdup(gtk_entry_get_text (GTK_ENTRY (auth_info->password))));
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (auth_info->rememberpass)))
save_up(url);
else
del_up(url);
- gtk_widget_destroy (password_dialog);
+ gtk_widget_destroy (dialog);
resp = 0;
break;
- default:
- gtk_widget_destroy (password_dialog);
- resp = 1;
- break;
- }
+ default:
+ gtk_widget_destroy (dialog);
+ resp = 1;
+ break;
+ }
+ g_free(auth_info);
return resp;
}
gboolean
+proxy_auth_dialog(gchar *title, gchar *user, gchar *pass)
+{
+ GtkDialog *dialog;
+ guint resp;
+
+ RSS_AUTH *auth_info = g_new0(RSS_AUTH, 1);
+ auth_info->user = user;
+ auth_info->pass = pass;
+ dialog = create_user_pass_dialog(auth_info);
+ gint result = gtk_dialog_run(GTK_DIALOG(dialog));
+}
+
+gboolean
cancel_soup_sess(gpointer key, gpointer value, gpointer user_data)
{
#if LIBSOUP_VERSION < 2003000
diff --git a/src/rss.h b/src/rss.h
index 939a602..a9eaee5 100644
--- a/src/rss.h
+++ b/src/rss.h
@@ -280,6 +280,15 @@ typedef struct CREATE_FEED { /* used by create_mail function when called by unbl
GList *category; // list of categories article is posted under
} create_feed;
+typedef struct rss_auth {
+ gchar *url;
+ gchar *user;
+ gchar *pass;
+ GtkWidget *username;
+ GtkWidget *password;
+ GtkWidget *rememberpass;
+} RSS_AUTH;
+
guint upgrade = 0; // set to 2 when initailization successfull
guint count = 0;
gchar *buffer = NULL;
@@ -287,7 +296,7 @@ guint ftotal;
guint farticle;
uint32_t gen_crc(const char *msg);
-gboolean create_user_pass_dialog(gchar *url);
+GtkDialog* create_user_pass_dialog(RSS_AUTH *auth);
static void start_check_cb (GtkWidget *widget, gpointer data);
static void err_destroy (GtkWidget *widget, guint response, gpointer data);
static gboolean check_if_match (gpointer key, gpointer value, gpointer user_data);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]