|
44 | 44 | [req]
|
45 | 45 | (= (aget req "method") "POST"))
|
46 | 46 |
|
| 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 | + |
47 | 76 | (defn add-default-middleware
|
48 | 77 | "Set up default express middleware for:
|
49 | 78 |
|
|
83 | 112 | (.use app (.json body-parser #js {:limit "10mb" :extended true :parameterLimit 1000}))
|
84 | 113 | (.use app (.urlencoded body-parser #js {:extended true}))
|
85 | 114 | (.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) |
106 | 116 | app)
|
107 | 117 |
|
108 | 118 | (defn static-folder
|
|
0 commit comments