From 1e52fa4df63352835ea3020c727ea6093779e176 Mon Sep 17 00:00:00 2001 From: Lia Lenckowski Date: Wed, 23 Aug 2023 19:01:52 +0200 Subject: add yaml config --- src/Config.hs | 34 ++++++++++++++++++++++++---------- src/Main.hs | 1 + 2 files changed, 25 insertions(+), 10 deletions(-) (limited to 'src') 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 = diff --git a/src/Main.hs b/src/Main.hs index 74cc170..0f0146c 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -160,6 +160,7 @@ main = runStdoutLoggingT $ withSqlitePool "banger.db" 2 $ \pool -> do bs <- liftIO initBangState cfg <- liftIO getConfig + $(logInfo) $ "Using config: " <> T.pack (show cfg) sApp <- liftIO $ toWaiApp $ Search bs pool cfg -- includes middlewares -- cgit v1.2.3-70-g09d2