snap-server-1.1.2.1: A web server for the Snap Framework

Safe Haskell | None
Language | Haskell2010

Snap.Internal.Http.Server.Config

Contents

- Private

Description

This module exports the `Config` datatype, which you can use to configure the Snap HTTP server.

Synopsis

- data ConfigLog
  - = ConfigNoLog
  - | ConfigFileLog FilePath
  - | ConfigIoLog (ByteString -> IO ())
- data Config (m :: Type -> Type) a = Config {
  - hostname :: Maybe ByteString
  - accessLog :: Maybe ConfigLog
  - errorLog :: Maybe ConfigLog
  - locale :: Maybe String
  - port :: Maybe Int
  - bind :: Maybe ByteString
  - sslport :: Maybe Int
  - sslbind :: Maybe ByteString
  - sslcert :: Maybe FilePath
  - sslchaincert :: Maybe Bool
  - sslkey :: Maybe FilePath
  - unixsocket :: Maybe FilePath
  - unixaccessmode :: Maybe Int
  - compression :: Maybe Bool
  - verbose :: Maybe Bool
  - errorHandler :: Maybe (SomeException -> m ())
  - defaultTimeout :: Maybe Int
  - other :: Maybe a
  - proxyType :: Maybe ProxyType
  - startupHook :: Maybe (StartupInfo m a -> IO ())
  }
- data ProxyType
  - = NoProxy
  - | HaProxy
  - | X_Forwarded_For
- emptyConfig :: forall (m :: Type -> Type) a. Config m a
- defaultConfig :: forall (m :: Type -> Type) a. MonadSnap m => Config m a
- commandLineConfig :: forall (m :: Type -> Type) a. MonadSnap m => Config m a -> IO (Config m a)
- extendedCommandLineConfig :: forall (m :: Type -> Type) a. MonadSnap m => [OptDescr (Maybe (Config m a))] -> (a -> a -> a) -> Config m a -> IO (Config m a)
- completeConfig :: forall (m :: Type -> Type) a. MonadSnap m => Config m a -> IO (Config m a)
- optDescrs :: forall (m :: Type -> Type) a. MonadSnap m => Config m a -> [OptDescr (Maybe (Config m a))]
- fmapOpt :: (a -> b) -> OptDescr a -> OptDescr b
- getAccessLog :: forall (m :: Type -> Type) a. Config m a -> Maybe ConfigLog
- getBind :: forall (m :: Type -> Type) a. Config m a -> Maybe ByteString
- getCompression :: forall (m :: Type -> Type) a. Config m a -> Maybe Bool
- getDefaultTimeout :: forall (m :: Type -> Type) a. Config m a -> Maybe Int
- getErrorHandler :: Config m a -> Maybe (SomeException -> m ())
- getErrorLog :: forall (m :: Type -> Type) a. Config m a -> Maybe ConfigLog
- getHostname :: forall (m :: Type -> Type) a. Config m a -> Maybe ByteString
- getLocale :: forall (m :: Type -> Type) a. Config m a -> Maybe String
- getOther :: forall (m :: Type -> Type) a. Config m a -> Maybe a
- getPort :: forall (m :: Type -> Type) a. Config m a -> Maybe Int
- getProxyType :: forall (m :: Type -> Type) a. Config m a -> Maybe ProxyType
- getSSLBind :: forall (m :: Type -> Type) a. Config m a -> Maybe ByteString
- getSSLCert :: forall (m :: Type -> Type) a. Config m a -> Maybe FilePath
- getSSLChainCert :: forall (m :: Type -> Type) a. Config m a -> Maybe Bool
- getSSLKey :: forall (m :: Type -> Type) a. Config m a -> Maybe FilePath
- getSSLPort :: forall (m :: Type -> Type) a. Config m a -> Maybe Int
- getVerbose :: forall (m :: Type -> Type) a. Config m a -> Maybe Bool
- getStartupHook :: forall (m :: Type -> Type) a. Config m a -> Maybe (StartupInfo m a -> IO ())
- getUnixSocket :: forall (m :: Type -> Type) a. Config m a -> Maybe FilePath
- getUnixSocketAccessMode :: forall (m :: Type -> Type) a. Config m a -> Maybe Int
- setAccessLog :: forall (m :: Type -> Type) a. ConfigLog -> Config m a -> Config m a
- setBind :: forall (m :: Type -> Type) a. ByteString -> Config m a -> Config m a
- setCompression :: forall (m :: Type -> Type) a. Bool -> Config m a -> Config m a
- setDefaultTimeout :: forall (m :: Type -> Type) a. Int -> Config m a -> Config m a
- setErrorHandler :: (SomeException -> m ()) -> Config m a -> Config m a
- setErrorLog :: forall (m :: Type -> Type) a. ConfigLog -> Config m a -> Config m a
- setHostname :: forall (m :: Type -> Type) a. ByteString -> Config m a -> Config m a
- setLocale :: forall (m :: Type -> Type) a. String -> Config m a -> Config m a
- setOther :: forall a (m :: Type -> Type). a -> Config m a -> Config m a
- setPort :: forall (m :: Type -> Type) a. Int -> Config m a -> Config m a
- setProxyType :: forall (m :: Type -> Type) a. ProxyType -> Config m a -> Config m a
- setSSLBind :: forall (m :: Type -> Type) a. ByteString -> Config m a -> Config m a
- setSSLCert :: forall (m :: Type -> Type) a. FilePath -> Config m a -> Config m a
- setSSLChainCert :: forall (m :: Type -> Type) a. Bool -> Config m a -> Config m a
- setSSLKey :: forall (m :: Type -> Type) a. FilePath -> Config m a -> Config m a
- setSSLPort :: forall (m :: Type -> Type) a. Int -> Config m a -> Config m a
- setVerbose :: forall (m :: Type -> Type) a. Bool -> Config m a -> Config m a
- setUnixSocket :: forall (m :: Type -> Type) a. FilePath -> Config m a -> Config m a
- setUnixSocketAccessMode :: forall (m :: Type -> Type) a. Int -> Config m a -> Config m a
- setStartupHook :: forall (m :: Type -> Type) a. (StartupInfo m a -> IO ()) -> Config m a -> Config m a
- data StartupInfo (m :: Type -> Type) a = StartupInfo {
  - startupHookConfig :: Config m a
  - startupHookSockets :: [Socket]
  }
