Skip to content

Commit ee0ca89

Browse files
committed
CMR-11117: adding a wrapper to parse edn data which is not longer automaticly parsed
1 parent eafa9b8 commit ee0ca89

File tree

1 file changed

+36
-0
lines changed
  • access-control-app/src/cmr/access_control

1 file changed

+36
-0
lines changed

access-control-app/src/cmr/access_control/routes.clj

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
a place for adding routes that apply to both (e.g., robots.txt, should we
66
ever need that for access-control)."
77
(:require
8+
[clojure.edn :as edn]
89
[cmr.access-control.api.routes :as api-routes]
910
[cmr.access-control.site.routes :as site-routes]
1011
[cmr.acl.core :as acl]
@@ -13,6 +14,7 @@
1314
[cmr.common-app.site.pages :as common-pages]
1415
[cmr.common.api.context :as context]
1516
[cmr.common.api.errors :as api-errors]
17+
[cmr.common.log :refer (warnf)]
1618
[compojure.core :refer [routes]]
1719
[ring.middleware.keyword-params :as keyword-params]
1820
[ring.middleware.nested-params :as nested-params]
@@ -24,10 +26,44 @@
2426
(site-routes/build-routes system)
2527
(common-pages/not-found)))
2628

29+
(defn- parse-group-permission
30+
"Safely parse group-permission parameter, handling both parsed and string formats."
31+
[group-permission]
32+
(cond
33+
(nil? group-permission) nil
34+
(map? group-permission) group-permission
35+
(string? group-permission)
36+
(try
37+
(edn/read-string {:readers {}} group-permission)
38+
(catch Exception _e
39+
(warnf "Failed to parse group-permission parameter: %s." group-permission)
40+
nil))
41+
:else
42+
(do
43+
(warnf "Unexpected group-permission format: %s." (type group-permission))
44+
nil)))
45+
46+
(defn normalize-acl-search-params
47+
"Normalize params to handle format changes from HTTP library updates."
48+
[params]
49+
(if-let [gp (:group-permission params)]
50+
(assoc params :group-permission (parse-group-permission gp))
51+
params))
52+
53+
(defn wrap-parse-group-permission
54+
"Middleware to parse group-permission params that may come as strings."
55+
[handler]
56+
(fn [request]
57+
(let [params (:params request)
58+
normalized (normalize-acl-search-params params)
59+
request' (assoc request :params normalized)]
60+
(handler request'))))
61+
2762
(defn handlers [system]
2863
(-> (build-routes system)
2964
acl/add-authentication-handler
3065
common-routes/add-request-id-response-handler
66+
wrap-parse-group-permission
3167
req-log/log-ring-request ;; Must be after request id
3268
(context/build-request-context-handler system)
3369
keyword-params/wrap-keyword-params

0 commit comments

Comments
 (0)