diff options
| author | eltrac <hi@eltr.ac> | 2026-05-09 16:49:49 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-05-09 16:49:49 +0800 |
| commit | ab86b317243de1f09e2070f8cf731d6442f876e7 (patch) | |
| tree | 42efbe784096f96894cc9298a4ac631764d25ce5 /src | |
| parent | 5839b57ea799e19c19bb6c4566779ed8405e029c (diff) | |
refactor(config): feed/handler.clj no longer depend on config.clj
Diffstat (limited to 'src')
| -rw-r--r-- | src/weepinbell/core.clj | 4 | ||||
| -rw-r--r-- | src/weepinbell/feed.clj | 22 | ||||
| -rw-r--r-- | src/weepinbell/handler.clj | 15 |
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))) |
