Skip to content

Commit c615c0a

Browse files
committed
Refactor out setup-csrf-middleware fn.
1 parent 9916d52 commit c615c0a

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

src/sitefox/web.cljs

+30-20
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,35 @@
4444
[req]
4545
(= (aget req "method") "POST"))
4646

47+
(defn setup-csrf-middleware
48+
[app]
49+
(let [pre-csrf-router (Router.)]
50+
(.use app pre-csrf-router)
51+
(j/assoc! app :pre-csrf-router pre-csrf-router))
52+
(.use app (j/get (csrf #js {:getSecret (fn [] (env "SECRET" "DEVMODE"))
53+
:cookieOptions #js {:httpOnly true :sameSite "Strict" :secure true}
54+
:size 32
55+
:cookieName "XSRF-TOKEN"
56+
:getTokenFromRequest (fn [req]
57+
(or (j/get-in req [:body :_csrf])
58+
(j/call req :get "xsrf-token")
59+
(j/call req :get "x-xsrf-token")))})
60+
:doubleCsrfProtection))
61+
(.get app "/_csrf-token"
62+
(fn [req res]
63+
(.json res (j/call req :csrfToken true false))))
64+
(when (env "SEND_CSRF_COOKIE")
65+
(.use app
66+
(fn [req res done]
67+
(let [extension (.toLowerCase (path/extname (j/get req :path)))]
68+
(when (or (= extension "")
69+
(= extension ".html"))
70+
(let [token (j/call req :csrfToken true false)]
71+
(j/call res :cookie "XSRF-Token" token
72+
#js {:sameSite "Strict" :secure true}))))
73+
(done))))
74+
app)
75+
4776
(defn add-default-middleware
4877
"Set up default express middleware for:
4978
@@ -83,26 +112,7 @@
83112
(.use app (.json body-parser #js {:limit "10mb" :extended true :parameterLimit 1000}))
84113
(.use app (.urlencoded body-parser #js {:extended true}))
85114
(.use app (.text body-parser))
86-
(let [pre-csrf-router (Router.)]
87-
(.use app pre-csrf-router)
88-
(j/assoc! app :pre-csrf-router pre-csrf-router))
89-
(.use app (j/get (csrf #js {:getSecret (fn [] (env "SECRET" "DEVMODE"))
90-
:cookieOptions #js {:httpOnly true :sameSite "Strict" :secure true}
91-
:size 32
92-
:cookieName "XSRF-TOKEN"
93-
:getTokenFromRequest (fn [req]
94-
(or (j/get-in req [:body :_csrf])
95-
(j/call req :get "xsrf-token")
96-
(j/call req :get "x-xsrf-token")))})
97-
:doubleCsrfProtection))
98-
(.get app "/_csrf-token"
99-
(fn [req res]
100-
(.json res (j/call req :csrfToken true false))))
101-
(when (env "SEND_CSRF_COOKIE")
102-
(.get app (fn [req res done]
103-
(j/call res :cookie "XSRF-TOKEN" (j/call req :csrfToken true false)
104-
#js {:secure true :sameSite "Strict"})
105-
(done))))
115+
(setup-csrf-middleware app)
106116
app)
107117

108118
(defn static-folder

0 commit comments

Comments
 (0)