diff --git a/build.clj b/build.clj
index 59c212a..3aa218c 100644
--- a/build.clj
+++ b/build.clj
@@ -1,6 +1,5 @@
(ns build
(:require
- [babashka.fs :as fs]
[clojure.java.io :as io]
[clojure.string :as str]
[clojure.tools.build.api :as b]
diff --git a/deps.edn b/deps.edn
index 4872a4a..5811f01 100644
--- a/deps.edn
+++ b/deps.edn
@@ -1,15 +1,13 @@
{:paths ["src" "resources"]
:deps {org.clojure/clojure {:mvn/version "1.11.1"}
- org.clojure/data.json {:mvn/version "2.4.0"} ; https://github.com/thheller/shadow-cljs/issues/872
; ring middleware
- ring/ring-core {:mvn/version "1.9.4"}
- metosin/muuntaja {:mvn/version "0.6.8"} ; 30x faster than ring-middleware-format
+ ring/ring-core {:mvn/version "1.13.0"} ; https://github.com/ring-clojure/ring
+ metosin/muuntaja {:mvn/version "0.6.10"} ; 30x faster than ring-middleware-format
ring-cors/ring-cors {:mvn/version "0.1.13"}
bk/ring-gzip {:mvn/version "0.3.0"} ; from oz
- ring/ring-devel {:mvn/version "1.9.4"} ; reload middleware - same version as rig/core
-
+ ring/ring-devel {:mvn/version "1.13.0"} ; reload middleware - same version as rig/core
bidi/bidi {:mvn/version "2.1.6"}
- ring/ring-defaults {:mvn/version "0.3.3"
+ ring/ring-defaults {:mvn/version "0.5.0"
:exclusions [javax.servlet/servlet-api]}
prone/prone {:mvn/version "2021-04-23"} ; exception middleware
ring/ring-json {:mvn/version "0.5.1"}
@@ -21,18 +19,18 @@
;simplevalue/letsencrypt {:git/url "https://github.com/SimpleValue/sv.letsencrypt.git"
; :sha "8b1a85846acaaa37a58b054f2372d8fde0663b75"}
; webserver
- info.sunng/ring-jetty9-adapter {:mvn/version "0.15.2"} ; uses jetty 10.0.2, vlast version with java 9 : 0.14.0
-
+ ;info.sunng/ring-jetty9-adapter {:mvn/version "0.15.2"} ; uses jetty 10.0.2,
+ ;info.sunng/ring-jetty9-adapter {:mvn/version "0.36.0"} ; jetty 12, but could not get it to work with sente.
+ ring/ring-jetty-adapter {:mvn/version "1.13.0"} ; jetty 11
+
hiccup/hiccup {:mvn/version "1.0.5"} ; server side templating
-
; modular
- org.pinkgorilla/modular {:mvn/version "0.0.38"} ; encoding
+ org.pinkgorilla/modular {:mvn/version "0.2.61"} ; encoding
}
:aliases
- {:outdated {:extra-deps {com.github.liquidz/antq {:mvn/version "RELEASE"}}
- :main-opts ["-m" "antq.core"]}
+ {
:test {:extra-paths ["test"]
:extra-deps {io.github.cognitect-labs/test-runner {:git/url "https://github.com/cognitect-labs/test-runner.git"
@@ -46,9 +44,7 @@
:build {:deps {io.github.clojure/tools.build {:git/tag "v0.6.1" :git/sha "515b334"}
io.github.slipset/deps-deploy {:git/sha "b4359c5d67ca002d9ed0c4b41b710d7e5a82e3bf"}
- io.github.seancorfield/build-clj {:git/tag "v0.5.4" :git/sha "bc9c0cc"}
- ;rewrite-clj/rewrite-clj {:mvn/version "1.0.699-alpha"}
- babashka/fs {:mvn/version "0.0.5"}}
+ io.github.seancorfield/build-clj {:git/tag "v0.5.4" :git/sha "bc9c0cc"}}
:ns-default build}
:webserver {:extra-paths ["src-demo"]
diff --git a/src-demo/demo/https.clj b/src-demo/demo/https.clj
index 90c69a5..81bb963 100644
--- a/src-demo/demo/https.clj
+++ b/src-demo/demo/https.clj
@@ -1,6 +1,6 @@
(ns demo.https
(:require
- [modular.webserver.jetty :refer [run-jetty-server]]
+ [modular.webserver.server.jetty :refer [run-jetty-server]]
[modular.webserver.handler.not-found :refer [not-found-handler]]
[modular.webserver.handler.files :refer [->FilesMaybe ->ResourcesMaybe]]
[modular.webserver.middleware.bidi :refer [wrap-bidi]]
diff --git a/src/modular/webserver/handler/files.clj b/src/modular/webserver/handler/files.clj
index ccf0509..caeddcf 100644
--- a/src/modular/webserver/handler/files.clj
+++ b/src/modular/webserver/handler/files.clj
@@ -10,7 +10,7 @@
(defrecord FilesMaybe [options]
bidi/Matched
- (resolve-handler [this m]
+ (resolve-handler [_this m]
(let [reminder (url-decode (:remainder m))
filename (str (:dir options) reminder)]
;(warn "file-maybe: " filename)
@@ -18,8 +18,8 @@
;(warn "file found: " filename)
(assoc (dissoc m :remainder)
:handler (->
- (fn [req] (file-response reminder
- {:root (:dir options)}))
+ (fn [_req] (file-response reminder
+ {:root (:dir options)}))
(wrap-content-type options)
(wrap-not-modified)
(wrap-gzip))))))
@@ -32,14 +32,14 @@
(defrecord ResourcesMaybe [options]
bidi/Matched
- (resolve-handler [this m]
+ (resolve-handler [_this m]
(let [path (url-decode (:remainder m))]
(when (not-empty path)
- (when-let [res (io/resource (str (:prefix options) path))]
+ (when-let [_res (io/resource (str (:prefix options) path))]
;(warn "res: " path)
(assoc (dissoc m :remainder)
:handler (->
- (fn [req] (resource-response (str (:prefix options) path)))
+ (fn [_req] (resource-response (str (:prefix options) path)))
(wrap-content-type options)
(wrap-not-modified) ; awb99 hack
(wrap-gzip)))))))
diff --git a/src/modular/webserver/handler/not_found.clj b/src/modular/webserver/handler/not_found.clj
index 45ac3fa..aa86f5d 100644
--- a/src/modular/webserver/handler/not_found.clj
+++ b/src/modular/webserver/handler/not_found.clj
@@ -6,5 +6,5 @@
(def not-found-body "
bummer, not found
(response) ; Don't pass the requests down, just return what the browser needs to continue.
+ (-> (response "") ; Don't pass the requests down, just return what the browser needs to continue.
(assoc-in [:headers "Access-Control-Allow-Origin"] allowed-origins)
(assoc-in [:headers "Access-Control-Allow-Methods"] "GET,POST,DELETE")
(assoc-in [:headers "Access-Control-Allow-Headers"] "X-Requested-With,Content-Type,Cache-Control,Origin,Accept,Authorization")
diff --git a/src/modular/webserver/middleware/dev.clj b/src/modular/webserver/middleware/dev.clj
index 439b72d..0760e5b 100644
--- a/src/modular/webserver/middleware/dev.clj
+++ b/src/modular/webserver/middleware/dev.clj
@@ -1,6 +1,6 @@
(ns modular.webserver.middleware.dev
(:require
- [taoensso.timbre :refer [debug info warn error]]
+ [taoensso.timbre :refer [warn]]
[prone.middleware :refer [wrap-exceptions]]
[ring.middleware.reload :refer [wrap-reload]]))
diff --git a/src/modular/webserver/middleware/exception.clj b/src/modular/webserver/middleware/exception.clj
index 8a138f5..2763b86 100644
--- a/src/modular/webserver/middleware/exception.clj
+++ b/src/modular/webserver/middleware/exception.clj
@@ -1,7 +1,7 @@
(ns modular.webserver.middleware.exception
(:require
[clojure.string]
- [taoensso.timbre :refer [debug info error]]))
+ [taoensso.timbre :refer [error]]))
(defn wrap-fallback-exception
[handler]
diff --git a/src/modular/webserver/middleware/transit.clj b/src/modular/webserver/middleware/transit.clj
index 40c0231..843f32b 100644
--- a/src/modular/webserver/middleware/transit.clj
+++ b/src/modular/webserver/middleware/transit.clj
@@ -1,6 +1,5 @@
(ns modular.webserver.middleware.transit
(:require
- [cognitect.transit :as transit]
[modular.encoding.transit :as e]
[muuntaja.core :as m]))
diff --git a/src/modular/webserver/page.clj b/src/modular/webserver/page.clj
index f3e066c..3f5857b 100644
--- a/src/modular/webserver/page.clj
+++ b/src/modular/webserver/page.clj
@@ -1,9 +1,7 @@
(ns modular.webserver.page
(:require
- [clojure.string :as str]
[hiccup.page :as page]))
-
(defn- head
([config]
(head config []))
@@ -29,7 +27,6 @@
[:link {:rel "shortcut icon" :href (str prefix icon)}]]]
(into head extra-head))))
-
(defn page
([config body]
(page/html5
@@ -41,4 +38,3 @@
{:mode :html}
(head config extra-head)
body)))
-
\ No newline at end of file
diff --git a/src/modular/webserver/server.clj b/src/modular/webserver/server.clj
new file mode 100644
index 0000000..3181de2
--- /dev/null
+++ b/src/modular/webserver/server.clj
@@ -0,0 +1,21 @@
+(ns modular.webserver.server
+ (:require
+ [taoensso.timbre :as timbre :refer [info error]]
+ [modular.webserver.server.jetty :as jetty]
+ [modular.webserver.server.httpkit :as httpkit]))
+
+(defn start [webserver-config ring-handler server-type]
+ (let [server (case server-type
+ :jetty (jetty/start-jetty ring-handler webserver-config)
+ :httpkit (httpkit/start-httpkit ring-handler webserver-config)
+ (do (error "start-server failed: server type not found: " type)
+ nil))]
+ {:server-type server-type
+ :server server}))
+
+(defn stop [{:keys [server server-type]}]
+ (when server
+ (case server-type
+ :jetty (jetty/stop-jetty server)
+ :httpkit (httpkit/stop-httpkit server)
+ (info "there was no server started."))))
diff --git a/src/modular/webserver/server/httpkit.clj b/src/modular/webserver/server/httpkit.clj
new file mode 100644
index 0000000..a1fc6fa
--- /dev/null
+++ b/src/modular/webserver/server/httpkit.clj
@@ -0,0 +1,24 @@
+(ns modular.webserver.server.httpkit
+ (:require
+ [taoensso.timbre :as timbre :refer [info]]))
+
+; http://http-kit.github.io/
+;https://github.com/http-kit/http-kit
+; this dependency is not part of webly dependencies: ;{http-kit "2.5.3"}
+
+(defn start-httpkit
+ [ring-handler config]
+ (let [run-server (requiring-resolve 'org.httpkit.server/run-server)
+ default-opts {:allow-null-path-info true ; omit the trailing slash from your URLs
+ :ws-max-idle-time 3600000 ; important for nrepl middleware
+ }
+ {:keys [port]} config]
+ (info "Starting Httpkit web server (http:" port ")")
+ (run-server ring-handler {:port port
+ :host "0.0.0.0"})))
+
+(defn stop-httpkit [server]
+ (info "stopping httpkit server..")
+ ;(server) ; Immediate shutdown (breaks existing reqs)
+ ;; Graceful shutdown (wait <=100 msecs for existing reqs to complete):
+ (server :timeout 100))
\ No newline at end of file
diff --git a/src/modular/webserver/jetty.clj b/src/modular/webserver/server/jetty.clj
similarity index 51%
rename from src/modular/webserver/jetty.clj
rename to src/modular/webserver/server/jetty.clj
index c208ee8..c0c5f2e 100644
--- a/src/modular/webserver/jetty.clj
+++ b/src/modular/webserver/server/jetty.clj
@@ -1,27 +1,38 @@
-(ns modular.webserver.jetty
+(ns modular.webserver.server.jetty
(:require
[clojure.java.io :as io]
[taoensso.timbre :as timbre :refer [info]]
- [ring.adapter.jetty9 :refer [run-jetty]]))
+ ;[ring.adapter.jetty9 :refer [run-jetty]]
+ [ring.adapter.jetty :refer [run-jetty]]))
-(defn run-jetty-server [ring-handler ws-map user-opts]
+(defn run-jetty-server [ring-handler {:keys [port ssl-port keystore] :as user-opts}]
(let [default-opts {:allow-null-path-info true ; omit the trailing slash from your URLs
:ws-max-idle-time 3600000 ; important for nrepl middleware
}
- ws-opts (if ws-map
- {:websockets ws-map} ; {"/api/chsk" (wrap-webly (partial ws-handshake-handler conn))}
- {})
- {:keys [port ssl-port keystore]} user-opts
https? (and
ssl-port
keystore
(.exists (io/file keystore)))
user-opts (if https?
user-opts
- (dissoc user-opts :keystore :ssl-port :key-password))]
+ (dissoc user-opts :keystore :ssl-port :key-password))
+
+ opts (merge default-opts ;ws-opts
+ user-opts)]
; https://github.com/sunng87/ring-jetty9-adapter
(if https?
(info "Starting Jetty web server (http:" port "https:" ssl-port ")")
(info "Starting Jetty web server (http:" port "https: none)"))
- (run-jetty ring-handler (merge default-opts ws-opts user-opts))))
+ (run-jetty ring-handler opts)))
+
+(defn start-jetty
+ [ring-handler config]
+ (run-jetty-server ring-handler
+ (assoc config :join? false)))
+(defn stop-jetty
+ [server]
+ ;https://github.com/dharrigan/websockets/blob/master/src/online/harrigan/api/router.clj
+ (info "stopping jetty-server..")
+ (.stop server) ; stop is async
+ (.join server)) ; so let's make sure it's really stopped!
\ No newline at end of file
diff --git a/src/modular/webserver/undertow.clj b/src/modular/webserver/undertow.clj
deleted file mode 100644
index 72039d1..0000000
--- a/src/modular/webserver/undertow.clj
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
- ;{luminus/ring-undertow-adapter "1.2.0"}
-
- ;undertow
- ;[ring.adapter.undertow :refer [run-undertow]]
- ;[shadow.cljs.devtools.server :as shadow-server]
-
-; https://github.com/luminus-framework/ring-undertow-adapter
-#_(defn run-undertow-server [ring-handler port host api]
- (require '[ring.adapter.undertow :refer [run-undertow]])
- (let [;run-undertow (resolve)
- conn (init-ws! :undertow)]
- (info "Starting Undertow web server at port " port " ..")
- (run-undertow ring-handler {:port port
- :host host
- ; :websockets {"/api/chsk" (wrap-webly (partial ws-handshake-handler conn))}
- ;:allow-null-path-info true
- ;:join? false
- })))
-
-#_(defn run-shadow-server []
- (let [conn (init-ws! :undertow)]
- ;(shadow-server/start!)
- ;(shadow-server/stop!)
- ))
\ No newline at end of file