- getStartupSockets :: forall (m :: Type -> Type) a. StartupInfo m a -> [Socket]
- getStartupConfig :: forall (m :: Type -> Type) a. StartupInfo m a -> Config m a
- emptyStartupInfo :: forall (m :: Type -> Type) a. StartupInfo m a
- setStartupSockets :: forall (m :: Type -> Type) a. [Socket] -> StartupInfo m a -> StartupInfo m a
- setStartupConfig :: forall (m :: Type -> Type) a. Config m a -> StartupInfo m a -> StartupInfo m a

# Documentation

data ConfigLog Source #

Data type representing the configuration of a logging target

Constructors

ConfigNoLog | no logging
ConfigFileLog FilePath | log to text file
ConfigIoLog (ByteString -> IO ()) | log custom IO handler

#### Instances

Instances details

Show ConfigLog Source # |
Instance details Defined in Snap.Internal.Http.Server.Config Methods showsPrec :: Int -> ConfigLog -> ShowS Source # show :: ConfigLog -> String Source # showList :: [ConfigLog] -> ShowS Source #

data Config (m :: Type -> Type) a Source #

A record type which represents partial configurations (for `httpServe`) by wrapping all of its fields in a `Maybe`. Values of this type are usually constructed via its `Monoid` instance by doing something like:

    setPort 1234 mempty

Any fields which are unspecified in the `Config` passed to `httpServe` (and this is the norm) are filled in with default values from `defaultConfig`.

Constructors

Config |

Fields

- hostname :: Maybe ByteString
- accessLog :: Maybe ConfigLog
- errorLog :: Maybe ConfigLog
- locale :: Maybe String
- port :: Maybe Int
- bind :: Maybe ByteString
- sslport :: Maybe Int
- sslbind :: Maybe ByteString
- sslcert :: Maybe FilePath
- sslchaincert :: Maybe Bool
- sslkey :: Maybe FilePath
- unixsocket :: Maybe FilePath
- unixaccessmode :: Maybe Int
- compression :: Maybe Bool
- verbose :: Maybe Bool
- errorHandler :: Maybe (SomeException -> m ())
- defaultTimeout :: Maybe Int
- other :: Maybe a
- proxyType :: Maybe ProxyType
- startupHook :: Maybe (StartupInfo m a -> IO ())

#### Instances

Instances details

Monoid (Config m a) Source # |
Instance details Defined in Snap.Internal.Http.Server.Config Methods mempty :: Config m a Source # mappend :: Config m a -> Config m a -> Config m a Source # mconcat :: [Config m a] -> Config m a Source #
Semigroup (Config m a) Source # |
Instance details Defined in Snap.Internal.Http.Server.Config Methods (<>) :: Config m a -> Config m a -> Config m a Source # sconcat :: NonEmpty (Config m a) -> Config m a Source # stimes :: Integral b => b -> Config m a -> Config m a Source #
Show (Config m a) Source # |
Instance details Defined in Snap.Internal.Http.Server.Config Methods showsPrec :: Int -> Config m a -> ShowS Source # show :: Config m a -> String Source # showList :: [Config m a] -> ShowS Source #

