(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")) (defn show-sample [index] (let [email-content (slurp (str "/home/aaron/workbench/clojurecup2015/sample-data/example" index ".eml"))] (show-result email-content))) ;; 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 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)))