16306: Merge branch 'master'
[arvados.git] / sdk / go / auth / auth.go
index 3c266e0d3afda2254df6b3c7ccad7157a121bc6c..f1c2e243b53a8f5d7ae604d1b67df55968430fcd 100644 (file)
@@ -5,6 +5,7 @@
 package auth
 
 import (
+       "context"
        "encoding/base64"
        "net/http"
        "net/url"
@@ -15,12 +16,21 @@ type Credentials struct {
        Tokens []string
 }
 
-func NewCredentials() *Credentials {
-       return &Credentials{Tokens: []string{}}
+func NewCredentials(tokens ...string) *Credentials {
+       return &Credentials{Tokens: tokens}
+}
+
+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 := r.Context().Value(contextKeyCredentials).(*Credentials); ok {
+       if c, ok := FromContext(r.Context()); ok {
                // preloaded by middleware
                return c
        }
@@ -87,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