Skip to content

Commit 25d2bba

Browse files
committed
Add CustomMiddleware option for user-provided WAI middleware
1 parent 1ef1be0 commit 25d2bba

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

IHP/FrameworkConfig.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ newtype RLSAuthenticatedRole = RLSAuthenticatedRole Text
7171

7272
newtype AssetVersion = AssetVersion Text
7373

74+
newtype CustomMiddleware = CustomMiddleware Middleware
75+
7476
-- | Puts an option into the current configuration
7577
--
7678
-- In case an option already exists with the same type, it will not be overriden:
@@ -154,6 +156,8 @@ ihpDefaultConfig = do
154156
option $ RLSAuthenticatedRole rlsAuthenticatedRole
155157

156158
initAssetVersion
159+
160+
option $ CustomMiddleware id
157161

158162
{-# INLINABLE ihpDefaultConfig #-}
159163

@@ -273,6 +277,7 @@ buildFrameworkConfig appConfig = do
273277
(IdeBaseUrl ideBaseUrl) <- findOption @IdeBaseUrl
274278
(RLSAuthenticatedRole rlsAuthenticatedRole) <- findOption @RLSAuthenticatedRole
275279
(AssetVersion assetVersion) <- findOption @AssetVersion
280+
customMiddleware <- findOption @CustomMiddleware
276281

277282
appConfig <- State.get
278283

@@ -432,6 +437,9 @@ data FrameworkConfig = FrameworkConfig
432437
-- string @"dev"@.
433438
--
434439
, assetVersion :: !Text
440+
441+
-- | User provided WAI middleware that is run after IHP's middleware stack.
442+
, customMiddleware :: !CustomMiddleware
435443
}
436444

437445
class ConfigProvider a where

IHP/Server.hs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,17 @@ run configBuilder = do
5959
staticMiddleware <- initStaticMiddleware frameworkConfig
6060
let corsMiddleware = initCorsMiddleware frameworkConfig
6161
let requestLoggerMiddleware = get #requestLoggerMiddleware frameworkConfig
62-
63-
withBackgroundWorkers pgListener frameworkConfig $
64-
runServer frameworkConfig $
65-
staticMiddleware $
66-
corsMiddleware $
67-
sessionMiddleware $
68-
requestLoggerMiddleware $
69-
methodOverridePost $
70-
application
62+
let CustomMiddleware customMiddleware = get #customMiddleware frameworkConfig
63+
64+
withBackgroundWorkers pgListener frameworkConfig
65+
. runServer frameworkConfig
66+
. customMiddleware
67+
. staticMiddleware
68+
. corsMiddleware
69+
. sessionMiddleware
70+
. requestLoggerMiddleware
71+
. methodOverridePost
72+
$ application
7173

7274
{-# INLINABLE run #-}
7375

0 commit comments

Comments
 (0)