From f2a0e018e5e6b4c9d80831a419878c024d43d7b3 Mon Sep 17 00:00:00 2001 From: Zach Smith Date: Sun, 30 Apr 2017 14:47:04 -0700 Subject: Add signedFileUrl method --- src/main/scala/xyz/driver/core/file/GcsStorage.scala | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/main/scala/xyz/driver/core/file/GcsStorage.scala') diff --git a/src/main/scala/xyz/driver/core/file/GcsStorage.scala b/src/main/scala/xyz/driver/core/file/GcsStorage.scala index d0a3dad..6c2746e 100644 --- a/src/main/scala/xyz/driver/core/file/GcsStorage.scala +++ b/src/main/scala/xyz/driver/core/file/GcsStorage.scala @@ -1,7 +1,9 @@ package xyz.driver.core.file import java.io.{BufferedOutputStream, File, FileInputStream, FileOutputStream} +import java.net.URL import java.nio.file.{Path, Paths} +import java.util.concurrent.TimeUnit import com.google.cloud.storage.Storage.BlobListOption import com.google.cloud.storage._ @@ -9,11 +11,12 @@ import xyz.driver.core.time.Time import xyz.driver.core.{Name, Revision, generators} import scala.collection.JavaConverters._ +import scala.concurrent.duration.Duration import scala.concurrent.{ExecutionContext, Future} import scalaz.{ListT, OptionT} class GcsStorage(storageClient: Storage, bucketName: Name[Bucket], executionContext: ExecutionContext) - extends FileStorage { + extends SignedFileStorage { implicit private val execution: ExecutionContext = executionContext override def upload(localSource: File, destination: Path): Future[Unit] = Future { @@ -69,4 +72,11 @@ class GcsStorage(storageClient: Storage, bucketName: Name[Bucket], executionCont blob.getSize ) } + + override def signedFileUrl(filePath: Path, duration: Duration): OptionT[Future, URL] = + OptionT.optionT(Future { + Option(storageClient.get(bucketName.value, filePath.toString)).filterNot(_.getSize == 0).map { blob => + blob.signUrl(duration.toSeconds, TimeUnit.SECONDS) + } + }) } -- cgit v1.2.3