[librest] Introduce RestProxyAuth type



commit 948e5d908e1a9cf25375668d9167da7051021ce6
Author: Christophe Fergeau <cfergeau redhat com>
Date:   Tue Jun 12 19:10:57 2012 +0200

    Introduce RestProxyAuth type
    
    This will be used by the RestProxy authentication code to be
    able to "pause" the sending of the current message. This will give
    applications the opportunity to get back to the main loop to
    do the authentication work before resuming the current request.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=658937

 rest/Makefile.am               |    3 +
 rest/rest-proxy-auth-private.h |   38 +++++++++++++++++
 rest/rest-proxy-auth.c         |   89 ++++++++++++++++++++++++++++++++++++++++
 rest/rest-proxy-auth.h         |   69 +++++++++++++++++++++++++++++++
 4 files changed, 199 insertions(+), 0 deletions(-)
---
diff --git a/rest/Makefile.am b/rest/Makefile.am
index e8a313f..69e7f5b 100644
--- a/rest/Makefile.am
+++ b/rest/Makefile.am
@@ -6,6 +6,8 @@ lib_sources = \
 	rest-param.c			\
 	rest-params.c			\
 	rest-proxy.c 			\
+	rest-proxy-auth.c		\
+	rest-proxy-auth-private.h	\
 	rest-proxy-call.c		\
 	rest-proxy-call-private.h	\
 	rest-xml-node.c			\
@@ -25,6 +27,7 @@ lib_headers = \
 	rest-param.h		\
 	rest-params.h		\
 	rest-proxy.h		\
+	rest-proxy-auth.h	\
 	rest-proxy-call.h	\
 	rest-enum-types.h	\
 	oauth-proxy.h		\
diff --git a/rest/rest-proxy-auth-private.h b/rest/rest-proxy-auth-private.h
new file mode 100644
index 0000000..056174e
--- /dev/null
+++ b/rest/rest-proxy-auth-private.h
@@ -0,0 +1,38 @@
+/*
+ * librest - RESTful web services access
+ * Copyright (c) 2012, Red Hat, Inc.
+ *
+ * Authors: Christophe Fergeau <cfergeau redhat com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef _REST_PROXY_AUTH_PRIVATE
+#define _REST_PROXY_AUTH_PRIVATE
+
+#include <libsoup/soup.h>
+#include <rest/rest-proxy.h>
+#include <rest/rest-proxy-auth.h>
+
+G_BEGIN_DECLS
+
+RestProxyAuth* rest_proxy_auth_new (RestProxy *proxy,
+                                    SoupSession *session,
+                                    SoupMessage *message,
+                                    SoupAuth *auth);
+
+G_END_DECLS
+
+#endif /* _REST_PROXY_AUTH_PRIVATE */
diff --git a/rest/rest-proxy-auth.c b/rest/rest-proxy-auth.c
new file mode 100644
index 0000000..f336e7f
--- /dev/null
+++ b/rest/rest-proxy-auth.c
@@ -0,0 +1,89 @@
+/*
+ * librest - RESTful web services access
+ * Copyright (c) 2012, Red Hat, Inc.
+ *
+ * Authors: Christophe Fergeau <cfergeau redhat com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+#include <config.h>
+
+#include <rest/rest-proxy-auth.h>
+#include <rest/rest-proxy-auth-private.h>
+
+G_DEFINE_TYPE (RestProxyAuth, rest_proxy_auth, G_TYPE_OBJECT)
+
+#define REST_PROXY_AUTH_GET_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), REST_TYPE_PROXY_AUTH, RestProxyAuthPrivate))
+
+struct _RestProxyAuthPrivate {
+  /* used to hold state during async authentication */
+  RestProxy *proxy;
+  SoupSession *session;
+  SoupMessage *message;
+  SoupAuth *auth;
+  gboolean paused;
+};
+
+static void
+rest_proxy_auth_dispose (GObject *object)
+{
+  RestProxyAuthPrivate *priv = ((RestProxyAuth*)object)->priv;
+
+  g_clear_object (&priv->proxy);
+  g_clear_object (&priv->session);
+  g_clear_object (&priv->message);
+  g_clear_object (&priv->auth);
+
+  G_OBJECT_CLASS (rest_proxy_auth_parent_class)->dispose (object);
+}
+
+static void
+rest_proxy_auth_class_init (RestProxyAuthClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  g_type_class_add_private (klass, sizeof (RestProxyAuthPrivate));
+
+  object_class->dispose = rest_proxy_auth_dispose;
+}
+
+static void
+rest_proxy_auth_init (RestProxyAuth *proxy)
+{
+  proxy->priv = REST_PROXY_AUTH_GET_PRIVATE (proxy);
+}
+
+G_GNUC_INTERNAL RestProxyAuth*
+rest_proxy_auth_new (RestProxy *proxy,
+                     SoupSession *session,
+                     SoupMessage *message,
+                     SoupAuth *soup_auth)
+{
+  RestProxyAuth *rest_auth;
+
+  g_return_val_if_fail (REST_IS_PROXY (proxy), NULL);
+  g_return_val_if_fail (SOUP_IS_SESSION (session), NULL);
+  g_return_val_if_fail (SOUP_IS_MESSAGE (message), NULL);
+  g_return_val_if_fail (SOUP_IS_AUTH (soup_auth), NULL);
+
+  rest_auth = REST_PROXY_AUTH (g_object_new (REST_TYPE_PROXY_AUTH, NULL));
+  rest_auth->priv->proxy = g_object_ref(proxy);
+  rest_auth->priv->session = g_object_ref(session);
+  rest_auth->priv->message = g_object_ref(message);
+  rest_auth->priv->auth = g_object_ref(soup_auth);
+
+  return rest_auth;
+}
diff --git a/rest/rest-proxy-auth.h b/rest/rest-proxy-auth.h
new file mode 100644
index 0000000..9761f75
--- /dev/null
+++ b/rest/rest-proxy-auth.h
@@ -0,0 +1,69 @@
+/*
+ * librest - RESTful web services access
+ * Copyright (c) 2012, Red Hat, Inc.
+ *
+ * Authors: Christophe Fergeau <cfergeau redhat com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef _REST_PROXY_AUTH
+#define _REST_PROXY_AUTH
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define REST_TYPE_PROXY_AUTH rest_proxy_auth_get_type()
+
+#define REST_PROXY_AUTH(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), REST_TYPE_PROXY_AUTH, RestProxyAuth))
+
+#define REST_PROXY_AUTH_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), REST_TYPE_PROXY_AUTH, RestProxyAuthClass))
+
+#define REST_IS_PROXY_AUTH(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), REST_TYPE_PROXY_AUTH))
+
+#define REST_IS_PROXY_AUTH_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), REST_TYPE_PROXY_AUTH))
+
+#define REST_PROXY_AUTH_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), REST_TYPE_PROXY_AUTH, RestProxyAuthClass))
+
+typedef struct _RestProxyAuthPrivate RestProxyAuthPrivate;
+
+/**
+ * RestProxyAuth:
+ *
+ * #RestProxyAuth has no publicly available members.
+ */
+typedef struct {
+  GObject parent;
+  RestProxyAuthPrivate *priv;
+} RestProxyAuth;
+
+typedef struct {
+  GObjectClass parent_class;
+  /*< private >*/
+  /* padding for future expansion */
+  gpointer _padding_dummy[8];
+} RestProxyAuthClass;
+
+GType rest_proxy_auth_get_type (void);
+
+G_END_DECLS
+
+#endif /* _REST_PROXY_AUTH */



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