in app/controllers/ProxiesController.scala [222:254]
def associate(maybeFileId:Option[String], proxyId:String) = IsAuthenticatedAsync { _=> _=>
maybeFileId match {
case None =>
Future(BadRequest(GenericErrorResponse("bad_request", "you must specify fileId={es-id}").asJson))
case Some(fileId) =>
val proxyLocationFuture = proxyLocationDAO.getProxyByProxyId(proxyId).flatMap({
case None => //no proxy with this ID in the database yet; do an S3 scan to try to find the requested id
val potentialProxyOrErrorList = indexer.getById(fileId).flatMap(entry=>{
implicit val s3client = s3ClientMgr.getS3Client(awsProfile, entry.region.map(Region.of))
ProxyLocator.findProxyLocation(entry)
})
potentialProxyOrErrorList.map(_.collect({case Right(loc)=>loc})).map(_.find(_.proxyId==proxyId))
case Some(proxyLocation) => //found it in the database
Future(Some(proxyLocation.copy(fileId = fileId)))
})
proxyLocationFuture.flatMap({
case None =>
Future(NotFound(GenericErrorResponse("not_found", "No proxy could be found either in the database or matching given file id").asJson))
case Some(proxyLocation) =>
logger.debug(s"Got proxy location $proxyLocation")
indexer
.getById(fileId)
.map(_.registerNewProxy(proxyLocation))
.map(updated => Ok(ObjectCreatedResponse("registered", "proxy", proxyLocation).asJson))
}).recover({
case ex: Throwable =>
logger.error("Could not associate proxy:", ex)
InternalServerError(GenericErrorResponse("error", ex.toString).asJson)
})
}
}