diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2005-01-12 09:12:52 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2005-01-12 09:12:52 +0000 |
| commit | 31f56486811c00e336d3ed54feed7951a9b88a67 (patch) | |
| tree | eaee9fab5fc1a5236c24ac9ac4373b0d59887bab | |
| parent | 938d60afcefacb9a9d4deb94ef171cb634c43774 (diff) | |
use snippts in #LassoProvider and #LassoServer
| -rw-r--r-- | lasso/id-ff/provider.c | 53 | ||||
| -rw-r--r-- | lasso/id-ff/server.c | 55 |
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; |
