main
1# frozen_string_literal: true
2
3module Saml
4 module Kit
5 class Parser
6 # Creates a `{Saml::Kit::Metadata}` object from a raw XML [String].
7 #
8 # @param content [String] the raw metadata XML.
9 # @return [Saml::Kit::Metadata] the metadata document or subclass.
10 def metadata_from(content)
11 document = Nokogiri::XML(content)
12 return unless document.at_xpath('/md:EntityDescriptor', XmlParseable::NAMESPACES)
13
14 xpath = '/md:EntityDescriptor/md:SPSSODescriptor'
15 sp = document.at_xpath(xpath, XmlParseable::NAMESPACES)
16 xpath = '/md:EntityDescriptor/md:IDPSSODescriptor'
17 idp = document.at_xpath(xpath, XmlParseable::NAMESPACES)
18 if sp && idp
19 Saml::Kit::CompositeMetadata.new(content)
20 elsif sp
21 Saml::Kit::ServiceProviderMetadata.new(content)
22 elsif idp
23 Saml::Kit::IdentityProviderMetadata.new(content)
24 end
25 end
26 end
27 end
28end