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
}