[evolution-ews] Bug #674321 - Support for password expiration information



commit 813b8812751cf2c90ed2f0bb3e14f8133a54998f
Author: Vibha Yadav <yvibha suse com>
Date:   Fri Aug 10 08:25:38 2012 +0200

    Bug #674321 - Support for password expiration information

 src/server/e-ews-connection.c |  137 +++++++++++++++++++++++++++++++++++++++++
 src/server/e-ews-connection.h |   22 +++++++
 src/server/e-ews-message.c    |    6 ++
 src/server/e-ews-message.h    |    5 +-
 src/server/e-soap-message.c   |    4 +-
 5 files changed, 171 insertions(+), 3 deletions(-)
---
diff --git a/src/server/e-ews-connection.c b/src/server/e-ews-connection.c
index ac346b0..aa46f28 100644
--- a/src/server/e-ews-connection.c
+++ b/src/server/e-ews-connection.c
@@ -7179,3 +7179,140 @@ e_ews_connection_set_folder_permissions_sync (EEwsConnection *cnc,
 
 	return success;
 }
+
+static void
+get_password_expiration_response_cb (ESoapResponse *response,
+				     GSimpleAsyncResult *simple)
+{
+	EwsAsyncData *async_data;
+	ESoapParameter *param;
+	gchar *exp_date;
+	GError *error = NULL;
+
+	async_data = g_simple_async_result_get_op_res_gpointer (simple);
+
+	param = e_soap_response_get_first_parameter_by_name (
+		response, "PasswordExpirationDate", &error);
+
+	/* Sanity check */
+	g_return_if_fail (
+		(param != NULL && error == NULL) ||
+		(param == NULL && error != NULL));
+
+	if (error != NULL) {
+		g_simple_async_result_take_error (simple, error);
+		return;
+	}
+
+	exp_date = e_soap_parameter_get_string_value (param);
+
+	async_data->items = g_slist_append (async_data->items, exp_date);
+}
+
+/**
+ * e_ews_connection_get_password_expiration
+ * @cnc:
+ * @pri:
+ * @mail_id: mail is for which password expiration is requested
+ * @cb:
+ * @cancellable:
+ * @user_data:
+ **/
+void
+e_ews_connection_get_password_expiration (EEwsConnection *cnc,
+					  gint pri,
+					  const gchar *mail_id,
+					  GCancellable *cancellable,
+					  GAsyncReadyCallback callback,
+					  gpointer user_data)
+{
+	ESoapMessage *msg;
+	GSimpleAsyncResult *simple;
+	EwsAsyncData *async_data;
+
+	msg = e_ews_message_new_with_header (cnc->priv->uri, "GetPasswordExpirationDate", NULL, NULL, EWS_EXCHANGE_2010_SP2);
+	e_ews_message_write_string_parameter (msg, "MailboxSmtpAddress", NULL, mail_id ? mail_id : cnc->priv->email);
+	e_ews_message_write_footer (msg);
+
+	simple = g_simple_async_result_new (
+		G_OBJECT (cnc), callback, user_data,
+		e_ews_connection_get_password_expiration);
+
+	async_data = g_new0 (EwsAsyncData, 1);
+	g_simple_async_result_set_op_res_gpointer (
+		simple, async_data, (GDestroyNotify) async_data_free);
+
+	e_ews_connection_queue_request (
+		cnc, msg, get_password_expiration_response_cb,
+		pri, cancellable, simple);
+
+	g_object_unref (simple);
+}
+
+gboolean
+e_ews_connection_get_password_expiration_finish (EEwsConnection *cnc,
+						 GAsyncResult *result,
+						 gchar **exp_date,
+						 GError **error)
+{
+	GSimpleAsyncResult *simple;
+	EwsAsyncData *async_data;
+
+	g_return_val_if_fail (exp_date != NULL, FALSE);
+	g_return_val_if_fail (
+		g_simple_async_result_is_valid (
+		result, G_OBJECT (cnc), e_ews_connection_get_password_expiration),
+		FALSE);
+
+	simple = G_SIMPLE_ASYNC_RESULT (result);
+	async_data = g_simple_async_result_get_op_res_gpointer (simple);
+
+	if (g_simple_async_result_propagate_error (simple, error))
+		return FALSE;
+
+	g_return_val_if_fail (async_data->items != NULL, FALSE);
+
+	*exp_date = async_data->items->data;
+	g_slist_free (async_data->items);
+
+	return TRUE;
+}
+
+/**
+ * e_ews_connection_get_password_expiration_sync
+ * @cnc:
+ * @pri:
+ * @mail_id: mail id for which password expiration is requested
+ * @cancellable:
+ * @error:
+ **/
+gboolean
+e_ews_connection_get_password_expiration_sync (EEwsConnection *cnc,
+					       gint pri,
+					       const gchar *mail_id,
+					       gchar **exp_date,
+					       GCancellable *cancellable,
+					       GError **error)
+{
+	EAsyncClosure *closure;
+	GAsyncResult *result;
+	gboolean success;
+
+	g_return_val_if_fail (E_IS_EWS_CONNECTION (cnc), FALSE);
+	g_return_val_if_fail (exp_date != NULL, FALSE);
+
+	closure = e_async_closure_new ();
+
+	e_ews_connection_get_password_expiration (
+		cnc, pri, mail_id, cancellable,
+		e_async_closure_callback, closure);
+
+	result = e_async_closure_wait (closure);
+
+	success = e_ews_connection_get_password_expiration_finish (
+		cnc, result, exp_date, error);
+
+	e_async_closure_free (closure);
+
+	return success;
+}
diff --git a/src/server/e-ews-connection.h b/src/server/e-ews-connection.h
index b510c57..269f710 100644
--- a/src/server/e-ews-connection.h
+++ b/src/server/e-ews-connection.h
@@ -909,6 +909,28 @@ gboolean	e_ews_connection_set_folder_permissions_sync
 						 GCancellable *cancellable,
 						 GError **error);
 
