summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-12-10 17:44:30 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-12-10 17:44:30 +0000
commit7cae9ab205c78edc931eb781226a237e2edcd8f8 (patch)
tree9b6688b2343b774de18c6befa33ae521940d0ae1
parent21828cf8d5b83994afddf4c9df3d71d57b0dc177 (diff)
Added lasso_server_add_service() method
-rw-r--r--lasso/id-ff/server.c53
-rw-r--r--lasso/id-ff/server.h6
2 files changed, 57 insertions, 2 deletions
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index 8debdf1a..cdec3b0b 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -66,8 +66,35 @@ lasso_server_add_provider(LassoServer *server, LassoProviderRole role,
return 0;
}
+gint
+lasso_server_add_service(LassoServer *server,
+ const gchar *service_type,
+ const gchar *service_endpoint)
+{
+ LassoService *service;
+ GList *service_type_list;
+
+ g_return_val_if_fail(LASSO_IS_SERVER(server), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
+ g_return_val_if_fail(service_type != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
+ g_return_val_if_fail(service_endpoint != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
+
+ /* create a new LassoService */
+ service = lasso_service_new(service_type, service_endpoint);
+
+ /* search an existing GList for key type */
+ service_type_list = (GList *)g_hash_table_lookup(server->services,
+ (gconstpointer)service_type);
+ /* append new service */
+ service_type_list = g_list_append(service_type_list, service);
+ g_hash_table_replace(server->services,
+ (gpointer)g_strdup(service_type), (gpointer)service_type_list);
+
+ return 0;
+}
+
gchar*
-lasso_server_get_authnRequestsSigned(LassoServer *server, GError **err)
+lasso_server_get_authnRequestsSigned(LassoServer *server,
+ GError **err)
{
/* XXX to do differently (add a boolean to struct) */
g_assert_not_reached();
@@ -88,11 +115,21 @@ lasso_server_destroy(LassoServer *server)
static LassoNodeClass *parent_class = NULL;
-static void add_provider_childnode(gchar *key, LassoProvider *value, xmlNode *xmlnode)
+static void
+add_provider_childnode(gchar *key, LassoProvider *value, xmlNode *xmlnode)
{
xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value)));
}
+static void
+add_service_childnode(gchar *key, GList *value, xmlNode *xmlnode)
+{
+ while (value != NULL) {
+ xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value->data)));
+ value = g_list_next(value);
+ }
+}
+
static xmlNode*
get_xmlNode(LassoNode *node)
{
@@ -112,12 +149,20 @@ get_xmlNode(LassoNode *node)
xmlNewTextChild(xmlnode, NULL, "CertificateFilePath", server->certificate);
xmlSetProp(xmlnode, "SignatureMethod", signature_methods[server->signature_method]);
+ /* Providers */
if (g_hash_table_size(server->providers)) {
xmlNode *t;
t = xmlNewTextChild(xmlnode, NULL, "Providers", NULL);
g_hash_table_foreach(server->providers,
(GHFunc)add_provider_childnode, t);
}
+ /* Services */
+ if (g_hash_table_size(server->services)) {
+ xmlNode *t;
+ t = xmlNewTextChild(xmlnode, NULL, "Services", NULL);
+ g_hash_table_foreach(server->services,
+ (GHFunc)add_service_childnode, t);
+ }
return xmlnode;
}
@@ -285,6 +330,10 @@ instance_init(LassoServer *server)
server->secret_key = NULL;
server->certificate = NULL;
server->signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA1;
+
+ /* FIXME: set the value_destroy_func */
+ server->services = g_hash_table_new_full(g_str_hash, g_str_equal,
+ (GDestroyNotify)g_free, NULL);
}
static void
diff --git a/lasso/id-ff/server.h b/lasso/id-ff/server.h
index 9e831758..e225796c 100644
--- a/lasso/id-ff/server.h
+++ b/lasso/id-ff/server.h
@@ -31,6 +31,7 @@ extern "C" {
#endif /* __cplusplus */
#include <lasso/id-ff/provider.h>
+#include <lasso/id-ff/service.h>
#define LASSO_TYPE_SERVER (lasso_server_get_type())
#define LASSO_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SERVER, LassoServer))
@@ -49,6 +50,7 @@ struct _LassoServer {
LassoProvider parent;
GHashTable *providers;
+ GHashTable *services; /* hash for services with 'service type' as key */
gchar *private_key;
gchar *secret_key;
@@ -76,6 +78,10 @@ LASSO_EXPORT gint lasso_server_add_provider (LassoServer *server,
LassoProviderRole role, gchar *metadata,
gchar *public_key, gchar *ca_cert_chain);
+LASSO_EXPORT gint lasso_server_add_service(LassoServer *server,
+ const gchar *service_type,
+ const gchar *service_endpoint);
+
LASSO_EXPORT void lasso_server_destroy(LassoServer *server);
LASSO_EXPORT gchar* lasso_server_get_first_providerID(LassoServer *server);
LASSO_EXPORT LassoProvider* lasso_server_get_provider(LassoServer *server, gchar *providerID);