SAMLv2: add new methods to class LassoAssertionQuery
* lasso_assertion_query_add_attribute_request: helper to setup request attribute for AttributeQuery messages. * lasso_assertion_query_get_request_type: method to find the type of the last received query. * fixes #90
This commit is contained in:
parent
e69cbabde1
commit
c6fa47127e
|
@ -41,6 +41,10 @@ const char*
|
|||
lasso_strerror(int error_code)
|
||||
{
|
||||
switch (error_code) {
|
||||
case LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST:
|
||||
return "Tried to add the same attribute request a second time.";
|
||||
case LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY:
|
||||
return "The current assertion query does not contain an attribute query.";
|
||||
case LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM:
|
||||
return "LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM";
|
||||
case LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST:
|
||||
|
|
|
@ -1037,3 +1037,17 @@
|
|||
* The item_id was not found in the current query request.
|
||||
*/
|
||||
#define LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND 1804
|
||||
|
||||
/**
|
||||
* LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST:
|
||||
*
|
||||
* Tried to add the same attribute request a second time.
|
||||
*/
|
||||
#define LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST 1901
|
||||
|
||||
/**
|
||||
* LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY
|
||||
*
|
||||
* The current assertion query does not contain an attribute query.
|
||||
*/
|
||||
#define LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY 1902
|
||||
|
|
|
@ -396,6 +396,104 @@ cleanup:
|
|||
return rc;
|
||||
}
|
||||
|
||||
static LassoSaml2Attribute*
|
||||
lasso_assertion_query_lookup_attribute(LassoAssertionQuery *assertion_query, char *format, char *name)
|
||||
{
|
||||
LassoSaml2Attribute *result = NULL;
|
||||
LassoSamlp2AttributeQuery *query = NULL;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query) || ! format || ! name,
|
||||
NULL);
|
||||
|
||||
query = (LassoSamlp2AttributeQuery*) assertion_query->parent.request;
|
||||
g_return_val_if_fail(LASSO_IS_SAMLP2_ATTRIBUTE_QUERY(query), NULL);
|
||||
|
||||
lasso_foreach_full_begin(LassoSaml2Attribute*, attribute, it, query->Attribute)
|
||||
{
|
||||
if (LASSO_IS_SAML2_ATTRIBUTE(attribute) &&
|
||||
g_strcmp0(attribute->NameFormat, format) == 0 &&
|
||||
g_strcmp0(attribute->Name, name) == 0)
|
||||
{
|
||||
result = attribute;
|
||||
break;
|
||||
}
|
||||
}
|
||||
lasso_foreach_full_end()
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_assertion_query_add_attribute_request:
|
||||
* @assertion_query: a #LassoAssertionQuery object
|
||||
* @attribute_format: the attribute designator format
|
||||
* @attribute_name: the attribute designator name
|
||||
*
|
||||
* Append a new attribute designator to the current attribute request.
|
||||
*
|
||||
* Return value: 0 if successful, an error code otherwise.
|
||||
*/
|
||||
int
|
||||
lasso_assertion_query_add_attribute_request(LassoAssertionQuery *assertion_query,
|
||||
char *format, char *name)
|
||||
{
|
||||
int rc = 0;
|
||||
LassoSaml2Attribute *attribute = NULL;
|
||||
LassoSamlp2AttributeQuery *query = NULL;
|
||||
|
||||
lasso_bad_param(ASSERTION_QUERY, assertion_query);
|
||||
lasso_null_param(format);
|
||||
lasso_null_param(name);
|
||||
query = (LassoSamlp2AttributeQuery*) assertion_query->parent.request;
|
||||
g_return_val_if_fail(LASSO_IS_SAMLP2_ATTRIBUTE_QUERY(query),
|
||||
LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY);
|
||||
|
||||
/* Check unicity */
|
||||
attribute = lasso_assertion_query_lookup_attribute(assertion_query, format, name);
|
||||
if (attribute != NULL) {
|
||||
return LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST;
|
||||
}
|
||||
/* Do the work */
|
||||
attribute = (LassoSaml2Attribute*)lasso_saml2_attribute_new();
|
||||
lasso_assign_string(attribute->NameFormat, format);
|
||||
lasso_assign_string(attribute->Name, name);
|
||||
lasso_list_add_new_gobject(query->Attribute, attribute);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_assertion_query_get_request_type:
|
||||
* @assertion_query: a #LassoAssertionQuery object
|
||||
*
|
||||
* Return the type of the last processed request.
|
||||
*
|
||||
* Return value: a #LassoAssertionQueryRequestType value
|
||||
*/
|
||||
LassoAssertionQueryRequestType
|
||||
lasso_assertion_query_get_request_type(LassoAssertionQuery *assertion_query)
|
||||
{
|
||||
LassoNode *request;
|
||||
GType type;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query),
|
||||
LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET);
|
||||
|
||||
request = assertion_query->parent.request;
|
||||
if (! G_IS_OBJECT(request))
|
||||
return LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET;
|
||||
type = G_OBJECT_TYPE(request);
|
||||
if (type == LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST)
|
||||
return LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID;
|
||||
if (type == LASSO_TYPE_SAMLP2_AUTHN_QUERY)
|
||||
return LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN;
|
||||
if (type == LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY)
|
||||
return LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE;
|
||||
if (type == LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY)
|
||||
return LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION;
|
||||
return LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* private methods */
|
||||
|
|
|
@ -86,6 +86,7 @@ struct _LassoAssertionQueryClass {
|
|||
LASSO_EXPORT GType lasso_assertion_query_get_type(void);
|
||||
|
||||
LASSO_EXPORT LassoAssertionQuery *lasso_assertion_query_new(LassoServer *server);
|
||||
|
||||
LASSO_EXPORT void lasso_assertion_query_destroy(LassoAssertionQuery *assertion_query);
|
||||
|
||||
LASSO_EXPORT gint lasso_assertion_query_init_request(
|
||||
|
@ -93,20 +94,29 @@ LASSO_EXPORT gint lasso_assertion_query_init_request(
|
|||
char *remote_provider_id,
|
||||
LassoHttpMethod http_method,
|
||||
LassoAssertionQueryRequestType query_request_type);
|
||||
|
||||
LASSO_EXPORT gint lasso_assertion_query_validate_request(
|
||||
LassoAssertionQuery *assertion_query);
|
||||
|
||||
LASSO_EXPORT gint lasso_assertion_query_build_request_msg(
|
||||
LassoAssertionQuery *assertion_query);
|
||||
|
||||
LASSO_EXPORT gint lasso_assertion_query_process_request_msg(
|
||||
LassoAssertionQuery *assertion_query,
|
||||
gchar *request_msg);
|
||||
|
||||
LASSO_EXPORT int lasso_assertion_query_build_response_msg(
|
||||
LassoAssertionQuery *assertion_query);
|
||||
|
||||
LASSO_EXPORT gint lasso_assertion_query_process_response_msg(
|
||||
LassoAssertionQuery *assertion_query,
|
||||
gchar *response_msg);
|
||||
|
||||
LASSO_EXPORT int lasso_assertion_query_add_attribute_request(LassoAssertionQuery *assertion_query,
|
||||
char *format, char *name);
|
||||
|
||||
LASSO_EXPORT LassoAssertionQueryRequestType lasso_assertion_query_get_request_type(
|
||||
LassoAssertionQuery *assertion_query);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue