|
2 | 2 | (:require [com.sagar.casa.middleware :as middleware]
|
3 | 3 | com.sagar.casa.ui
|
4 | 4 | [donut.system :as ds]
|
| 5 | + [com.sagar.casa.rss :as rss] |
5 | 6 | [hyperfiddle.electric :as e]
|
6 | 7 | [hyperfiddle.electric-ring-adapter :as electric-ring]
|
7 | 8 | [ring.adapter.jetty :as ring]
|
8 | 9 | [ring.middleware.cookies :as cookies]
|
9 | 10 | [ring.middleware.params :refer [wrap-params]]
|
10 | 11 | [shadow.cljs.devtools.api :as shadow-api]
|
11 | 12 | [shadow.cljs.devtools.server :as shadow-server]
|
12 |
| - [taoensso.timbre :as timbre]) |
| 13 | + [taoensso.timbre :as timbre] |
| 14 | + [ring.util.response :as res]) |
13 | 15 | (:import (org.eclipse.jetty.server.handler.gzip
|
14 | 16 | GzipHandler)
|
15 | 17 | (org.eclipse.jetty.websocket.server.config
|
|
21 | 23 | ;; See Dockerfile
|
22 | 24 | (not-empty (System/getProperty "HYPERFIDDLE_ELECTRIC_APP_VERSION")))
|
23 | 25 |
|
| 26 | +(def entrypoint |
| 27 | + (fn [handler] |
| 28 | + (e/boot-server {} com.sagar.casa.ui/Root handler))) |
| 29 | + |
| 30 | + |
| 31 | +(defn rss-middleware |
| 32 | + [handler] |
| 33 | + (fn [request] |
| 34 | + (if (= (:uri request) "/feed.xml") |
| 35 | + (-> (res/response (rss/rss-feed)) |
| 36 | + (res/content-type "application/xml")) |
| 37 | + (handler request)))) |
24 | 38 |
|
25 | 39 | (defn electric-websocket-middleware
|
26 | 40 | "Open a websocket and boot an Electric server program defined by `entrypoint`.
|
|
30 | 44 | - see `hyperfiddle.electric-ring-adapter/wrap-reject-stale-client`
|
31 | 45 | - an Electric `entrypoint`: a function (fn [ring-request] (e/boot-server {} my-ns/My-e-defn ring-request))
|
32 | 46 | "
|
33 |
| - [next-handler config entrypoint] |
| 47 | + [next-handler config] |
34 | 48 | (-> (electric-ring/wrap-electric-websocket next-handler entrypoint)
|
35 | 49 | (cookies/wrap-cookies)
|
36 | 50 | (electric-ring/wrap-reject-stale-client config)
|
37 | 51 | (wrap-params)))
|
38 | 52 |
|
39 |
| -(defn middleware [config entrypoint] |
| 53 | +(defn middleware [config] |
40 | 54 | (-> (middleware/http-middleware config) ; 2. serve regular http content
|
41 |
| - (electric-websocket-middleware config entrypoint))) ; 1. intercept electric websocket |
| 55 | + (electric-websocket-middleware config) ; 1. intercept electric websocket |
| 56 | + (rss-middleware))) |
42 | 57 |
|
43 | 58 | (defn- add-gzip-handler!
|
44 | 59 | "Makes Jetty server compress responses. Optional but recommended."
|
|
69 | 84 | (.setMaxTextMessageSize wsContainer (* 100 1024 1024))))))
|
70 | 85 |
|
71 | 86 |
|
72 |
| -(def entrypoint |
73 |
| - (fn [handler] |
74 |
| - (e/boot-server {} com.sagar.casa.ui/Root handler))) |
75 |
| - |
76 |
| - |
77 | 87 | (def server
|
78 | 88 | #::ds{:start (fn [{{:keys [host port] :as opts} ::ds/config}]
|
79 | 89 | ;; Start electric compiler and server
|
80 | 90 | (timbre/warn (str "Starting server on " host ":" port))
|
81 |
| - (ring/run-jetty (middleware opts entrypoint) opts)) |
| 91 | + (ring/run-jetty (middleware opts) opts)) |
82 | 92 | :config {:host (ds/ref [:env :http-host])
|
83 | 93 | :port (ds/ref [:env :http-port])
|
84 | 94 | :join? false
|
|
98 | 108 | (shadow-api/dev :dev)
|
99 | 109 | ;; Start electric compiler and server
|
100 | 110 | (timbre/warn (str "Starting server on " host ":" port))
|
101 |
| - (ring/run-jetty (middleware opts entrypoint) opts)) |
| 111 | + (ring/run-jetty (middleware opts) opts)) |
102 | 112 | :stop (fn [{server ::ds/instance}]
|
103 | 113 | (timbre/warn "Stopping HTTP Server...")
|
104 | 114 | (.stop server)
|
|
0 commit comments