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
This commit is contained in:
Benjamin Dauvergne 2010-02-04 00:02:12 +00:00
parent da7dcfaedd
commit f520348197
6 changed files with 51 additions and 95 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}
/**

View File

@ -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;
}