about summary refs log tree commit diff
path: root/src/pronouns/web.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/pronouns/web.clj')
-rw-r--r--src/pronouns/web.clj73
1 files changed, 50 insertions, 23 deletions
diff --git a/src/pronouns/web.clj b/src/pronouns/web.clj
index 5af441f..6321198 100644
--- a/src/pronouns/web.clj
+++ b/src/pronouns/web.clj
@@ -1,64 +1,91 @@
+;; pronoun.is - a website for pronoun usage examples
+;; Copyright (C) 2014 - 2018 Morgan Astra
+
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU Affero General Public License as
+;; published by the Free Software Foundation, either version 3 of the
+;; License, or (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU Affero General Public License for more details.
+
+;; You should have received a copy of the GNU Affero General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>
+
 (ns pronouns.web
   (:require [compojure.core :refer [defroutes GET PUT POST DELETE ANY]]
             [compojure.handler :refer [site]]
             [compojure.route :as route]
-            [clojure.java.io :as io]
             [clojure.string :as s]
+            [clojure.java.io :as io]
+            [ring.adapter.jetty :as jetty]
             [ring.middleware.logger :as logger]
             [ring.middleware.stacktrace :as trace]
-            [ring.middleware.session :as session]
-            [ring.middleware.session.cookie :as cookie]
-            [ring.adapter.jetty :as jetty]
+            [ring.middleware.params :as params]
+            [ring.middleware.resource :refer [wrap-resource]]
+            [ring.middleware.content-type :refer [wrap-content-type]]
+            [ring.middleware.not-modified :refer [wrap-not-modified]]
             [environ.core :refer [env]]
             [pronouns.util :as u]
             [pronouns.pages :as pages]))
 
-(def config {:default-server-port 5000
-             :pronoun-table-path "resources/pronouns.tab"})
-(def pronouns-table (u/slurp-tabfile (:pronoun-table-path config)))
-
 (defroutes app-routes
   (GET "/" []
        {:status 200
         :headers {"Content-Type" "text/html"}
-        :body (pages/front pronouns-table)})
+        :body (pages/front)})
+
+  (GET "/all-pronouns" []
+       {:status 200
+        :headers {"Content-Type" "text/html"}
+        :body (pages/all-pronouns)})
 
-  (GET "/pronouns.css" {params :params}
+  (GET "/pronouns.css" []
      {:status 200
      :headers {"Content-Type" "text/css"}
      :body (slurp (io/resource "pronouns.css"))})
 
   (GET "/*" {params :params headers :headers}
-       (if (= "application/json" (.toLowerCase (get headers "accept")))
+       (if (= "application/json" (s/lower-case (get headers "accept")))
          {:status 200
           :headers {"Content-Type" "application/json"}
-          :body (pages/pronouns-json (:* params) pronouns-table)}
+          :body (pages/pronouns-json params pronouns-table)}
          {:status 200
           :headers {"Content-Type" "text/html"}
-          :body (pages/pronouns (:* params) pronouns-table)}))
+          :body (pages/pronouns params pronouns-table)}))
 
   (ANY "*" []
        (route/not-found (slurp (io/resource "404.html")))))
 
+(defn wrap-gnu-natalie-nguyen [handler]
+  (fn [req]
+    (when-let [resp (handler req)]
+      (assoc-in resp [:headers "X-Clacks-Overhead"] "GNU Natalie Nguyen"))))
+
 (defn wrap-error-page [handler]
   (fn [req]
     (try (handler req)
          (catch Exception e
-           {:status 500
-            :headers {"Content-Type" "text/html"}
-            :body (slurp (io/resource "500.html"))}))))
+           (binding [*out* *err*]
+             {:status 500
+              :headers {"Content-Type" "text/html"}
+              :body (slurp (io/resource "500.html"))})))))
 
 (def app
   (-> app-routes
+      ;; FIXME morgan.astra <2018-11-14 Wed>
+      ;; use this resource or delete it
+      ;; (wrap-resource "images")
+      wrap-content-type
+      wrap-not-modified
       logger/wrap-with-logger
       wrap-error-page
-      trace/wrap-stacktrace))
+      wrap-gnu-natalie-nguyen
+      trace/wrap-stacktrace
+      params/wrap-params))
 
 (defn -main []
-  (let [port (Integer. (:port env
-                              (:default-server-port config)))]
+  (let [port (Integer. (:port env))]
     (jetty/run-jetty app {:port port})))
-
-;; For interactive development:
-;; (.stop server)
-;; (def server (-main))