Parse db uri again

This commit is contained in:
Joe Nelson
2014-12-06 23:21:49 -08:00
parent beb61d8a05
commit 4d8c508a17
+11 -8
View File
@@ -10,10 +10,12 @@ import Control.Monad.IO.Class (liftIO)
import Control.Monad.Reader (runReaderT, ask) import Control.Monad.Reader (runReaderT, ask)
import Control.Exception import Control.Exception
import Data.String.Conversions (cs) import Data.String.Conversions (cs)
import Data.List.Split (splitOn)
import Network.Wai.Middleware.Cors (cors) import Network.Wai.Middleware.Cors (cors)
import Network.Wai.Handler.Warp hiding (Connection) import Network.Wai.Handler.Warp hiding (Connection)
import Network.Wai.Middleware.Gzip (gzip, def) import Network.Wai.Middleware.Gzip (gzip, def)
import Network.Wai.Middleware.Static (staticPolicy, only) import Network.Wai.Middleware.Static (staticPolicy, only)
import Network.URI (URI(..), URIAuth(..), parseURI)
import Data.List (intercalate) import Data.List (intercalate)
import Data.Version (versionBranch) import Data.Version (versionBranch)
import qualified Hasql as H import qualified Hasql as H
@@ -29,14 +31,17 @@ main = do
unless (configSecure conf) $ unless (configSecure conf) $
putStrLn "WARNING, running in insecure mode, auth will be in plaintext" putStrLn "WARNING, running in insecure mode, auth will be in plaintext"
Prelude.putStrLn $ "Listening on port " ++ (show $ configPort conf :: String) Prelude.putStrLn $ "Listening on port " ++ (show $ configPort conf :: String)
let Just uri = parseURI $ configDbUri conf
let pgSettings = H.Postgres "localhost" 5432 "dbapi_test" "" "dbapi_test" 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)
sessSettings <- maybe (fail "Improper session settings") return $ sessSettings <- maybe (fail "Improper session settings") return $
H.sessionSettings 95 30 H.sessionSettings (fromIntegral $ configPool conf) 30
let appSettings = setPort port let appSettings = setPort port
. setServerName (cs $ "dbapi/" <> prettyVersion) . setServerName (cs $ "dbapi/" <> prettyVersion)
@@ -48,14 +53,12 @@ main = do
H.session pgSettings sessSettings $ do H.session pgSettings sessSettings $ do
session' <- flip runReaderT <$> ask session' <- flip runReaderT <$> ask
let runApp req respond =
liftIO $ runSettings appSettings $ middle $ \req respond ->
respond =<< catchJust isSqlError respond =<< catchJust isSqlError
(session' $ authenticated (cs $ configAnonRole conf) app req) (session' $ authenticated (cs $ configAnonRole conf) app req)
sqlErrHandler sqlErrHandler
liftIO $ runSettings appSettings $ middle runApp
-- . authenticated (cs $ configAnonRole conf) $ app
where where
describe = progDesc "create a REST API to an existing Postgres database" describe = progDesc "create a REST API to an existing Postgres database"
prettyVersion = intercalate "." $ map show $ versionBranch version prettyVersion = intercalate "." $ map show $ versionBranch version