FileStore and FileServer boundaries
parent
08f2c2fdae
commit
8b2f764407
@ -0,0 +1,4 @@
|
||||
(ns asciinema.boundary.file-server)
|
||||
|
||||
(defprotocol FileServer
|
||||
(serve [this path]))
|
@ -0,0 +1,7 @@
|
||||
(ns asciinema.boundary.file-store)
|
||||
|
||||
(defprotocol FileStore
|
||||
(put-file [this file path] [this file path size])
|
||||
(input-stream [this path])
|
||||
(move-file [this old-path new-path])
|
||||
(delete-file [this path]))
|
@ -0,0 +1,12 @@
|
||||
(ns asciinema.component.local-file-server
|
||||
(:require [asciinema.boundary.file-server :as file-server]
|
||||
[asciinema.boundary.file-store :as file-store]
|
||||
[ring.util.http-response :as response]))
|
||||
|
||||
(defrecord LocalFileServer [file-store]
|
||||
file-server/FileServer
|
||||
(serve [this path]
|
||||
(response/ok (file-store/input-stream file-store path))))
|
||||
|
||||
(defn local-file-server [{:keys [file-store]}]
|
||||
(->LocalFileServer file-store))
|
@ -0,0 +1,25 @@
|
||||
(ns asciinema.component.local-file-store
|
||||
(:require [asciinema.boundary.file-store :as file-store]
|
||||
[clojure.java.io :as io]))
|
||||
|
||||
(defrecord LocalFileStore [base-path]
|
||||
file-store/FileStore
|
||||
(put-file [this file path]
|
||||
(let [path (str base-path path)]
|
||||
(io/make-parents path)
|
||||
(io/copy file (io/file path))))
|
||||
(put-file [this file path size]
|
||||
(file-store/put-file this file path))
|
||||
(input-stream [this path]
|
||||
(let [path (str base-path path)]
|
||||
(io/input-stream path)))
|
||||
(move-file [this old-path new-path]
|
||||
(let [old-path (str base-path old-path)
|
||||
new-path (str base-path new-path)]
|
||||
(.renameTo (io/file old-path) (io/file new-path))))
|
||||
(delete-file [this path]
|
||||
(let [path (str base-path path)]
|
||||
(io/delete-file path))))
|
||||
|
||||
(defn local-file-store [{:keys [path]}]
|
||||
(->LocalFileStore path))
|
@ -0,0 +1,15 @@
|
||||
(ns asciinema.component.s3-file-server
|
||||
(:require [asciinema.boundary.file-server :as file-server]
|
||||
[aws.sdk.s3 :as s3]
|
||||
[ring.util.http-response :as response]))
|
||||
|
||||
;; TODO support custom expiry date (it's 1 day now)
|
||||
|
||||
(defrecord S3FileServer [cred bucket path-prefix]
|
||||
file-server/FileServer
|
||||
(serve [this path]
|
||||
(let [path (str path-prefix path)]
|
||||
(response/found (s3/generate-presigned-url cred bucket path)))))
|
||||
|
||||
(defn s3-file-server [{:keys [cred bucket path-prefix]}]
|
||||
(->S3FileServer cred bucket path-prefix))
|
@ -0,0 +1,25 @@
|
||||
(ns asciinema.component.s3-file-store
|
||||
(:require [asciinema.boundary.file-store :as file-store]
|
||||
[aws.sdk.s3 :as s3]))
|
||||
|
||||
(defrecord S3FileStore [cred bucket path-prefix]
|
||||
file-store/FileStore
|
||||
(put-file [this file path]
|
||||
(file-store/put-file this file path nil))
|
||||
(put-file [this file path size]
|
||||
(let [path (str path-prefix path)]
|
||||
(s3/put-object cred bucket path file {:content-length size})))
|
||||
(input-stream [this path]
|
||||
(let [path (str path-prefix path)]
|
||||
(:content (s3/get-object cred bucket path))))
|
||||
(move-file [this old-path new-path]
|
||||
(let [old-path (str path-prefix old-path)
|
||||
new-path (str path-prefix new-path)]
|
||||
(s3/copy-object cred bucket old-path new-path)
|
||||
(s3/delete-object cred bucket old-path)))
|
||||
(delete-file [this path]
|
||||
(let [path (str path-prefix path)]
|
||||
(s3/delete-object cred bucket path))))
|
||||
|
||||
(defn s3-file-store [{:keys [cred bucket path-prefix]}]
|
||||
(->S3FileStore cred bucket path-prefix))
|
@ -0,0 +1,7 @@
|
||||
(ns asciinema.boundary.file-server-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[asciinema.boundary.file-server :as file-server]))
|
||||
|
||||
(deftest a-test
|
||||
(testing "FIXME, I fail."
|
||||
(is (= 0 1))))
|
@ -0,0 +1,7 @@
|
||||
(ns asciinema.boundary.file-store-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[asciinema.boundary.file-store :as file-store]))
|
||||
|
||||
(deftest a-test
|
||||
(testing "FIXME, I fail."
|
||||
(is (= 0 1))))
|
Loading…
Reference in New Issue