-/*
- * Copyright 2001-2007 Internet2
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/**
+ * Licensed to the University Corporation for Advanced Internet
+ * Development, Inc. (UCAID) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for
+ * additional information regarding copyright ownership.
+ *
+ * UCAID licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the
+ * License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
*/
/**
* Assertion20Validator.cpp
*
- * SAML 2.0 basic assertion validator
+ * SAML 2.0 basic assertion validator.
*/
#include "internal.h"
#include "saml2/core/Assertions.h"
#include "saml2/profile/AssertionValidator.h"
+#include <boost/bind.hpp>
#include <xmltooling/logging.h>
#include <xmltooling/XMLToolingConfig.h>
#include <xmltooling/util/NDC.h>
using namespace opensaml::saml2;
using namespace xmltooling::logging;
using namespace xmltooling;
+using namespace boost;
using namespace std;
+AssertionValidator::AssertionValidator(const XMLCh* recipient, const vector<const XMLCh*>* audiences, time_t ts)
+ : m_recipient(recipient), m_audiences(audiences), m_ts(ts)
+{
+}
+
+AssertionValidator::~AssertionValidator()
+{
+}
+
void AssertionValidator::validate(const xmltooling::XMLObject* xmlObject) const
{
const Assertion* a=dynamic_cast<const Assertion*>(xmlObject);
// Now we process conditions, starting with the known types and then extensions.
const vector<AudienceRestriction*>& acvec = conds->getAudienceRestrictions();
- for (vector<AudienceRestriction*>::const_iterator ac = acvec.begin(); ac!=acvec.end(); ++ac)
- validateCondition(*ac);
+ for_each(acvec.begin(), acvec.end(), boost::bind(&AssertionValidator::validateCondition, this, _1));
const vector<OneTimeUse*>& dncvec = conds->getOneTimeUses();
- for (vector<OneTimeUse*>::const_iterator dnc = dncvec.begin(); dnc!=dncvec.end(); ++dnc)
- validateCondition(*dnc);
+ for_each(dncvec.begin(), dncvec.end(), boost::bind(&AssertionValidator::validateCondition, this, _1));
const vector<Condition*>& convec = conds->getConditions();
- for (vector<Condition*>::const_iterator c = convec.begin(); c!=convec.end(); ++c)
- validateCondition(*c);
+ for_each(convec.begin(), convec.end(), boost::bind(&AssertionValidator::validateCondition, this, _1));
}
void AssertionValidator::validateCondition(const Condition* c) const
{
const AudienceRestriction* ac=dynamic_cast<const AudienceRestriction*>(c);
if (!ac) {
- Category::getInstance(SAML_LOGCAT".AssertionValidator").error("unrecognized Condition in assertion (%s)",
+ Category::getInstance(SAML_LOGCAT ".AssertionValidator").error("unrecognized Condition in assertion (%s)",
c->getSchemaType() ? c->getSchemaType()->toString().c_str() : c->getElementQName().toString().c_str());
throw ValidationException("Assertion contains an unrecognized condition.");
}
if (!found) {
ostringstream os;
os << *ac;
- Category::getInstance(SAML_LOGCAT".AssertionValidator").error("unacceptable AudienceRestriction in assertion (%s)", os.str().c_str());
+ Category::getInstance(SAML_LOGCAT ".AssertionValidator").error("unacceptable AudienceRestriction in assertion (%s)", os.str().c_str());
throw ValidationException("Assertion contains an unacceptable AudienceRestriction.");
}
}