summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lasso/id-ff/server.c149
-rw-r--r--lasso/id-ff/server.h4
2 files changed, 78 insertions, 75 deletions
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index 0a6a6a07..02ff6587 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -25,8 +25,8 @@
#include <lasso/environs/server.h>
-#define LASSO_SERVER_NODE "LassoServer"
-#define LASSO_SERVER_PROVIDERS_NODE "LassoProviders"
+#define LASSO_SERVER_NODE "Server"
+#define LASSO_SERVER_PROVIDERS_NODE "Providers"
#define LASSO_SERVER_PROVIDERID_NODE "ProviderID"
#define LASSO_SERVER_PRIVATE_KEY_NODE "PrivateKey"
#define LASSO_SERVER_CERTIFICATE_NODE "Certificate"
@@ -59,6 +59,61 @@ lasso_server_add_lasso_provider(LassoServer *server,
/* public methods */
/*****************************************************************************/
+gint
+lasso_server_add_provider(LassoServer *server,
+ gchar *metadata,
+ gchar *public_key,
+ gchar *ca_certificate)
+{
+ LassoProvider *provider;
+
+ g_return_val_if_fail(LASSO_IS_SERVER(server), -1);
+ g_return_val_if_fail(metadata != NULL, -2);
+
+ provider = lasso_provider_new(metadata, public_key, ca_certificate);
+ g_return_val_if_fail(provider != NULL, -5);
+
+ /* debug(INFO, "Add a provider(%s)\n", lasso_provider_get_providerID(provider)); */
+ g_ptr_array_add(server->providers, provider);
+
+ return(0);
+}
+
+LassoServer*
+lasso_server_copy(LassoServer *server)
+{
+ LassoServer *copy;
+ LassoProvider *p;
+ guint i;
+
+ g_return_val_if_fail(LASSO_IS_SERVER(server), NULL);
+
+ copy = LASSO_SERVER(g_object_new(LASSO_TYPE_SERVER, NULL));
+
+ /* herited provider attrs */
+ LASSO_PROVIDER(copy)->metadata = lasso_node_copy(LASSO_PROVIDER(server)->metadata);
+ LASSO_PROVIDER(copy)->public_key = g_strdup(LASSO_PROVIDER(server)->public_key);
+ LASSO_PROVIDER(copy)->ca_certificate = g_strdup(LASSO_PROVIDER(server)->ca_certificate);
+ /* server attrs */
+ copy->providers = g_ptr_array_new();
+ for (i=0; i<server->providers->len; i++) {
+ p = g_ptr_array_index(server->providers, i);
+ g_ptr_array_add(copy->providers, lasso_provider_copy(p));
+ }
+ copy->providerID = g_strdup(server->providerID);
+ copy->private_key = g_strdup(server->private_key);
+ copy->certificate = g_strdup(server->certificate);
+ copy->signature_method = server->signature_method;
+
+ return(copy);
+}
+
+void
+lasso_server_destroy(LassoServer *server)
+{
+ g_object_unref(G_OBJECT(server));
+}
+
gchar *
lasso_server_dump(LassoServer *server)
{
@@ -73,6 +128,7 @@ lasso_server_dump(LassoServer *server)
server_node = lasso_node_new();
server_class = LASSO_NODE_GET_CLASS(server_node);
server_class->set_name(server_node, LASSO_SERVER_NODE);
+ server_class->set_ns(server_node, lassoLassoHRef, NULL);
/* signature method */
signature_method_str = g_new(gchar, 6);
@@ -81,15 +137,15 @@ lasso_server_dump(LassoServer *server)
g_free(signature_method_str);
/* providerID */
- if(server->providerID) {
+ if (server->providerID) {
server_class->set_prop(server_node, LASSO_SERVER_PROVIDERID_NODE, server->providerID);
}
/* private key */
- if(server->private_key) {
+ if (server->private_key) {
server_class->set_prop(server_node, LASSO_SERVER_PRIVATE_KEY_NODE, server->private_key);
}
/* certificate */
- if(server->certificate) {
+ if (server->certificate) {
server_class->set_prop(server_node, LASSO_SERVER_CERTIFICATE_NODE, server->certificate);
}
/* metadata */
@@ -98,18 +154,18 @@ lasso_server_dump(LassoServer *server)
server_class->add_child(server_node, metadata_copy, FALSE);
lasso_node_destroy(metadata_copy);
/* public key */
- if(provider->public_key) {
+ if (provider->public_key) {
server_class->set_prop(server_node, LASSO_PROVIDER_PUBLIC_KEY_NODE, provider->public_key);
}
/* ca_certificate */
- if(provider->ca_certificate) {
+ if (provider->ca_certificate) {
server_class->set_prop(server_node, LASSO_PROVIDER_CA_CERTIFICATE_NODE, provider->ca_certificate);
}
/* providers */
providers_node = lasso_node_new();
providers_class = LASSO_NODE_GET_CLASS(providers_node);
providers_class->set_name(providers_node, LASSO_SERVER_PROVIDERS_NODE);
- for(i = 0; i<server->providers->len; i++){
+ for (i = 0; i<server->providers->len; i++) {
dump = lasso_provider_dump(g_ptr_array_index(server->providers, i));
provider_node = lasso_node_new_from_dump(dump);
xmlFree(dump);
@@ -125,61 +181,6 @@ lasso_server_dump(LassoServer *server)
return(dump);
}
-gint
-lasso_server_add_provider(LassoServer *server,
- gchar *metadata,
- gchar *public_key,
- gchar *ca_certificate)
-{
- LassoProvider *provider;
-
- g_return_val_if_fail(LASSO_IS_SERVER(server), -1);
- g_return_val_if_fail(metadata != NULL, -2);
-
- provider = lasso_provider_new(metadata, public_key, ca_certificate);
- g_return_val_if_fail(provider != NULL, -5);
-
- /* debug(INFO, "Add a provider(%s)\n", lasso_provider_get_providerID(provider)); */
- g_ptr_array_add(server->providers, provider);
-
- return(0);
-}
-
-LassoServer*
-lasso_server_copy(LassoServer *server)
-{
- LassoServer *copy;
- LassoProvider *p;
- guint i;
-
- g_return_val_if_fail(LASSO_IS_SERVER(server), NULL);
-
- copy = LASSO_SERVER(g_object_new(LASSO_TYPE_SERVER, NULL));
-
- /* herited provider attrs */
- LASSO_PROVIDER(copy)->metadata = lasso_node_copy(LASSO_PROVIDER(server)->metadata);
- LASSO_PROVIDER(copy)->public_key = g_strdup(LASSO_PROVIDER(server)->public_key);
- LASSO_PROVIDER(copy)->ca_certificate = g_strdup(LASSO_PROVIDER(server)->ca_certificate);
- /* server attrs */
- copy->providers = g_ptr_array_new();
- for(i=0; i<server->providers->len; i++) {
- p = g_ptr_array_index(server->providers, i);
- g_ptr_array_add(copy->providers, lasso_provider_copy(p));
- }
- copy->providerID = g_strdup(server->providerID);
- copy->private_key = g_strdup(server->private_key);
- copy->certificate = g_strdup(server->certificate);
- copy->signature_method = server->signature_method;
-
- return(copy);
-}
-
-void
-lasso_server_destroy(LassoServer *server)
-{
- g_object_unref(G_OBJECT(server));
-}
-
LassoProvider*
lasso_server_get_provider(LassoServer *server,
gchar *providerID)
@@ -210,7 +211,7 @@ lasso_server_get_provider_ref(LassoServer *server,
/* debug(INFO, "Get information of provider id %s\n", providerID); */
len = server->providers->len;
- for(index = 0; index<len; index++) {
+ for (index = 0; index<len; index++) {
provider = g_ptr_array_index(server->providers, index);
id = lasso_provider_get_providerID(provider, NULL);
@@ -233,10 +234,11 @@ lasso_server_get_providerID_from_hash(LassoServer *server,
xmlChar *b64_hash_providerID;
int i;
- for(i=0; i<server->providers->len; i++) {
+ for (i=0; i<server->providers->len; i++) {
provider = g_ptr_array_index(server->providers, i);
providerID = lasso_provider_get_providerID(provider, NULL);
- hash_providerID = lasso_str_hash(providerID, server->private_key);
+ /* hash_providerID = lasso_str_hash(providerID, server->private_key); */
+ hash_providerID = lasso_sha1(providerID);
b64_hash_providerID = xmlSecBase64Encode(hash_providerID, 20, 0);
xmlFree(hash_providerID);
if (xmlStrEqual(b64_hash_providerID, b64_hash)) {
@@ -403,7 +405,7 @@ lasso_server_new_from_dump(gchar *dump)
server = LASSO_SERVER(g_object_new(LASSO_TYPE_SERVER, NULL));
server_node = lasso_node_new_from_dump(dump);
- if(server_node == NULL) {
+ if (server_node == NULL) {
message(G_LOG_LEVEL_ERROR, "Error while loading server dump\n");
return(NULL);
}
@@ -437,14 +439,15 @@ lasso_server_new_from_dump(gchar *dump)
LASSO_PROVIDER(server)->ca_certificate = lasso_node_get_attr_value(server_node, LASSO_PROVIDER_CA_CERTIFICATE_NODE, NULL);
/* providers */
- providers_node = lasso_node_get_child(server_node, LASSO_SERVER_PROVIDERS_NODE, NULL, NULL);
- if(providers_node != NULL) {
+ providers_node = lasso_node_get_child(server_node, LASSO_SERVER_PROVIDERS_NODE, lassoLassoHRef, NULL);
+ if (providers_node != NULL) {
providers_class = LASSO_NODE_GET_CLASS(providers_node);
providers_xmlNode = providers_class->get_xmlNode(providers_node);
provider_xmlNode = providers_xmlNode->children;
- while(provider_xmlNode != NULL){
- if(provider_xmlNode->type==XML_ELEMENT_NODE && xmlStrEqual(provider_xmlNode->name, LASSO_PROVIDER_NODE)){
+ while (provider_xmlNode != NULL) {
+ if (provider_xmlNode->type == XML_ELEMENT_NODE && \
+ xmlStrEqual(provider_xmlNode->name, LASSO_PROVIDER_NODE)) {
/* provider node */
provider_node = lasso_node_new_from_xmlNode(provider_xmlNode);
@@ -460,11 +463,11 @@ lasso_server_new_from_dump(gchar *dump)
/* add provider */
provider = lasso_provider_new_from_metadata_node(entity_node);
lasso_node_destroy(entity_node);
- if(public_key != NULL) {
+ if (public_key != NULL) {
lasso_provider_set_public_key(provider, public_key);
xmlFree(public_key);
}
- if(ca_certificate != NULL) {
+ if (ca_certificate != NULL) {
lasso_provider_set_ca_certificate(provider, ca_certificate);
xmlFree(ca_certificate);
}
diff --git a/lasso/id-ff/server.h b/lasso/id-ff/server.h
index 895906b5..699b9560 100644
--- a/lasso/id-ff/server.h
+++ b/lasso/id-ff/server.h
@@ -77,10 +77,10 @@ LASSO_EXPORT gint lasso_server_add_provider (LassoServer *
LASSO_EXPORT LassoServer* lasso_server_copy (LassoServer *server);
-LASSO_EXPORT gchar* lasso_server_dump (LassoServer *server);
-
LASSO_EXPORT void lasso_server_destroy (LassoServer *server);
+LASSO_EXPORT gchar* lasso_server_dump (LassoServer *server);
+
LASSO_EXPORT LassoProvider* lasso_server_get_provider (LassoServer *server,
gchar *providerID);