diff options
| author | eltrac <hi@eltr.ac> | 2026-10-10 14:54:56 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-10-10 16:08:00 +0800 |
| commit | 15bb3e8bf2339980c6c621de9a9ddbdd24e9444b (patch) | |
| tree | e862375bfc2e4865ad88272acc466774582c4b98 /src | |
| parent | d9bf70d3b0acfc2e9fa3d1b229caa935553dc98d (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.clj | 17 |
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)}] |
