override fun doHandle()

in google-storage-server/src/main/kotlin/jetbrains/buildServer/serverSide/artifacts/google/web/GoogleSignedUrlController.kt [39:84]


    override fun doHandle(request: HttpServletRequest, response: HttpServletResponse): ModelAndView? {
        if (!isPost(request)) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST)
            return null
        }

        val runningBuild = getRunningBuild(request)
        if (runningBuild == null) {
            LOG.debug("Failed to provide signed urls for request $request. Can't resolve running build.")
            response.sendError(HttpServletResponse.SC_BAD_REQUEST)
            return null
        }

        val parameters = storageSettingsProvider.getStorageSettings(runningBuild)

        val blobPaths = GoogleSignedUrlHelper.readBlobPaths(request.reader.readText())
        if (blobPaths.isEmpty()) {
            LOG.debug("Failed to provide signed urls for request $request. Blob paths collection is empty.")
            response.sendError(HttpServletResponse.SC_BAD_REQUEST)
            return null
        }

        try {
            val data = blobPaths.entries.associate {
                val params = hashMapOf("contentType" to it.value)
                it.key to URL(signedUrlProvider.getSignedUrl(HttpMethod.POST, it.key, parameters + params).first)
            }
            response.writer.append(GoogleSignedUrlHelper.writeSignedUrlMapping(data))
        } catch (e: IOException) {
            LOG.infoAndDebugDetails(
                "Failed to resolve signed upload urls for artifacts of build " + runningBuild.buildId,
                e
            )
            response.status = HttpServletResponse.SC_BAD_GATEWAY
            response.writer.append(e.message)
        } catch (e: Exception) {
            LOG.warnAndDebugDetails(
                "Unexpected error while resolving signed upload urls for artifacts of build " + runningBuild.buildId,
                e
            )
            response.status = HttpServletResponse.SC_BAD_GATEWAY
            response.writer.append(e.message)
        }

        return null
    }