+void		e_ews_connection_get_password_expiration
+						(EEwsConnection *cnc,
+						 gint pri,
+						 const gchar *mail_id,
+						 GCancellable *cancellable,
+						 GAsyncReadyCallback callback,
+						 gpointer user_data);
+
+gboolean	e_ews_connection_get_password_expiration_finish
+						(EEwsConnection *cnc,
+						 GAsyncResult *result,
+						 gchar **exp_date,
+						 GError **error);
+
+gboolean	e_ews_connection_get_password_expiration_sync
+						(EEwsConnection *cnc,
+						 gint pri,
+						 const gchar *mail_id,
+						 gchar **exp_date,
+						 GCancellable *cancellable,
+						 GError **error);
+
 G_END_DECLS
 
 #endif
diff --git a/src/server/e-ews-message.c b/src/server/e-ews-message.c
index c7222a7..f1077aa 100644
--- a/src/server/e-ews-message.c
+++ b/src/server/e-ews-message.c
@@ -58,6 +58,12 @@ e_ews_message_new_with_header (const gchar *uri,
 	/* server info */
 	if (server_info == EWS_EXCHANGE_2007_SP1)
 		server_ver = "Exchange2007_SP1";
+	else if (server_info == EWS_EXCHANGE_2010)
+		server_ver = "Exchange2010";
+	else if (server_info == EWS_EXCHANGE_2010_SP1)
+		server_ver = "Exchange2010_SP1";
+	else if (server_info == EWS_EXCHANGE_2010_SP2)
+		server_ver = "Exchange2010_SP2";
 	else
 		server_ver = "Exchange2007";
 
diff --git a/src/server/e-ews-message.h b/src/server/e-ews-message.h
index ed2ec7b..c616706 100644
--- a/src/server/e-ews-message.h
+++ b/src/server/e-ews-message.h
@@ -30,7 +30,10 @@ G_BEGIN_DECLS
 
 typedef enum {
 	EWS_EXCHANGE_2007,
-	EWS_EXCHANGE_2007_SP1
+	EWS_EXCHANGE_2007_SP1,
+	EWS_EXCHANGE_2010,
+	EWS_EXCHANGE_2010_SP1,
+	EWS_EXCHANGE_2010_SP2
 } EwsServerVersion;
 
 ESoapMessage *	e_ews_message_new_with_header	(const gchar *uri,
diff --git a/src/server/e-soap-message.c b/src/server/e-soap-message.c
index 31c2115..d3e63e1 100644
--- a/src/server/e-soap-message.c
+++ b/src/server/e-soap-message.c
@@ -468,7 +468,7 @@ e_soap_message_start_envelope (ESoapMessage *msg)
 		(const xmlChar *) "SOAP-ENC");
 	xmlNewNs (
 		msg->priv->doc->xmlRootNode,
-		(const xmlChar *) "http://www.w3.org/1999/XMLSchema";,
+		(const xmlChar *) "http://www.w3.org/2001/XMLSchema";,
 		(const xmlChar *) "xsd");
 	xmlNewNs (
 		msg->priv->doc->xmlRootNode,
@@ -476,7 +476,7 @@ e_soap_message_start_envelope (ESoapMessage *msg)
 		(const xmlChar *) "SOAP-ENV");
 	msg->priv->xsi_ns = xmlNewNs (
 		msg->priv->doc->xmlRootNode,
-		(const xmlChar *) "http://www.w3.org/1999/XMLSchema-instance";,
+		(const xmlChar *) "http://www.w3.org/2001/XMLSchema-instance";,
 		(const xmlChar *) "xsi");
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]