From aea4ab25a93642b9032544e82299ef652162a092 Mon Sep 17 00:00:00 2001
From: Earl Warren <contact@earl-warren.org>
Date: Tue, 27 Jun 2023 10:38:30 +0200
Subject: [PATCH] [TESTS] oauth2: make it possible to use an alternate
 http.Client

---
 services/auth/source/oauth2/http.go           | 10 +++++++
 .../auth/source/oauth2/providers_custom.go    | 26 ++++++++++++++-----
 .../auth/source/oauth2/providers_openid.go    |  1 +
 3 files changed, 30 insertions(+), 7 deletions(-)
 create mode 100644 services/auth/source/oauth2/http.go

diff --git a/services/auth/source/oauth2/http.go b/services/auth/source/oauth2/http.go
new file mode 100644
index 0000000000..1ee52412ae
--- /dev/null
+++ b/services/auth/source/oauth2/http.go
@@ -0,0 +1,10 @@
+// SPDX-FileCopyrightText: Copyright the Forgejo contributors
+// SPDX-License-Identifier: MIT
+
+package oauth2
+
+import (
+	"net/http"
+)
+
+var HTTPClient *http.Client
diff --git a/services/auth/source/oauth2/providers_custom.go b/services/auth/source/oauth2/providers_custom.go
index 65cf538ad7..41570b699e 100644
--- a/services/auth/source/oauth2/providers_custom.go
+++ b/services/auth/source/oauth2/providers_custom.go
@@ -63,7 +63,9 @@ func init() {
 			if setting.OAuth2Client.EnableAutoRegistration {
 				scopes = append(scopes, "user:email")
 			}
-			return github.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, custom.TokenURL, custom.ProfileURL, custom.EmailURL, scopes...), nil
+			provider := github.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, custom.TokenURL, custom.ProfileURL, custom.EmailURL, scopes...)
+			provider.HTTPClient = HTTPClient
+			return provider, nil
 		}))
 
 	RegisterGothProvider(NewCustomProvider(
@@ -73,7 +75,9 @@ func init() {
 			ProfileURL: availableAttribute(gitlab.ProfileURL),
 		}, func(clientID, secret, callbackURL string, custom *CustomURLMapping, scopes []string) (goth.Provider, error) {
 			scopes = append(scopes, "read_user")
-			return gitlab.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, custom.TokenURL, custom.ProfileURL, scopes...), nil
+			provider := gitlab.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, custom.TokenURL, custom.ProfileURL, scopes...)
+			provider.HTTPClient = HTTPClient
+			return provider, nil
 		}))
 
 	RegisterGothProvider(NewCustomProvider(
@@ -83,7 +87,9 @@ func init() {
 			ProfileURL: requiredAttribute(gitea.ProfileURL),
 		},
 		func(clientID, secret, callbackURL string, custom *CustomURLMapping, scopes []string) (goth.Provider, error) {
-			return gitea.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, custom.TokenURL, custom.ProfileURL, scopes...), nil
+			provider := gitea.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, custom.TokenURL, custom.ProfileURL, scopes...)
+			provider.HTTPClient = HTTPClient
+			return provider, nil
 		}))
 
 	RegisterGothProvider(NewCustomProvider(
@@ -93,7 +99,9 @@ func init() {
 			ProfileURL: requiredAttribute(nextcloud.ProfileURL),
 		},
 		func(clientID, secret, callbackURL string, custom *CustomURLMapping, scopes []string) (goth.Provider, error) {
-			return nextcloud.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, custom.TokenURL, custom.ProfileURL, scopes...), nil
+			provider := nextcloud.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, custom.TokenURL, custom.ProfileURL, scopes...)
+			provider.HTTPClient = HTTPClient
+			return provider, nil
 		}))
 
 	RegisterGothProvider(NewCustomProvider(
@@ -101,7 +109,9 @@ func init() {
 			AuthURL: requiredAttribute(mastodon.InstanceURL),
 		},
 		func(clientID, secret, callbackURL string, custom *CustomURLMapping, scopes []string) (goth.Provider, error) {
-			return mastodon.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, scopes...), nil
+			provider := mastodon.NewCustomisedURL(clientID, secret, callbackURL, custom.AuthURL, scopes...)
+			provider.HTTPClient = HTTPClient
+			return provider, nil
 		}))
 
 	RegisterGothProvider(NewCustomProvider(
@@ -114,10 +124,12 @@ func init() {
 				azureScopes[i] = azureadv2.ScopeType(scope)
 			}
 
-			return azureadv2.New(clientID, secret, callbackURL, azureadv2.ProviderOptions{
+			provider := azureadv2.New(clientID, secret, callbackURL, azureadv2.ProviderOptions{
 				Tenant: azureadv2.TenantType(custom.Tenant),
 				Scopes: azureScopes,
-			}), nil
+			})
+			provider.HTTPClient = HTTPClient
+			return provider, nil
 		},
 	))
 }
diff --git a/services/auth/source/oauth2/providers_openid.go b/services/auth/source/oauth2/providers_openid.go
index 54530ae8a8..5f7ac15828 100644
--- a/services/auth/source/oauth2/providers_openid.go
+++ b/services/auth/source/oauth2/providers_openid.go
@@ -43,6 +43,7 @@ func (o *OpenIDProvider) CreateGothProvider(providerName, callbackURL string, so
 	if err != nil {
 		log.Warn("Failed to create OpenID Connect Provider with name '%s' with url '%s': %v", providerName, source.OpenIDConnectAutoDiscoveryURL, err)
 	}
+	provider.HTTPClient = HTTPClient
 	return provider, err
 }