{-# LANGUAGE TemplateHaskell #-}
module Client.Configuration.ServerSettings
(
ServerSettings(..)
, ssNick
, ssUser
, ssReal
, ssUserInfo
, ssPassword
, ssSaslUsername
, ssSaslPassword
, ssHostName
, ssPort
, ssTls
, ssTlsClientCert
, ssTlsClientKey
, ssConnectCmds
, ssSocksHost
, ssSocksPort
, ssServerCerts
, ssChanservChannels
, ssFloodPenalty
, ssFloodThreshold
, ssMessageHooks
, ssName
, loadDefaultServerSettings
, UseTls(..)
) where
import Control.Lens
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import qualified Data.Text as Text
import Irc.Identifier (Identifier)
import Network.Socket (HostName, PortNumber)
import System.Environment
data ServerSettings = ServerSettings
{ _ssNick :: !Text
, _ssUser :: !Text
, _ssReal :: !Text
, _ssUserInfo :: !Text
, _ssPassword :: !(Maybe Text)
, _ssSaslUsername :: !(Maybe Text)
, _ssSaslPassword :: !(Maybe Text)
, _ssHostName :: !HostName
, _ssPort :: !(Maybe PortNumber)
, _ssTls :: !UseTls
, _ssTlsClientCert :: !(Maybe FilePath)
, _ssTlsClientKey :: !(Maybe FilePath)
, _ssConnectCmds :: ![Text]
, _ssSocksHost :: !(Maybe HostName)
, _ssSocksPort :: !PortNumber
, _ssServerCerts :: ![FilePath]
, _ssChanservChannels :: ![Identifier]
, _ssFloodPenalty :: !Rational
, _ssFloodThreshold :: !Rational
, _ssMessageHooks :: ![Text]
, _ssName :: !(Maybe Text)
}
deriving Show
data UseTls
= UseTls
| UseInsecureTls
| UseInsecure
deriving Show
makeLenses ''ServerSettings
-- | Load the defaults for server settings based on the environment
-- variables.
--
-- @USER@, @IRCPASSSWORD@, and @SASLPASSWORD@ are used.
loadDefaultServerSettings :: IO ServerSettings
loadDefaultServerSettings =
do env <- getEnvironment
let username = Text.pack (fromMaybe "guest" (lookup "USER" env))
return ServerSettings
{ _ssNick = username
, _ssUser = username
, _ssReal = username
, _ssUserInfo = username
, _ssPassword = Text.pack <$> lookup "IRCPASSWORD" env
, _ssSaslUsername = Nothing
, _ssSaslPassword = Text.pack <$> lookup "SASLPASSWORD" env
, _ssHostName = ""
, _ssPort = Nothing
, _ssTls = UseInsecure
, _ssTlsClientCert = Nothing
, _ssTlsClientKey = Nothing
, _ssConnectCmds = []
, _ssSocksHost = Nothing
, _ssSocksPort = 1080
, _ssServerCerts = []
, _ssChanservChannels = []
, _ssFloodPenalty = 2 -- RFC 1459 defaults
, _ssFloodThreshold = 10
, _ssMessageHooks = []
, _ssName = Nothing
}