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 +++++++++++- src/main/scala/xyz/driver/core/file/package.scala | 9 +++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'src/main/scala/xyz/driver/core/file') 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) + } + }) } diff --git a/src/main/scala/xyz/driver/core/file/package.scala b/src/main/scala/xyz/driver/core/file/package.scala index 8c06010..9000894 100644 --- a/src/main/scala/xyz/driver/core/file/package.scala +++ b/src/main/scala/xyz/driver/core/file/package.scala @@ -9,6 +9,11 @@ import scala.concurrent.Future import scalaz.{ListT, OptionT} package file { + + import java.net.URL + + import scala.concurrent.duration.Duration + final case class FileLink( name: Name[File], location: Path, @@ -48,4 +53,8 @@ package file { } } } + + trait SignedFileStorage extends FileStorage { + def signedFileUrl(filePath: Path, duration: Duration): OptionT[Future, URL] + } } -- cgit v1.2.3