override fun doHandle()

in nuget-feed/src/jetbrains/buildServer/nuget/feed/server/controllers/NuGetFeedController.kt [51:109]


    override fun doHandle(request: HttpServletRequest,
                          response: HttpServletResponse): ModelAndView? {
        if (!mySettings.isNuGetServerEnabled) {
            return NuGetResponseUtil.nugetFeedIsDisabled(response)
        }

        if (isPublishPackageServiceFeed(request)) {
            return handlePublishPackageService(request, response)
        }

        val (feedPath, projectId, feedId, apiMethod) = getPathComponents(request)
        if (projectId.isEmpty() || feedId.isEmpty()) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND, "Invalid request to NuGet Feed")
            return null
        }

        val project = myProjectManager.findProjectByExternalId(projectId)
        if (project == null) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND, "NuGet Feed project $projectId not found")
            return null
        }

        if (!myRepositoryManager.hasRepository(project, PackageConstants.NUGET_PROVIDER_ID, feedId)) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND, "NuGet Feed $feedId not found")
            return null
        }

        val requestWrapper = createRequestWrapper(request, feedPath)

        // Process package download request
        if (apiMethod == "DOWNLOAD") {
            val artifactDownloadUrl = "/repository/download${getRelativeRequestPath(requestWrapper, feedPath)}"
            val dispatcher = request.getRequestDispatcher(artifactDownloadUrl)
            if (dispatcher != null) {
                LOG.debug(String.format("Forwarding download package request from %s to %s", getRequestPath(requestWrapper), artifactDownloadUrl))
                dispatcher.forward(request, response)
            }
            return null
        }

        // Set NuGet feed API version
        requestWrapper.setAttribute(NuGetFeedConstants.NUGET_FEED_API_VERSION, NuGetAPIVersion.valueOf(apiMethod))

        val feedHandler = myFeedProvider.getHandler(requestWrapper)
        if (feedHandler == null) {
            LOG.debug(String.format("%s: %s", UNSUPPORTED_REQUEST, formatRequestUrl(requestWrapper, feedPath)))
            // error response according to OData spec for unsupported operations (modification operations)
            response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, UNSUPPORTED_REQUEST)
            return null
        }

        handleRequest(requestWrapper, response, feedPath) {
            handlerRequest, handlerResponse ->
            val feedData = NuGetFeedData(project.projectId, project.externalId, feedId)
            feedHandler.handleRequest(feedData, handlerRequest, handlerResponse)
        }

        return null
    }