server: try environment variables if flags are missing, closes #45

This commit is contained in:
Rakesh Emmadi
2018-07-06 10:43:46 +05:30
committed by Vamshi Surabhi
parent 1998e211af
commit e834bc51a6
3 changed files with 38 additions and 22 deletions

View File

@@ -75,9 +75,10 @@ parseRawConnInfo =
connInfoErrModifier :: String -> String
connInfoErrModifier s = "Fatal Error : " ++ s
mkConnInfo :: RawConnInfo -> Either String Q.ConnInfo
mkConnInfo (RawConnInfo mHost mPort mUser pass mURL mDB opts) =
case (mHost, mPort, mUser, mDB, mURL) of
mkConnInfo :: Maybe String -> RawConnInfo -> Either String Q.ConnInfo
mkConnInfo mEnvDbUrl (RawConnInfo mHost mPort mUser pass mURL mDB opts) = do
let mFinalDBUrl = ifNothingTakeEnv mURL
case (mHost, mPort, mUser, mDB, mFinalDBUrl) of
(Just host, Just port, Just user, Just db, Nothing) ->
return $ Q.ConnInfo host port user pass db opts
@@ -87,10 +88,12 @@ mkConnInfo (RawConnInfo mHost mPort mUser pass mURL mDB opts) =
_ -> throwError $ "Invalid options. "
++ "Expecting all database connection params "
++ "(host, port, user, dbname, password) or "
++ "database-url"
++ "database-url (HASURA_GRAPHQL_DATABASE_URL)"
where
invalidUrlMsg = "Invalid database-url. "
invalidUrlMsg = "Invalid database-url (HASURA_GRAPHQL_DATABASE_URL). "
++ "Example postgres://foo:bar@example.com:2345/database"
ifNothingTakeEnv Nothing = mEnvDbUrl
ifNothingTakeEnv t = t
readIsoLevel :: String -> Either String Q.TxIsolation
readIsoLevel isoS =
@@ -147,21 +150,22 @@ parseAccessKey = optional $ strOption ( long "access-key" <>
help "Secret access key, required to access this instance"
)
data CorsConfig
= CorsConfig
{ ccDomain :: !T.Text
data CorsConfigG a
= CorsConfigG
{ ccDomain :: !a
, ccDisabled :: !Bool
} deriving (Show, Eq)
parseCorsConfig :: Parser CorsConfig
type CorsConfigFlags = CorsConfigG (Maybe T.Text)
type CorsConfig = CorsConfigG T.Text
parseCorsConfig :: Parser CorsConfigFlags
parseCorsConfig =
CorsConfig
<$> strOption ( long "cors-domain" <>
CorsConfigG
<$> optional (strOption ( long "cors-domain" <>
metavar "CORS DOMAIN" <>
value "*" <>
showDefault <>
help "The domain, including scheme and port, to allow CORS for"
)
))
<*> switch ( long "disable-cors" <>
help "Disable CORS handling"
)