mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-17 12:31:52 +03:00
63 lines
1.5 KiB
Haskell
63 lines
1.5 KiB
Haskell
|
module Hasura.Server.Config
|
||
|
( runGetConfig
|
||
|
)
|
||
|
where
|
||
|
|
||
|
import Data.Aeson.Casing
|
||
|
import Data.Aeson.TH
|
||
|
|
||
|
import Hasura.Prelude
|
||
|
import Hasura.Server.Auth
|
||
|
import Hasura.Server.Auth.JWT
|
||
|
import qualified Hasura.Server.Version as V
|
||
|
|
||
|
data JWTInfo
|
||
|
= JWTInfo
|
||
|
{ jwtiClaimsNamespace :: !Text
|
||
|
, jwtiClaimsFormat :: !JWTClaimsFormat
|
||
|
} deriving (Show, Eq)
|
||
|
|
||
|
$(deriveToJSON (aesonDrop 4 snakeCase) ''JWTInfo)
|
||
|
|
||
|
data ServerConfig
|
||
|
= ServerConfig
|
||
|
{ scfgVersion :: !Text
|
||
|
, scfgIsAdminSecretSet :: !Bool
|
||
|
, scfgIsAuthHookSet :: !Bool
|
||
|
, scfgIsJwtSet :: !Bool
|
||
|
, scfgJwt :: !(Maybe JWTInfo)
|
||
|
} deriving (Show, Eq)
|
||
|
|
||
|
$(deriveToJSON (aesonDrop 4 snakeCase) ''ServerConfig)
|
||
|
|
||
|
runGetConfig :: AuthMode -> ServerConfig
|
||
|
runGetConfig am = ServerConfig
|
||
|
V.currentVersion
|
||
|
(isAdminSecretSet am)
|
||
|
(isAuthHookSet am)
|
||
|
(isJWTSet am)
|
||
|
(getJWTInfo am)
|
||
|
|
||
|
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 $ JWTInfo ns format
|
||
|
where
|
||
|
ns = fromMaybe defaultClaimNs $ jcxClaimNs jwtCtx
|
||
|
format = jcxClaimsFormat jwtCtx
|
||
|
getJWTInfo _ = Nothing
|