clojurecup2015-mailhead/src/mailhead/routes/home.clj

43 lines
1.4 KiB
Clojure

(ns mailhead.routes.home
(:require [mailhead.layout :as layout]
[mailhead.visualize :as v]
[mailhead.parser :as parser]
[compojure.core :refer [defroutes GET POST]]
[ring.util.response :refer [redirect]]
[ring.util.http-response :refer [ok content-type]]
[clojure.java.io :as io]))
(defn home-page []
(layout/render "home.html"))
(defn about-page []
(layout/render "about.html"))
;; TODO: Show more information (mail round trip time, ...)
(defn show-result [message-string]
(if (empty? (parser/parse message-string))
(layout/render "parser-error.html" {:mailheader message-string})
(let [parsed-email (parser/parse message-string)
token (v/draw parsed-email)]
(layout/render "result.html"
{:mailheader message-string
:email parsed-email
:token token}))))
(defn show-sample [index]
(let [email-content (slurp (str "sample-data/example" index ".eml"))]
(show-result email-content)))
(defn generated-image [token]
(-> (clojure.java.io/input-stream (str "generated-images/" token ".svg"))
ok
(content-type "image/svg+xml")))
(defroutes home-routes
(GET "/" [] (home-page))
(GET "/image/:token" [token] (generated-image token))
(POST "/analyze" [mailheader] (show-result mailheader))
(GET "/example/:index" [index] (show-sample index))
(GET "/about" [] (about-page)))