Skip to content

Commit 29ffcae

Browse files
GaryPEGEOTfabpot
authored andcommitted
[HttpKernel] Prevent search engines from indexing dev applications
1 parent 153736e commit 29ffcae

File tree

5 files changed

+43
-0
lines changed

5 files changed

+43
-0
lines changed

DependencyInjection/Configuration.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public function getConfigTreeBuilder()
108108
$this->addWebLinkSection($rootNode);
109109
$this->addLockSection($rootNode);
110110
$this->addMessengerSection($rootNode);
111+
$this->addRobotsIndexSection($rootNode);
111112

112113
return $treeBuilder;
113114
}
@@ -1156,4 +1157,17 @@ function ($a) {
11561157
->end()
11571158
;
11581159
}
1160+
1161+
private function addRobotsIndexSection(ArrayNodeDefinition $rootNode)
1162+
{
1163+
$rootNode
1164+
->children()
1165+
->booleanNode('disallow_search_engine_index')
1166+
->info('Enabled by default when debug is enabled.')
1167+
->defaultValue($this->debug)
1168+
->treatNullLike($this->debug)
1169+
->end()
1170+
->end()
1171+
;
1172+
}
11591173
}

DependencyInjection/FrameworkExtension.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,10 @@ public function load(array $configs, ContainerBuilder $container)
394394
// remove tagged iterator argument for resource checkers
395395
$container->getDefinition('config_cache_factory')->setArguments([]);
396396
}
397+
398+
if (!$config['disallow_search_engine_index'] ?? false) {
399+
$container->removeDefinition('disallow_search_engine_index_response_listener');
400+
}
397401
}
398402

399403
/**

Resources/config/web.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,8 @@
8585
<argument type="service" id="controller_name_converter" />
8686
<tag name="kernel.event_subscriber" />
8787
</service>
88+
<service id="disallow_search_engine_index_response_listener" class="Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener">
89+
<tag name="kernel.event_subscriber" />
90+
</service>
8891
</services>
8992
</container>

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
330330
'default_bus' => null,
331331
'buses' => ['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]],
332332
],
333+
'disallow_search_engine_index' => true,
333334
];
334335
}
335336
}

Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,6 +1327,27 @@ public function testSessionCookieSecureAuto()
13271327
$this->assertEquals($expected, array_keys($container->getDefinition('session_listener')->getArgument(0)->getValues()));
13281328
}
13291329

1330+
public function testRobotsTagListenerIsRegisteredInDebugMode()
1331+
{
1332+
$container = $this->createContainer(['kernel.debug' => true]);
1333+
(new FrameworkExtension())->load([], $container);
1334+
$this->assertTrue($container->has('disallow_search_engine_index_response_listener'), 'DisallowRobotsIndexingListener should be registered');
1335+
1336+
$definition = $container->getDefinition('disallow_search_engine_index_response_listener');
1337+
$this->assertTrue($definition->hasTag('kernel.event_subscriber'), 'DisallowRobotsIndexingListener should have the correct tag');
1338+
1339+
$container = $this->createContainer(['kernel.debug' => true]);
1340+
(new FrameworkExtension())->load([['disallow_search_engine_index' => false]], $container);
1341+
$this->assertFalse(
1342+
$container->has('disallow_search_engine_index_response_listener'),
1343+
'DisallowRobotsIndexingListener should not be registered when explicitly disabled'
1344+
);
1345+
1346+
$container = $this->createContainer(['kernel.debug' => false]);
1347+
(new FrameworkExtension())->load([], $container);
1348+
$this->assertFalse($container->has('disallow_search_engine_index_response_listener'), 'DisallowRobotsIndexingListener should NOT be registered');
1349+
}
1350+
13301351
protected function createContainer(array $data = [])
13311352
{
13321353
return new ContainerBuilder(new ParameterBag(array_merge([

0 commit comments

Comments
 (0)