diff options
author | Zach Smith <zach@driver.xyz> | 2017-04-30 14:47:04 -0700 |
---|---|---|
committer | Zach Smith <zach@driver.xyz> | 2017-05-04 10:34:33 -0700 |
commit | f2a0e018e5e6b4c9d80831a419878c024d43d7b3 (patch) | |
tree | d975eb3a3dd964288a447c40fa127ecc6af6bd96 /src/main/scala | |
parent | 598a100bd1a1e4604b6d838c719492b379bfba10 (diff) | |
download | driver-core-f2a0e018e5e6b4c9d80831a419878c024d43d7b3.tar.gz driver-core-f2a0e018e5e6b4c9d80831a419878c024d43d7b3.tar.bz2 driver-core-f2a0e018e5e6b4c9d80831a419878c024d43d7b3.zip |
Add signedFileUrl method
Diffstat (limited to 'src/main/scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/file/GcsStorage.scala | 12 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/file/package.scala | 9 |
2 files changed, 20 insertions, 1 deletions
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] + } } |