summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-05-09 16:49:49 +0800
committereltrac <hi@eltr.ac>2026-05-09 16:49:49 +0800
commitab86b317243de1f09e2070f8cf731d6442f876e7 (patch)
tree42efbe784096f96894cc9298a4ac631764d25ce5 /src
parent5839b57ea799e19c19bb6c4566779ed8405e029c (diff)
refactor(config): feed/handler.clj no longer depend on config.clj
Diffstat (limited to 'src')
-rw-r--r--src/weepinbell/core.clj4
-rw-r--r--src/weepinbell/feed.clj22
-rw-r--r--src/weepinbell/handler.clj15
3 files changed, 19 insertions, 22 deletions
diff --git a/src/weepinbell/core.clj b/src/weepinbell/core.clj
index 62e4ed0..a190fa2 100644
--- a/src/weepinbell/core.clj
+++ b/src/weepinbell/core.clj
@@ -3,7 +3,7 @@
[weepinbell.processor :as processor]
[weepinbell.handler :refer [app]]
[weepinbell.channel :refer [wmc]]
- [weepinbell.config :refer [get-config]]
+ [weepinbell.config :refer [get-config load-config]]
[weepinbell.webhook :as webhook]
[taoensso.timbre :as timbre]
[weepinbell.storage :as storage])
@@ -31,6 +31,6 @@
;; Start receiver server
;; Check for a PORT environment variable, default to 3000
(let [port (Integer/parseInt (or (System/getenv "PORT") "3000"))]
- (run-jetty (app store)
+ (run-jetty (app store (load-config))
{:port port :join? true})))
diff --git a/src/weepinbell/feed.clj b/src/weepinbell/feed.clj
index 7c4a24d..18cadfa 100644
--- a/src/weepinbell/feed.clj
+++ b/src/weepinbell/feed.clj
@@ -1,18 +1,15 @@
(ns weepinbell.feed
(:require [clj-rss.core :as rss]
[weepinbell.utils :refer [get-domain]]
- [weepinbell.config :refer [get-config]]
[md5.core :refer [string->md5-hex]])
(:import [java.time Instant]))
-(def feed-length (get-config :feed-length))
-
-(defn make-feed-items [wms]
+(defn make-feed-items [wms config]
(->> wms
(map #(let [wm (:webmention %)
id (if-let [id (:id wm)] id
(string->md5-hex (str (:source wm) (:target wm))))
- permalink (str (get-config :base-url) "/api/mention/" id)
+ permalink (str (:base-url config) "/api/mention/" id)
modified (:modified wm)
pub-date (when modified
(Instant/ofEpochMilli modified))]
@@ -20,25 +17,26 @@
:link (:source wm)
:guid permalink
:pubDate pub-date}))
- (take-last feed-length)
+ (take-last (:feed-length config))
doall))
-(defn make-feed-channel [title desc wms]
+(defn make-feed-channel [title desc link wms config]
(rss/channel-xml
{:title title
- :link (get-config :base-url)
+ :link link
:description desc}
- (when wms (make-feed-items wms))))
+ (when wms (make-feed-items wms config))))
(defn rss
- [domain storage]
- (if ((set (get-config :allowed-target-domains)) domain)
+ [domain storage config]
+ (if ((set (:allowed-target-domains config)) domain)
(let [wms ((:get-by-domain storage) domain)]
{:headers {"Content-Type" "application/xml"}
:body (make-feed-channel
(str "Webmentions Feed of " domain)
(str "Webmentions sent to " domain ", provided by Weepinbell.")
- wms)})
+ (:base-url config)
+ wms config)})
{:status 404
:headers {"Content-Type" "application/json"}
:body {:message "No feed for this domain."}}))
diff --git a/src/weepinbell/handler.clj b/src/weepinbell/handler.clj
index 662d153..fa38581 100644
--- a/src/weepinbell/handler.clj
+++ b/src/weepinbell/handler.clj
@@ -4,7 +4,6 @@
[ring.middleware.defaults :refer [wrap-defaults api-defaults]]
[ring.middleware.resource :refer [wrap-resource]]
[ring.middleware.json :refer [wrap-json-response]]
- [weepinbell.config :refer [get-config]]
[weepinbell.receiver :refer [receive]]
[weepinbell.retriever :as retriever]
[weepinbell.channel :refer [wmc]]
@@ -20,13 +19,13 @@
(GET "/:domain" [~'domain ~'page]
(retriever/by-domain ~'domain ~mention-type ~'page ~storage))))
-(defn api-routes [storage]
+(defn api-routes [storage config]
(routes
- (GET "/" [target] (ui/home (get-config :allowed-target-domains)
- (get-config :endpoint)
+ (GET "/" [target] (ui/home (:allowed-target-domains config)
+ (:endpoint config)
target))
;; receiver endpoint
- (POST (get-config :endpoint) [source target]
+ (POST (:endpoint config) [source target]
(receive {:s source :t target} wmc))
;; query API routes
(context "/api" []
@@ -40,14 +39,14 @@
(GET "/:id" [id] (retriever/by-id id storage))
(GET "/" [source target] (retriever/by-st-pair source target storage))))
;; RSS feed
- (GET "/feed/:domain" [domain] (feed/rss domain storage))
+ (GET "/feed/:domain" [domain] (feed/rss domain storage config))
;; host proxied avatars (microformats photos)
(route/files "/avatars/" {:root "data/avatars"})
;; 404
(route/not-found "Not Found")))
-(defn app [storage]
- (-> (api-routes storage)
+(defn app [storage config]
+ (-> (api-routes storage config)
(wrap-resource "static")
(wrap-defaults api-defaults)
(wrap-json-response)))