aboutsummaryrefslogtreecommitdiff
path: root/src/Config.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Config.hs')
-rw-r--r--src/Config.hs34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/Config.hs b/src/Config.hs
index d494477..071cc26 100644
--- a/src/Config.hs
+++ b/src/Config.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE OverloadedStrings, LambdaCase #-}
module Config (
Config(..),
@@ -6,9 +6,15 @@ module Config (
makeOpenSearch
) where
+import Prelude hiding (lookup)
+
+import Control.Applicative ((<|>))
+import Data.Aeson.KeyMap (empty, lookup)
+import Data.Functor ((<&>))
import Data.Maybe (fromMaybe)
import Data.String (fromString, IsString)
import Data.Text (Text)
+import Data.Yaml
import Network.Wai.Handler.Warp (HostPreference)
import System.Environment (lookupEnv)
@@ -22,15 +28,23 @@ data Config = Config {
} deriving (Show, Eq)
getConfig :: IO Config
-getConfig = Config
- <$> (read <$> getEnvOr "PORT" "20546")
- <*> getEnvOr "BIND_ADDR" "*6"
- <*> getEnvOr "BASE_URL" "http://localhost:20546"
- <*> getEnvOr "FAVICON_URL" "https://69owo.de/favicon.ico"
- <*> getEnvOr "ADMIN_USER" "bleb"
- <*> getEnvOr "ADMIN_PW_HASH" "" -- prevent login without manual pw
- where getEnvOr :: IsString s => String -> s -> IO s
- getEnvOr q def = fromMaybe def . fmap fromString <$> lookupEnv q
+getConfig = do
+ confFile <- decodeFileEither "fastbangs.yaml" <&> \case
+ Right ob -> ob
+ Left _ -> empty
+
+ Config
+ <$> (read <$> resolveVal (lookup "port" confFile) "PORT" "20546")
+ <*> resolveVal (lookup "bind-addr" confFile) "BIND_ADDR" "*6"
+ <*> resolveVal (lookup "base-url" confFile) "BASE_URL" "http://localhost:20546"
+ <*> resolveVal (lookup "favicon-url" confFile) "FAVICON_URL" ""
+ <*> resolveVal (lookup "admin-user" confFile) "ADMIN_USER" "bleb"
+ <*> resolveVal (lookup "admin-pw-hash" confFile) "ADMIN_PW_HASH" "" -- prevent login without manual pw
+
+ where resolveVal :: IsString s => Maybe String -> String -> String -> IO s
+ resolveVal mayConf q def = do
+ mayEnv <- lookupEnv q
+ return $ fromString $ fromMaybe def $ mayEnv <|> mayConf
makeOpenSearch :: Config -> Maybe Text -> Text
makeOpenSearch cfg defBang =