From 735b748716f8fca1ec0e897d5e17204fa5a9c513 Mon Sep 17 00:00:00 2001 From: Anders Abel Date: Mon, 12 Feb 2024 22:15:08 +0100 Subject: [PATCH] Local name before namespace uri --- .../AspNetCore/Saml2Handler.cs | 4 ++-- .../Serialization/SamlXmlReader.Assertion.cs | 18 +++++++++--------- .../Serialization/SamlXmlReader.Attribute.cs | 2 +- .../SamlXmlReader.AudienceRestriction.cs | 2 +- .../SamlXmlReader.AuthnContext.cs | 2 +- .../SamlXmlReader.AuthnRequest.cs | 4 ++-- .../SamlXmlReader.AuthnStatement.cs | 4 ++-- .../Serialization/SamlXmlReader.Conditions.cs | 6 +++--- .../SamlXmlReader.EntityDescriptor.cs | 4 ++-- .../SamlXmlReader.IDPSSODescriptor.cs | 4 ++-- .../SamlXmlReader.KeyDescriptor.cs | 2 +- .../SamlXmlReader.RequestAbstractType.cs | 4 ++-- .../SamlXmlReader.RoleDescriptor.cs | 10 +++++----- .../SamlXmlReader.SSODescriptor.cs | 8 ++++---- .../SamlXmlReader.SamlResponse.cs | 4 ++-- .../Serialization/SamlXmlReader.Status.cs | 2 +- .../SamlXmlReader.StatusResponseType.cs | 6 +++--- .../Serialization/SamlXmlReader.Subject.cs | 4 ++-- .../SamlXmlReader.SubjectConfirmation.cs | 2 +- .../Serialization/SamlXmlReader.cs | 2 +- src/Sustainsys.Saml2/Xml/XmlTraverser.cs | 9 ++++----- .../Xml/XmlTraverserTests.cs | 10 +++++----- 22 files changed, 56 insertions(+), 57 deletions(-) diff --git a/src/Sustainsys.Saml2/AspNetCore/Saml2Handler.cs b/src/Sustainsys.Saml2/AspNetCore/Saml2Handler.cs index 9a696d502..426e294b4 100644 --- a/src/Sustainsys.Saml2/AspNetCore/Saml2Handler.cs +++ b/src/Sustainsys.Saml2/AspNetCore/Saml2Handler.cs @@ -15,8 +15,6 @@ namespace Sustainsys.Saml2.AspNetCore; // TODO: OTel Metrics + Activities + logging/traces -// TODO: Fold into main package. Same dependencies => same package. - /// /// Saml2 authentication handler /// @@ -105,6 +103,8 @@ protected override async Task HandleChallengeAsync(AuthenticationProperties prop var xmlDoc = GetRequiredService().Write(authnRequest); + //TODO: Don't use Options.IdentityProvider directly, access via event/callback. + var message = new Saml2Message { Destination = Options.IdentityProvider!.SsoServiceUrl!, diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Assertion.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Assertion.cs index 64c5a1029..394c1b125 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Assertion.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Assertion.cs @@ -19,7 +19,7 @@ public Assertion ReadAssertion( { Assertion assertion = default!; - if (source.EnsureName(Namespaces.SamlUri, Elements.Assertion)) + if (source.EnsureName(Elements.Assertion, Namespaces.SamlUri)) { assertion = ReadAssertion(source); source.MoveNext(true); @@ -67,7 +67,7 @@ protected virtual void ReadElements(XmlTraverser source, Assertion assertion) { source.MoveNext(); - if (source.EnsureName(Namespaces.SamlUri, Elements.Issuer)) + if (source.EnsureName(Elements.Issuer, Namespaces.SamlUri)) { assertion.Issuer = ReadNameId(source); source.MoveNext(); @@ -85,45 +85,45 @@ protected virtual void ReadElements(XmlTraverser source, Assertion assertion) // Status is optional on XML schema level, but Core 2.3.3. says that // "an assertion without a subject has no defined meaning in this specification." // so we are treating it as mandatory. - if (source.EnsureName(Namespaces.SamlUri, Elements.Subject)) + if (source.EnsureName(Elements.Subject, Namespaces.SamlUri)) { assertion.Subject = ReadSubject(source); source.MoveNext(true); } - if (source.HasName(Namespaces.SamlUri, Elements.Conditions)) + if (source.HasName(Elements.Conditions, Namespaces.SamlUri)) { assertion.Conditions = ReadConditions(source); source.MoveNext(true); } - if (source.HasName(Namespaces.SamlUri, Elements.Advice)) + if (source.HasName(Elements.Advice, Namespaces.SamlUri)) { // We're not supporting Advice source.IgnoreChildren(); source.MoveNext(true); } - if (source.HasName(Namespaces.SamlUri, Elements.AuthnStatement)) + if (source.HasName(Elements.AuthnStatement, Namespaces.SamlUri)) { assertion.AuthnStatement = ReadAuthnStatement(source); source.MoveNext(true); } - if (source.HasName(Namespaces.SamlUri, Elements.AuthzDecisionStatement)) + if (source.HasName(Elements.AuthzDecisionStatement, Namespaces.SamlUri)) { // Not supporting AuthzDecisionStatement, skip it source.IgnoreChildren(); source.MoveNext(true); } - if (source.HasName(Namespaces.SamlUri, Elements.AttributeStatement)) + if (source.HasName(Elements.AttributeStatement, Namespaces.SamlUri)) { var attributes = source.GetChildren(); while(attributes.MoveNext(true)) { - if(attributes.EnsureName(Namespaces.SamlUri, Elements.Attribute)) + if(attributes.EnsureName(Elements.Attribute, Namespaces.SamlUri)) { assertion.Attributes.Add(ReadAttribute(attributes)); } diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Attribute.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Attribute.cs index fd78423ae..e47779d53 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Attribute.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Attribute.cs @@ -38,7 +38,7 @@ protected virtual void ReadAttributes(XmlTraverser source, SamlAttribute attribu protected virtual void ReadElements(XmlTraverser source, SamlAttribute attribute) { while(source.MoveNext(true) - && source.EnsureName(Namespaces.SamlUri, Elements.AttributeValue)) + && source.EnsureName(Elements.AttributeValue, Namespaces.SamlUri)) { // TODO: Test + support for null values. attribute.Values.Add(source.GetTextContents()); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AudienceRestriction.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AudienceRestriction.cs index 6c6358949..8af16a5b3 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AudienceRestriction.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AudienceRestriction.cs @@ -28,7 +28,7 @@ protected virtual void ReadElements(XmlTraverser source, AudienceRestriction res { source.MoveNext(); - while (source.EnsureName(Namespaces.SamlUri, Elements.Audience)) + while (source.EnsureName(Elements.Audience, Namespaces.SamlUri)) { result.Audiences.Add(source.GetTextContents()); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnContext.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnContext.cs index 5bf0fd7ac..2c5e15ad4 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnContext.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnContext.cs @@ -30,7 +30,7 @@ protected virtual void ReadElements(XmlTraverser source, AuthnContext authnConte { source.MoveNext(true); - if (source.HasName(Namespaces.SamlUri, Elements.AuthnContextClassRef)) + if (source.HasName(Elements.AuthnContextClassRef, Namespaces.SamlUri)) { authnContext.AuthnContextClassRef = source.GetTextContents(); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnRequest.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnRequest.cs index 293a554c0..d6a26a1e8 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnRequest.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnRequest.cs @@ -15,7 +15,7 @@ public AuthnRequest ReadAuthnRequest( { AuthnRequest authnRequest = default!; - if (source.EnsureName(Namespaces.SamlpUri, Elements.AuthnRequest)) + if (source.EnsureName(Elements.AuthnRequest, Namespaces.SamlpUri)) { authnRequest = ReadAuthnRequest(source); source.MoveNext(true); @@ -54,7 +54,7 @@ protected virtual void ReadElements(XmlTraverser source, AuthnRequest authnReque { ReadElements(source, (RequestAbstractType)authnRequest); - if (source.HasName(Namespaces.SamlUri, Elements.Subject)) + if (source.HasName(Elements.Subject, Namespaces.SamlUri)) { authnRequest.Subject = ReadSubject(source); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnStatement.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnStatement.cs index 5378ba06e..da52b800c 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnStatement.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.AuthnStatement.cs @@ -43,13 +43,13 @@ protected virtual void ReadElements(XmlTraverser source, AuthnStatement authnSta { source.MoveNext(true); - if (source.HasName(Namespaces.SamlUri, Elements.SubjectLocality)) + if (source.HasName(Elements.SubjectLocality, Namespaces.SamlUri)) { // We're not supporting Subject Locality. source.MoveNext(true); } - if (source.EnsureName(Namespaces.SamlUri, Elements.AuthnContext)) + if (source.EnsureName(Elements.AuthnContext, Namespaces.SamlUri)) { authnStatement.AuthnContext = ReadAuthnContext(source); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Conditions.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Conditions.cs index 5659c6de1..86b667b63 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Conditions.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Conditions.cs @@ -39,19 +39,19 @@ protected virtual void ReadElements(XmlTraverser source, Conditions conditions) { source.MoveNext(true); - while (source.HasName(Namespaces.SamlUri, Elements.AudienceRestriction)) + while (source.HasName(Elements.AudienceRestriction, Namespaces.SamlUri)) { conditions.AudienceRestrictions.Add(ReadAudienceRestriction(source)); source.MoveNext(true); } - if (source.HasName(Namespaces.SamlUri, Elements.OneTimeUse)) + if (source.HasName(Elements.OneTimeUse, Namespaces.SamlUri)) { conditions.OneTimeUse = true; source.MoveNext(true); } - if (source.HasName(Namespaces.SamlUri, Elements.ProxyRestriction)) + if (source.HasName(Elements.ProxyRestriction, Namespaces.SamlUri)) { // TODO: Support proxy restrictions source.IgnoreChildren(); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.EntityDescriptor.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.EntityDescriptor.cs index a371e5193..916e4d8bb 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.EntityDescriptor.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.EntityDescriptor.cs @@ -13,7 +13,7 @@ public EntityDescriptor ReadEntityDescriptor( { EntityDescriptor entityDescriptor = default!; - if (source.EnsureName(Namespaces.MetadataUri, Elements.EntityDescriptor)) + if (source.EnsureName(Elements.EntityDescriptor, Namespaces.MetadataUri)) { entityDescriptor = ReadEntityDescriptor(source); } @@ -72,7 +72,7 @@ protected virtual void ReadElements(XmlTraverser source, EntityDescriptor entity source.MoveNext(); } - if (source.HasName(Namespaces.MetadataUri, Elements.Extensions)) + if (source.HasName(Elements.Extensions, Namespaces.MetadataUri)) { entityDescriptor.Extensions = ReadExtensions(source); source.MoveNext(); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.IDPSSODescriptor.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.IDPSSODescriptor.cs index a888ea22c..6ba34dbdf 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.IDPSSODescriptor.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.IDPSSODescriptor.cs @@ -43,7 +43,7 @@ protected virtual void ReadElements(XmlTraverser source, IDPSSODescriptor result ReadElements(source, (SSODescriptor)result); // We must have at least one SingleSignOnService in an IDPSSODescriptor and now we should be at it. - if(!source.EnsureName(Namespaces.MetadataUri, Elements.SingleSignOnService)) + if(!source.EnsureName(Elements.SingleSignOnService, Namespaces.MetadataUri)) { return; } @@ -51,7 +51,7 @@ protected virtual void ReadElements(XmlTraverser source, IDPSSODescriptor result do { result.SingleSignOnServices.Add(ReadEndpoint(source)); - } while (source.MoveNext(true) && source.HasName(Namespaces.MetadataUri, Elements.SingleSignOnService)); + } while (source.MoveNext(true) && source.HasName(Elements.SingleSignOnService, Namespaces.MetadataUri)); source.Skip(); } diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.KeyDescriptor.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.KeyDescriptor.cs index f5e7664b5..c191bfd01 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.KeyDescriptor.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.KeyDescriptor.cs @@ -22,7 +22,7 @@ protected virtual KeyDescriptor ReadKeyDescriptor(XmlTraverser source) var children = source.GetChildren(); if (children.MoveNext() - && children.EnsureName(SignedXml.XmlDsigNamespaceUrl, Elements.KeyInfo)) + && children.EnsureName(Elements.KeyInfo, SignedXml.XmlDsigNamespaceUrl)) { children.IgnoreChildren(); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.RequestAbstractType.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.RequestAbstractType.cs index 4cbe80b28..efa8f98f4 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.RequestAbstractType.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.RequestAbstractType.cs @@ -34,7 +34,7 @@ protected virtual void ReadElements(XmlTraverser source, RequestAbstractType req { source.MoveNext(true); - if (source.HasName(Namespaces.SamlUri, Elements.Issuer)) + if (source.HasName(Elements.Issuer, Namespaces.SamlUri)) { request.Issuer = ReadNameId(source); source.MoveNext(true); @@ -49,7 +49,7 @@ protected virtual void ReadElements(XmlTraverser source, RequestAbstractType req source.MoveNext(); } - if (source.HasName(Namespaces.SamlpUri, Elements.Extensions)) + if (source.HasName(Elements.Extensions, Namespaces.SamlpUri)) { request.Extensions = ReadExtensions(source); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.RoleDescriptor.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.RoleDescriptor.cs index 886548dae..6b9170bbb 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.RoleDescriptor.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.RoleDescriptor.cs @@ -45,7 +45,7 @@ protected virtual void ReadElements(XmlTraverser source, RoleDescriptor result) { source.MoveNext(true); - if (source.HasName(SignedXml.XmlDsigNamespaceUrl, Elements.Signature)) + if (source.HasName(Elements.Signature, SignedXml.XmlDsigNamespaceUrl)) { // Signatures on RoleDescriptors are not supported. source.IgnoreChildren(); @@ -53,7 +53,7 @@ protected virtual void ReadElements(XmlTraverser source, RoleDescriptor result) source.MoveNext(true); } - if (source.HasName(Namespaces.MetadataUri, Elements.Extensions)) + if (source.HasName(Elements.Extensions, Namespaces.MetadataUri)) { // Extensions on RoleDescriptors are not supported. source.IgnoreChildren(); @@ -61,13 +61,13 @@ protected virtual void ReadElements(XmlTraverser source, RoleDescriptor result) source.MoveNext(true); } - while (source.HasName(Namespaces.MetadataUri, Elements.KeyDescriptor)) + while (source.HasName(Elements.KeyDescriptor, Namespaces.MetadataUri)) { result.Keys.Add(ReadKeyDescriptor(source)); source.MoveNext(true); } - if (source.HasName(Namespaces.MetadataUri, Elements.Organization)) + if (source.HasName(Elements.Organization, Namespaces.MetadataUri)) { // Organization reading is not supported. source.IgnoreChildren(); @@ -75,7 +75,7 @@ protected virtual void ReadElements(XmlTraverser source, RoleDescriptor result) source.MoveNext(true); } - if (source.HasName(Namespaces.MetadataUri, Elements.ContactPerson)) + if (source.HasName(Elements.ContactPerson, Namespaces.MetadataUri)) { // Contact person reading is not supported. source.IgnoreChildren(); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SSODescriptor.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SSODescriptor.cs index ef6333ee7..e49a81a1f 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SSODescriptor.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SSODescriptor.cs @@ -24,22 +24,22 @@ protected virtual void ReadElements(XmlTraverser source, SSODescriptor result) { ReadElements(source, (RoleDescriptor)result); - while (source.HasName(Namespaces.MetadataUri, Elements.ArtifactResolutionService)) + while (source.HasName(Elements.ArtifactResolutionService, Namespaces.MetadataUri)) { result.ArtifactResolutionServices.Add(ReadIndexedEndpoint(source)); source.MoveNext(true); } - while(source.HasName(Namespaces.MetadataUri, Elements.SingleLogoutService)) + while(source.HasName(Elements.SingleLogoutService, Namespaces.MetadataUri)) { result.SingleLogoutServices.Add(ReadEndpoint(source)); source.MoveNext(true); } - while(source.HasName(Namespaces.MetadataUri, Elements.ManageNameIDService) - || source.HasName(Namespaces.MetadataUri, Elements.NameIDFormat)) + while(source.HasName(Elements.ManageNameIDService, Namespaces.MetadataUri) + || source.HasName(Elements.NameIDFormat, Namespaces.MetadataUri)) { // We're not supporting ManageNameIDService nor NameIDFormat. source.IgnoreChildren(); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SamlResponse.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SamlResponse.cs index 286209258..d86f1d888 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SamlResponse.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SamlResponse.cs @@ -13,7 +13,7 @@ public SamlResponse ReadSamlResponse( { SamlResponse samlResponse = default!; - if (source.EnsureName(Constants.Namespaces.SamlpUri, Constants.Elements.Response)) + if (source.EnsureName(Elements.Response, Namespaces.SamlpUri)) { samlResponse = ReadSamlResponse(source); } @@ -52,7 +52,7 @@ protected virtual void ReadElements(XmlTraverser source, SamlResponse samlRespon { ReadElements(source, (StatusResponseType)samlResponse); - while (source.HasName(Namespaces.SamlUri, Elements.Assertion)) + while (source.HasName(Elements.Assertion, Namespaces.SamlUri)) { samlResponse.Assertions.Add(ReadAssertion(source)); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Status.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Status.cs index 71f28cb55..c3aedd22d 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Status.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Status.cs @@ -30,7 +30,7 @@ protected virtual void ReadElements(XmlTraverser source, SamlStatus status) { source.MoveNext(); - if (source.EnsureName(Namespaces.SamlpUri, Elements.StatusCode)) + if (source.EnsureName(Elements.StatusCode, Namespaces.SamlpUri)) { status.StatusCode = ReadStatusCode(source); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.StatusResponseType.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.StatusResponseType.cs index 4c3b1bd36..bead10c8e 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.StatusResponseType.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.StatusResponseType.cs @@ -30,7 +30,7 @@ protected virtual void ReadElements(XmlTraverser source, StatusResponseType resp { source.MoveNext(); - if (source.HasName(Namespaces.SamlUri, Elements.Issuer)) + if (source.HasName(Elements.Issuer, Namespaces.SamlUri)) { response.Issuer = ReadNameId(source); @@ -46,13 +46,13 @@ protected virtual void ReadElements(XmlTraverser source, StatusResponseType resp source.MoveNext(); } - if (source.HasName(Namespaces.SamlpUri, Elements.Extensions)) + if (source.HasName(Elements.Extensions, Namespaces.SamlpUri)) { response.Extensions = ReadExtensions(source); source.MoveNext(); } - if (source.EnsureName(Namespaces.SamlpUri, Elements.Status)) + if (source.EnsureName(Elements.Status, Namespaces.SamlpUri)) { response.Status = ReadStatus(source); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Subject.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Subject.cs index ab80676f9..46a6524b8 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Subject.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.Subject.cs @@ -30,7 +30,7 @@ protected virtual void ReadElements(XmlTraverser source, Subject subject) { source.MoveNext(true); - if (source.HasName(Namespaces.SamlUri, Elements.NameID)) + if (source.HasName(Elements.NameID, Namespaces.SamlUri)) { subject.NameId = ReadNameId(source); source.MoveNext(true); @@ -40,7 +40,7 @@ protected virtual void ReadElements(XmlTraverser source, Subject subject) // TODO: Support BaseID and EncryptedID } - if (source.HasName(Namespaces.SamlUri, Elements.SubjectConfirmation)) + if (source.HasName(Elements.SubjectConfirmation, Namespaces.SamlUri)) { subject.SubjectConfirmation = ReadSubjectConfirmation(source); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SubjectConfirmation.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SubjectConfirmation.cs index 2e1fbf05b..71e3946c1 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SubjectConfirmation.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.SubjectConfirmation.cs @@ -41,7 +41,7 @@ protected virtual void ReadElements(XmlTraverser source, SubjectConfirmation sub { source.MoveNext(true); - if (source.HasName(Namespaces.SamlUri, Elements.SubjectConfirmationData)) + if (source.HasName(Elements.SubjectConfirmationData, Namespaces.SamlUri)) { subjectConfirmation.SubjectConfirmationData = ReadSubjectConfirmationData(source); source.MoveNext(true); diff --git a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.cs b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.cs index e60ac4289..9026a3f9d 100644 --- a/src/Sustainsys.Saml2/Serialization/SamlXmlReader.cs +++ b/src/Sustainsys.Saml2/Serialization/SamlXmlReader.cs @@ -68,7 +68,7 @@ protected virtual void ThrowOnErrors(XmlTraverser source) { var trustedSigningKeys = TrustedSigningKeys; var allowedHashAlgorithms = AllowedHashAlgorithms; - if (source.HasName(SignedXml.XmlDsigNamespaceUrl, Elements.Signature)) + if (source.HasName(Elements.Signature, SignedXml.XmlDsigNamespaceUrl)) { if (issuer == null) { diff --git a/src/Sustainsys.Saml2/Xml/XmlTraverser.cs b/src/Sustainsys.Saml2/Xml/XmlTraverser.cs index ab85cf33f..d064a1d95 100644 --- a/src/Sustainsys.Saml2/Xml/XmlTraverser.cs +++ b/src/Sustainsys.Saml2/Xml/XmlTraverser.cs @@ -256,14 +256,13 @@ public bool EnsureNamespace(string namespaceUri) return true; } - // TODO: Reorder params to follow XmlNode convention with localName, namespaceUri /// /// Ensure that the current node has a specific localName and namespace. /// - /// Expected Namespace uri /// Expected local name + /// Expected Namespace uri /// True if both are ok - public bool EnsureName(string namespaceUri, string localName) + public bool EnsureName(string localName, string namespaceUri) { var namespaceOk = EnsureNamespace(namespaceUri); @@ -293,10 +292,10 @@ public string GetTextContents() /// /// Checks if the current node has the qualified name. /// - /// Expected namespace /// Expected local name + /// Expected namespace /// True if expected - public bool HasName(string namespaceUri, string localName) + public bool HasName(string localName, string namespaceUri) => CurrentNode != null && CurrentNode.LocalName == localName && CurrentNode.NamespaceURI == namespaceUri; /// diff --git a/src/Tests/Sustainsys.Saml2.Tests/Xml/XmlTraverserTests.cs b/src/Tests/Sustainsys.Saml2.Tests/Xml/XmlTraverserTests.cs index 4a096e176..f096831ac 100644 --- a/src/Tests/Sustainsys.Saml2.Tests/Xml/XmlTraverserTests.cs +++ b/src/Tests/Sustainsys.Saml2.Tests/Xml/XmlTraverserTests.cs @@ -71,7 +71,7 @@ public void EnsureName(string ns, string localName, params ErrorReason[] errorRe { var subject = GetXmlTraverser(); - var actual = subject.EnsureName(ns, localName); + var actual = subject.EnsureName(localName, ns); actual.Should().Be(errorReasons.Length == 0); @@ -83,7 +83,7 @@ public void ThrowsOnError() { var subject = GetXmlTraverser(); - subject.EnsureName("whatever", "root"); + subject.EnsureName("root", "whatever"); subject.IgnoreChildren(); subject.MoveNext(true); @@ -99,7 +99,7 @@ public void ThrowsOnMultipleErrors() { var subject = GetXmlTraverser(); - subject.EnsureName("whatever", "something"); + subject.EnsureName("something", "whatever"); subject.MoveNext(true); @@ -127,7 +127,7 @@ public void IgnoreSupressedError() { var subject = GetXmlTraverser(); - subject.EnsureName("whatever", "something"); + subject.EnsureName("something", "whatever"); subject.MoveNext(true); @@ -145,7 +145,7 @@ public void HandlesMixedSupression() { var subject = GetXmlTraverser(); - subject.EnsureName("whatever", "something"); + subject.EnsureName("something", "whatever"); subject.IgnoreChildren(); subject.MoveNext(true);