data ProxyType Source #

FIXME

Note: this type changed in snap-server 1.0.0.0.

Constructors

NoProxy |
HaProxy |
X_Forwarded_For |

#### Instances

Instances details

Show ProxyType Source # |
Instance details Defined in Snap.Internal.Http.Server.Config Methods showsPrec :: Int -> ProxyType -> ShowS Source # show :: ProxyType -> String Source # showList :: [ProxyType] -> ShowS Source #
Eq ProxyType Source # |
Instance details Defined in Snap.Internal.Http.Server.Config Methods (==) :: ProxyType -> ProxyType -> Bool Source # (/=) :: ProxyType -> ProxyType -> Bool Source #

emptyConfig :: forall (m :: Type -> Type) a. Config m a Source #

Returns a completely empty `Config`. Equivalent to `mempty` from `Config'`s `Monoid` instance.

defaultConfig :: forall (m :: Type -> Type) a. MonadSnap m => Config m a Source #

These are the default values for the options

commandLineConfig Source #

Arguments

:: forall (m :: Type -> Type) a. MonadSnap m |
=> Config m a | default configuration. This is combined with `defaultConfig` to obtain default values to use if the given parameter is specified on the command line. Usually it is fine to use `emptyConfig` here.
-> IO (Config m a) |

Returns a `Config` obtained from parsing command-line options, using the default Snap `OptDescr` set.

On Unix systems, the locale is read from the `LANG` environment variable.

extendedCommandLineConfig Source #

Arguments

