summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-02-04 00:02:12 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-02-04 00:02:12 +0000
commitf520348197f58815552ceecff74261f96cde881f (patch)
tree826ccbdc0c746cfe3e6143b613ae54605c7e7aac
parentda7dcfaeddbb241f7caaf5ee23ba3e8114a06aba (diff)
Core: use lasso_node_new_from_dump to implement _new_from_dump methods
* provider.c: add annotation for nullable arguments (necessary for bindings of new_from_buffer). * server.c: add annotations, allow to set encryption_private_key from buffers
-rw-r--r--lasso/id-ff/identity.c19
-rw-r--r--lasso/id-ff/login.c16
-rw-r--r--lasso/id-ff/logout.c15
-rw-r--r--lasso/id-ff/provider.c23
-rw-r--r--lasso/id-ff/server.c51
-rw-r--r--lasso/id-ff/session.c22
6 files changed, 51 insertions, 95 deletions
diff --git a/lasso/id-ff/identity.c b/lasso/id-ff/identity.c
index be3cf9df..c1b71d06 100644
--- a/lasso/id-ff/identity.c
+++ b/lasso/id-ff/identity.c
@@ -367,24 +367,11 @@ LassoIdentity*
lasso_identity_new_from_dump(const gchar *dump)
{
LassoIdentity *identity;
- xmlDoc *doc;
- xmlNode *rootElement;
- if (dump == NULL)
- return NULL;
-
- doc = xmlParseMemory(dump, strlen(dump));
- if (doc == NULL)
- return NULL;
-
- rootElement = xmlDocGetRootElement(doc);
- if (strcmp((char*)rootElement->name, "Identity") != 0) {
- lasso_release_doc(doc);
- return NULL;
+ identity = (LassoIdentity*)lasso_node_new_from_dump(dump);
+ if (! LASSO_IS_IDENTITY(identity)) {
+ lasso_release_gobject(identity);
}
- identity = lasso_identity_new();
- init_from_xml(LASSO_NODE(identity), rootElement);
- lasso_release_doc(doc);
return identity;
}
diff --git a/lasso/id-ff/login.c b/lasso/id-ff/login.c
index a8037fe0..cf932f4c 100644
--- a/lasso/id-ff/login.c
+++ b/lasso/id-ff/login.c
@@ -2162,17 +2162,13 @@ LassoLogin*
lasso_login_new_from_dump(LassoServer *server, const gchar *dump)
{
LassoLogin *login;
- xmlDoc *doc;
-
- if (dump == NULL)
- return NULL;
-
- login = g_object_new(LASSO_TYPE_LOGIN, NULL);
- doc = xmlParseMemory(dump, strlen(dump));
- init_from_xml(LASSO_NODE(login), xmlDocGetRootElement(doc));
- lasso_assign_gobject(LASSO_PROFILE(login)->server, server);
- lasso_release_doc(doc);
+ login = (LassoLogin*)lasso_node_new_from_dump(dump);
+ if (! LASSO_IS_LOGIN(login)) {
+ lasso_release_gobject(login);
+ } else {
+ lasso_assign_gobject(login->parent.server, server);
+ }
return login;
}
diff --git a/lasso/id-ff/logout.c b/lasso/id-ff/logout.c
index 0d934208..c260013f 100644
--- a/lasso/id-ff/logout.c
+++ b/lasso/id-ff/logout.c
@@ -1181,16 +1181,13 @@ LassoLogout*
lasso_logout_new_from_dump(LassoServer *server, const char *dump)
{
LassoLogout *logout;
- xmlDoc *doc;
-
- if (dump == NULL)
- return NULL;
-
- logout = lasso_logout_new(server);
- doc = xmlParseMemory(dump, strlen(dump));
- init_from_xml(LASSO_NODE(logout), xmlDocGetRootElement(doc));
- lasso_release_doc(doc);
+ logout = (LassoLogout*)lasso_node_new_from_dump(dump);
+ if (! LASSO_IS_LOGOUT(logout)) {
+ lasso_release_gobject(logout);
+ } else {
+ lasso_assign_gobject(logout->parent.server, server);
+ }
return logout;
}
diff --git a/lasso/id-ff/provider.c b/lasso/id-ff/provider.c
index 4ee76a5f..576e5051 100644
--- a/lasso/id-ff/provider.c
+++ b/lasso/id-ff/provider.c
@@ -72,7 +72,7 @@ static gboolean lasso_provider_load_metadata_from_doc(LassoProvider *provider, x
/**
* lasso_provider_get_assertion_consumer_service_url:
* @provider: a #LassoProvider
- * @service_id: the AssertionConsumerServiceID, NULL for default
+ * @service_id:(allow-none): the AssertionConsumerServiceID, NULL for default
*
* Extracts the AssertionConsumerServiceURL from the provider metadata
* descriptor.
@@ -910,8 +910,8 @@ lasso_provider_new_helper(LassoProviderRole role, const char *metadata,
* lasso_provider_new:
* @role: provider role, identity provider or service provider
* @metadata: path to the provider metadata file
- * @public_key: path to the provider public key file (may be a certificate) or NULL
- * @ca_cert_chain: path to the provider CA certificate chain file or NULL
+ * @public_key:(allow-none): path to the provider public key file (may be a certificate) or NULL
+ * @ca_cert_chain:(allow-none): path to the provider CA certificate chain file or NULL
*
* Creates a new #LassoProvider.
*
@@ -929,8 +929,8 @@ lasso_provider_new(LassoProviderRole role, const char *metadata,
* lasso_provider_new_from_buffer:
* @role: provider role, identity provider or service provider
* @metadata: string buffer containing a metadata file
- * @public_key: path to the provider public key file (may be a certificate) or NULL
- * @ca_cert_chain: path to the provider CA certificate chain file or NULL
+ * @public_key:(allow-none): path to the provider public key file (may be a certificate) or NULL
+ * @ca_cert_chain:(allow-none): path to the provider CA certificate chain file or NULL
*
* Creates a new #LassoProvider.
*
@@ -1074,16 +1074,11 @@ LassoProvider*
lasso_provider_new_from_dump(const gchar *dump)
{
LassoProvider *provider;
- xmlDoc *doc;
-
- if (dump == NULL)
- return NULL;
-
- provider = g_object_new(LASSO_TYPE_PROVIDER, NULL);
- doc = lasso_xml_parse_memory(dump, strlen(dump));
- init_from_xml(LASSO_NODE(provider), xmlDocGetRootElement(doc));
- lasso_release_doc(doc);
+ provider = (LassoProvider*)lasso_node_new_from_dump(dump);
+ if (! LASSO_IS_PROVIDER(provider)) {
+ lasso_release_gobject(provider);
+ }
return provider;
}
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index 1ca1ab33..a25021de 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -88,8 +88,8 @@ lasso_server_add_provider_helper(LassoServer *server, LassoProviderRole role,
* @server: a #LassoServer
* @role: provider role, identity provider or service provider
* @metadata: path to the provider metadata file
- * @public_key: provider public key file (may be a certificate) or NULL
- * @ca_cert_chain: provider CA certificate chain file or NULL
+ * @public_key:(allow-none): provider public key file (may be a certificate) or NULL
+ * @ca_cert_chain:(allow-none): provider CA certificate chain file or NULL
*
* Creates a new #LassoProvider and makes it known to the @server
*
@@ -108,8 +108,8 @@ lasso_server_add_provider(LassoServer *server, LassoProviderRole role,
* @server: a #LassoServer
* @role: provider role, identity provider or service provider
* @metadata: a string buffer containg the metadata file for a new provider
- * @public_key: provider public key file (may be a certificate) or NULL
- * @ca_cert_chain: provider CA certificate chain file or NULL
+ * @public_key:(allow-none): provider public key file (may be a certificate) or NULL
+ * @ca_cert_chain:(allow-none): provider CA certificate chain file or NULL
*
* Creates a new #LassoProvider and makes it known to the @server
*
@@ -140,7 +140,7 @@ lasso_server_destroy(LassoServer *server)
/**
* lasso_server_set_encryption_private_key:
* @server: a #LassoServer
- * @filename: file name of the encryption key to load
+ * @filename:(allow-none): file name of the encryption key to load
*
* Load an encryption private key from a file and set it in the server object
*
@@ -149,18 +149,18 @@ lasso_server_destroy(LassoServer *server)
int
lasso_server_set_encryption_private_key(LassoServer *server, const gchar *filename)
{
- LassoPemFileType file_type;
-
- lasso_release_sec_key(server->private_data->encryption_private_key);
- file_type = lasso_get_pem_file_type(filename);
- if (file_type == LASSO_PEM_FILE_TYPE_PRIVATE_KEY) {
- server->private_data->encryption_private_key = xmlSecCryptoAppKeyLoad(filename,
- xmlSecKeyDataFormatPem, NULL, NULL, NULL);
+ /* FIXME: add a password argument */
+ if (filename) {
+ xmlSecKey *key = lasso_xmlsec_load_private_key(filename, NULL);
+ if (! key || ! (xmlSecKeyGetType(key) & xmlSecKeyDataTypePrivate)) {
+ return LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED;
+ }
+ lasso_release_sec_key(server->private_data->encryption_private_key);
+ server->private_data->encryption_private_key = key;
+ } else {
+ lasso_release_sec_key(server->private_data->encryption_private_key);
}
- if (server->private_data->encryption_private_key == NULL)
- return LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED;
-
return 0;
}
@@ -533,8 +533,8 @@ lasso_server_get_type()
* lasso_server_new:
* @metadata: path to the provider metadata file or NULL, for a LECP server
* @private_key: path to the the server private key file or NULL
- * @private_key_password: password to private key if it is encrypted, or NULL
- * @certificate: path to the server certificate file, or NULL
+ * @private_key_password:(allow-none): password to private key if it is encrypted, or NULL
+ * @certificate:(allow-none): path to the server certificate file, or NULL
*
* Creates a new #LassoServer.
*
@@ -574,8 +574,8 @@ lasso_server_new(const gchar *metadata,
* lasso_server_new_from_buffers:
* @metadata: NULL terminated string containing the content of an ID-FF 1.2 metadata file
* @privatekey: NULL terminated string containing a PEM formatted private key
- * @private_key_password: a NULL terminated string which is the optional password of the private key
- * @certificate: NULL terminated string containing a PEM formatted X509 certificate
+ * @private_key_password:(allow-none): a NULL terminated string which is the optional password of the private key
+ * @certificate:(allow-none): NULL terminated string containing a PEM formatted X509 certificate
*
* Creates a new #LassoServer.
*
@@ -617,16 +617,13 @@ lasso_server_new_from_buffers(const char *metadata, const char *private_key_cont
LassoServer*
lasso_server_new_from_dump(const gchar *dump)
{
- LassoNode *server;
- server = lasso_node_new_from_dump(dump);
- if (server == NULL)
- return NULL;
+ LassoServer *server;
- if (LASSO_IS_SERVER(server) == FALSE) {
- lasso_node_destroy(LASSO_NODE(server));
- return NULL;
+ server = (LassoServer*)lasso_node_new_from_dump(dump);
+ if (! LASSO_IS_SERVER(server)) {
+ lasso_release_gobject(server);
}
- return LASSO_SERVER(server);
+ return server;
}
/**
diff --git a/lasso/id-ff/session.c b/lasso/id-ff/session.c
index 95ef3f39..06e0a47e 100644
--- a/lasso/id-ff/session.c
+++ b/lasso/id-ff/session.c
@@ -756,27 +756,11 @@ LassoSession*
lasso_session_new_from_dump(const gchar *dump)
{
LassoSession *session;
- xmlDoc *doc;
- xmlNode *rootElement;
- if (dump == NULL)
- return NULL;
-
- doc = xmlParseMemory(dump, strlen(dump));
- if (doc == NULL)
- return NULL;
-
- rootElement = xmlDocGetRootElement(doc);
- if (strcmp((char*)rootElement->name, "Session") != 0) {
- lasso_release_doc(doc);
- return NULL;
+ session = (LassoSession*)lasso_node_new_from_dump(dump);
+ if (! LASSO_IS_SESSION(session)) {
+ lasso_release_gobject(session);
}
-
- session = lasso_session_new();
- init_from_xml(LASSO_NODE(session), rootElement);
- lasso_release_doc(doc);
- session->is_dirty = FALSE;
-
return session;
}