import Network
import Network.HTTP.Lucu
import Rakka.Environment
+import Rakka.Resource.CheckAuth
import Rakka.Resource.Index
+import Rakka.Resource.JavaScript
+import Rakka.Resource.PageEntity
import Rakka.Resource.Object
import Rakka.Resource.Render
+import Rakka.Storage
import Subversion
import System.Console.GetOpt
import System.Directory
import System.Posix.Types
import System.Posix.User
+
+logger :: String
logger = "Main"
| OptGroupName String
| OptLogLevel Priority
| OptDisableStderrLog
+ | OptRebuildIndex
| OptHelp
deriving (Eq, Show)
defaultPort :: PortNumber
-defaultPort = fromIntegral 8080
+defaultPort = toEnum 8080
defaultLocalStateDir :: FilePath
defaultLocalStateDir = LOCALSTATEDIR -- replaced by CPP
options :: [OptDescr CmdOpt]
options = [ Option ['p'] ["port"]
- (ReqArg (OptPortNum . fromIntegral . read) "NUM")
+ (ReqArg (OptPortNum . toEnum . read) "NUM")
("Port number to listen. (default: " ++ show defaultPort ++ ")")
, Option ['d'] ["localstatedir"]
(NoArg OptDisableStderrLog)
("Disable logging to stderr.")
+ , Option [] ["rebuild-index"]
+ (NoArg OptRebuildIndex)
+ ("Rebuild the index database.")
+
, Option ['h'] ["help"]
(NoArg OptHelp)
"Print this message."
setupLogger opts
env <- setupEnv lsdir portNum
- noticeM logger ("Listening to " ++ show portNum ++ "/tcp...")
- runHttpd (envLucuConf env) (resTree env) [fallbackRender env]
+ rebuildIndexIfRequested env opts
+
+ infoM logger ("Listening to " ++ show portNum ++ "/tcp...")
+ runHttpd (envLucuConf env) (resTree env) [fallbackPageEntity env]
resTree :: Environment -> ResTree
resTree env
- = mkResTree [ ([] , resIndex env)
- , (["object"], resObject env)
+ = mkResTree [ ([] , resIndex env)
+ , (["checkAuth"], resCheckAuth env)
+ , (["js" ], javaScript )
+ , (["object" ], resObject env)
+ , (["render" ], resRender env)
]
createLocalStateDir path uid gid
= do createDirectoryIfMissing True path
setOwnerAndGroup path uid gid
+
+
+rebuildIndexIfRequested :: Environment -> [CmdOpt] -> IO ()
+rebuildIndexIfRequested env opts
+ = do let rebuild = isJust $ find (\ x -> case x of
+ OptRebuildIndex -> True
+ _ -> False) opts
+ when rebuild
+ $ rebuildIndex (envStorage env)
\ No newline at end of file