encode /sso_provider query parameters

This commit is contained in:
Saj Goonatilleke 2020-11-06 09:37:40 +11:00
parent 9d9047a2a1
commit 603e2b7d86
1 changed files with 6 additions and 4 deletions

10
main.go
View File

@ -169,7 +169,7 @@ func redirectIfNoCookie(handler http.Handler, r *http.Request, w http.ResponseWr
sig := query.Get("sig")
if len(sso) == 0 {
url := config.SSOURLString + "/session/sso_provider?" + sso_payload(config.SSOSecret, config.ProxyURLString, r.URL.String())
url := config.SSOURLString + "/session/sso_provider?" + sso_payload(config.SSOSecret, config.ProxyURLString, r.URL.String()).Encode()
http.Redirect(w, r, url, 302)
} else {
decoded, err := base64.StdEncoding.DecodeString(sso)
@ -285,12 +285,14 @@ func parseCookie(data, secret string) (username string, groups string, err error
// sso_payload takes the SSO secret and the two redirection URLs, stores the
// returnUrl in the nonce cache, and returns a partial URL querystring.
func sso_payload(secret string, return_sso_url string, returnUrl string) string {
func sso_payload(secret string, return_sso_url string, returnUrl string) url.Values {
result := "return_sso_url=" + url.QueryEscape(return_sso_url) + url.QueryEscape(returnUrl) + "&nonce=" + url.QueryEscape(addNonce(returnUrl))
payload := base64.StdEncoding.EncodeToString([]byte(result))
// payload, computeHMAC already query-safe
return "sso=" + payload + "&sig=" + computeHMAC(payload, secret)
return url.Values{
"sso": []string{payload},
"sig": []string{computeHMAC(payload, secret)},
}
}
// addNonce takes a return URL and returns a nonce associated to that URL.