Skip to content

Commit 882fa18

Browse files
authored
Merge pull request #151 from go-openapi/goswagger-2041
forward name to oauth2 context and provide an accessor
2 parents 7a84b65 + c6fb0f1 commit 882fa18

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

security/authenticator.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ type secCtxKey uint8
7575

7676
const (
7777
failedBasicAuth secCtxKey = iota
78+
oauth2SchemeName
7879
)
7980

8081
func FailedBasicAuth(r *http.Request) string {
@@ -89,6 +90,18 @@ func FailedBasicAuthCtx(ctx context.Context) string {
8990
return v
9091
}
9192

93+
func OAuth2SchemeName(r *http.Request) string {
94+
return OAuth2SchemeNameCtx(r.Context())
95+
}
96+
97+
func OAuth2SchemeNameCtx(ctx context.Context) string {
98+
v, ok := ctx.Value(oauth2SchemeName).(string)
99+
if !ok {
100+
return ""
101+
}
102+
return v
103+
}
104+
92105
// BasicAuth creates a basic auth authenticator with the provided authentication function
93106
func BasicAuth(authenticate UserPassAuthentication) runtime.Authenticator {
94107
return BasicAuthRealm(DefaultRealmName, authenticate)
@@ -224,6 +237,8 @@ func BearerAuth(name string, authenticate ScopedTokenAuthentication) runtime.Aut
224237
return false, nil, nil
225238
}
226239

240+
rctx := context.WithValue(r.Request.Context(), oauth2SchemeName, name)
241+
*r.Request = *r.Request.WithContext(rctx)
227242
p, err := authenticate(token, r.RequiredScopes)
228243
return true, p, err
229244
})
@@ -252,7 +267,8 @@ func BearerAuthCtx(name string, authenticate ScopedTokenAuthenticationCtx) runti
252267
return false, nil, nil
253268
}
254269

255-
ctx, p, err := authenticate(r.Request.Context(), token, r.RequiredScopes)
270+
rctx := context.WithValue(r.Request.Context(), oauth2SchemeName, name)
271+
ctx, p, err := authenticate(rctx, token, r.RequiredScopes)
256272
*r.Request = *r.Request.WithContext(ctx)
257273
return true, p, err
258274
})

security/bearer_auth_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func TestValidBearerAuth(t *testing.T) {
2929
assert.True(t, ok)
3030
assert.Equal(t, "admin", usr)
3131
assert.NoError(t, err)
32+
assert.Equal(t, OAuth2SchemeName(req1), "owners_auth")
3233

3334
req2, _ := http.NewRequest("GET", "/blah", nil)
3435
req2.Header.Set("Authorization", "Bearer token123")
@@ -37,6 +38,7 @@ func TestValidBearerAuth(t *testing.T) {
3738
assert.True(t, ok)
3839
assert.Equal(t, "admin", usr)
3940
assert.NoError(t, err)
41+
assert.Equal(t, OAuth2SchemeName(req2), "owners_auth")
4042

4143
body := url.Values(map[string][]string{})
4244
body.Set("access_token", "token123")
@@ -47,6 +49,7 @@ func TestValidBearerAuth(t *testing.T) {
4749
assert.True(t, ok)
4850
assert.Equal(t, "admin", usr)
4951
assert.NoError(t, err)
52+
assert.Equal(t, OAuth2SchemeName(req3), "owners_auth")
5053

5154
mpbody := bytes.NewBuffer(nil)
5255
writer := multipart.NewWriter(mpbody)
@@ -59,6 +62,7 @@ func TestValidBearerAuth(t *testing.T) {
5962
assert.True(t, ok)
6063
assert.Equal(t, "admin", usr)
6164
assert.NoError(t, err)
65+
assert.Equal(t, OAuth2SchemeName(req4), "owners_auth")
6266
}
6367

6468
func TestInvalidBearerAuth(t *testing.T) {
@@ -162,6 +166,7 @@ func TestValidBearerAuthCtx(t *testing.T) {
162166
assert.Equal(t, wisdom, req1.Context().Value(original))
163167
assert.Equal(t, extraWisdom, req1.Context().Value(extra))
164168
assert.Nil(t, req1.Context().Value(reason))
169+
assert.Equal(t, OAuth2SchemeName(req1), "owners_auth")
165170

166171
req2, _ := http.NewRequest("GET", "/blah", nil)
167172
req2 = req2.WithContext(context.WithValue(req2.Context(), original, wisdom))
@@ -174,6 +179,7 @@ func TestValidBearerAuthCtx(t *testing.T) {
174179
assert.Equal(t, wisdom, req2.Context().Value(original))
175180
assert.Equal(t, extraWisdom, req2.Context().Value(extra))
176181
assert.Nil(t, req2.Context().Value(reason))
182+
assert.Equal(t, OAuth2SchemeName(req2), "owners_auth")
177183

178184
body := url.Values(map[string][]string{})
179185
body.Set("access_token", "token123")
@@ -188,6 +194,7 @@ func TestValidBearerAuthCtx(t *testing.T) {
188194
assert.Equal(t, wisdom, req3.Context().Value(original))
189195
assert.Equal(t, extraWisdom, req3.Context().Value(extra))
190196
assert.Nil(t, req3.Context().Value(reason))
197+
assert.Equal(t, OAuth2SchemeName(req3), "owners_auth")
191198

192199
mpbody := bytes.NewBuffer(nil)
193200
writer := multipart.NewWriter(mpbody)
@@ -204,6 +211,7 @@ func TestValidBearerAuthCtx(t *testing.T) {
204211
assert.Equal(t, wisdom, req4.Context().Value(original))
205212
assert.Equal(t, extraWisdom, req4.Context().Value(extra))
206213
assert.Nil(t, req4.Context().Value(reason))
214+
assert.Equal(t, OAuth2SchemeName(req4), "owners_auth")
207215
}
208216

209217
func TestInvalidBearerAuthCtx(t *testing.T) {

0 commit comments

Comments
 (0)