:: forall (m :: Type -> Type) a. MonadSnap m |
=> [OptDescr (Maybe (Config m a))] | Full list of command line options (combine yours with `optDescrs` to extend Snap's default set of options)
-> (a -> a -> a) | State for multiple invoked user command-line options will be combined using this function.
-> Config m a | default configuration. This is combined with Snap's `defaultConfig` to obtain default values to use if the given parameter is specified on the command line. Usually it is fine to use `emptyConfig` here.
-> IO (Config m a) |

Returns a `Config` obtained from parsing command-line options, using the default Snap `OptDescr` set as well as a list of user OptDescrs. User OptDescrs use the "other" field (accessible using `getOther` and `setOther`) to store additional command-line option state. These are combined using a user-defined combining function.

On Unix systems, the locale is read from the `LANG` environment variable.

completeConfig :: forall (m :: Type -> Type) a. MonadSnap m => Config m a -> IO (Config m a) Source #

optDescrs Source #

Arguments

:: forall (m :: Type -> Type) a. MonadSnap m |
=> Config m a | the configuration defaults.
-> [OptDescr (Maybe (Config m a))] |

Returns a description of the snap command line options suitable for use with System.Console.GetOpt.

fmapOpt :: (a -> b) -> OptDescr a -> OptDescr b Source #

getAccessLog :: forall (m :: Type -> Type) a. Config m a -> Maybe ConfigLog Source #

Path to the access log

getBind :: forall (m :: Type -> Type) a. Config m a -> Maybe ByteString Source #

Returns the address to bind to (for http)

getCompression :: forall (m :: Type -> Type) a. Config m a -> Maybe Bool Source #

If set and set to True, compression is turned on when applicable

getDefaultTimeout :: forall (m :: Type -> Type) a. Config m a -> Maybe Int Source #

getErrorHandler :: Config m a -> Maybe (SomeException -> m ()) Source #

A MonadSnap action to handle 500 errors

getErrorLog :: forall (m :: Type -> Type) a. Config m a -> Maybe ConfigLog Source #

Path to the error log

getHostname :: forall (m :: Type -> Type) a. Config m a -> Maybe ByteString Source #

The hostname of the HTTP server. This field has the same format as an HTTP `Host` header; if a `Host` header came in with the request, we use that, otherwise we default to this value specified in the configuration.

getLocale :: forall (m :: Type -> Type) a. Config m a -> Maybe String Source #

Gets the locale to use. Locales are used on Unix only, to set the `LANG`/`LC_ALL`/etc. environment variable. For instance if you set the locale to "`en_US`", we'll set the relevant environment variables to "`en_US.UTF-8`".

getOther :: forall (m :: Type -> Type) a. Config m a -> Maybe a Source #

getPort :: forall (m :: Type -> Type) a. Config m a -> Maybe Int Source #

Returns the port to listen on (for http)

getProxyType :: forall (m :: Type -> Type) a. Config m a -> Maybe ProxyType Source #

getSSLBind :: forall (m :: Type -> Type) a. Config m a -> Maybe ByteString Source #

Returns the address to bind to (for https)

getSSLCert :: forall (m :: Type -> Type) a. Config m a -> Maybe FilePath Source #

Path to the SSL certificate file

getSSLChainCert :: forall (m :: Type -> Type) a. Config m a -> Maybe Bool Source #

Path to the SSL certificate file

getSSLKey :: forall (m :: Type -> Type) a. Config m a -> Maybe FilePath Source #

Path to the SSL key file

getSSLPort :: forall (m :: Type -> Type) a. Config m a -> Maybe Int Source #

Returns the port to listen on (for https)

getVerbose :: forall (m :: Type -> Type) a. Config m a -> Maybe Bool Source #

Whether to write server status updates to stderr

getStartupHook :: forall (m :: Type -> Type) a. Config m a -> Maybe (StartupInfo m a -> IO ()) Source #

A startup hook is run after the server initializes but before user request processing begins. The server passes, through a `StartupInfo` object, the startup hook a list of the sockets it is listening on and the final `Config` object completed after command-line processing.

getUnixSocket :: forall (m :: Type -> Type) a. Config m a -> Maybe FilePath Source #

File path to unix socket. Must be absolute path, but allows for symbolic links.

getUnixSocketAccessMode :: forall (m :: Type -> Type) a. Config m a -> Maybe Int Source #

Access mode for unix socket, by default is system specific. This should only be used to grant additional permissions to created socket file, and not to remove permissions set by default. The only portable way to limit access to socket is creating it in a directory with proper permissions set.

Most BSD systems ignore access permissions on unix sockets.

Note: This uses umask. There is a race condition if process creates other files at the same time as opening a unix socket with this option set.

setAccessLog :: forall (m :: Type -> Type) a. ConfigLog -> Config m a -> Config m a Source #

setBind :: forall (m :: Type -> Type) a. ByteString -> Config m a -> Config m a Source #

setCompression :: forall (m :: Type -> Type) a. Bool -> Config m a -> Config m a Source #

setDefaultTimeout :: forall (m :: Type -> Type) a. Int -> Config m a -> Config m a Source #

setErrorHandler :: (SomeException -> m ()) -> Config m a -> Config m a Source #

setErrorLog :: forall (m :: Type -> Type) a. ConfigLog -> Config m a -> Config m a Source #

setHostname :: forall (m :: Type -> Type) a. ByteString -> Config m a -> Config m a Source #

setLocale :: forall (m :: Type -> Type) a. String -> Config m a -> Config m a Source #

setOther :: forall a (m :: Type -> Type). a -> Config m a -> Config m a Source #

setPort :: forall (m :: Type -> Type) a. Int -> Config m a -> Config m a Source #

setProxyType :: forall (m :: Type -> Type) a. ProxyType -> Config m a -> Config m a Source #

setSSLBind :: forall (m :: Type -> Type) a. ByteString -> Config m a -> Config m a Source #

setSSLCert :: forall (m :: Type -> Type) a. FilePath -> Config m a -> Config m a Source #

setSSLChainCert :: forall (m :: Type -> Type) a. Bool -> Config m a -> Config m a Source #

setSSLKey :: forall (m :: Type -> Type) a. FilePath -> Config m a -> Config m a Source #

setSSLPort :: forall (m :: Type -> Type) a. Int -> Config m a -> Config m a Source #

setVerbose :: forall (m :: Type -> Type) a. Bool -> Config m a -> Config m a Source #

setUnixSocket :: forall (m :: Type -> Type) a. FilePath -> Config m a -> Config m a Source #

setUnixSocketAccessMode :: forall (m :: Type -> Type) a. Int -> Config m a -> Config m a Source #

setStartupHook :: forall (m :: Type -> Type) a. (StartupInfo m a -> IO ()) -> Config m a -> Config m a Source #

data StartupInfo (m :: Type -> Type) a Source #

Arguments passed to `setStartupHook`.

Constructors

StartupInfo |

Fields

- startupHookConfig :: Config m a
- startupHookSockets :: [Socket]

getStartupSockets :: forall (m :: Type -> Type) a. StartupInfo m a -> [Socket] Source #

The `Socket`s opened by the server. There will be two `Socket`s for SSL connections, and one otherwise.

getStartupConfig :: forall (m :: Type -> Type) a. StartupInfo m a -> Config m a Source #

# Private

emptyStartupInfo :: forall (m :: Type -> Type) a. StartupInfo m a Source #

setStartupSockets :: forall (m :: Type -> Type) a. [Socket] -> StartupInfo m a -> StartupInfo m a Source #

setStartupConfig :: forall (m :: Type -> Type) a. Config m a -> StartupInfo m a -> StartupInfo m a Source #