// selectProfile selects the Profile for the given query parameters, adds the // Profile to the ctx, and calls the next handler. The next handler should // handle a missing profile. func (s *Server) selectProfile(core server.Server, next ContextHandler) ContextHandler { fn := func(ctx context.Context, w http.ResponseWriter, req *http.Request) { attrs := labelsFromRequest(s.logger, req) // match machine request profile, err := core.SelectProfile(ctx, &pb.SelectProfileRequest{Labels: attrs}) if err == nil { // add the Profile to the ctx for the next handler ctx = withProfile(ctx, profile) } next.ServeHTTP(ctx, w, req) } return ContextHandlerFunc(fn) }