code: func camliHandlerUsingStorage(req *http.Request, action string, storage blobserver.StorageConfiger) (http.Handler, auth.Operation) {
  	var handler http.Handler
  	op := auth.OpAll
  	switch req.Method {
  	case "GET", "HEAD":
  		switch action {
  		case "enumerate-blobs":
  			handler = handlers.CreateEnumerateHandler(storage)
  			op = auth.OpGet
  		case "stat":
  			handler = handlers.CreateStatHandler(storage)
  		case "ws":
  			handler = nil         // TODO: handlers.CreateSocketHandler(storage)
  			op = auth.OpDiscovery // rest of operation auth checks done in handler
  		default:
  			handler = handlers.CreateGetHandler(storage)
  			op = auth.OpGet
  		}
  	case "POST":
  		switch action {
  		case "stat":
  			handler = handlers.CreateStatHandler(storage)
  			op = auth.OpStat
  		case "upload":
  			handler = handlers.CreateBatchUploadHandler(storage)
  			op = auth.OpUpload
  		case "remove":
  			handler = handlers.CreateRemoveHandler(storage)
  		}
  	case "PUT":
  		handler = handlers.CreatePutUploadHandler(storage)
  		op = auth.OpUpload
  	}
  	if handler == nil {
  		handler = http.HandlerFunc(unsupportedHandler)
  	}
  	return handler, op
  }
docs: // action is the part following "/camli/" in the URL. It's either a
  // string like "enumerate-blobs", "stat", "upload", or a blobref.