From 4968c5f93a938668459e7b102559375a5a1240c2 Mon Sep 17 00:00:00 2001 From: Lukasz Raczylo Date: Sat, 27 Jul 2024 11:06:42 +0100 Subject: [PATCH] Optimise: Build auth URL. --- main.go | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index 70030af..12067db 100644 --- a/main.go +++ b/main.go @@ -327,20 +327,27 @@ func (t *TraefikOidc) verifyToken(token string) error { return t.tokenVerifier.VerifyToken(token) } +var authURLBuilder strings.Builder + func (t *TraefikOidc) buildAuthURL(redirectURL, state, nonce string) string { - params := url.Values{ - "client_id": {t.clientID}, - "response_type": {"code"}, - "redirect_uri": {redirectURL}, - "state": {state}, - "nonce": {nonce}, - } + authURLBuilder.Reset() + authURLBuilder.Grow(256) // Pre-allocate some space + authURLBuilder.WriteString(t.authURL) + authURLBuilder.WriteString("?client_id=") + authURLBuilder.WriteString(t.clientID) + authURLBuilder.WriteString("&response_type=code&redirect_uri=") + authURLBuilder.WriteString(url.QueryEscape(redirectURL)) + authURLBuilder.WriteString("&state=") + authURLBuilder.WriteString(state) + authURLBuilder.WriteString("&nonce=") + authURLBuilder.WriteString(nonce) if len(t.scopes) > 0 { - params.Set("scope", strings.Join(t.scopes, " ")) + authURLBuilder.WriteString("&scope=") + authURLBuilder.WriteString(strings.Join(t.scopes, "+")) } - return fmt.Sprintf("%s?%s", t.authURL, params.Encode()) + return authURLBuilder.String() } func (t *TraefikOidc) startTokenCleanup() {