diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/weepinbell/handler.clj | 3 | ||||
| -rw-r--r-- | src/weepinbell/retriever.clj | 18 | ||||
| -rw-r--r-- | src/weepinbell/utils.clj | 13 |
3 files changed, 25 insertions, 9 deletions
diff --git a/src/weepinbell/handler.clj b/src/weepinbell/handler.clj index 684d11c..17e1936 100644 --- a/src/weepinbell/handler.clj +++ b/src/weepinbell/handler.clj @@ -4,7 +4,7 @@ [ring.middleware.defaults :refer [wrap-defaults api-defaults]] [weepinbell.config :refer [get-config]] [weepinbell.receiver :refer [receive]] - [weepinbell.retriever :refer [retrieve]] + [weepinbell.retriever :refer [retrieve retrieve-by-id]] [weepinbell.processor :refer [process-webmention]] [clojure.core.async :refer [chan]])) @@ -16,6 +16,7 @@ (POST (get-config :endpoint) [source target] (receive {:s source :t target} wmc)) (GET "/api/mentions" [filter] (retrieve filter)) + (GET "/api/mention/:id" [id] (retrieve-by-id id)) (route/files "/avatars/" {:root "data/avatars"}) (route/not-found "Not Found")) diff --git a/src/weepinbell/retriever.clj b/src/weepinbell/retriever.clj index 467af63..e7f74fe 100644 --- a/src/weepinbell/retriever.clj +++ b/src/weepinbell/retriever.clj @@ -1,8 +1,8 @@ (ns weepinbell.retriever (:require [weepinbell.storage :as storage] - [weepinbell.utils :refer [valid-http-url? get-domain get-target]] - [clojure.string :refer [includes?]] - [cheshire.core :as json])) + [weepinbell.utils :refer [valid-http-url? get-domain get-target respond-json]] + [clojure.string :refer [includes?]])) + (defn retrieve "Get all webmentions." @@ -16,8 +16,12 @@ filter-by-target? #(= filter-string (get-target %)) filter-by-domain? #(= filter-string (-> % get-target get-domain)) :else identity)] ;; Use identity instead of not-empty for "no filter" - ;; responsd with data filtered and converted to json - {:status 200 - :headers {"Content-Type" "application/json; charset=utf-8"} - :body (json/generate-string (filter pred data))})) + (respond-json (filter pred data)))) + +(defn retrieve-by-id + "Get one specific webmention by ID." + [id] + (if-let [wm (storage/get-wm id)] + (respond-json wm) + (respond-json {:message "webmention not found"} 404))) diff --git a/src/weepinbell/utils.clj b/src/weepinbell/utils.clj index 99b5a2e..fe01d96 100644 --- a/src/weepinbell/utils.clj +++ b/src/weepinbell/utils.clj @@ -6,7 +6,8 @@ [clojure.string :as string] [clojure.walk :as walk] [clojure.java.io :as io] - [taoensso.timbre :as timbre])) + [taoensso.timbre :as timbre] + [cheshire.core :as json])) (defn get-domain [url] (-> (URI/create url) .getHost)) @@ -86,3 +87,13 @@ (defn file-exists? [path] (.exists (io/file path))) +(defn respond-json + ([data] + (respond-json data 200)) + ([data status] + (let [json-string (json/generate-string data) + status status] + {:status status + :headers {"Content-Type" "application/json; charset=utf-8"} + :body json-string}))) + |
