diff --git a/src/Config.hs b/src/Config.hs index 8930dc347..1f468a910 100644 --- a/src/Config.hs +++ b/src/Config.hs @@ -10,7 +10,12 @@ import Options.Applicative hiding (columns) import Network.Wai.Middleware.Cors (CorsResourcePolicy(..)) data AppConfig = AppConfig { - configDbUri :: String + configDbName :: String + , configDbPort :: Int + , configDbUser :: String + , configDbPass :: String + , configDbHost :: String + , configPort :: Int , configAnonRole :: String , configSecure :: Bool @@ -19,16 +24,16 @@ data AppConfig = AppConfig { argParser :: Parser AppConfig argParser = AppConfig - <$> strOption (long "db" <> short 'd' <> metavar "URI" - <> help "database uri to expose, e.g. postgres://user:pass@host:port/database") - <*> option (long "port" <> short 'p' <> metavar "NUMBER" <> value 3000 - <> help "port number on which to run HTTP server") - <*> strOption (long "anonymous" <> short 'a' <> metavar "ROLE" - <> help "postgres role to use for non-authenticated requests") - <*> switch (long "secure" <> short 's' - <> help "Redirect all requests to HTTPS") - <*> option (long "db-pool" <> metavar "NUMBER" <> value 10 - <> help "Max connections in database pool") + <$> strOption (long "db-name" <> short 'd' <> help "name of database") + <*> option (long "db-port" <> short 'P' <> value 5432 <> help "postgres server port") + <*> strOption (long "db-user" <> short 'U' <> help "postgres authenticator role") + <*> strOption (long "db-pass" <> value "" <> help "password for authenticator role") + <*> strOption (long "db-host" <> short 'h' <> value "localhost" <> help "postgres server hostname") + + <*> option (long "port" <> short 'p' <> value 3000 <> help "port number on which to run HTTP server") + <*> strOption (long "anonymous" <> short 'a' <> help "postgres role to use for non-authenticated requests") + <*> switch (long "secure" <> short 's' <> help "Redirect all requests to HTTPS") + <*> option (long "db-pool" <> value 10 <> help "Max connections in database pool") defaultCorsPolicy :: CorsResourcePolicy defaultCorsPolicy = CorsResourcePolicy Nothing diff --git a/src/Main.hs b/src/Main.hs index 7836e868a..d1b663607 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -9,12 +9,10 @@ import Control.Monad (unless) import Control.Monad.IO.Class (liftIO) import Control.Exception import Data.String.Conversions (cs) -import Data.List.Split (splitOn) import Network.Wai.Middleware.Cors (cors) import Network.Wai.Handler.Warp hiding (Connection) import Network.Wai.Middleware.Gzip (gzip, def) import Network.Wai.Middleware.Static (staticPolicy, only) -import Network.URI (URI(..), URIAuth(..), parseURI) import Data.List (intercalate) import Data.Version (versionBranch) import qualified Hasql as H @@ -32,12 +30,8 @@ main = do putStrLn "WARNING, running in insecure mode, auth will be in plaintext" Prelude.putStrLn $ "Listening on port " ++ (show $ configPort conf :: String) - let Just uri = parseURI $ configDbUri conf - Just auth = uriAuthority uri - userpass = uriUserInfo auth - [user, pass] = splitOn ":" $ init userpass - pgSettings = H.Postgres (cs $ uriRegName auth) (fromIntegral $ configPort conf) - (cs user) (cs pass) (cs . tail $ uriPath uri) + let pgSettings = H.Postgres (cs $ configDbHost conf) (fromIntegral $ configDbPort conf) + (cs $ configDbUser conf) (cs $ configDbPass conf) (cs $ configDbName conf) sessSettings <- maybe (fail "Improper session settings") return $ H.sessionSettings (fromIntegral $ configPool conf) 30