mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[bugfix] httpclient not signing subsequent redirect requests (#2798)
* move http request signing to transport * actually hook up the http roundtripper ... * add code comments for the new gtscontext functions
This commit is contained in:
@@ -19,6 +19,7 @@ package gtscontext
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
|
||||
@@ -42,6 +43,7 @@ const (
|
||||
httpSigKey
|
||||
httpSigPubKeyIDKey
|
||||
dryRunKey
|
||||
httpClientSignFnKey
|
||||
)
|
||||
|
||||
// DryRun returns whether the "dryrun" context key has been set. This can be
|
||||
@@ -127,6 +129,19 @@ func SetOtherIRIs(ctx context.Context, iris []*url.URL) context.Context {
|
||||
return context.WithValue(ctx, otherIRIsKey, iris)
|
||||
}
|
||||
|
||||
// HTTPClientSignFunc returns an httpclient signing function for the current client
|
||||
// request context. This can be used to resign a request as calling transport's user.
|
||||
func HTTPClientSignFunc(ctx context.Context) func(*http.Request) error {
|
||||
fn, _ := ctx.Value(httpClientSignFnKey).(func(*http.Request) error)
|
||||
return fn
|
||||
}
|
||||
|
||||
// SetHTTPClientSignFunc stores the given httpclient signing function and returns the wrapped
|
||||
// context. See HTTPClientSignFunc() for further information on the signing function value.
|
||||
func SetHTTPClientSignFunc(ctx context.Context, fn func(*http.Request) error) context.Context {
|
||||
return context.WithValue(ctx, httpClientSignFnKey, fn)
|
||||
}
|
||||
|
||||
// HTTPSignatureVerifier returns an http signature verifier for the current ActivityPub
|
||||
// request chain. This verifier can be called to authenticate the current request.
|
||||
func HTTPSignatureVerifier(ctx context.Context) httpsig.VerifierWithOptions {
|
||||
|
Reference in New Issue
Block a user