X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=blobdiff_plain;f=saml%2Fsaml2%2Fcore%2Fimpl%2FAssertions20Impl.cpp;h=22874c110571b0dd2a08a6888d8a96f7a3147d34;hp=3a714b78ce9079789de0dc5c9a46dcfeedea36b1;hb=46a9a76c35db95768b2de3da94d40c528aab8e2e;hpb=7dc9b5dddfc5d68129fc6af1da704a46e247432e diff --git a/saml/saml2/core/impl/Assertions20Impl.cpp b/saml/saml2/core/impl/Assertions20Impl.cpp index 3a714b7..22874c1 100644 --- a/saml/saml2/core/impl/Assertions20Impl.cpp +++ b/saml/saml2/core/impl/Assertions20Impl.cpp @@ -27,7 +27,6 @@ #include #include -#include #include #include #include @@ -41,10 +40,13 @@ using namespace xmlencryption; using namespace xmlsignature; using namespace xmltooling; using namespace std; +using xmlconstants::XSI_NS; using xmlconstants::XMLSIG_NS; using xmlconstants::XMLENC_NS; +using xmlconstants::XML_BOOL_NULL; using samlconstants::SAML20_NS; + #if defined (_MSC_VER) #pragma warning( push ) #pragma warning( disable : 4250 4251 ) @@ -52,7 +54,7 @@ using samlconstants::SAML20_NS; namespace opensaml { namespace saml2 { - + DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,AssertionIDRef); DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,AssertionURIRef); DECL_XMLOBJECTIMPL_SIMPLE(SAML_DLLLOCAL,Audience); @@ -191,29 +193,6 @@ namespace opensaml { } } } - - XMLObject* decrypt(const CredentialResolver& credResolver, const XMLCh* recipient, CredentialCriteria* criteria) const - { - if (!m_EncryptedData) - throw DecryptionException("No encrypted data present."); - EncryptedKeyResolver ekr(*this); - Decrypter decrypter(&credResolver, criteria, &ekr); - DOMDocumentFragment* frag = decrypter.decryptData(*m_EncryptedData, recipient); - if (frag->hasChildNodes() && frag->getFirstChild()==frag->getLastChild()) { - DOMNode* plaintext=frag->getFirstChild(); - if (plaintext->getNodeType()==DOMNode::ELEMENT_NODE) { - // Import the tree into a new Document that we can bind to the unmarshalled object. - XercesJanitor newdoc(XMLToolingConfig::getConfig().getParser().newDocument()); - DOMElement* treecopy = static_cast(newdoc->importNode(plaintext, true)); - newdoc->appendChild(treecopy); - auto_ptr ret(XMLObjectBuilder::buildOneFromElement(treecopy, true)); - newdoc.release(); - return ret.release(); - } - } - frag->release(); - throw DecryptionException("Decryption did not result in a single element."); - } IMPL_XMLOBJECT_CLONE(EncryptedElementType); IMPL_TYPED_FOREIGN_CHILD(EncryptedData,xmlencryption); @@ -227,7 +206,6 @@ namespace opensaml { } }; - //TODO unit test for this class SAML_DLLLOCAL EncryptedIDImpl : public virtual EncryptedID, public EncryptedElementTypeImpl { public: @@ -438,10 +416,7 @@ namespace opensaml { } }; - class SAML_DLLLOCAL SubjectConfirmationDataTypeImpl : public virtual SubjectConfirmationDataType, - public AbstractDOMCachingXMLObject, - public AbstractXMLObjectMarshaller, - public AbstractXMLObjectUnmarshaller + class SAML_DLLLOCAL SubjectConfirmationDataTypeImpl : public virtual SubjectConfirmationDataType, public virtual AbstractXMLObject { void init() { m_NotBefore=m_NotOnOrAfter=NULL; @@ -467,7 +442,7 @@ namespace opensaml { init(); } - SubjectConfirmationDataTypeImpl(const SubjectConfirmationDataTypeImpl& src) : AbstractDOMCachingXMLObject(src) { + SubjectConfirmationDataTypeImpl(const SubjectConfirmationDataTypeImpl& src) : AbstractXMLObject(src) { init(); setNotBefore(src.getNotBefore()); setNotOnOrAfter(src.getNotOnOrAfter()); @@ -497,7 +472,6 @@ namespace opensaml { PROC_STRING_ATTRIB(Recipient,RECIPIENT,NULL); PROC_STRING_ATTRIB(InResponseTo,INRESPONSETO,NULL); PROC_STRING_ATTRIB(Address,ADDRESS,NULL); - AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -551,12 +525,24 @@ namespace opensaml { SubjectConfirmationDataTypeImpl::marshallAttributes(domElement); AnyElementImpl::marshallAttributes(domElement); } + + void processAttribute(const DOMAttr* attribute) { + PROC_DATETIME_ATTRIB(NotBefore,NOTBEFORE,NULL); + PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); + PROC_STRING_ATTRIB(Recipient,RECIPIENT,NULL); + PROC_STRING_ATTRIB(InResponseTo,INRESPONSETO,NULL); + PROC_STRING_ATTRIB(Address,ADDRESS,NULL); + AnyElementImpl::processAttribute(attribute); + } }; class SAML_DLLLOCAL KeyInfoConfirmationDataTypeImpl : public virtual KeyInfoConfirmationDataType, public SubjectConfirmationDataTypeImpl, public AbstractComplexElement, - public AbstractAttributeExtensibleXMLObject + public AbstractAttributeExtensibleXMLObject, + public AbstractDOMCachingXMLObject, + public AbstractXMLObjectMarshaller, + public AbstractXMLObjectUnmarshaller { public: virtual ~KeyInfoConfirmationDataTypeImpl() {} @@ -567,7 +553,7 @@ namespace opensaml { KeyInfoConfirmationDataTypeImpl(const KeyInfoConfirmationDataTypeImpl& src) : AbstractXMLObject(src), SubjectConfirmationDataTypeImpl(src), AbstractComplexElement(src), - AbstractAttributeExtensibleXMLObject(src) { + AbstractAttributeExtensibleXMLObject(src), AbstractDOMCachingXMLObject(src) { VectorOf(KeyInfo) v=getKeyInfos(); for (vector::const_iterator i=src.m_KeyInfos.begin(); i!=src.m_KeyInfos.end(); ++i) v.push_back((*i)->cloneKeyInfo()); @@ -1109,7 +1095,6 @@ namespace opensaml { } }; - //TODO need unit test for this class SAML_DLLLOCAL AttributeValueImpl : public virtual AttributeValue, public AnyElementImpl { public: @@ -1606,7 +1591,7 @@ const XMLCh EncryptedAssertion::LOCAL_NAME[] = UNICODE_LITERAL_18(E,n,c,r,y const XMLCh EncryptedAttribute::LOCAL_NAME[] = UNICODE_LITERAL_18(E,n,c,r,y,p,t,e,d,A,t,t,r,i,b,u,t,e); const XMLCh EncryptedElementType::LOCAL_NAME[] = {chNull}; const XMLCh EncryptedElementType::TYPE_NAME[] = UNICODE_LITERAL_20(E,n,c,r,y,p,t,e,d,E,l,e,m,e,n,t,T,y,p,e); -const XMLCh EncryptedID::LOCAL_NAME[] = UNICODE_LITERAL_11(E,n,c,r,y,p,t,e,d,I,d); +const XMLCh EncryptedID::LOCAL_NAME[] = UNICODE_LITERAL_11(E,n,c,r,y,p,t,e,d,I,D); const XMLCh Evidence::LOCAL_NAME[] = UNICODE_LITERAL_8(E,v,i,d,e,n,c,e); const XMLCh Evidence::TYPE_NAME[] = UNICODE_LITERAL_12(E,v,i,d,e,n,c,e,T,y,p,e); const XMLCh Issuer::LOCAL_NAME[] = UNICODE_LITERAL_6(I,s,s,u,e,r);