aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/file
diff options
context:
space:
mode:
authorZach Smith <zach@driver.xyz>2017-04-30 14:47:04 -0700
committerZach Smith <zach@driver.xyz>2017-05-04 10:34:33 -0700
commitf2a0e018e5e6b4c9d80831a419878c024d43d7b3 (patch)
treed975eb3a3dd964288a447c40fa127ecc6af6bd96 /src/main/scala/xyz/driver/core/file
parent598a100bd1a1e4604b6d838c719492b379bfba10 (diff)
downloaddriver-core-f2a0e018e5e6b4c9d80831a419878c024d43d7b3.tar.gz
driver-core-f2a0e018e5e6b4c9d80831a419878c024d43d7b3.tar.bz2
driver-core-f2a0e018e5e6b4c9d80831a419878c024d43d7b3.zip
Add signedFileUrl method
Diffstat (limited to 'src/main/scala/xyz/driver/core/file')
-rw-r--r--src/main/scala/xyz/driver/core/file/GcsStorage.scala12
-rw-r--r--src/main/scala/xyz/driver/core/file/package.scala9
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]
+ }
}