diff --git a/full.http/project.clj b/full.http/project.clj index f6ea327..bfb4207 100644 --- a/full.http/project.clj +++ b/full.http/project.clj @@ -13,6 +13,7 @@ [http-kit "2.1.18"] [compojure "1.3.1"] [javax.servlet/servlet-api "2.5"] + [ring-cors "0.1.7"] [fullcontact/camelsnake "0.4.15-SNAPSHOT"] [fullcontact/full.json "0.4.15-SNAPSHOT"] [fullcontact/full.metrics "0.4.15-SNAPSHOT"] diff --git a/full.http/src/full/http/server.clj b/full.http/src/full/http/server.clj index 579d20a..4beb6b8 100644 --- a/full.http/src/full/http/server.clj +++ b/full.http/src/full/http/server.clj @@ -13,7 +13,8 @@ [full.core.log :as log] [full.async :refer :all] [full.json :refer [write-json]] - [full.metrics :as metrics]) + [full.metrics :as metrics] + [ring.middleware.cors :as rc]) (:import (clojure.core.async.impl.protocols ReadPort) (clojure.lang ExceptionInfo) (org.httpkit HttpStatus))) @@ -48,6 +49,18 @@ :status (or (:status res) 200) :headers (or (:headers res) {})))))) +(defn wrap-cors> + [handler & access-control] + (let [access-control (rc/normalize-config access-control)] + (fn [request] + (go-try + (cond + (and (rc/preflight? request) (rc/allow-request? request access-control)) + {:status 200 :headers {}} + (rc/allow-request? request access-control) + (rc/add-access-control request access-control (