diff --git a/yesod-core/ChangeLog.md b/yesod-core/ChangeLog.md index 0791ddf1..f049b8f6 100644 --- a/yesod-core/ChangeLog.md +++ b/yesod-core/ChangeLog.md @@ -1,6 +1,6 @@ ## 1.4.16 -* Add `guessApproot` +* Add `guessApproot` and `guessApprootOr` ## 1.4.15.1 diff --git a/yesod-core/Yesod/Core.hs b/yesod-core/Yesod/Core.hs index b3a3cf7d..c6a327d6 100644 --- a/yesod-core/Yesod/Core.hs +++ b/yesod-core/Yesod/Core.hs @@ -73,6 +73,7 @@ module Yesod.Core , defaultLayoutSub -- * Approot , guessApproot + , guessApprootOr -- * Misc , yesodVersion , yesodRender diff --git a/yesod-core/Yesod/Core/Class/Yesod.hs b/yesod-core/Yesod/Core/Class/Yesod.hs index 47f4fb49..6c4a582b 100644 --- a/yesod-core/Yesod/Core/Class/Yesod.hs +++ b/yesod-core/Yesod/Core/Class/Yesod.hs @@ -835,9 +835,20 @@ fileLocationToString loc = (loc_package loc) ++ ':' : (loc_module loc) ++ -- -- Since 1.4.16 guessApproot :: Approot site -guessApproot = ApprootRequest $ \_master req -> +guessApproot = guessApprootOr ApprootRelative + +-- | Guess the approot based on request headers, with fall back to the +-- specified 'AppRoot'. +-- +-- Since 1.4.16 +guessApprootOr :: Approot site -> Approot site +guessApprootOr fallback = ApprootRequest $ \master req -> case W.requestHeaderHost req of - Nothing -> "" + Nothing -> case fallback of + ApprootRelative -> "" + ApprootStatic t -> t + ApprootMaster f -> f master + ApprootRequest f -> f master req Just host -> (if Network.Wai.Request.appearsSecure req then "https://"