Files
monorepo/LCU.API.Internal.OnlineLoanApp/OnlineBankingAuth/Parsers/SAMLParser.cs
T
2026-03-11 11:18:25 -05:00

71 lines
2.6 KiB
C#

using Landmark.OLA.Models.OnlineBanking;
using System.Xml;
namespace OnlineBankingAuth.Parsers
{
public class SAMLParser : ISAMLParser<DISAMLAssertion>
{
public string SAML_NAMESPACE = "saml:";
public DISAMLAssertion ParseAssertion(XmlElement xmlElement)
{
try
{
var assertion = new DISAMLAssertion
{
NameID = xmlElement.GetElementsByTagName(SAML_NAMESPACE + "NameID")[0].InnerText,
Recipient = xmlElement.GetElementsByTagName(SAML_NAMESPACE + "SubjectConfirmationData")[0].Attributes[1].InnerText,
MemberID = xmlElement.GetElementsByTagName(SAML_NAMESPACE + "AttributeValue")[0].InnerText,
FI_ID = xmlElement.GetElementsByTagName(SAML_NAMESPACE + "AttributeValue")[1].InnerText,
AuthnStatement = ParseAuthnStatement(xmlElement),
Conditions = ParseConditions(xmlElement),
};
return assertion;
}
catch
{
throw new FormatException("SAML Response is in an unexpected layout.");
}
}
public AuthenticationStatement ParseAuthnStatement(XmlElement xmlElement)
{
try
{
var authnStatement = new AuthenticationStatement
{
SessionIndex = xmlElement.GetElementsByTagName(SAML_NAMESPACE + "AuthnStatement")[0].Attributes[1].InnerText,
AuthContextClassRef = xmlElement.GetElementsByTagName(SAML_NAMESPACE + "AuthnContextClassRef")[0].InnerText
};
return authnStatement;
}
catch
{
throw new FormatException("AuthnStatement is in an unexpected layout.");
}
}
public SAMLConditions ParseConditions(XmlElement xmlElement)
{
try
{
var conditions = new SAMLConditions
{
Audience = xmlElement.GetElementsByTagName(SAML_NAMESPACE + "Audience")[0].InnerText,
NotBefore = DateTime.Parse(xmlElement.GetElementsByTagName(SAML_NAMESPACE + "Conditions")[0].Attributes[0].InnerText),
NotAfter = DateTime.Parse(xmlElement.GetElementsByTagName(SAML_NAMESPACE + "Conditions")[0].Attributes[1].InnerText),
};
return conditions;
}
catch
{
throw new FormatException("SAML Conditions is in an unexpected layout");
}
}
}
}