fix: in-db config values not loading for pgrst.server_trace_header and pgrst.server_cors_allowed_origins

This commit is contained in:
Laurence Isla
2024-03-27 15:59:35 -05:00
parent d02540ac44
commit 428a6fef63
8 changed files with 27 additions and 19 deletions
+12 -11
View File
@@ -9,7 +9,6 @@ Some of its functionality includes:
- Producing HTTP Headers according to RFCs.
- Content Negotiation
-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE RecordWildCards #-}
module PostgREST.App
( postgrest
@@ -49,7 +48,7 @@ import PostgREST.ApiRequest (Action (..),
ApiRequest (..), Mutation (..))
import PostgREST.AppState (AppState)
import PostgREST.Auth (AuthResult (..))
import PostgREST.Config (AppConfig (..))
import PostgREST.Config (AppConfig (..), LogLevel (..))
import PostgREST.Config.PgVersion (PgVersion (..))
import PostgREST.Error (Error)
import PostgREST.Observation (Observation (..))
@@ -81,7 +80,7 @@ run appState observer = do
Admin.runAdmin conf appState (serverSettings conf) observer
let app = postgrest conf appState (AppState.connectionWorker appState) observer
let app = postgrest configLogLevel appState (AppState.connectionWorker appState) observer
case configServerUnixSocket of
Just path -> do
@@ -100,12 +99,12 @@ serverSettings AppConfig{..} =
& setServerName ("postgrest/" <> prettyVersion)
-- | PostgREST application
postgrest :: AppConfig -> AppState.AppState -> IO () -> (Observation -> IO ()) -> Wai.Application
postgrest conf appState connWorker observer =
traceHeaderMiddleware conf .
Cors.middleware (configServerCorsAllowedOrigins conf) .
postgrest :: LogLevel -> AppState.AppState -> IO () -> (Observation -> IO ()) -> Wai.Application
postgrest logLevel appState connWorker observer =
traceHeaderMiddleware appState .
Cors.middleware appState .
Auth.middleware appState .
Logger.middleware (configLogLevel conf) $
Logger.middleware logLevel $
-- fromJust can be used, because the auth middleware will **always** add
-- some AuthResult to the vault.
\req respond -> case fromJust $ Auth.getResult req of
@@ -251,9 +250,11 @@ calcTiming timingEnabled f = if timingEnabled
r <- f
pure (Nothing, r)
traceHeaderMiddleware :: AppConfig -> Wai.Middleware
traceHeaderMiddleware AppConfig{configServerTraceHeader} app req respond =
case configServerTraceHeader of
traceHeaderMiddleware :: AppState -> Wai.Middleware
traceHeaderMiddleware appState app req respond = do
conf <- AppState.getConfig appState
case configServerTraceHeader conf of
Nothing -> app req respond
Just hdr ->
let hdrVal = L.lookup hdr $ Wai.requestHeaders req in
+1
View File
@@ -65,6 +65,7 @@ dbSettingsNames =
,"openapi_security_active"
,"openapi_server_proxy_uri"
,"raw_media_types"
,"server_cors_allowed_origins"
,"server_trace_header"
,"server_timing_enabled"
]
+7 -2
View File
@@ -15,10 +15,15 @@ import qualified Network.Wai.Middleware.Cors as Wai
import Data.List (lookup)
import PostgREST.AppState (AppState, getConfig)
import PostgREST.Config (AppConfig (..))
import Protolude
middleware :: Maybe [Text] -> Wai.Middleware
middleware corsAllowedOrigins = Wai.cors $ corsPolicy corsAllowedOrigins
middleware :: AppState -> Wai.Middleware
middleware appState app req res = do
conf <- getConfig appState
Wai.cors (corsPolicy $ configServerCorsAllowedOrigins conf) app req res
-- | CORS policy to be used in by Wai Cors middleware
corsPolicy :: Maybe [Text] -> Wai.Request -> Maybe Wai.CorsResourcePolicy