-{-# LANGUAGE CPP #-}
+{-# LANGUAGE
+ CPP
+ , UnicodeSyntax
+ #-}
import Control.Exception
import Control.Monad
import Data.List
import Data.Maybe
-import Network
+import Network.Socket
import Network.HTTP.Lucu
import OpenSSL
import Rakka.Environment
data CmdOpt
- = OptPortNum PortNumber
+ = OptPortNum ServiceName
| OptLSDir FilePath
| OptUserName String
| OptGroupName String
deriving (Eq, Show)
-defaultPort :: PortNumber
-defaultPort = toEnum 8080
+defaultPort ∷ ServiceName
+defaultPort = "8080"
defaultLocalStateDir :: FilePath
defaultLocalStateDir = LOCALSTATEDIR -- replaced by CPP
options :: [OptDescr CmdOpt]
options = [ Option ['p'] ["port"]
- (ReqArg (OptPortNum . toEnum . read) "NUM")
- ("Port number to listen. (default: " ++ show defaultPort ++ ")")
+ (ReqArg OptPortNum "NUM")
+ ("Port number to listen. (default: " ++ defaultPort ++ ")")
, Option ['d'] ["localstatedir"]
(ReqArg OptLSDir "DIR")
, Option ['r'] ["rebuild-index"]
(NoArg OptRebuildIndex)
- "Rebuild the index database."
+ "Rebuild the index database. (Only for debug purposes)"
, Option ['h'] ["help"]
(NoArg OptHelp)
withSystemLock (lsdir </> "lock") $
withPidFile (lsdir </> "pid") $
do setupLogger opts
- env <- setupEnv lsdir portNum
+ env ← setupEnv lsdir portNum
rebuildIndexIfRequested env opts
, (["users" ], resUsers env)
]
-
-getPortNum :: [CmdOpt] -> IO PortNumber
+getPortNum ∷ [CmdOpt] → IO ServiceName
getPortNum opts
- = do let xs = mapMaybe (\ x -> case x of
- OptPortNum n -> Just n
- _ -> Nothing) opts
+ = do let xs = mapMaybe (\x → case x of
+ OptPortNum n → Just n
+ _ → Nothing) opts
case xs of
- [] -> return defaultPort
- (x:[]) -> return x
- _ -> error "too many --port options."
-
+ [] → return defaultPort
+ (x:[]) → return x
+ _ → error "too many --port options."
getUserID :: [CmdOpt] -> IO UserID
getUserID opts