module Hasura.GraphQL.Execute.Common
( MonadGQLExecutionCheck (..),
)
where
import Data.Aeson.Ordered qualified as JO
import Hasura.Base.Error
import Hasura.GraphQL.Execute.Backend
import Hasura.GraphQL.Transport.HTTP.Protocol
import Hasura.Metadata.Class
import Hasura.Prelude
import Hasura.RQL.Types.GraphqlSchemaIntrospection
import Hasura.RQL.Types.SchemaCache
import Hasura.Server.Types (RequestId)
import Hasura.Session
import Hasura.Tracing qualified as Tracing
import Network.HTTP.Types qualified as HTTP
import Network.Wai.Extended qualified as Wai
class Monad m => MonadGQLExecutionCheck m where
checkGQLExecution ::
UserInfo ->
([HTTP.Header], Wai.IpAddress) ->
Bool ->
SchemaCache ->
GQLReqUnparsed ->
RequestId ->
m (Either QErr GQLReqParsed)
executeIntrospection ::
UserInfo ->
JO.Value ->
SetGraphqlIntrospectionOptions ->
m (Either QErr ExecutionStep)
instance MonadGQLExecutionCheck m => MonadGQLExecutionCheck (ExceptT e m) where
checkGQLExecution :: UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> ExceptT e m (Either QErr GQLReqParsed)
checkGQLExecution UserInfo
ui ([Header], IpAddress)
det Bool
enableAL SchemaCache
sc GQLReqUnparsed
req RequestId
requestId =
m (Either QErr GQLReqParsed)
-> ExceptT e m (Either QErr GQLReqParsed)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (Either QErr GQLReqParsed)
-> ExceptT e m (Either QErr GQLReqParsed))
-> m (Either QErr GQLReqParsed)
-> ExceptT e m (Either QErr GQLReqParsed)
forall a b. (a -> b) -> a -> b
$ UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> m (Either QErr GQLReqParsed)
forall (m :: * -> *).
MonadGQLExecutionCheck m =>
UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> m (Either QErr GQLReqParsed)
checkGQLExecution UserInfo
ui ([Header], IpAddress)
det Bool
enableAL SchemaCache
sc GQLReqUnparsed
req RequestId
requestId
executeIntrospection :: UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> ExceptT e m (Either QErr ExecutionStep)
executeIntrospection UserInfo
userInfo Value
introspectionQuery SetGraphqlIntrospectionOptions
rolesDisabled =
m (Either QErr ExecutionStep)
-> ExceptT e m (Either QErr ExecutionStep)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (Either QErr ExecutionStep)
-> ExceptT e m (Either QErr ExecutionStep))
-> m (Either QErr ExecutionStep)
-> ExceptT e m (Either QErr ExecutionStep)
forall a b. (a -> b) -> a -> b
$ UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> m (Either QErr ExecutionStep)
forall (m :: * -> *).
MonadGQLExecutionCheck m =>
UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> m (Either QErr ExecutionStep)
executeIntrospection UserInfo
userInfo Value
introspectionQuery SetGraphqlIntrospectionOptions
rolesDisabled
instance MonadGQLExecutionCheck m => MonadGQLExecutionCheck (ReaderT r m) where
checkGQLExecution :: UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> ReaderT r m (Either QErr GQLReqParsed)
checkGQLExecution UserInfo
ui ([Header], IpAddress)
det Bool
enableAL SchemaCache
sc GQLReqUnparsed
req RequestId
requestId =
m (Either QErr GQLReqParsed)
-> ReaderT r m (Either QErr GQLReqParsed)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (Either QErr GQLReqParsed)
-> ReaderT r m (Either QErr GQLReqParsed))
-> m (Either QErr GQLReqParsed)
-> ReaderT r m (Either QErr GQLReqParsed)
forall a b. (a -> b) -> a -> b
$ UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> m (Either QErr GQLReqParsed)
forall (m :: * -> *).
MonadGQLExecutionCheck m =>
UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> m (Either QErr GQLReqParsed)
checkGQLExecution UserInfo
ui ([Header], IpAddress)
det Bool
enableAL SchemaCache
sc GQLReqUnparsed
req RequestId
requestId
executeIntrospection :: UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> ReaderT r m (Either QErr ExecutionStep)
executeIntrospection UserInfo
userInfo Value
introspectionQuery SetGraphqlIntrospectionOptions
rolesDisabled =
m (Either QErr ExecutionStep)
-> ReaderT r m (Either QErr ExecutionStep)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (Either QErr ExecutionStep)
-> ReaderT r m (Either QErr ExecutionStep))
-> m (Either QErr ExecutionStep)
-> ReaderT r m (Either QErr ExecutionStep)
forall a b. (a -> b) -> a -> b
$ UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> m (Either QErr ExecutionStep)
forall (m :: * -> *).
MonadGQLExecutionCheck m =>
UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> m (Either QErr ExecutionStep)
executeIntrospection UserInfo
userInfo Value
introspectionQuery SetGraphqlIntrospectionOptions
rolesDisabled
instance MonadGQLExecutionCheck m => MonadGQLExecutionCheck (Tracing.TraceT m) where
checkGQLExecution :: UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> TraceT m (Either QErr GQLReqParsed)
checkGQLExecution UserInfo
ui ([Header], IpAddress)
det Bool
enableAL SchemaCache
sc GQLReqUnparsed
req RequestId
requestId =
m (Either QErr GQLReqParsed) -> TraceT m (Either QErr GQLReqParsed)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (Either QErr GQLReqParsed)
-> TraceT m (Either QErr GQLReqParsed))
-> m (Either QErr GQLReqParsed)
-> TraceT m (Either QErr GQLReqParsed)
forall a b. (a -> b) -> a -> b
$ UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> m (Either QErr GQLReqParsed)
forall (m :: * -> *).
MonadGQLExecutionCheck m =>
UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> m (Either QErr GQLReqParsed)
checkGQLExecution UserInfo
ui ([Header], IpAddress)
det Bool
enableAL SchemaCache
sc GQLReqUnparsed
req RequestId
requestId
executeIntrospection :: UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> TraceT m (Either QErr ExecutionStep)
executeIntrospection UserInfo
userInfo Value
introspectionQuery SetGraphqlIntrospectionOptions
rolesDisabled =
m (Either QErr ExecutionStep)
-> TraceT m (Either QErr ExecutionStep)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (Either QErr ExecutionStep)
-> TraceT m (Either QErr ExecutionStep))
-> m (Either QErr ExecutionStep)
-> TraceT m (Either QErr ExecutionStep)
forall a b. (a -> b) -> a -> b
$ UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> m (Either QErr ExecutionStep)
forall (m :: * -> *).
MonadGQLExecutionCheck m =>
UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> m (Either QErr ExecutionStep)
executeIntrospection UserInfo
userInfo Value
introspectionQuery SetGraphqlIntrospectionOptions
rolesDisabled
instance MonadGQLExecutionCheck m => MonadGQLExecutionCheck (MetadataStorageT m) where
checkGQLExecution :: UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> MetadataStorageT m (Either QErr GQLReqParsed)
checkGQLExecution UserInfo
ui ([Header], IpAddress)
det Bool
enableAL SchemaCache
sc GQLReqUnparsed
req RequestId
requestId =
m (Either QErr GQLReqParsed)
-> MetadataStorageT m (Either QErr GQLReqParsed)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (Either QErr GQLReqParsed)
-> MetadataStorageT m (Either QErr GQLReqParsed))
-> m (Either QErr GQLReqParsed)
-> MetadataStorageT m (Either QErr GQLReqParsed)
forall a b. (a -> b) -> a -> b
$ UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> m (Either QErr GQLReqParsed)
forall (m :: * -> *).
MonadGQLExecutionCheck m =>
UserInfo
-> ([Header], IpAddress)
-> Bool
-> SchemaCache
-> GQLReqUnparsed
-> RequestId
-> m (Either QErr GQLReqParsed)
checkGQLExecution UserInfo
ui ([Header], IpAddress)
det Bool
enableAL SchemaCache
sc GQLReqUnparsed
req RequestId
requestId
executeIntrospection :: UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> MetadataStorageT m (Either QErr ExecutionStep)
executeIntrospection UserInfo
userInfo Value
introspectionQuery SetGraphqlIntrospectionOptions
rolesDisabled =
m (Either QErr ExecutionStep)
-> MetadataStorageT m (Either QErr ExecutionStep)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (Either QErr ExecutionStep)
-> MetadataStorageT m (Either QErr ExecutionStep))
-> m (Either QErr ExecutionStep)
-> MetadataStorageT m (Either QErr ExecutionStep)
forall a b. (a -> b) -> a -> b
$ UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> m (Either QErr ExecutionStep)
forall (m :: * -> *).
MonadGQLExecutionCheck m =>
UserInfo
-> Value
-> SetGraphqlIntrospectionOptions
-> m (Either QErr ExecutionStep)
executeIntrospection UserInfo
userInfo Value
introspectionQuery SetGraphqlIntrospectionOptions
rolesDisabled