Update to fix lint errors

Context should use type values instead of strings.
Updated direct calls to WithValue, but still other uses of string keys.
Update Acl to ACL in s3 driver.

Cherry-picked to release/2.5 branch

Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
This commit is contained in:
Derek McGowan 2016-10-05 17:47:12 -07:00 committed by Misty Stanley-Jones
parent 12acdf0a6c
commit 0a22649f66
4 changed files with 52 additions and 26 deletions

View file

@ -176,6 +176,18 @@ func filterAccessList(ctx context.Context, scope string, requestedAccessList []a
return grantedAccessList return grantedAccessList
} }
type acctSubject struct{}
func (acctSubject) String() string { return "acctSubject" }
type requestedAccess struct{}
func (requestedAccess) String() string { return "requestedAccess" }
type grantedAccess struct{}
func (grantedAccess) String() string { return "grantedAccess" }
// getToken handles authenticating the request and authorizing access to the // getToken handles authenticating the request and authorizing access to the
// requested scopes. // requested scopes.
func (ts *tokenServer) getToken(ctx context.Context, w http.ResponseWriter, r *http.Request) { func (ts *tokenServer) getToken(ctx context.Context, w http.ResponseWriter, r *http.Request) {
@ -218,17 +230,17 @@ func (ts *tokenServer) getToken(ctx context.Context, w http.ResponseWriter, r *h
username := context.GetStringValue(ctx, "auth.user.name") username := context.GetStringValue(ctx, "auth.user.name")
ctx = context.WithValue(ctx, "acctSubject", username) ctx = context.WithValue(ctx, acctSubject{}, username)
ctx = context.WithLogger(ctx, context.GetLogger(ctx, "acctSubject")) ctx = context.WithLogger(ctx, context.GetLogger(ctx, acctSubject{}))
context.GetLogger(ctx).Info("authenticated client") context.GetLogger(ctx).Info("authenticated client")
ctx = context.WithValue(ctx, "requestedAccess", requestedAccessList) ctx = context.WithValue(ctx, requestedAccess{}, requestedAccessList)
ctx = context.WithLogger(ctx, context.GetLogger(ctx, "requestedAccess")) ctx = context.WithLogger(ctx, context.GetLogger(ctx, requestedAccess{}))
grantedAccessList := filterAccessList(ctx, username, requestedAccessList) grantedAccessList := filterAccessList(ctx, username, requestedAccessList)
ctx = context.WithValue(ctx, "grantedAccess", grantedAccessList) ctx = context.WithValue(ctx, grantedAccess{}, grantedAccessList)
ctx = context.WithLogger(ctx, context.GetLogger(ctx, "grantedAccess")) ctx = context.WithLogger(ctx, context.GetLogger(ctx, grantedAccess{}))
token, err := ts.issuer.CreateJWT(username, service, grantedAccessList) token, err := ts.issuer.CreateJWT(username, service, grantedAccessList)
if err != nil { if err != nil {
@ -340,17 +352,17 @@ func (ts *tokenServer) postToken(ctx context.Context, w http.ResponseWriter, r *
return return
} }
ctx = context.WithValue(ctx, "acctSubject", subject) ctx = context.WithValue(ctx, acctSubject{}, subject)
ctx = context.WithLogger(ctx, context.GetLogger(ctx, "acctSubject")) ctx = context.WithLogger(ctx, context.GetLogger(ctx, acctSubject{}))
context.GetLogger(ctx).Info("authenticated client") context.GetLogger(ctx).Info("authenticated client")
ctx = context.WithValue(ctx, "requestedAccess", requestedAccessList) ctx = context.WithValue(ctx, requestedAccess{}, requestedAccessList)
ctx = context.WithLogger(ctx, context.GetLogger(ctx, "requestedAccess")) ctx = context.WithLogger(ctx, context.GetLogger(ctx, requestedAccess{}))
grantedAccessList := filterAccessList(ctx, subject, requestedAccessList) grantedAccessList := filterAccessList(ctx, subject, requestedAccessList)
ctx = context.WithValue(ctx, "grantedAccess", grantedAccessList) ctx = context.WithValue(ctx, grantedAccess{}, grantedAccessList)
ctx = context.WithLogger(ctx, context.GetLogger(ctx, "grantedAccess")) ctx = context.WithLogger(ctx, context.GetLogger(ctx, grantedAccess{}))
token, err := ts.issuer.CreateJWT(subject, service, grantedAccessList) token, err := ts.issuer.CreateJWT(subject, service, grantedAccessList)
if err != nil { if err != nil {

View file

@ -16,7 +16,7 @@ func TestSillyAccessController(t *testing.T) {
} }
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := context.WithValue(nil, "http.request", r) ctx := context.WithRequest(context.Background(), r)
authCtx, err := ac.Authorized(ctx) authCtx, err := ac.Authorized(ctx)
if err != nil { if err != nil {
switch err := err.(type) { switch err := err.(type) {

View file

@ -284,7 +284,7 @@ func TestAccessController(t *testing.T) {
Action: "baz", Action: "baz",
} }
ctx := context.WithValue(nil, "http.request", req) ctx := context.WithRequest(context.Background(), req)
authCtx, err := accessController.Authorized(ctx, testAccess) authCtx, err := accessController.Authorized(ctx, testAccess)
challenge, ok := err.(auth.Challenge) challenge, ok := err.(auth.Challenge)
if !ok { if !ok {

View file

@ -425,6 +425,8 @@ func (app *App) configureEvents(configuration *configuration.Configuration) {
} }
} }
type redisStartAtKey struct{}
func (app *App) configureRedis(configuration *configuration.Configuration) { func (app *App) configureRedis(configuration *configuration.Configuration) {
if configuration.Redis.Addr == "" { if configuration.Redis.Addr == "" {
ctxu.GetLogger(app).Infof("redis not configured") ctxu.GetLogger(app).Infof("redis not configured")
@ -434,11 +436,11 @@ func (app *App) configureRedis(configuration *configuration.Configuration) {
pool := &redis.Pool{ pool := &redis.Pool{
Dial: func() (redis.Conn, error) { Dial: func() (redis.Conn, error) {
// TODO(stevvooe): Yet another use case for contextual timing. // TODO(stevvooe): Yet another use case for contextual timing.
ctx := context.WithValue(app, "redis.connect.startedat", time.Now()) ctx := context.WithValue(app, redisStartAtKey{}, time.Now())
done := func(err error) { done := func(err error) {
logger := ctxu.GetLoggerWithField(ctx, "redis.connect.duration", logger := ctxu.GetLoggerWithField(ctx, "redis.connect.duration",
ctxu.Since(ctx, "redis.connect.startedat")) ctxu.Since(ctx, redisStartAtKey{}))
if err != nil { if err != nil {
logger.Errorf("redis: error connecting: %v", err) logger.Errorf("redis: error connecting: %v", err)
} else { } else {
@ -671,6 +673,18 @@ func (app *App) dispatcher(dispatch dispatchFunc) http.Handler {
}) })
} }
type errCodeKey struct{}
func (errCodeKey) String() string { return "err.code" }
type errMessageKey struct{}
func (errMessageKey) String() string { return "err.message" }
type errDetailKey struct{}
func (errDetailKey) String() string { return "err.detail" }
func (app *App) logError(context context.Context, errors errcode.Errors) { func (app *App) logError(context context.Context, errors errcode.Errors) {
for _, e1 := range errors { for _, e1 := range errors {
var c ctxu.Context var c ctxu.Context
@ -678,23 +692,23 @@ func (app *App) logError(context context.Context, errors errcode.Errors) {
switch e1.(type) { switch e1.(type) {
case errcode.Error: case errcode.Error:
e, _ := e1.(errcode.Error) e, _ := e1.(errcode.Error)
c = ctxu.WithValue(context, "err.code", e.Code) c = ctxu.WithValue(context, errCodeKey{}, e.Code)
c = ctxu.WithValue(c, "err.message", e.Code.Message()) c = ctxu.WithValue(c, errMessageKey{}, e.Code.Message())
c = ctxu.WithValue(c, "err.detail", e.Detail) c = ctxu.WithValue(c, errDetailKey{}, e.Detail)
case errcode.ErrorCode: case errcode.ErrorCode:
e, _ := e1.(errcode.ErrorCode) e, _ := e1.(errcode.ErrorCode)
c = ctxu.WithValue(context, "err.code", e) c = ctxu.WithValue(context, errCodeKey{}, e)
c = ctxu.WithValue(c, "err.message", e.Message()) c = ctxu.WithValue(c, errMessageKey{}, e.Message())
default: default:
// just normal go 'error' // just normal go 'error'
c = ctxu.WithValue(context, "err.code", errcode.ErrorCodeUnknown) c = ctxu.WithValue(context, errCodeKey{}, errcode.ErrorCodeUnknown)
c = ctxu.WithValue(c, "err.message", e1.Error()) c = ctxu.WithValue(c, errMessageKey{}, e1.Error())
} }
c = ctxu.WithLogger(c, ctxu.GetLogger(c, c = ctxu.WithLogger(c, ctxu.GetLogger(c,
"err.code", errCodeKey{},
"err.message", errMessageKey{},
"err.detail")) errDetailKey{}))
ctxu.GetResponseLogger(c).Errorf("response completed with error") ctxu.GetResponseLogger(c).Errorf("response completed with error")
} }
} }