diff --git a/internal/httpclient/client.go b/internal/httpclient/client.go index 10fba5d42..445c6a9e5 100644 --- a/internal/httpclient/client.go +++ b/internal/httpclient/client.go @@ -178,6 +178,9 @@ func New(cfg Config) *Client { return &c } +// RoundTrip allows httpclient.Client{} to be used as an http.Transport{}, just calling Client{}.Do(). +func (c *Client) RoundTrip(r *http.Request) (rsp *http.Response, err error) { return c.Do(r) } + // Do will essentially perform http.Client{}.Do() with retry-backoff functionality. func (c *Client) Do(r *http.Request) (rsp *http.Response, err error) { diff --git a/internal/webpush/realsender.go b/internal/webpush/realsender.go index 8b3a1bd66..a19fc8b37 100644 --- a/internal/webpush/realsender.go +++ b/internal/webpush/realsender.go @@ -33,7 +33,6 @@ "github.com/superseriousbusiness/gotosocial/internal/filter/usermute" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" - "github.com/superseriousbusiness/gotosocial/internal/httpclient" "github.com/superseriousbusiness/gotosocial/internal/log" "github.com/superseriousbusiness/gotosocial/internal/state" "github.com/superseriousbusiness/gotosocial/internal/text" @@ -47,16 +46,6 @@ type realSender struct { converter *typeutils.Converter } -// NewRealSender creates a Sender from an http.Client instead of an httpclient.Client. -// This should only be used by NewSender and in tests. -func NewRealSender(httpClient *http.Client, state *state.State, converter *typeutils.Converter) Sender { - return &realSender{ - httpClient: httpClient, - state: state, - converter: converter, - } -} - func (r *realSender) Send( ctx context.Context, notification *gtsmodel.Notification, @@ -329,13 +318,3 @@ func formatNotificationBody(apiNotification *apimodel.Notification) string { func firstNBytesTrimSpace(s string, n int) string { return strings.TrimSpace(text.FirstNBytesByWords(strings.TrimSpace(s), n)) } - -// gtsHTTPClientRoundTripper helps wrap a GtS HTTP client back into a regular HTTP client, -// so that webpush-go can use our IP filters, bad hosts list, and retries. -type gtsHTTPClientRoundTripper struct { - httpClient *httpclient.Client -} - -func (r *gtsHTTPClientRoundTripper) RoundTrip(request *http.Request) (*http.Response, error) { - return r.httpClient.Do(request) -} diff --git a/internal/webpush/realsender_test.go b/internal/webpush/realsender_test.go index c94bbbb8e..167e198c9 100644 --- a/internal/webpush/realsender_test.go +++ b/internal/webpush/realsender_test.go @@ -15,7 +15,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -package webpush_test +package webpush import ( "context" @@ -40,7 +40,6 @@ "github.com/superseriousbusiness/gotosocial/internal/subscriptions" "github.com/superseriousbusiness/gotosocial/internal/transport" "github.com/superseriousbusiness/gotosocial/internal/typeutils" - "github.com/superseriousbusiness/gotosocial/internal/webpush" "github.com/superseriousbusiness/gotosocial/testrig" ) @@ -56,7 +55,7 @@ type RealSenderStandardTestSuite struct { federator *federation.Federator oauthServer oauth.Server emailSender email.Sender - webPushSender webpush.Sender + webPushSender Sender // standard suite models testTokens map[string]*gtsmodel.Token @@ -120,13 +119,13 @@ func (suite *RealSenderStandardTestSuite) SetupTest() { suite.oauthServer = testrig.NewTestOauthServer(suite.db) suite.emailSender = testrig.NewEmailSender("../../web/template/", nil) - suite.webPushSender = webpush.NewRealSender( + suite.webPushSender = &realSender{ &http.Client{ Transport: suite, }, &suite.state, suite.typeconverter, - ) + } suite.processor = processing.NewProcessor( cleaner.New(&suite.state), diff --git a/internal/webpush/sender.go b/internal/webpush/sender.go index 5331f049a..ad3a48f82 100644 --- a/internal/webpush/sender.go +++ b/internal/webpush/sender.go @@ -41,14 +41,17 @@ type Sender interface { // NewSender creates a new sender from an HTTP client, DB, and worker pool. func NewSender(httpClient *httpclient.Client, state *state.State, converter *typeutils.Converter) Sender { - return NewRealSender( - &http.Client{ - Transport: >sHTTPClientRoundTripper{ - httpClient: httpClient, - }, - // Other fields are already set on the http.Client inside the httpclient.Client. + return &realSender{ + httpClient: &http.Client{ + // Pass in our wrapped httpclient.Client{} + // type as http.Transport{} in order to take + // advantage of retries, SSF protection etc. + Transport: httpClient, + + // Other http.Client{} fields are already + // set in embedded httpclient.Client{}. }, - state, - converter, - ) + state: state, + converter: converter, + } }