in app/controllers/BulkDownloadController.scala [122:158]
def getBulkDownload(tokenId:String, notOnlyRushes:Option[Boolean]) = Action.async {
serverTokenDAO.get(tokenId).flatMap({
case None=>
Future(NotFound(GenericErrorResponse("not_found","No such bulk download").asJson))
case Some(token)=>
serverTokenDAO.remove(tokenId).flatMap(_=> {
token.associatedId match {
case None=>
logger.error(s"Token $tokenId is invalid, it does not contain a project ID")
Future(NotFound(GenericErrorResponse("not_found","Invalid token").asJson))
case Some(combinedId)=>
val ids = combinedId.split("\\|")
val projectId = ids.head
val vaultId = ids(1)
logger.debug(s"Combined ID is $combinedId, project ID is $projectId, vault ID is $vaultId")
withVaultAsync(vaultId) { userInfo =>
createRetrievalToken(token.createdForUser.getOrElse(""), combinedId).flatMap(retrievalToken=> {
getContent(userInfo, projectId, !notOnlyRushes.getOrElse(false)).map({
case Right(synopses)=>
val meta = LightboxBulkEntry(projectId, s"Vaultdoor download for project $projectId", token.createdForUser.getOrElse(""), ZonedDateTime.now(), 0, synopses.length, 0)
Ok(BulkDownloadInitiateResponse("ok", meta, retrievalToken.value, synopses).asJson)
case Left(problem)=>
logger.warn(s"Could not complete bulk download for token $tokenId: $problem")
BadRequest(GenericErrorResponse("invalid", problem).asJson)
})
})
}
}
}).recover({
case err:Throwable=>
logger.error(s"Could not get bulk download for token $tokenId: ", err)
InternalServerError(GenericErrorResponse("error","Server failure, please check the logs").asJson)
})
})
}