File tree Expand file tree Collapse file tree 3 files changed +57
-10
lines changed
dev/tests/api-functional/testsuite/Magento/GraphQl
lib/internal/Magento/Framework/GraphQl/Query Expand file tree Collapse file tree 3 files changed +57
-10
lines changed Original file line number Diff line number Diff line change 12
12
class IntrospectionQueryTest extends GraphQlAbstract
13
13
{
14
14
/**
15
- * Tests that Introspection is disabled when not in developer mode
15
+ * Tests that Introspection is allowed by default
16
16
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
17
17
*/
18
- public function testIntrospectionQueryWithFieldArgs ()
18
+ public function testIntrospectionQuery ()
19
19
{
20
20
$ query
21
21
= <<<QUERY
@@ -54,11 +54,6 @@ public function testIntrospectionQueryWithFieldArgs()
54
54
}
55
55
QUERY ;
56
56
57
- $ this ->expectException (\Exception::class);
58
- $ this ->expectExceptionMessage (
59
- 'GraphQL response contains errors: GraphQL introspection is not allowed, but ' .
60
- 'the query contained __schema or __type '
61
- );
62
- $ this ->graphQlQuery ($ query );
57
+ $ this ->assertArrayHasKey ('__schema ' , $ this ->graphQlQuery ($ query ));
63
58
}
64
59
}
Original file line number Diff line number Diff line change
1
+ <?php
2
+ /**
3
+ * Copyright © Magento, Inc. All rights reserved.
4
+ * See COPYING.txt for license details.
5
+ */
6
+ declare (strict_types=1 );
7
+
8
+ namespace Magento \Framework \GraphQl \Query ;
9
+
10
+ use Magento \Framework \App \DeploymentConfig ;
11
+
12
+ /**
13
+ * Class for fetching the availability of introspection queries
14
+ */
15
+ class IntrospectionConfiguration
16
+ {
17
+ const CONFIG_PATH_DISABLE_INTROSPECTION = 'graphql/disable_introspection ' ;
18
+
19
+ /**
20
+ * @var DeploymentConfig
21
+ */
22
+ private $ deploymentConfig ;
23
+
24
+ /**
25
+ * @param DeploymentConfig $deploymentConfig
26
+ */
27
+ public function __construct (
28
+ DeploymentConfig $ deploymentConfig
29
+ ) {
30
+ $ this ->deploymentConfig = $ deploymentConfig ;
31
+ }
32
+
33
+ /**
34
+ * Check the the environment config to determine if introspection should be disabled.
35
+ *
36
+ * @return int
37
+ */
38
+ public function disableIntrospection (): int
39
+ {
40
+ return (int ) $ this ->deploymentConfig ->get (self ::CONFIG_PATH_DISABLE_INTROSPECTION );
41
+ }
42
+ }
Original file line number Diff line number Diff line change 11
11
use GraphQL \Validator \Rules \DisableIntrospection ;
12
12
use GraphQL \Validator \Rules \QueryDepth ;
13
13
use GraphQL \Validator \Rules \QueryComplexity ;
14
+ use Magento \Framework \App \ObjectManager ;
14
15
15
16
/**
16
17
* QueryComplexityLimiter
@@ -33,16 +34,25 @@ class QueryComplexityLimiter
33
34
*/
34
35
private $ queryComplexity ;
35
36
37
+ /**
38
+ * @var IntrospectionConfiguration
39
+ */
40
+ private $ introspectionConfig ;
41
+
36
42
/**
37
43
* @param int $queryDepth
38
44
* @param int $queryComplexity
45
+ * @param IntrospectionConfiguration $introspectionConfig
39
46
*/
40
47
public function __construct (
41
48
int $ queryDepth ,
42
- int $ queryComplexity
49
+ int $ queryComplexity ,
50
+ IntrospectionConfiguration $ introspectionConfig = null
43
51
) {
44
52
$ this ->queryDepth = $ queryDepth ;
45
53
$ this ->queryComplexity = $ queryComplexity ;
54
+ $ this ->introspectionConfig = $ introspectionConfig ?? ObjectManager::getInstance ()
55
+ ->get (IntrospectionConfiguration::class);
46
56
}
47
57
48
58
/**
@@ -53,7 +63,7 @@ public function __construct(
53
63
public function execute (): void
54
64
{
55
65
DocumentValidator::addRule (new QueryComplexity ($ this ->queryComplexity ));
56
- DocumentValidator::addRule (new DisableIntrospection ());
66
+ DocumentValidator::addRule (new DisableIntrospection ($ this -> introspectionConfig -> disableIntrospection () ));
57
67
DocumentValidator::addRule (new QueryDepth ($ this ->queryDepth ));
58
68
}
59
69
}
You can’t perform that action at this time.
0 commit comments