diff options
| -rw-r--r-- | Foundation.hs | 5 | ||||
| -rw-r--r-- | Settings.hs | 6 | ||||
| -rw-r--r-- | config/settings.yml | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/Foundation.hs b/Foundation.hs index d7425d5..27082fc 100644 --- a/Foundation.hs +++ b/Foundation.hs | |||
| @@ -52,7 +52,10 @@ type Form x = Html -> MForm (HandlerT App IO) (FormResult x, Widget) | |||
| 52 | -- Please see the documentation for the Yesod typeclass. There are a number | 52 | -- Please see the documentation for the Yesod typeclass. There are a number |
| 53 | -- of settings which can be configured by overriding methods here. | 53 | -- of settings which can be configured by overriding methods here. |
| 54 | instance Yesod App where | 54 | instance Yesod App where |
| 55 | approot = ApprootRequest $ \_ req -> maybe "" (TE.decodeUtf8With TEE.lenientDecode) $ Map.lookup "AppRoot" (Map.fromList $ requestHeaders req) | 55 | approot = ApprootRequest $ \app req -> |
| 56 | case appRoot $ appSettings app of | ||
| 57 | Nothing -> getApprootText guessApproot app req | ||
| 58 | Just root -> root | ||
| 56 | 59 | ||
| 57 | -- Store session data on the client in encrypted cookies, | 60 | -- Store session data on the client in encrypted cookies, |
| 58 | -- default session idle timeout is 120 minutes | 61 | -- default session idle timeout is 120 minutes |
diff --git a/Settings.hs b/Settings.hs index a15fb03..8a98c7a 100644 --- a/Settings.hs +++ b/Settings.hs | |||
| @@ -35,6 +35,7 @@ data AppSettings = AppSettings | |||
| 35 | -- ^ Directory from which to serve static files. | 35 | -- ^ Directory from which to serve static files. |
| 36 | , appDatabaseConf :: PostgresConf | 36 | , appDatabaseConf :: PostgresConf |
| 37 | -- ^ Configuration settings for accessing the database. | 37 | -- ^ Configuration settings for accessing the database. |
| 38 | , appRoot :: Maybe Text | ||
| 38 | , appHost :: HostPreference | 39 | , appHost :: HostPreference |
| 39 | -- ^ Host/interface the server should bind to. | 40 | -- ^ Host/interface the server should bind to. |
| 40 | , appPort :: Int | 41 | , appPort :: Int |
| @@ -59,6 +60,11 @@ instance FromJSON AppSettings where | |||
| 59 | parseUrl' = either (fail . show) return . parseBaseUrl | 60 | parseUrl' = either (fail . show) return . parseBaseUrl |
| 60 | appStaticDir <- o .: "static-dir" | 61 | appStaticDir <- o .: "static-dir" |
| 61 | appDatabaseConf <- o .: "database" | 62 | appDatabaseConf <- o .: "database" |
| 63 | appRoot' <- o .:? "approot" | ||
| 64 | let | ||
| 65 | appRoot | ||
| 66 | | appRoot' == Just "" = Nothing | ||
| 67 | | otherwise = appRoot' | ||
| 62 | appHost <- fromString <$> o .: "host" | 68 | appHost <- fromString <$> o .: "host" |
| 63 | appPort <- o .: "port" | 69 | appPort <- o .: "port" |
| 64 | appIpFromHeader <- o .: "ip-from-header" | 70 | appIpFromHeader <- o .: "ip-from-header" |
diff --git a/config/settings.yml b/config/settings.yml index c867908..f6332bd 100644 --- a/config/settings.yml +++ b/config/settings.yml | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | static-dir: "_env:STATIC_DIR:static" | 1 | static-dir: "_env:STATIC_DIR:static" |
| 2 | approot: "_env:APPROOT:" | ||
| 2 | host: "_env:HOST:*4" # any IPv4 host | 3 | host: "_env:HOST:*4" # any IPv4 host |
| 3 | port: "_env:PORT:3000" | 4 | port: "_env:PORT:3000" |
| 4 | ip-from-header: "_env:IP_FROM_HEADER:false" | 5 | ip-from-header: "_env:IP_FROM_HEADER:false" |
