Example #1
0
func (ar *AuthnRequest) PopulateFromXML(n types.Node) error {
	if err := ar.Request.PopulateFromXML(n); err != nil {
		return err
	}

	xpc, err := xpath.NewContext(n)
	if err != nil {
		return errors.New("failed to create xpath context: " + err.Error())
	}

	if err := xpc.RegisterNS(ns.SAML.Prefix, ns.SAML.URI); err != nil {
		return errors.New("failed to register namespace for xpath context: " + err.Error())
	}

	ar.ProviderName = xpath.String(xpc.Find("@ProviderName"))
	// Check if we have a proper ProtocolBinding
	switch proto := binding.Protocol(xpath.String(xpc.Find("@ProtocolBinding"))); proto {
	case binding.HTTPPost, binding.HTTPRedirect:
		ar.ProtocolBinding = proto
	default:
		return errors.New("invalid protocol binding")
	}

	ar.AssertionConsumerServiceURL = xpath.String(xpc.Find("@AssertionConsumerServiceURL"))
	if node := xpath.NodeList(xpc.Find("NameIDPolicy")).First(); node != nil {
		nip := &NameIDPolicy{}
		if err := nip.PopulateFromXML(node.(types.Element)); err != nil {
			return err
		}
		ar.NameIDPolicy = nip
	}

	return nil
}
Example #2
0
func (nip *NameIDPolicy) PopulateFromXML(n types.Element) error {
	xpc, err := makeXPathContext(n)
	if err != nil {
		return err
	}

	nip.AllowCreate = xpath.Bool(xpc.Find("@AllowCreate"))
	nip.Format = nameid.Format(xpath.String(xpc.Find("@Format")))
	nip.SPNameQualifier = xpath.String(xpc.Find("@SPNameQualifier"))
	return nil
}
Example #3
0
func (r *Request) PopulateFromXML(n types.Node) error {
	xpc, err := makeXPathContext(n)
	if err != nil {
		return err
	}

	r.ID = xpath.String(xpc.Find("@ID"))
	r.Version = xpath.String(xpc.Find("@Version"))
	s := xpath.String(xpc.Find("@IssueInstant"))
	if s == "" {
		t, err := time.Parse(TimeFormat, s)
		if err == nil {
			r.IssueInstant = t
		}
	}

	r.Issuer = xpath.String(xpc.Find(ns.SAML.AddPrefix("Issuer")))
	return nil
}