src/server/auth/server/saml.go
func fetchRawIDPMetadata(name string, mdURL *url.URL) ([]byte, error) {
	c := http.DefaultClient
	req, err := http.NewRequest("GET", mdURL.String(), nil)
	if err != nil {
		return nil, fmt.Errorf("could not retrieve IdP metadata for %q: %v", name, err)
	}
	req.Header.Set("User-Agent", "Golang; github.com/pachyderm/pachdyerm")

	var rawMetadata []byte
	b := backoff.NewInfiniteBackOff()
	b.MaxElapsedTime = 30 * time.Second
	b.MaxInterval = 2 * time.Second
	if err := backoff.RetryNotify(func() error {
		resp, err := c.Do(req)
		if err != nil {
			return err
		}

		if resp.StatusCode != http.StatusOK {
			return fmt.Errorf("%d %s", resp.StatusCode, resp.Status)
		}
		rawMetadata, err = ioutil.ReadAll(resp.Body)
		resp.Body.Close()
		if err != nil {
			return fmt.Errorf("could not read IdP metadata response body: %v", err)
		}
		if len(rawMetadata) == 0 {
			return fmt.Errorf("empty metadata from IdP")
		}
		return nil
	}, b, func(err error, d time.Duration) error {
		logrus.Printf("error retrieving IdP metadata: %v; retrying in %v", err, d)
		return nil
	}); err != nil {
		return nil, err
	}

	// Successfully retrieved metadata
	return rawMetadata, nil
}
func fetchRawIDPMetadata(name string, mdURL *url.URL) ([]byte, error) {
	c := http.DefaultClient
	req, err := http.NewRequest("GET", mdURL.String(), nil)
	if err != nil {
		return nil, fmt.Errorf("could not retrieve IdP metadata for %q: %v", name, err)
	}
	req.Header.Set("User-Agent", "Golang; github.com/pachyderm/pachdyerm")

	var rawMetadata []byte
	b := backoff.NewInfiniteBackOff()
	b.MaxElapsedTime = 30 * time.Second
	b.MaxInterval = 2 * time.Second
	if err := backoff.RetryNotify(func() error {
		resp, err := c.Do(req)
		if err != nil {
			return err
		}

		if resp.StatusCode != http.StatusOK {
			return fmt.Errorf("%d %s", resp.StatusCode, resp.Status)
		}
		rawMetadata, err = ioutil.ReadAll(resp.Body)
		resp.Body.Close()
		if err != nil {
			return fmt.Errorf("could not read IdP metadata response body: %v", err)
		}
		if len(rawMetadata) == 0 {
			return fmt.Errorf("empty metadata from IdP")
		}
		return nil
	}, b, func(err error, d time.Duration) error {
		logrus.Printf("error retrieving IdP metadata: %v; retrying in %v", err, d)
		return nil
	}); err != nil {
		return nil, err
	}

	// Successfully retrieved metadata
	return rawMetadata, nil
}
func fetchRawIDPMetadata ( name string , mdURL * url . URL ) ( [ ] byte , error ) { c := http . DefaultClient req , err := http . NewRequest ( " " , mdURL . String ( ) , nil ) if err != nil { return nil , fmt . Errorf ( " " , name , err ) } req . Header . Set ( " " , " " ) var rawMetadata [ ] byte b := backoff . NewInfiniteBackOff ( ) b . MaxElapsedTime = 30 * time . Second b . MaxInterval = 2 * time . Second if err := backoff . RetryNotify ( func ( ) error { resp , err := c . Do ( req ) if err != nil { return err } if resp . StatusCode != http . StatusOK { return fmt . Errorf ( " " , resp . StatusCode , resp . Status ) } rawMetadata , err = ioutil . ReadAll ( resp . Body ) resp . Body . Close ( ) if err != nil { return fmt . Errorf ( " " , err ) } if len ( rawMetadata ) == 0 { return fmt . Errorf ( " " ) } return nil } , b , func ( err error , d time . Duration ) error { logrus . Printf ( " " , err , d ) return nil } ) ; err != nil { return nil , err } // Successfully retrieved metadata return rawMetadata , nil }
// fetchRawIDPMetadata is a helper of validateConfig, below. It takes the URL
// of a SAML IdP's Metadata service, queries it, parses the result, and returns
// it as a struct the crewjam/saml library can use.
// This code is heavily based on the crewjam/saml/samlsp.Middleware constructor
fetchRawIDPMetadata is a helper of validateConfig below . It takes the URL of a SAML IdP s Metadata service queries it parses the result and returns it as a struct the crewjam / saml library can use . This code is heavily based on the crewjam / saml / samlsp . Middleware constructor