summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2005-01-12 09:12:52 +0000
committerFrederic Peters <fpeters@entrouvert.com>2005-01-12 09:12:52 +0000
commit31f56486811c00e336d3ed54feed7951a9b88a67 (patch)
treeeaee9fab5fc1a5236c24ac9ac4373b0d59887bab
parent938d60afcefacb9a9d4deb94ef171cb634c43774 (diff)
use snippts in #LassoProvider and #LassoServer
-rw-r--r--lasso/id-ff/provider.c53
-rw-r--r--lasso/id-ff/server.c55
2 files changed, 47 insertions, 61 deletions
diff --git a/lasso/id-ff/provider.c b/lasso/id-ff/provider.c
index d59ea424..cddc0bee 100644
--- a/lasso/id-ff/provider.c
+++ b/lasso/id-ff/provider.c
@@ -310,6 +310,14 @@ lasso_provider_get_base64_succinct_id(LassoProvider *provider)
/* private methods */
/*****************************************************************************/
+static struct XmlSnippet schema_snippets[] = {
+ { "PublicKeyFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProvider, public_key) },
+ { "CaCertChainFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProvider, ca_cert_chain) },
+ { "MetadataFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProvider, metadata_filename) },
+ { "ProviderID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoProvider, ProviderID) },
+ { NULL, 0, 0}
+};
+
static LassoNodeClass *parent_class = NULL;
static void
@@ -353,20 +361,10 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump)
LassoProvider *provider = LASSO_PROVIDER(node);
char *roles[] = { "None", "SP", "IdP"};
- xmlnode = xmlNewNode(NULL, "Provider");
- xmlSetNs(xmlnode, xmlNewNs(xmlnode, LASSO_LASSO_HREF, NULL));
+ xmlnode = parent_class->get_xmlNode(node, lasso_dump);
xmlSetProp(xmlnode, "ProviderDumpVersion", "2");
if (provider->role)
xmlSetProp(xmlnode, "ProviderRole", roles[provider->role]);
- xmlSetProp(xmlnode, "ProviderID", provider->ProviderID);
-
- if (provider->public_key)
- xmlNewTextChild(xmlnode, NULL, "PublicKeyFilePath", provider->public_key);
- if (provider->ca_cert_chain)
- xmlNewTextChild(xmlnode, NULL, "CaCertChainFilePath", provider->ca_cert_chain);
-
- if (provider->metadata_filename)
- xmlNewTextChild(xmlnode, NULL, "MetadataFilePath", provider->metadata_filename);
return xmlnode;
}
@@ -379,6 +377,8 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode)
xmlNode *t;
xmlChar *s;
+ parent_class->init_from_xml(node, xmlnode);
+
if (xmlnode == NULL)
return LASSO_ERROR_UNDEFINED;
@@ -390,25 +390,9 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode)
if (s)
xmlFree(s);
- provider->ProviderID = xmlGetProp(xmlnode, "ProviderID");
+ if (provider->metadata_filename)
+ lasso_provider_load_metadata(provider, provider->metadata_filename);
- t = xmlnode->children;
- while (t) {
- if (t->type != XML_ELEMENT_NODE) {
- t = t->next;
- continue;
- }
- if (strcmp(t->name, "PublicKeyFilePath") == 0)
- provider->public_key = xmlNodeGetContent(t);
- if (strcmp(t->name, "CaCertChainFilePath") == 0)
- provider->ca_cert_chain = xmlNodeGetContent(t);
- if (strcmp(t->name, "MetadataFilePath") == 0) {
- xmlChar *s = xmlNodeGetContent(t);
- lasso_provider_load_metadata(provider, s);
- xmlFree(s);
- };
- t = t->next;
- }
return 0;
}
@@ -501,10 +485,15 @@ instance_init(LassoProvider *provider)
static void
class_init(LassoProviderClass *klass)
{
- parent_class = g_type_class_peek_parent(klass);
+ LassoNodeClass *nclass = LASSO_NODE_CLASS(klass);
- LASSO_NODE_CLASS(klass)->get_xmlNode = get_xmlNode;
- LASSO_NODE_CLASS(klass)->init_from_xml = init_from_xml;
+ parent_class = g_type_class_peek_parent(klass);
+ nclass->node_data = g_new0(LassoNodeClassData, 1);
+ lasso_node_class_set_nodename(nclass, "Provider");
+ lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX);
+ lasso_node_class_add_snippets(nclass, schema_snippets);
+ nclass->get_xmlNode = get_xmlNode;
+ nclass->init_from_xml = init_from_xml;
G_OBJECT_CLASS(klass)->dispose = dispose;
G_OBJECT_CLASS(klass)->finalize = finalize;
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index cb2355ca..efe87453 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -112,6 +112,13 @@ lasso_server_destroy(LassoServer *server)
/* private methods */
/*****************************************************************************/
+static struct XmlSnippet schema_snippets[] = {
+ { "PrivateKeyFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, private_key) },
+ { "SecretKeyFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, secret_key) },
+ { "CertificateFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, certificate) },
+ { NULL, 0, 0}
+};
+
static LassoNodeClass *parent_class = NULL;
static void
@@ -137,15 +144,7 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump)
xmlNode *xmlnode;
xmlnode = parent_class->get_xmlNode(node, lasso_dump);
- xmlNodeSetName(xmlnode, "Server");
xmlSetProp(xmlnode, "ServerDumpVersion", "2");
-
- if (server->private_key && server->private_key[0])
- xmlNewTextChild(xmlnode, NULL, "PrivateKeyFilePath", server->private_key);
- if (server->secret_key && server->secret_key[0])
- xmlNewTextChild(xmlnode, NULL, "SecretKey", server->secret_key);
- if (server->certificate && server->certificate[0])
- xmlNewTextChild(xmlnode, NULL, "CertificateFilePath", server->certificate);
xmlSetProp(xmlnode, "SignatureMethod", signature_methods[server->signature_method]);
/* Providers */
@@ -189,30 +188,22 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode)
t = xmlnode->children;
while (t) {
- if (t->type != XML_ELEMENT_NODE) {
+ xmlNode *t2 = t->children;
+ LassoProvider *p;
+
+ if (t->type != XML_ELEMENT_NODE || strcmp(t->name, "Providers") != 0) {
t = t->next;
continue;
}
- if (strcmp(t->name, "PrivateKeyFilePath") == 0)
- server->private_key = xmlNodeGetContent(t);
- if (strcmp(t->name, "SecretKey") == 0)
- server->secret_key = xmlNodeGetContent(t);
- if (strcmp(t->name, "CertificateFilePath") == 0)
- server->certificate = xmlNodeGetContent(t);
- if (strcmp(t->name, "Providers") == 0) {
- xmlNode *t2 = t->children;
- LassoProvider *p;
- while (t2) {
- if (t2->type != XML_ELEMENT_NODE) {
- t2 = t2->next;
- continue;
- }
- p = g_object_new(LASSO_TYPE_PROVIDER, NULL);
- LASSO_NODE_GET_CLASS(p)->init_from_xml(LASSO_NODE(p), t2);
- g_hash_table_insert(server->providers,
- g_strdup(p->ProviderID), p);
+ while (t2) {
+ if (t2->type != XML_ELEMENT_NODE) {
t2 = t2->next;
+ continue;
}
+ p = g_object_new(LASSO_TYPE_PROVIDER, NULL);
+ LASSO_NODE_GET_CLASS(p)->init_from_xml(LASSO_NODE(p), t2);
+ g_hash_table_insert(server->providers, g_strdup(p->ProviderID), p);
+ t2 = t2->next;
}
t = t->next;
}
@@ -365,10 +356,16 @@ instance_init(LassoServer *server)
static void
class_init(LassoServerClass *klass)
{
+ LassoNodeClass *nclass = LASSO_NODE_CLASS(klass);
+
parent_class = g_type_class_peek_parent(klass);
+ nclass->node_data = g_new0(LassoNodeClassData, 1);
+ lasso_node_class_set_nodename(nclass, "Server");
+ lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX);
+ lasso_node_class_add_snippets(nclass, schema_snippets);
- LASSO_NODE_CLASS(klass)->get_xmlNode = get_xmlNode;
- LASSO_NODE_CLASS(klass)->init_from_xml = init_from_xml;
+ nclass->get_xmlNode = get_xmlNode;
+ nclass->init_from_xml = init_from_xml;
G_OBJECT_CLASS(klass)->dispose = dispose;
G_OBJECT_CLASS(klass)->finalize = finalize;