github.com/crewjam/saml@v0.4.14/testsaml/parse.go (about)

     1  // Package testsaml contains functions for use in testing SAML requests and responses.
     2  package testsaml
     3  
     4  import (
     5  	"bytes"
     6  	"compress/flate"
     7  	"encoding/base64"
     8  	"fmt"
     9  	"io"
    10  	"net/url"
    11  )
    12  
    13  // ParseRedirectRequest returns the decoded SAML AuthnRequest from an HTTP-Redirect URL
    14  func ParseRedirectRequest(u *url.URL) ([]byte, error) {
    15  	compressedRequest, err := base64.StdEncoding.DecodeString(u.Query().Get("SAMLRequest"))
    16  	if err != nil {
    17  		return nil, fmt.Errorf("cannot decode request: %s", err)
    18  	}
    19  	buf, err := io.ReadAll(flate.NewReader(bytes.NewReader(compressedRequest)))
    20  	if err != nil {
    21  		return nil, fmt.Errorf("cannot decompress request: %s", err)
    22  	}
    23  	return buf, nil
    24  }
    25  
    26  // ParseRedirectResponse returns the decoded SAML LogoutResponse from an HTTP-Redirect URL
    27  func ParseRedirectResponse(u *url.URL) ([]byte, error) {
    28  	compressedResponse, err := base64.StdEncoding.DecodeString(u.Query().Get("SAMLResponse"))
    29  	if err != nil {
    30  		return nil, fmt.Errorf("cannot decode response: %s", err)
    31  	}
    32  	buf, err := io.ReadAll(flate.NewReader(bytes.NewReader(compressedResponse)))
    33  	if err != nil {
    34  		return nil, fmt.Errorf("cannot decompress response: %s", err)
    35  	}
    36  	return buf, nil
    37  }