package macaroons import ( "context" "fmt" ) var ( // RootKeyIDContextKey is the key to get rootKeyID from context. RootKeyIDContextKey = contextKey{"rootkeyid"} // ErrContextRootKeyID is used when the supplied context doesn't have // a root key ID. ErrContextRootKeyID = fmt.Errorf("failed to read root key ID " + "from context") ) // contextKey is the type we use to identify values in the context. type contextKey struct { Name string } // ContextWithRootKeyID passes the root key ID value to context. func ContextWithRootKeyID(ctx context.Context, value interface{}) context.Context { return context.WithValue(ctx, RootKeyIDContextKey, value) } // RootKeyIDFromContext retrieves the root key ID from context using the key // RootKeyIDContextKey. func RootKeyIDFromContext(ctx context.Context) ([]byte, error) { id, ok := ctx.Value(RootKeyIDContextKey).([]byte) if !ok { return nil, ErrContextRootKeyID } // Check that the id is not empty. if len(id) == 0 { return nil, ErrMissingRootKeyID } return id, nil }