summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-10-10 14:54:56 +0800
committereltrac <hi@eltr.ac>2026-10-10 16:08:00 +0800
commit15bb3e8bf2339980c6c621de9a9ddbdd24e9444b (patch)
treee862375bfc2e4865ad88272acc466774582c4b98 /src
parentd9bf70d3b0acfc2e9fa3d1b229caa935553dc98d (diff)
retriever: improve page partitioner robustness
- fix page partitioning function not handling Long as a valid page number - better error handling when partitioning API page frames this is a temporary fix. retriever needs refactoring.
Diffstat (limited to 'src')
-rw-r--r--src/weepinbell/webserver/retriever.clj17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/weepinbell/webserver/retriever.clj b/src/weepinbell/webserver/retriever.clj
index b597daf..51ee65b 100644
--- a/src/weepinbell/webserver/retriever.clj
+++ b/src/weepinbell/webserver/retriever.clj
@@ -11,13 +11,13 @@
(let [pages (partition-all size data)
length (count pages)
page (cond (keyword? page) page
+ (number? page) page
(= page "") 0
(string? page) (Integer/parseInt page)
:else false)]
(cond (= page :last) (last pages)
- (int? page) (if (>= page length) false
+ (number? page) (if (>= page length) '()
(nth pages page))
- (not page) false
:else false)))
(defn- respond-webmention-json [data]
@@ -34,11 +34,14 @@
(let [base-resp {:status 200
:headers {"Content-Type" "application/json; charset=utf-8"}
:body nil}]
- (if data
- (assoc base-resp :body data)
- (-> base-resp
- (assoc :status 404)
- (assoc :body {:message "The requested webmention list does not exist."})))))
+ (cond
+ (false? data) (-> base-resp
+ (assoc :status 400)
+ (assoc :body "Page number is invalid. Either too large or not a number."))
+ (empty? data) (-> base-resp
+ (assoc :status 404)
+ (assoc :body {:message "The requested webmention list does not exist."}))
+ :else (assoc base-resp :body data))))
(defn- wrap-response-object [data opts]
(let [result {:webmention (:webmention data)}]