30
30
#include <lasso/id-ff/providerprivate.h>
31
31
#include <lasso/id-ff/serverprivate.h>
33
struct _LassoServerPrivate
35
gboolean dispose_has_run;
33
#include <lasso/saml-2.0/serverprivate.h>
38
36
/*****************************************************************************/
39
37
/* public methods */
124
* lasso_server_set_encryption_private_key:
125
* @server: a #LassoServer
126
* @filename: file name of the encryption key to load
128
* Load an encryption private key from a file and set it in the server object
130
* Return value: 0 on success; another value if an error occured.
133
lasso_server_set_encryption_private_key(LassoServer *server, const gchar *filename)
135
LassoPemFileType file_type;
137
if (server->private_data->encryption_private_key != NULL) {
138
xmlSecKeyDestroy(server->private_data->encryption_private_key);
139
server->private_data->encryption_private_key = NULL;
141
file_type = lasso_get_pem_file_type(filename);
142
if (file_type == LASSO_PEM_FILE_TYPE_PRIVATE_KEY) {
143
server->private_data->encryption_private_key = xmlSecCryptoAppKeyLoad(filename,
144
xmlSecKeyDataFormatPem, NULL, NULL, NULL);
147
if (server->private_data->encryption_private_key == NULL)
148
return LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED;
155
* lasso_server_load_affiliation:
156
* @server: a #LassoServer
157
* @filename: file name of the affiliation metadata to load
159
* Load an affiliation metadata file into @server; this must be called after
160
* providers have been added to @server.
162
* Return value: 0 on success; another value if an error occured.
165
lasso_server_load_affiliation(LassoServer *server, const gchar *filename)
167
LassoProvider *provider = LASSO_PROVIDER(server);
172
doc = xmlParseFile(filename);
174
return LASSO_XML_ERROR_INVALID_FILE;
177
node = xmlDocGetRootElement(doc);
178
if (node == NULL || node->ns == NULL) {
180
return LASSO_XML_ERROR_NODE_NOT_FOUND;
183
if (provider->private_data->conformance == LASSO_PROTOCOL_SAML_2_0) {
184
rc = lasso_saml20_server_load_affiliation(server, doc, node);
186
/* affiliations are not supported in ID-FF 1.2 mode */
187
rc = LASSO_ERROR_UNIMPLEMENTED;
124
195
/*****************************************************************************/
125
196
/* private methods */
126
197
/*****************************************************************************/
220
291
p = g_object_new(LASSO_TYPE_PROVIDER, NULL);
221
292
LASSO_NODE_GET_CLASS(p)->init_from_xml(LASSO_NODE(p), t2);
222
if (lasso_provider_load_public_key(p) == TRUE) {
293
if (lasso_provider_load_public_key(p, LASSO_PUBLIC_KEY_SIGNING)) {
223
294
g_hash_table_insert(server->providers,
224
295
g_strdup(p->ProviderID), p);
226
297
message(G_LOG_LEVEL_CRITICAL,
227
"Failed to load public key for %s.",
298
"Failed to load signing public key for %s.",
291
362
* #LassoProvider is owned by Lasso and should not be freed.
294
lasso_server_get_provider(LassoServer *server, gchar *providerID)
365
lasso_server_get_provider(LassoServer *server, const gchar *providerID)
296
367
return g_hash_table_lookup(server->providers, providerID);
311
382
LassoDiscoServiceInstance*
312
lasso_server_get_service(LassoServer *server, gchar *serviceType)
383
lasso_server_get_service(LassoServer *server, const gchar *serviceType)
314
385
return g_hash_table_lookup(server->services, serviceType);
408
479
server->private_data = g_new(LassoServerPrivate, 1);
409
480
server->private_data->dispose_has_run = FALSE;
481
server->private_data->encryption_private_key = NULL;
411
483
server->providers = g_hash_table_new_full(
412
484
g_str_hash, g_str_equal, g_free,
417
489
server->certificate = NULL;
418
490
server->signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA1;
420
/* FIXME: set the value_destroy_func */
421
492
server->services = g_hash_table_new_full(g_str_hash, g_str_equal,
422
(GDestroyNotify)g_free, NULL);
493
(GDestroyNotify)g_free,
494
(GDestroyNotify)lasso_node_destroy);