diff options
| -rw-r--r-- | lasso/id-ff/register_name_identifier.c | 405 | ||||
| -rw-r--r-- | lasso/id-ff/register_name_identifier.h | 32 | ||||
| -rw-r--r-- | python/environs/py_register_name_identifier.c | 195 | ||||
| -rw-r--r-- | python/environs/py_register_name_identifier.h | 53 |
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", ®ister_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", + ®ister_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", + ®ister_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", + ®ister_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", + ®ister_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", + ®ister_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", + ®ister_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__ */ |
