(ns sample.web
(:require [compojure.core :refer [defroutes GET PUT POST DELETE ANY]]
[compojure.handler :refer [site]]
[ring.middleware.stacktrace :as trace]
[ring.middleware.session.cookie :as cookie]
[ring.adapter.jetty :as jetty]
[ring.middleware.basic-authentication :as basic]
[cemerick.drawbridge :as drawbridge]
[environ.core :as env]))
(defroutes app
(GET "/" []
{:status 200
:headers {"Content-Type" "text/plain"}
:body (pr-str ["Hello" :from 'Heroku])}))
(defn authenticated? [name pass]
(= [name pass] [(env/env :repl_user) (env/env :repl_pass)]))
(defn wrap-drawbridge [handler]
(fn [req]
(let [handler (if (= "/repl" (:uri req))
(basic/wrap-basic-authentication
(cemerick.drawbridge/ring-handler) authenticated?)
handler)]
(handler req))))
(defn -main [& [port]]
(let [port (Integer. (or port (env/env :port) 5000))
TODO store (cookie/cookie-store {:key (env/env :session-secret)})]
(jetty/run-jetty (-> #'app
(wrap-drawbridge)
((if (env/env :dev)
trace/wrap-stacktrace
identity))
(site {:session {:store store}}))
{:port port :join? false})))