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 }