1 /* $Id$ 2 * 3 * Lasso - A free implementation of the Liberty Alliance specifications. 4 * 5 * Copyright (C) 2004-2007 Entr'ouvert 6 * http://lasso.entrouvert.org 7 * 8 * Authors: See AUTHORS file in top-level directory. 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, see <http://www.gnu.org/licenses/>. 22 */ 23 24 #ifndef __LASSO_SERVER_H__ 25 #define __LASSO_SERVER_H__ 26 27 #ifdef __cplusplus 28 extern "C" { 29 #endif /* __cplusplus */ 30 31 #include "provider.h" 32 33 #define LASSO_TYPE_SERVER (lasso_server_get_type()) 34 #define LASSO_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SERVER, LassoServer)) 35 #define LASSO_SERVER_CLASS(klass) \ 36 (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SERVER, LassoServerClass)) 37 #define LASSO_IS_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SERVER)) 38 #define LASSO_IS_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SERVER)) 39 #define LASSO_SERVER_GET_CLASS(o) \ 40 (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SERVER, LassoServerClass)) 41 42 typedef struct _LassoServer LassoServer; 43 typedef struct _LassoServerClass LassoServerClass; 44 typedef struct _LassoServerPrivate LassoServerPrivate; 45 46 struct _LassoServer { 47 LassoProvider parent; 48 49 /*< public >*/ 50 GHashTable *providers; /* of LassoProvider */ 51 /* Can actually contain LassoDataService or LassoIdWsf2DataService or any subclass */ 52 /*< private >*/ 53 GHashTable *services; /* of LassoDataService */ 54 /*< public >*/ 55 56 gchar *private_key; 57 gchar *private_key_password; 58 gchar *certificate; 59 LassoSignatureMethod signature_method; 60 61 /*< private >*/ 62 LassoServerPrivate *private_data; 63 }; 64 65 struct _LassoServerClass { 66 LassoProviderClass parent; 67 }; 68 69 /** 70 * LassoServerLoadMetadataFlag: 71 * @LASSO_SERVER_LOAD_METADATA_FLAG_DEFAULT: the default policy is to check signature on entity and 72 * entities descriptor, and to let signature be inherited by child nodes. 73 * @LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITIES_DESCRIPTOR_SIGNATURE: check signature on 74 * EntitiesDesctiptor nodes, 75 * @LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITY_DESCRIPTOR_SIGNATURE: check signature on 76 * EntityDescriptor nodes, 77 * @LASSO_SERVER_LOAD_METADATA_FLAG_INHERIT_SIGNATURE: when an EntitiesDescriptor is signed, all its 78 * children inherit the trust from this signature and their signature is not checked. 79 */ 80 typedef enum { 81 LASSO_SERVER_LOAD_METADATA_FLAG_DEFAULT = 0, 82 LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITIES_DESCRIPTOR_SIGNATURE = 1, 83 LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITY_DESCRIPTOR_SIGNATURE = 2, 84 LASSO_SERVER_LOAD_METADATA_FLAG_INHERIT_SIGNATURE = 4 85 } LassoServerLoadMetadataFlag; 86 87 LASSO_EXPORT GType lasso_server_get_type(void); 88 89 LASSO_EXPORT LassoServer* lasso_server_new(const gchar *metadata, 90 const gchar *private_key, 91 const gchar *private_key_password, 92 const gchar *certificate); 93 94 LASSO_EXPORT LassoServer* lasso_server_new_from_buffers(const gchar *metadata, 95 const gchar *private_key_content, 96 const gchar *private_key_password, 97 const gchar *certificate_content); 98 99 LASSO_EXPORT LassoServer* lasso_server_new_from_dump(const gchar *dump); 100 101 LASSO_EXPORT lasso_error_t lasso_server_add_provider (LassoServer *server, 102 LassoProviderRole role, const gchar *metadata, 103 const gchar *public_key, const gchar *ca_cert_chain); 104 LASSO_EXPORT lasso_error_t lasso_server_add_provider_from_buffer (LassoServer *server, 105 LassoProviderRole role, const gchar *metadata, 106 const gchar *public_key, const gchar *ca_cert_chain); 107 108 LASSO_EXPORT void lasso_server_destroy(LassoServer *server); 109 110 LASSO_EXPORT gchar* lasso_server_dump(LassoServer *server); 111 112 LASSO_EXPORT LassoProvider* lasso_server_get_provider(const LassoServer *server, 113 const gchar *providerID); 114 115 LASSO_EXPORT lasso_error_t lasso_server_set_encryption_private_key(LassoServer *server, 116 const gchar *filename_or_buffer); 117 118 LASSO_EXPORT lasso_error_t lasso_server_load_affiliation(LassoServer *server, const gchar* filename); 119 120 LASSO_EXPORT lasso_error_t lasso_server_set_encryption_private_key_with_password(LassoServer *server, 121 const gchar *filename_or_buffer, const gchar *password); 122 123 LASSO_EXPORT lasso_error_t lasso_server_load_metadata(LassoServer *server, LassoProviderRole role, 124 const gchar *federation_file, const gchar *trusted_roots, GList 125 *blacklisted_entity_ids, GList **loaded_entity_ids, 126 LassoServerLoadMetadataFlag flags); 127 128 LASSO_EXPORT lasso_error_t lasso_server_add_provider2(LassoServer *server, LassoProvider *provider); 129 130 LASSO_EXPORT gchar *lasso_server_get_endpoint_url_by_id(const LassoServer *server, 131 const gchar *provider_id, const gchar *endpoint_description); 132 133 LASSO_EXPORT GList *lasso_server_get_filtered_provider_list(const LassoServer *server, 134 LassoProviderRole role, LassoMdProtocolType protocol_type, LassoHttpMethod http_method); 135 136 137 #ifdef __cplusplus 138 } 139 #endif /* __cplusplus */ 140 141 #endif /* __LASSO_SERVER_H__ */ 142