diff --git a/src/heyarne/all_my_friends/server.clj b/src/heyarne/all_my_friends/server.clj index 51b0588..ef0136f 100644 --- a/src/heyarne/all_my_friends/server.clj +++ b/src/heyarne/all_my_friends/server.clj @@ -2,21 +2,31 @@ (:require [org.httpkit.server :as http] [clojure.java.io :as io] [reitit.ring :as ring] + [ring.logger :refer [wrap-log-response]] [ring.middleware.defaults :refer [wrap-defaults site-defaults]] [heyarne.all-my-friends.env :refer [env]]) (:gen-class)) +(def rfc3339 (java.text.SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ssXXX")) + +(defn upload! [file id] + (let [now (.format rfc3339 (java.util.Date.)) + uuid (java.util.UUID/randomUUID) + ext (re-find #"\.[\w]+$" (-> file :filename))] + (io/copy (-> file :tempfile) + (io/file (str "uploads/" id "--" now "--" uuid ext))))) + (def app (ring/ring-handler (ring/router - [["/" - {:get (fn [_] - {:status 200 - :body (io/file (io/resource "public/index.html"))})}] - ["/upload" + [["/upload" + ;; TODO: Verify params {:post (fn [req] - {:status 400 - :body "To be done"})}]]))) + (let [{:keys [file friend]} (-> req :params)] + (upload! file friend) + {:status 201 + :body (str "Thanks, " friend)}))}]] + ["/*" (ring/create-resource-handler)]))) (defonce server (atom nil)) @@ -29,7 +39,11 @@ (defn -main [& args] (println "Starting server on port" (env :port)) (reset! server (-> #'app - (wrap-defaults (assoc site-defaults :static {:resources "public"})) + (wrap-defaults (-> (assoc site-defaults + :static {:resources "public"} + :session false) + (assoc-in [:security :anti-forgery] false))) + (wrap-log-response) (http/run-server {:port (env :port)})))) #_(-main) diff --git a/uploads/.gitignore b/uploads/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/uploads/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore