summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-03-01 15:25:54 +0800
committereltrac <hi@eltr.ac>2026-03-01 15:25:54 +0800
commitecb8c41937ac06ff631f8bc7ca6c3e8176b76654 (patch)
treea39ef81b298e131f640ce57002e5ee68a3bf24cf /src
parent8a64e8cda6e16d4481aaf75418760c07a49e7013 (diff)
feat(webmention): validate urls upon receiving w
Diffstat (limited to 'src')
-rw-r--r--src/weepinbell/handler.clj13
-rw-r--r--src/weepinbell/receiver.clj24
2 files changed, 32 insertions, 5 deletions
diff --git a/src/weepinbell/handler.clj b/src/weepinbell/handler.clj
index f484377..e6c972b 100644
--- a/src/weepinbell/handler.clj
+++ b/src/weepinbell/handler.clj
@@ -1,11 +1,14 @@
(ns weepinbell.handler
- (:require [compojure.core :refer [defroutes GET]]
+ (:require [compojure.core :refer [defroutes POST]]
[compojure.route :as route]
- [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))
+ [ring.middleware.defaults :refer [wrap-defaults api-defaults]]
+ [weepinbell.config :refer [get-config]]
+ [weepinbell.receiver :refer [receive]]))
-(defroutes app-routes
- (GET "/" [] "Hello World")
+(defroutes api-routes
+ (POST (get-config :endpoint) [source target]
+ (receive {:s source :t target}))
(route/not-found "Not Found"))
(def app
- (wrap-defaults app-routes site-defaults))
+ (wrap-defaults api-routes api-defaults))
diff --git a/src/weepinbell/receiver.clj b/src/weepinbell/receiver.clj
new file mode 100644
index 0000000..74ec4a9
--- /dev/null
+++ b/src/weepinbell/receiver.clj
@@ -0,0 +1,24 @@
+(ns weepinbell.receiver
+ (:require [clojure.string :refer [starts-with?]]))
+
+(defn validate-url [url]
+ (or (starts-with? url "http://")
+ (starts-with? url "https://")))
+(defn validate-urls [s t]
+ (and (validate-url s) (validate-url t)))
+
+#_(defn validate-source [s])
+
+#_(defn validate-target [t])
+
+(defn validate [s t]
+ (validate-urls s t)
+ #_(validate-source s)
+ #_(validate-target t))
+
+(defn receive [wm]
+ (let [{:keys [s t]} wm]
+ (if (validate s t)
+ "Valid Webmention"
+ "Invalid Webmention")))
+