summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lasso/id-ff/register_name_identifier.c405
-rw-r--r--lasso/id-ff/register_name_identifier.h32
-rw-r--r--python/environs/py_register_name_identifier.c195
-rw-r--r--python/environs/py_register_name_identifier.h53
4 files changed, 551 insertions, 134 deletions
diff --git a/lasso/id-ff/register_name_identifier.c b/lasso/id-ff/register_name_identifier.c
index 33a42151..7283ba8c 100644
--- a/lasso/id-ff/register_name_identifier.c
+++ b/lasso/id-ff/register_name_identifier.c
@@ -24,31 +24,33 @@
#include <lasso/environs/register_name_identifier.h>
+static GObjectClass *parent_class = NULL;
+
/*****************************************************************************/
/* public methods */
/*****************************************************************************/
gchar *
-lasso_register_name_identifier_dump(LassoRegisterNameIdentifier *registration)
+lasso_register_name_identifier_dump(LassoRegisterNameIdentifier *register_name_identifier)
{
LassoProfileContext *profileContext;
gchar *dump;
- g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(registration), NULL);
+ g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(register_name_identifier), NULL);
return(dump);
}
gint
-lasso_register_name_identifier_build_request_msg(LassoRegisterNameIdentifier *registration)
+lasso_register_name_identifier_build_request_msg(LassoRegisterNameIdentifier *register_name_identifier)
{
LassoProfileContext *profileContext;
- LassoProvider *provider;
- xmlChar *protocolProfile;
+ LassoProvider *provider;
+ xmlChar *protocolProfile, *registerNameIdentifierServiceURL;
- g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(registration), -1);
+ g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(register_name_identifier), -1);
- profileContext = LASSO_PROFILE_CONTEXT(registration);
+ profileContext = LASSO_PROFILE_CONTEXT(register_name_identifier);
/* get the prototocol profile of the register_name_identifier */
provider = lasso_server_get_provider(profileContext->server, profileContext->remote_providerID);
@@ -57,22 +59,35 @@ lasso_register_name_identifier_build_request_msg(LassoRegisterNameIdentifier *re
return(-2);
}
+ registerNameIdentifierServiceURL = lasso_provider_get_registerNameIdentifierServiceURL(provider);
protocolProfile = lasso_provider_get_registerNameIdentifierProtocolProfile(provider);
+
if(protocolProfile==NULL){
- debug(ERROR, "Register name identifier protocol profile not found\n");
+ debug(ERROR, "Register_Name_Identifier Protocol profile not found\n");
return(-3);
}
- if(xmlStrEqual(protocolProfile, lassoLibProtocolProfileRniSpSoap) || xmlStrEqual(protocolProfile, lassoLibProtocolProfileRniIdpSoap)){
- debug(DEBUG, "Building a register name identifier request soap message\n");
+ if(registerNameIdentifierServiceURL==NULL){
+ debug(ERROR, "Register_Name_Identifier Service URL not found\n");
+ return(-4);
+ }
+
+ if(xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloSpSoap) || xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloIdpSoap)){
+ debug(DEBUG, "Building a soap request message\n");
profileContext->request_type = lassoHttpMethodSoap;
- profileContext->msg_url = lasso_provider_get_registerNameIdentifierServiceURL(provider);
+
+ /* sign the request message */
+ lasso_samlp_request_abstract_set_signature(LASSO_SAMLP_REQUEST_ABSTRACT(profileContext->request),
+ profileContext->server->signature_method,
+ profileContext->server->private_key,
+ profileContext->server->certificate);
+
+ profileContext->msg_url = registerNameIdentifierServiceURL;
profileContext->msg_body = lasso_node_export_to_soap(profileContext->request);
}
- else if(xmlStrEqual(protocolProfile,lassoLibProtocolProfileRniSpHttp)||xmlStrEqual(protocolProfile,lassoLibProtocolProfileRniIdpHttp)){
- debug(DEBUG, "building a register name identifier request http redirect message\n");
+ else if(xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloSpHttp)||xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloIdpHttp)){
+ debug(DEBUG, "Building a http get request message\n");
profileContext->request_type = lassoHttpMethodRedirect;
- lasso_register_name_identifier_rename_attributes_for_query(LASSO_REGISTER_NAME_IDENTIFIER_REQUEST(profileContext->request));
profileContext->msg_url = lasso_node_export_to_query(profileContext->request,
profileContext->server->signature_method,
profileContext->server->private_key);
@@ -83,19 +98,20 @@ lasso_register_name_identifier_build_request_msg(LassoRegisterNameIdentifier *re
}
gint
-lasso_register_name_identifier_build_response_msg(LassoRegisterNameIdentifier *registration)
+lasso_register_name_identifier_build_response_msg(LassoRegisterNameIdentifier *register_name_identifier)
{
LassoProfileContext *profileContext;
- LassoProvider *provider;
- xmlChar *protocolProfile;
+ LassoProvider *provider;
+ xmlChar *protocolProfile;
- g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(registration), -1);
+ g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(register_name_identifier), -1);
- profileContext = LASSO_PROFILE_CONTEXT(registration);
+ profileContext = LASSO_PROFILE_CONTEXT(register_name_identifier);
+ printf("get provider id %s\n", profileContext->remote_providerID);
provider = lasso_server_get_provider(profileContext->server, profileContext->remote_providerID);
if(provider==NULL){
- debug(ERROR, "Provider %s not found\n", profileContext->remote_providerID);
+ debug(ERROR, "Provider not found (ProviderID = %s)\n", profileContext->remote_providerID);
return(-2);
}
@@ -105,13 +121,13 @@ lasso_register_name_identifier_build_response_msg(LassoRegisterNameIdentifier *r
return(-3);
}
- if(xmlStrEqual(protocolProfile, lassoLibProtocolProfileRniSpSoap) || xmlStrEqual(protocolProfile, lassoLibProtocolProfileRniIdpSoap)){
- debug(DEBUG, "Building a register name identifier request soap message\n");
+ if(xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloSpSoap) || xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloIdpSoap)){
+ debug(DEBUG, "building a soap response message\n");
profileContext->msg_url = lasso_provider_get_registerNameIdentifierServiceURL(provider);
profileContext->msg_body = lasso_node_export_to_soap(profileContext->response);
}
- else if(xmlStrEqual(protocolProfile,lassoLibProtocolProfileRniSpHttp)||xmlStrEqual(protocolProfile,lassoLibProtocolProfileRniIdpHttp)){
- debug(DEBUG, "building a register name identifier request HTTP redirect message\n");
+ else if(xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloSpHttp)||xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloIdpHttp)){
+ debug(DEBUG, "building a http get response message\n");
profileContext->response_type = lassoHttpMethodRedirect;
profileContext->msg_url = lasso_node_export_to_query(profileContext->response,
profileContext->server->signature_method,
@@ -122,111 +138,111 @@ lasso_register_name_identifier_build_response_msg(LassoRegisterNameIdentifier *r
return(0);
}
+void
+lasso_register_name_identifier_destroy(LassoRegisterNameIdentifier *register_name_identifier)
+{
+ g_object_unref(G_OBJECT(register_name_identifier));
+}
+
gint
-lasso_register_name_identifier_init_request(LassoRegisterNameIdentifier *registration,
+lasso_register_name_identifier_init_request(LassoRegisterNameIdentifier *register_name_identifier,
gchar *remote_providerID)
{
- LassoProfileContext *profileContext;
- LassoNode *nameIdentifier_node;
- LassoIdentity *identity;
+ LassoProfileContext *profileContext;
+ LassoNode *nameIdentifier;
+ LassoIdentity *identity;
LassoRegisterNameIdentifierRequest *request;
- xmlChar *idpNameIdentifier, *idpNameQualifier, *idpFormat;
- xmlChar *spNameIdentifier, *spNameQualifier, *spFormat;
- xmlChar *oldNameIdentifier, *oldNameQualifier, *oldFormat;
-
- xmlChar *providerID;
+ xmlChar *content, *nameQualifier, *format;
- g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(registration), -1);
+ g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(register_name_identifier), -1);
+ g_return_val_if_fail(remote_providerID!=NULL, -2);
- providerID = lasso_provider_get_providerID(LASSO_PROVIDER(profileContext->server));
+ profileContext = LASSO_PROFILE_CONTEXT(register_name_identifier);
- profileContext = LASSO_PROFILE_CONTEXT(registration);
profileContext->remote_providerID = remote_providerID;
- /* TODO : implement the setting of the request */
+ /* get identity */
+ identity = lasso_user_get_identity(profileContext->user, profileContext->remote_providerID);
+ if(identity==NULL){
+ debug(ERROR, "error, identity not found\n");
+ return(-3);
+ }
+
+ /* get the name identifier (!!! depend on the provider type : SP or IDP !!!)*/
switch(profileContext->provider_type){
case lassoProviderTypeSp:
- /* generate a new local name identifier */
- spNameIdentifier = lasso_build_unique_id(32);
- spNameQualifier = providerID;
- spFormat = "federated";
-
- /* get the old name identifier */
- identity = lasso_user_get_identity(profileContext->user, remote_providerID);
- nameIdentifier_node = lasso_identity_get_local_nameIdentifier(identity);
- if(nameIdentifier_node){
- oldNameIdentifier = lasso_node_get_content(nameIdentifier_node);
- oldNameQualifier = lasso_node_get_attr_value(nameIdentifier_node, "NameQualifier");
- oldFormat = lasso_node_get_attr_value(nameIdentifier_node, "Format");
- }
-
- /* get the remote name identifier */
- identity = lasso_user_get_identity(profileContext->user, remote_providerID);
- nameIdentifier_node = lasso_identity_get_remote_nameIdentifier(identity);
- idpNameIdentifier = lasso_node_get_content(nameIdentifier_node);
- idpNameQualifier = lasso_node_get_attr_value(nameIdentifier_node, "NameQualifier");
- idpFormat = lasso_node_get_attr_value(nameIdentifier_node, "Format");
+ printf("service provider\n");
+ nameIdentifier = LASSO_NODE(lasso_identity_get_local_nameIdentifier(identity));
+ if(!nameIdentifier)
+ nameIdentifier = LASSO_NODE(lasso_identity_get_remote_nameIdentifier(identity));
break;
case lassoProviderTypeIdp:
- /* generate a new local name identifier */
- idpNameIdentifier = lasso_build_unique_id(32);
- idpNameQualifier = providerID;
- idpFormat = "federated";
-
- /* get the old name identifier */
- identity = lasso_user_get_identity(profileContext->user, remote_providerID);
- nameIdentifier_node = lasso_identity_get_local_nameIdentifier(identity);
- oldNameIdentifier = lasso_node_get_content(nameIdentifier_node);
- oldNameQualifier = lasso_node_get_attr_value(nameIdentifier_node, "NameQualifier");
- oldFormat = lasso_node_get_attr_value(nameIdentifier_node, "Format");
-
- /* get the remote name identifier */
- identity = lasso_user_get_identity(profileContext->user, remote_providerID);
- nameIdentifier_node = lasso_identity_get_remote_nameIdentifier(identity);
- spNameIdentifier = lasso_node_get_content(nameIdentifier_node);
- spNameQualifier = lasso_node_get_attr_value(nameIdentifier_node, "NameQualifier");
- spFormat = lasso_node_get_attr_value(nameIdentifier_node, "Format");
+ printf("identity provider\n");
+ /* get the next assertion ( next authenticated service provider ) */
+ nameIdentifier = LASSO_NODE(lasso_identity_get_remote_nameIdentifier(identity));
+ if(!nameIdentifier)
+ nameIdentifier = LASSO_NODE(lasso_identity_get_local_nameIdentifier(identity));
break;
default:
- debug(ERROR, "Unknown provider type (%d)\n", profileContext->provider_type);
+ debug(ERROR, "Unknown provider type\n");
+ return(-4);
+ }
+
+ if(!nameIdentifier){
+ debug(ERROR, "error, name identifier not found\n");
+ return(-5);
+ }
+ debug(DEBUG, "name identifier : %s\n", lasso_node_export(nameIdentifier));
+
+ /* build the request */
+ content = lasso_node_get_content(nameIdentifier);
+ nameQualifier = lasso_node_get_attr_value(nameIdentifier, "NameQualifier");
+ format = lasso_node_get_attr_value(nameIdentifier, "Format");
+ profileContext->request = lasso_register_name_identifier_request_new(
+ lasso_provider_get_providerID(LASSO_PROVIDER(profileContext->server)),
+ content,
+ nameQualifier,
+ format,
+ "",
+ "",
+ "",
+ "",
+ "",
+ "");
+
+ if(profileContext->request==NULL){
+ debug(ERROR, "Error while creating the request\n");
+ return(-6);
}
- lasso_register_name_identifier_request_new(providerID,
- idpNameIdentifier,
- idpNameQualifier,
- idpFormat,
- spNameIdentifier,
- spNameQualifier,
- spFormat,
- oldNameIdentifier,
- oldNameQualifier,
- oldFormat);
-
return(0);
}
gint
-lasso_register_name_identifier_handle_request_msg(LassoRegisterNameIdentifier *registration,
- gchar *request_msg,
- lassoHttpMethods request_method)
+lasso_register_name_identifier_process_request_msg(LassoRegisterNameIdentifier *register_name_identifier,
+ gchar *request_msg,
+ lassoHttpMethods request_method)
{
LassoProfileContext *profileContext;
- LassoIdentity *identity;
- LassoNode *nameIdentifier, *assertion;
- LassoNode *statusCode;
- LassoNodeClass *statusCode_class;
- xmlChar *remote_providerID;
+ LassoIdentity *identity;
+ LassoNode *nameIdentifier, *assertion;
+ LassoNode *statusCode;
+ LassoNodeClass *statusCode_class;
+ xmlChar *remote_providerID;
- profileContext = LASSO_PROFILE_CONTEXT(registration);
+ g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(register_name_identifier), -1);
+ g_return_val_if_fail(request_msg!=NULL, -2);
+
+ profileContext = LASSO_PROFILE_CONTEXT(register_name_identifier);
switch(request_method){
case lassoHttpMethodSoap:
- debug(DEBUG, "Build a register name identifier request from soap message\n");
+ debug(DEBUG, "build a register_name_identifier request from soap msg\n");
profileContext->request = lasso_register_name_identifier_request_new_from_soap(request_msg);
break;
case lassoHttpMethodRedirect:
- debug(DEBUG, "build a register name identifier request from query message\n");
+ debug(DEBUG, "build a register_name_identifier request from query msg\n");
profileContext->request = lasso_register_name_identifier_request_new_from_query(request_msg);
break;
case lassoHttpMethodGet:
@@ -234,7 +250,7 @@ lasso_register_name_identifier_handle_request_msg(LassoRegisterNameIdentifier *r
break;
default:
debug(ERROR, "Unknown request method\n");
- return(-1);
+ return(-3);
}
/* set the remote provider id from the request */
@@ -247,64 +263,117 @@ lasso_register_name_identifier_handle_request_msg(LassoRegisterNameIdentifier *r
lassoSamlStatusCodeSuccess,
profileContext->request);
+ if(profileContext->response==NULL){
+ debug(ERROR, "Error while building response\n");
+ return(-4);
+ }
+
statusCode = lasso_node_get_child(profileContext->response, "StatusCode", NULL);
statusCode_class = LASSO_NODE_GET_CLASS(statusCode);
nameIdentifier = lasso_node_get_child(profileContext->request, "NameIdentifier", NULL);
if(nameIdentifier==NULL){
+ debug(ERROR, "No name identifier found in register_name_identifier request\n");
statusCode_class->set_prop(statusCode, "Value", lassoLibStatusCodeFederationDoesNotExist);
- return(-2);
+ return(-5);
}
remote_providerID = lasso_node_get_child_content(profileContext->request, "ProviderID", NULL);
+ if(remote_providerID==NULL){
+ debug(ERROR, "No provider id found in register_name_identifier request\n");
+ return(-6);
+ }
+
+ /* Verify federation */
+ identity = lasso_user_get_identity(profileContext->user, remote_providerID);
+ if(identity==NULL){
+ debug(WARNING, "No identity for %s\n", remote_providerID);
+ statusCode_class->set_prop(statusCode, "Value", lassoLibStatusCodeFederationDoesNotExist);
+ return(-7);
+ }
+
+ if(lasso_identity_verify_nameIdentifier(identity, nameIdentifier)==FALSE){
+ debug(WARNING, "No name identifier for %s\n", remote_providerID);
+ statusCode_class->set_prop(statusCode, "Value", lassoLibStatusCodeFederationDoesNotExist);
+ return(-8);
+ }
+
+ /* verify authentication (if ok, delete assertion) */
+ assertion = lasso_user_get_assertion(profileContext->user, remote_providerID);
+ if(assertion==NULL){
+ debug(WARNING, "%s has no assertion\n", remote_providerID);
+ statusCode_class->set_prop(statusCode, "Value", lassoSamlStatusCodeRequestDenied);
+ return(-9);
+ }
return(0);
}
gint
-lasso_register_name_identifier_handle_response_msg(LassoRegisterNameIdentifier *registration,
- gchar *response_msg,
- lassoHttpMethods response_method)
+lasso_register_name_identifier_process_response_msg(LassoRegisterNameIdentifier *register_name_identifier,
+ gchar *response_msg,
+ lassoHttpMethods response_method)
{
LassoProfileContext *profileContext;
xmlChar *statusCodeValue;
LassoNode *statusCode;
- profileContext = LASSO_PROFILE_CONTEXT(registration);
+ g_return_val_if_fail(LASSO_IS_REGISTER_NAME_IDENTIFIER(register_name_identifier), -1);
+ g_return_val_if_fail(response_msg!=NULL, -2);
+
+ profileContext = LASSO_PROFILE_CONTEXT(register_name_identifier);
/* parse RegisterNameIdentifierResponse */
switch(response_method){
case lassoHttpMethodSoap:
profileContext->response = lasso_register_name_identifier_response_new_from_soap(response_msg);
+ break;
case lassoHttpMethodRedirect:
profileContext->response = lasso_register_name_identifier_response_new_from_query(response_msg);
+ break;
default:
- debug(ERROR, "Unkown response method (%d)\n", response_method);
+ debug(ERROR, "Unknown response method\n");
+ return(-3);
}
statusCode = lasso_node_get_child(profileContext->response, "StatusCode", NULL);
statusCodeValue = lasso_node_get_attr_value(statusCode, "Value");
if(!xmlStrEqual(statusCodeValue, lassoSamlStatusCodeSuccess)){
- return(-1);
+ return(-4);
}
return(0);
}
/*****************************************************************************/
+/* overrided parent class methods */
+/*****************************************************************************/
+
+static void
+lasso_register_name_identifier_finalize(LassoRegisterNameIdentifier *register_name_identifier)
+{
+ debug(INFO, "Register Name Identifier object 0x%x finalized ...\n", register_name_identifier);
+
+ parent_class->finalize(LASSO_PROFILE_CONTEXT(register_name_identifier));
+}
+
+/*****************************************************************************/
/* instance and class init functions */
/*****************************************************************************/
static void
lasso_register_name_identifier_instance_init(LassoRegisterNameIdentifier *register_name_identifier)
{
-
}
static void
-lasso_register_name_identifier_class_init(LassoRegisterNameIdentifierClass *klass)
+lasso_register_name_identifier_class_init(LassoRegisterNameIdentifierClass *class)
{
-
+ GObjectClass *gobject_class = G_OBJECT_CLASS(class);
+
+ parent_class = g_type_class_peek_parent(class);
+ /* override parent class methods */
+ gobject_class->finalize = (void *)lasso_register_name_identifier_finalize;
}
GType lasso_register_name_identifier_get_type() {
@@ -331,20 +400,118 @@ GType lasso_register_name_identifier_get_type() {
}
LassoRegisterNameIdentifier *
-lasso_register_name_identifier_new(LassoServer *server,
- LassoUser *user,
- gint provider_type)
+lasso_register_name_identifier_new(LassoServer *server,
+ LassoUser *user,
+ lassoProviderTypes provider_type)
{
- LassoRegisterNameIdentifier *registration;
+ LassoRegisterNameIdentifier *register_name_identifier;
g_return_val_if_fail(LASSO_IS_SERVER(server), NULL);
g_return_val_if_fail(LASSO_IS_USER(user), NULL);
/* set the register_name_identifier object */
- registration = g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER,
- "server", server,
- "user", user,
- "provider_type", provider_type,
- NULL);
- return(registration);
+ register_name_identifier = g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER,
+ "server", server,
+ "user", user,
+ "provider_type", provider_type,
+ NULL);
+
+ return(register_name_identifier);
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* gint */
+/* lasso_register_name_identifier_init_request(LassoRegisterNameIdentifier *registration, */
+/* gchar *remote_providerID) */
+/* { */
+
+/* /\* TODO : implement the setting of the request *\/ */
+/* switch(profileContext->provider_type){ */
+/* case lassoProviderTypeSp: */
+/* /\* generate a new local name identifier *\/ */
+/* spNameIdentifier = lasso_build_unique_id(32); */
+/* spNameQualifier = providerID; */
+/* spFormat = "federated"; */
+
+/* debug(DEBUG, "new name identifier : %s, name qualifier : %s, format : %s\n", spNameIdentifier, spNameQualifier, spFormat); */
+
+/* /\* get the old name identifier *\/ */
+/* identity = lasso_user_get_identity(profileContext->user, remote_providerID); */
+/* if(identity==NULL){ */
+/* debug(ERROR, "Identity not found\n"); */
+/* return(-3); */
+/* } */
+/* nameIdentifier_node = lasso_identity_get_local_nameIdentifier(identity); */
+/* if(nameIdentifier_node){ */
+/* oldNameIdentifier = lasso_node_get_content(nameIdentifier_node); */
+/* oldNameQualifier = lasso_node_get_attr_value(nameIdentifier_node, "NameQualifier"); */
+/* oldFormat = lasso_node_get_attr_value(nameIdentifier_node, "Format"); */
+/* } */
+
+/* /\* get the remote name identifier *\/ */
+/* nameIdentifier_node = lasso_identity_get_remote_nameIdentifier(identity); */
+/* idpNameIdentifier = lasso_node_get_content(nameIdentifier_node); */
+/* idpNameQualifier = lasso_node_get_attr_value(nameIdentifier_node, "NameQualifier"); */
+/* idpFormat = lasso_node_get_attr_value(nameIdentifier_node, "Format"); */
+/* break; */
+
+/* case lassoProviderTypeIdp: */
+/* /\* generate a new local name identifier *\/ */
+/* idpNameIdentifier = lasso_build_unique_id(32); */
+/* idpNameQualifier = providerID; */
+/* idpFormat = "federated"; */
+
+/* /\* get the old name identifier *\/ */
+/* identity = lasso_user_get_identity(profileContext->user, remote_providerID); */
+/* if(identity==NULL){ */
+/* debug(ERROR, "Identity not found\n"); */
+/* return(-4); */
+/* } */
+/* nameIdentifier_node = lasso_identity_get_local_nameIdentifier(identity); */
+/* oldNameIdentifier = lasso_node_get_content(nameIdentifier_node); */
+/* oldNameQualifier = lasso_node_get_attr_value(nameIdentifier_node, "NameQualifier"); */
+/* oldFormat = lasso_node_get_attr_value(nameIdentifier_node, "Format"); */
+
+/* /\* get the remote name identifier *\/ */
+/* nameIdentifier_node = lasso_identity_get_remote_nameIdentifier(identity); */
+/* spNameIdentifier = lasso_node_get_content(nameIdentifier_node); */
+/* spNameQualifier = lasso_node_get_attr_value(nameIdentifier_node, "NameQualifier"); */
+/* spFormat = lasso_node_get_attr_value(nameIdentifier_node, "Format"); */
+/* break; */
+
+/* default: */
+/* debug(ERROR, "Unknown provider type (%d)\n", profileContext->provider_type); */
+/* return(-5); */
+/* } */
+
+/* return(0); */
+/* } */
diff --git a/lasso/id-ff/register_name_identifier.h b/lasso/id-ff/register_name_identifier.h
index 9296ecbf..9eaaad8e 100644
--- a/lasso/id-ff/register_name_identifier.h
+++ b/lasso/id-ff/register_name_identifier.h
@@ -56,26 +56,28 @@ struct _LassoRegisterNameIdentifierClass {
};
-LASSO_EXPORT GType lasso_register_name_identifier_get_type (void);
+LASSO_EXPORT GType lasso_register_name_identifier_get_type (void);
-LASSO_EXPORT LassoRegisterNameIdentifier *lasso_register_name_identifier_new (LassoServer *server,
- LassoUser *user,
- gint provider_type);
-
-LASSO_EXPORT gint lasso_register_name_identifier_build_request_msg (LassoRegisterNameIdentifier *register_name_identifier);
+LASSO_EXPORT LassoRegisterNameIdentifier* lasso_register_name_identifier_new (LassoServer *server,
+ LassoUser *user,
+ lassoProviderTypes provider_type);
+
+LASSO_EXPORT gint lasso_register_name_identifier_build_request_msg (LassoRegisterNameIdentifier *register_name_identifier);
-LASSO_EXPORT gint lasso_register_name_identifier_build_response_msg (LassoRegisterNameIdentifier *register_name_identifier);
+LASSO_EXPORT gint lasso_register_name_identifier_build_response_msg (LassoRegisterNameIdentifier *register_name_identifier);
-LASSO_EXPORT gint lasso_register_name_identifier_init_request (LassoRegisterNameIdentifier *register_name_identifier,
- gchar *remote_providerID);
+LASSO_EXPORT void lasso_register_name_identifier_destroy (LassoRegisterNameIdentifier *register_name_identifier);
-LASSO_EXPORT gint lasso_register_name_identifier_handle_request (LassoRegisterNameIdentifier *register_name_identifier,
- gchar *request_msg,
- gint request_method);
+LASSO_EXPORT gint lasso_register_name_identifier_init_request (LassoRegisterNameIdentifier *register_name_identifier,
+ gchar *remote_providerID);
-LASSO_EXPORT gint lasso_register_name_identifier_handle_response (LassoRegisterNameIdentifier *register_name_identifier,
- gchar *response_msg,
- gint response_method);
+LASSO_EXPORT gint lasso_register_name_identifier_process_request_msg (LassoRegisterNameIdentifier *register_name_identifier,
+ gchar *request_msg,
+ lassoHttpMethods request_method);
+
+LASSO_EXPORT gint lasso_register_name_identifier_process_response_msg (LassoRegisterNameIdentifier *register_name_identifier,
+ gchar *response_msg,
+ lassoHttpMethods response_method);
#ifdef __cplusplus
}
diff --git a/python/environs/py_register_name_identifier.c b/python/environs/py_register_name_identifier.c
new file mode 100644
index 00000000..f42436b7
--- /dev/null
+++ b/python/environs/py_register_name_identifier.c
@@ -0,0 +1,195 @@
+/* $Id$
+ *
+ * PyLasso -- Python bindings for Lasso library
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.labs.libre-entreprise.org
+ *
+ * Authors: Valery Febvre <vfebvre@easter-eggs.com>
+ * Nicolas Clapies <nclapies@entrouvert.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "../lassomod.h"
+
+#include "py_register_name_identifier.h"
+
+PyObject *LassoRegisterNameIdentifier_wrap(LassoRegisterNameIdentifier *register_name_identifier) {
+ PyObject *ret;
+
+ if (register_name_identifier == NULL) {
+ Py_INCREF(Py_None);
+ return (Py_None);
+ }
+ ret = PyCObject_FromVoidPtrAndDesc((void *) register_name_identifier,
+ (char *) "LassoRegisterNameIdentifier *", NULL);
+ return (ret);
+}
+
+/******************************************************************************/
+
+PyObject *register_name_identifier_getattr(PyObject *self, PyObject *args) {
+ PyObject *register_name_identifier_obj;
+ LassoRegisterNameIdentifier *register_name_identifier;
+ const char *attr;
+
+ if (CheckArgs(args, "OS:register_name_identifier_get_attr")) {
+ if (!PyArg_ParseTuple(args, "Os:register_name_identifier_get_attr", &register_name_identifier_obj, &attr))
+ return NULL;
+ }
+ else return NULL;
+
+ register_name_identifier = LassoRegisterNameIdentifier_get(register_name_identifier_obj);
+
+ if (!strcmp(attr, "__members__"))
+ return Py_BuildValue("[ssss]", "user", "msg_url", "msg_body",
+ "msg_relayState");
+ if (!strcmp(attr, "user"))
+ return (LassoUser_wrap(LASSO_PROFILE_CONTEXT(register_name_identifier)->user));
+ if (!strcmp(attr, "msg_url"))
+ return (charPtrConst_wrap(LASSO_PROFILE_CONTEXT(register_name_identifier)->msg_url));
+ if (!strcmp(attr, "msg_body"))
+ return (charPtrConst_wrap(LASSO_PROFILE_CONTEXT(register_name_identifier)->msg_body));
+ if (!strcmp(attr, "msg_relayState"))
+ return (charPtrConst_wrap(LASSO_PROFILE_CONTEXT(register_name_identifier)->msg_relayState));
+
+ Py_INCREF(Py_None);
+ return (Py_None);
+}
+
+PyObject *register_name_identifier_new(PyObject *self, PyObject *args) {
+ PyObject *server_obj, *user_obj;
+ LassoRegisterNameIdentifier *register_name_identifier;
+ gint provider_type;
+
+ if (CheckArgs(args, "OOI:register_name_identifier_new")) {
+ if(!PyArg_ParseTuple(args, (char *) "OOi:register_name_identifier_new",
+ &server_obj, &user_obj, &provider_type))
+ return NULL;
+ }
+ else return NULL;
+
+ register_name_identifier = lasso_register_name_identifier_new(LassoServer_get(server_obj),
+ LassoUser_get(user_obj),
+ provider_type);
+
+ return (LassoRegisterNameIdentifier_wrap(register_name_identifier));
+}
+
+
+PyObject *register_name_identifier_build_request_msg(PyObject *self, PyObject *args) {
+ PyObject *register_name_identifier_obj;
+ gint codeError;
+
+ if (CheckArgs(args, "O:register_name_identifier_build_request_msg")) {
+ if(!PyArg_ParseTuple(args, (char *) "O:register_name_identifier_build_request_msg",
+ &register_name_identifier_obj))
+ return NULL;
+ }
+ else return NULL;
+
+ codeError = lasso_register_name_identifier_build_request_msg(LassoRegisterNameIdentifier_get(register_name_identifier_obj));
+
+ return(int_wrap(codeError));
+}
+
+PyObject *register_name_identifier_build_response_msg(PyObject *self, PyObject *args) {
+ PyObject *register_name_identifier_obj;
+ gint codeError;
+
+ if (CheckArgs(args, "O:register_name_identifier_build_response_msg")) {
+ if(!PyArg_ParseTuple(args, (char *) "O:register_name_identifier_build_response_msg",
+ &register_name_identifier_obj))
+ return NULL;
+ }
+ else return NULL;
+
+ codeError = lasso_register_name_identifier_build_response_msg(LassoRegisterNameIdentifier_get(register_name_identifier_obj));
+
+ return(int_wrap(codeError));
+}
+
+PyObject *register_name_identifier_destroy(PyObject *self, PyObject *args){
+ PyObject *register_name_identifier_obj;
+
+ if (CheckArgs(args, "O:register_name_identifier_destroy")) {
+ if(!PyArg_ParseTuple(args, (char *) "O:register_name_identifier_destroy",
+ &register_name_identifier_obj))
+ return NULL;
+ }
+ else return NULL;
+
+ lasso_register_name_identifier_destroy(LassoRegisterNameIdentifier_get(register_name_identifier_obj));
+
+ Py_INCREF(Py_None);
+ return(Py_None);
+}
+
+PyObject *register_name_identifier_init_request(PyObject *self, PyObject *args) {
+ PyObject *register_name_identifier_obj;
+ gchar *remote_providerID;
+ gint codeError;
+
+ if (CheckArgs(args, "OS:register_name_identifier_init_request")) {
+ if(!PyArg_ParseTuple(args, (char *) "Os:register_name_identifier_init_request",
+ &register_name_identifier_obj, &remote_providerID))
+ return NULL;
+ }
+ else return NULL;
+
+ codeError = lasso_register_name_identifier_init_request(LassoRegisterNameIdentifier_get(register_name_identifier_obj),
+ remote_providerID);
+
+ return(int_wrap(codeError));
+}
+
+PyObject *register_name_identifier_process_request_msg(PyObject *self, PyObject *args) {
+ PyObject *register_name_identifier_obj;
+ gchar *request_msg;
+ gint request_method;
+ gint codeError;
+
+ if (CheckArgs(args, "OSI:register_name_identifier_process_request_msg")) {
+ if(!PyArg_ParseTuple(args, (char *) "Osi:register_name_identifier_process_request_msg",
+ &register_name_identifier_obj, &request_msg, &request_method))
+ return NULL;
+ }
+ else return NULL;
+
+ codeError = lasso_register_name_identifier_process_request_msg(LassoRegisterNameIdentifier_get(register_name_identifier_obj),
+ request_msg, request_method);
+
+ return(int_wrap(codeError));
+}
+
+PyObject *register_name_identifier_process_response_msg(PyObject *self, PyObject *args) {
+ PyObject *register_name_identifier_obj;
+ gchar *response_msg;
+ gint response_method;
+ gint codeError;
+
+ if (CheckArgs(args, "OSI:register_name_identifier_process_response_msg")) {
+ if(!PyArg_ParseTuple(args, (char *) "Osi:register_name_identifier_process_response_msg",
+ &register_name_identifier_obj, &response_msg, &response_method))
+ return NULL;
+ }
+ else return NULL;
+
+ codeError = lasso_register_name_identifier_process_response_msg(LassoRegisterNameIdentifier_get(register_name_identifier_obj),
+ response_msg, response_method);
+
+ return(int_wrap(codeError));
+}
diff --git a/python/environs/py_register_name_identifier.h b/python/environs/py_register_name_identifier.h
new file mode 100644
index 00000000..fc53d297
--- /dev/null
+++ b/python/environs/py_register_name_identifier.h
@@ -0,0 +1,53 @@
+/* $Id$
+ *
+ * PyLasso -- Python bindings for Lasso library
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.labs.libre-entreprise.org
+ *
+ * Authors: Valery Febvre <vfebvre@easter-eggs.com>
+ * Nicolas Clapies <nclapies@entrouvert.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#ifndef __PYLASSO_PY_REGISTER_NAME_IDENTIFIER_H__
+#define __PYLASSO_PY_REGISTER_NAME_IDENTIFIER_H__
+
+#include <lasso/environs/register_name_identifier.h>
+
+#include "py_server.h"
+#include "py_user.h"
+
+typedef struct {
+ PyObject_HEAD
+ LassoRegisterNameIdentifier *obj;
+} LassoRegisterNameIdentifier_object;
+
+#define LassoRegisterNameIdentifier_get(v) (((v) == Py_None) ? NULL : (((LassoRegisterNameIdentifier_object *)(PyObject_GetAttr(v, PyString_FromString("_o"))))->obj))
+PyObject *LassoRegisterNameIdentifier_wrap(LassoRegisterNameIdentifier *register_name_identifier);
+
+PyObject *register_name_identifier_getattr(PyObject *self, PyObject *args);
+
+PyObject *register_name_identifier_build_request_msg(PyObject *self, PyObject *args);
+PyObject *register_name_identifier_build_response_msg(PyObject *self, PyObject *args);
+PyObject *register_name_identifier_destroy(PyObject *self, PyObject *args);
+PyObject *register_name_identifier_init_request(PyObject *self, PyObject *args);
+PyObject *register_name_identifier_new(PyObject *self, PyObject *args);
+PyObject *register_name_identifier_process_request_msg(PyObject *self, PyObject *args);
+PyObject *register_name_identifier_process_response_msg(PyObject *self, PyObject *args);
+
+#endif /* __PYLASSO_PY_REGISTER_NAME_IDENTIFIER_H__ */