X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a93ef946eb1e73ee190ea4ff19c4f9278235530c..3aaefcb3c76ff470b475d950398d01255e87712a:/sdk/go/auth/auth.go diff --git a/sdk/go/auth/auth.go b/sdk/go/auth/auth.go index ad1d398c76..f1c2e243b5 100644 --- a/sdk/go/auth/auth.go +++ b/sdk/go/auth/auth.go @@ -5,6 +5,7 @@ package auth import ( + "context" "encoding/base64" "net/http" "net/url" @@ -15,11 +16,24 @@ type Credentials struct { Tokens []string } -func NewCredentials() *Credentials { - return &Credentials{Tokens: []string{}} +func NewCredentials(tokens ...string) *Credentials { + return &Credentials{Tokens: tokens} } -func NewCredentialsFromHTTPRequest(r *http.Request) *Credentials { +func NewContext(ctx context.Context, c *Credentials) context.Context { + return context.WithValue(ctx, contextKeyCredentials{}, c) +} + +func FromContext(ctx context.Context) (*Credentials, bool) { + c, ok := ctx.Value(contextKeyCredentials{}).(*Credentials) + return c, ok +} + +func CredentialsFromRequest(r *http.Request) *Credentials { + if c, ok := FromContext(r.Context()); ok { + // preloaded by middleware + return c + } c := NewCredentials() c.LoadTokensFromHTTPRequest(r) return c @@ -83,7 +97,7 @@ func (a *Credentials) loadTokenFromCookie(r *http.Request) { a.Tokens = append(a.Tokens, string(token)) } -// LoadTokensFromHTTPRequestBody() loads credentials from the request +// LoadTokensFromHTTPRequestBody loads credentials from the request // body. // // This is separate from LoadTokensFromHTTPRequest() because it's not