Skip to content

Commit

Permalink
Merge pull request #12 from parenthesin/feat/adds-allowed-origins-ped…
Browse files Browse the repository at this point in the history
…estal

feat: adds allowed origins on pedestal
  • Loading branch information
rafaeldelboni committed Feb 13, 2024
2 parents 405cc5c + 14f74f1 commit 5cf4235
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 24 deletions.
7 changes: 5 additions & 2 deletions .clj-kondo/com.github.seancorfield/next.jdbc/config.edn
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
{:hooks
{:analyze-call
{next.jdbc/with-transaction
hooks.com.github.seancorfield.next-jdbc/with-transaction}}
:lint-as {next.jdbc/on-connection clojure.core/with-open}}
hooks.com.github.seancorfield.next-jdbc/with-transaction
next.jdbc/with-transaction+options
hooks.com.github.seancorfield.next-jdbc/with-transaction+options}}
:lint-as {next.jdbc/on-connection clojure.core/with-open
next.jdbc/on-connection+options clojure.core/with-open}}
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,19 @@
opts
body))]
{:node new-node})))

(defn with-transaction+options
"Expands (with-transaction+options [tx expr opts] body)
to (let [tx expr] opts body) per clj-kondo examples."
[{:keys [:node]}]
(let [[binding-vec & body] (rest (:children node))
[sym val opts] (:children binding-vec)]
(when-not (and sym val)
(throw (ex-info "No sym and val provided" {})))
(let [new-node (api/list-node
(list*
(api/token-node 'let)
(api/vector-node [sym val])
opts
body))]
{:node new-node})))
2 changes: 1 addition & 1 deletion .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ jobs:
- name: Setup clojure-lsp
uses: clojure-lsp/setup-clojure-lsp@v1
with:
clojure-lsp-version: 2023.04.19-12.43.29
clojure-lsp-version: 2024.02.01-11.01.59

- name: Execute lint checks
run: |
Expand Down
6 changes: 3 additions & 3 deletions deps.edn
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
metosin/reitit-swagger {:mvn/version "0.6.0"}
metosin/reitit-swagger-ui {:mvn/version "0.6.0"}
migratus/migratus {:mvn/version "1.5.4"}
org.slf4j/slf4j-simple {:mvn/version "2.0.11"}
org.slf4j/slf4j-simple {:mvn/version "2.0.12"}
prismatic/schema {:mvn/version "1.4.1"}}

:aliases
Expand All @@ -26,11 +26,11 @@
org.clojars.bigsy/pg-embedded-clj {:mvn/version "1.0.1"}
lambdaisland/kaocha {:mvn/version "1.87.1366"}
lambdaisland/kaocha-cloverage {:mvn/version "1.1.89"}
nubank/matcher-combinators {:mvn/version "3.8.8"}
nubank/matcher-combinators {:mvn/version "3.9.1"}
nubank/state-flow {:mvn/version "5.14.5"}}
:main-opts ["-m" "kaocha.runner"]}

:clojure-lsp {:replace-deps {com.github.clojure-lsp/clojure-lsp-standalone {:mvn/version "2023.12.29-12.09.27"}}
:clojure-lsp {:replace-deps {com.github.clojure-lsp/clojure-lsp-standalone {:mvn/version "2024.02.01-11.01.59"}}
:main-opts ["-m" "clojure-lsp.main"]}

:nrepl {:extra-deps {cider/cider-nrepl {:mvn/version "0.45.0"}}
Expand Down
44 changes: 26 additions & 18 deletions src/parenthesin/components/server/reitit_pedestal_jetty.clj
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
(ns parenthesin.components.server.reitit-pedestal-jetty
(:require [com.stuartsierra.component :as component]
[io.pedestal.http :as server]
[io.pedestal.interceptor.helpers :refer [before]]
[io.pedestal.interceptor :refer [interceptor]]
[parenthesin.helpers.logs :as logs]
[reitit.pedestal :as pedestal]))

(defn- add-system [service]
(before (fn [context] (assoc-in context [:request :components] service))))
(interceptor {:enter (fn [context]
(assoc-in context
[:request :components] service))}))

(defn system-interceptors
"Extend to service's interceptors to include one to inject the components
Expand All @@ -16,27 +18,32 @@
[::server/interceptors]
#(vec (->> % (cons (add-system service))))))

(defn base-service [port]
{::server/port port
::server/type :jetty
::server/host "0.0.0.0"
::server/join? true
;; no pedestal routes
::server/routes []
;; allow serving the swagger-ui styles & scripts from self
::server/secure-headers {:content-security-policy-settings
{:default-src "'self'"
:style-src "'self' 'unsafe-inline'"
:script-src "'self' 'unsafe-inline'"
:img-src "'self' 'unsafe-inline' data: https://validator.swagger.io"}}})
(defn base-service [port allowed-origins]
(let [base {::server/port port
::server/type :jetty
::server/host "0.0.0.0"
::server/join? true
;; no pedestal routes
::server/routes []
;; allow serving the swagger-ui styles & scripts from self
::server/secure-headers {:content-security-policy-settings
{:default-src "'self'"
:style-src "'self' 'unsafe-inline'"
:script-src "'self' 'unsafe-inline'"
:img-src "'self' 'unsafe-inline' data: https://validator.swagger.io"}}}]
(if allowed-origins
(assoc base ::server/allowed-origins {:creds true :allowed-origins allowed-origins})
base)))

(defn dev-init [service-map router]
(-> service-map
(merge {:env :dev
;; do not block thread that starts web server
::server/join? false
;; Content Security Policy (CSP) is mostly turned off in dev mode
::server/secure-headers {:content-security-policy-settings {:object-src "none"}}})
::server/secure-headers {:content-security-policy-settings {:object-src "none"}}
;; Allow any origin in dev mode
::server/allowed-origins {:creds true :allowed-origins (constantly true)}})
;; Wire up interceptor chains
(server/default-interceptors)
(pedestal/replace-last-interceptor router)
Expand All @@ -51,12 +58,12 @@
(defrecord WebServer [config router]
component/Lifecycle
(start [this]
(let [{:webserver/keys [port]
(let [{:webserver/keys [port allowed-origins]
:keys [env]} (:config config)
init-fn (if (= env :dev) dev-init prod-init)]
(logs/log :info :webserver :start {:env env :port port})
(assoc this :webserver
(-> (base-service port)
(-> (base-service port allowed-origins)
(init-fn (:router router))
(system-interceptors this)
(server/create-server)
Expand All @@ -70,3 +77,4 @@

(defn new-webserver []
(map->WebServer {}))

0 comments on commit 5cf4235

Please sign in to comment.