graphql-engine/server/src-lib/Hasura/Server/API/Config.hs
Robert 71af68e9e5 server: drop HasVersion implicit parameter (closes #2236)
The only real use was for the dubious multitenant option
--consoleAssetsVersion, which actually overrode not just
the assets version. I.e., as far as I can tell, if you pass
--consoleAssetsVersion to multitenant, that version will
also make it into e.g. HTTP client user agent headers as
the proper graphql-engine version.

I'm dropping that option, since it seems unused in production
and I don't want to go to the effort of fixing it, but am happy
to look into that if folks feels strongly that it should be
kept.

(Reason for attacking this is that I was looking into http
client things around blacklisting, and the versioning thing
is a bit painful around http client headers.)

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/2458
GitOrigin-RevId: a02b05557124bdba9f65e96b3aa2746aeee03f4a
2021-10-13 16:39:58 +00:00

101 lines
2.5 KiB
Haskell

-- | API related to server configuration
module Hasura.Server.API.Config
-- required by pro
( ServerConfig (..),
runGetConfig,
)
where
import Data.Aeson.TH
import Data.HashSet qualified as Set
import Hasura.GraphQL.Execute.LiveQuery.Options qualified as LQ
import Hasura.Prelude
import Hasura.RQL.Types
( FunctionPermissionsCtx,
RemoteSchemaPermsCtx,
)
import Hasura.Server.Auth
import Hasura.Server.Auth.JWT
import Hasura.Server.Types (ExperimentalFeature)
import Hasura.Server.Version (Version, currentVersion)
data JWTInfo = JWTInfo
{ jwtiClaimsNamespace :: !JWTNamespace,
jwtiClaimsFormat :: !JWTClaimsFormat,
jwtiClaimsMap :: !(Maybe JWTCustomClaimsMap)
}
deriving (Show, Eq)
$(deriveToJSON hasuraJSON ''JWTInfo)
data ServerConfig = ServerConfig
{ scfgVersion :: !Version,
scfgIsFunctionPermissionsInferred :: !FunctionPermissionsCtx,
scfgIsRemoteSchemaPermissionsEnabled :: !RemoteSchemaPermsCtx,
scfgIsAdminSecretSet :: !Bool,
scfgIsAuthHookSet :: !Bool,
scfgIsJwtSet :: !Bool,
scfgJwt :: !(Maybe JWTInfo),
scfgIsAllowListEnabled :: !Bool,
scfgLiveQueries :: !LQ.LiveQueriesOptions,
scfgConsoleAssetsDir :: !(Maybe Text),
scfgExperimentalFeatures :: !(Set.HashSet ExperimentalFeature)
}
deriving (Show, Eq)
$(deriveToJSON hasuraJSON ''ServerConfig)
runGetConfig ::
FunctionPermissionsCtx ->
RemoteSchemaPermsCtx ->
AuthMode ->
Bool ->
LQ.LiveQueriesOptions ->
Maybe Text ->
Set.HashSet ExperimentalFeature ->
ServerConfig
runGetConfig
functionPermsCtx
remoteSchemaPermsCtx
am
isAllowListEnabled
liveQueryOpts
consoleAssetsDir
experimentalFeatures =
ServerConfig
currentVersion
functionPermsCtx
remoteSchemaPermsCtx
(isAdminSecretSet am)
(isAuthHookSet am)
(isJWTSet am)
(getJWTInfo am)
isAllowListEnabled
liveQueryOpts
consoleAssetsDir
experimentalFeatures
isAdminSecretSet :: AuthMode -> Bool
isAdminSecretSet = \case
AMNoAuth -> False
_ -> True
isAuthHookSet :: AuthMode -> Bool
isAuthHookSet = \case
AMAdminSecretAndHook _ _ -> True
_ -> False
isJWTSet :: AuthMode -> Bool
isJWTSet = \case
AMAdminSecretAndJWT {} -> True
_ -> False
getJWTInfo :: AuthMode -> Maybe JWTInfo
getJWTInfo (AMAdminSecretAndJWT _ jwtCtx _) =
Just $ case jcxClaims jwtCtx of
JCNamespace namespace claimsFormat ->
JWTInfo namespace claimsFormat Nothing
JCMap claimsMap ->
JWTInfo (ClaimNs defaultClaimsNamespace) defaultClaimsFormat $ Just claimsMap
getJWTInfo _ = Nothing