aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/Main.hs38
1 files changed, 25 insertions, 13 deletions
diff --git a/app/Main.hs b/app/Main.hs
index 50ca151..29dfc95 100644
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,19 +1,31 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE LambdaCase #-}
module Main where
import Cana
-import Cana.Protocol
-import Cana.Router
-import Cana.Extra
+import Cana.Server
-defaultResponse :: GeminiResponse
-defaultResponse = GeminiResponse
- { responseStatus = codeSuccess
- , responseMeta = "text/gemini"
- , responseData = "# Hello World\nThis page was served by Cana."
- }
+import Data.Maybe
+import System.IO
+import System.Exit
+import System.Environment
main :: IO ()
-main = runGeminiServer Nothing defaultGeminiPort "certificate.crt" "private.key"
- [ (anyRoute, staticFiles "gmdocs")
- ]
+main = do
+ configPath <- configPath
+ config <- loadConfig configPath
+ case config of
+ Left err ->
+ printError "Error loading configuration:" err >> exitFailure
+
+ Right c -> runGeminiServer' c >>= \case
+ Left err -> printError "Server error:" err >> exitFailure
+ Right _ -> return ()
+
+ where
+ configPath = do
+ args <- getArgs
+ return . fromMaybe "cana.xml" $ listToMaybe args
+
+ printError title err = do
+ hPutStrLn stderr title
+ hPutStrLn stderr err