Skip to content

Commit 97deba2

Browse files
committed
tidy up AuthnRequest.Redirect
fixes crewjam#571
1 parent f051927 commit 97deba2

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

service_provider.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"net/http"
2121
"net/url"
2222
"regexp"
23+
"strings"
2324
"time"
2425

2526
"github.com/beevik/etree"
@@ -282,28 +283,32 @@ func (sp *ServiceProvider) MakeRedirectAuthenticationRequest(relayState string)
282283

283284
// Redirect returns a URL suitable for using the redirect binding with the request
284285
func (r *AuthnRequest) Redirect(relayState string, sp *ServiceProvider) (*url.URL, error) {
285-
w := &bytes.Buffer{}
286-
w1 := base64.NewEncoder(base64.StdEncoding, w)
287-
w2, _ := flate.NewWriter(w1, 9)
286+
var requestStr strings.Builder
287+
base64Writer := base64.NewEncoder(base64.StdEncoding, &requestStr)
288+
compressedWriter, _ := flate.NewWriter(base64Writer, 9)
288289
doc := etree.NewDocument()
289290
doc.SetRoot(r.Element())
290-
if _, err := doc.WriteTo(w2); err != nil {
291-
panic(err)
291+
if _, err := doc.WriteTo(compressedWriter); err != nil {
292+
return nil, err
292293
}
293-
if err := w2.Close(); err != nil {
294-
panic(err)
294+
if err := compressedWriter.Close(); err != nil {
295+
return nil, err
295296
}
296-
if err := w1.Close(); err != nil {
297-
panic(err)
297+
if err := base64Writer.Close(); err != nil {
298+
return nil, err
299+
}
300+
301+
rv, err := url.Parse(r.Destination)
302+
if err != nil {
303+
return nil, err
298304
}
299305

300-
rv, _ := url.Parse(r.Destination)
301306
// We can't depend on Query().set() as order matters for signing
302307
query := rv.RawQuery
303308
if len(query) > 0 {
304-
query += "&SAMLRequest=" + url.QueryEscape(w.String())
309+
query += "&SAMLRequest=" + url.QueryEscape(requestStr.String())
305310
} else {
306-
query += "SAMLRequest=" + url.QueryEscape(w.String())
311+
query += "SAMLRequest=" + url.QueryEscape(requestStr.String())
307312
}
308313

309314
if relayState != "" {

0 commit comments

Comments
 (0)