From e5a285887cd92c395675acd22a839bbc608f5ddf Mon Sep 17 00:00:00 2001 From: Trong Huu Nguyen Date: Mon, 19 Sep 2022 21:14:22 +0200 Subject: [PATCH] refactor(handler/url): extract redirect url decoder method --- pkg/handler/url/url.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/pkg/handler/url/url.go b/pkg/handler/url/url.go index 5a6693a..aef3520 100644 --- a/pkg/handler/url/url.go +++ b/pkg/handler/url/url.go @@ -39,12 +39,9 @@ func CanonicalRedirect(r *http.Request) string { } // 4. Redirect-encoded parameter is set - redirectEncodedParam := r.URL.Query().Get(RedirectURLEncodedParameter) - if len(redirectEncodedParam) > 0 { - decodedBytes, err := base64.RawURLEncoding.DecodeString(redirectEncodedParam) - if err == nil { - redirect = string(decodedBytes) - } + redirectEncoded := RedirectDecoded(r) + if len(redirectEncoded) > 0 { + redirect = redirectEncoded } // Ensure URL isn't encoded @@ -93,6 +90,20 @@ func RedirectEncoded(s string) string { return base64.RawURLEncoding.EncodeToString([]byte(s)) } +func RedirectDecoded(r *http.Request) string { + paramValue := r.URL.Query().Get(RedirectURLEncodedParameter) + if len(paramValue) == 0 { + return "" + } + + bytes, err := base64.RawURLEncoding.DecodeString(paramValue) + if err == nil { + return string(bytes) + } + + return "" +} + func LoginCallbackURL(r *http.Request) (string, error) { return makeCallbackURL(r, paths.LoginCallback) }