From 515d95a2b3fb8439cb30f72ba2a63a6e0a9f9bfb Mon Sep 17 00:00:00 2001 From: gered Date: Mon, 20 May 2013 20:07:42 -0400 Subject: [PATCH] add basic file retrieval from files db --- src/blarg/handler.clj | 3 ++- src/blarg/models/files.clj | 17 +++++++++++++++++ src/blarg/routes/files.clj | 15 +++++++++++++++ src/blarg/util.clj | 5 +++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/blarg/models/files.clj create mode 100644 src/blarg/routes/files.clj diff --git a/src/blarg/handler.clj b/src/blarg/handler.clj index 7aa6bc8..9d4482a 100644 --- a/src/blarg/handler.clj +++ b/src/blarg/handler.clj @@ -2,6 +2,7 @@ (:use blarg.routes.home blarg.routes.posts blarg.routes.auth + blarg.routes.files blarg.routes.accessrules compojure.core) (:require [noir.util.middleware :as middleware] @@ -44,7 +45,7 @@ (timbre/info "blarg is shutting down...")) ;;append your application routes to the all-routes vector -(def all-routes [auth-routes home-routes posts-routes app-routes]) +(def all-routes [auth-routes home-routes posts-routes files-routes app-routes]) (def app (-> all-routes (middleware/app-handler) diff --git a/src/blarg/models/files.clj b/src/blarg/models/files.clj new file mode 100644 index 0000000..6973e95 --- /dev/null +++ b/src/blarg/models/files.clj @@ -0,0 +1,17 @@ +(ns blarg.models.files + (:use [blarg.models.db]) + (:require [com.ashafa.clutch :as couch] + [clojure.java.io :as io])) + +(defn get-file [file] + (couch/with-db files + (if-let [file-info (->first-view-value + (couch/get-view "files" "listAll" {:key file}))] + (let [id (:_id file-info) + attachment (:filename file-info) + attachment-info (second (first (:_attachments file-info))) + gz (couch/get-attachment id attachment)] + (if gz + (merge + {:data gz} + attachment-info)))))) \ No newline at end of file diff --git a/src/blarg/routes/files.clj b/src/blarg/routes/files.clj new file mode 100644 index 0000000..e14767d --- /dev/null +++ b/src/blarg/routes/files.clj @@ -0,0 +1,15 @@ +(ns blarg.routes.files + (:use [compojure.core] + [blarg.routes.helpers] + [blarg.util]) + (:require [blarg.views.layout :as layout] + [blarg.models.files :as files] + [noir.response :as resp])) + +(defn get-file [path] + (if-let [file (files/get-file (ensure-prefix path "/"))] + (resp/content-type (:content_type file) (:data file)) + (resp/status 404 nil))) + +(defroutes files-routes + (GET "/files/*" [*] (get-file *))) diff --git a/src/blarg/util.clj b/src/blarg/util.clj index 93751b8..420d812 100644 --- a/src/blarg/util.clj +++ b/src/blarg/util.clj @@ -46,3 +46,8 @@ (< n low) low (> n high) high :else n)) + +(defn ensure-prefix [s prefix] + (if-not (.startsWith s prefix) + (str prefix s) + s))