10000 feature #52712 [AssetMapper] Exclude dot files (weaverryan) · symfonyaml/symfony@1386c95 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1386c95

Browse files
committed
feature symfony#52712 [AssetMapper] Exclude dot files (weaverryan)
This PR was merged into the 6.4 branch. Discussion ---------- [AssetMapper] Exclude dot files | Q | A | ------------- | --- | Branch? | 6.4 | Bug fix? | yes - could possibly be considered a security fix | New feature? | yes | Deprecations? | no | Issues | Fix symfony#52697 | License | MIT See symfony#52697. The biggest question is: should we do this? Is it enough to say "Hey! When you map an assets directory, EVERYTHING is published publicly?". Or should we be on the safe side and exclude dot files by default. Cheers! Commits ------- 85c0ef6 [AssetMapper] Adding an option (true by default) to not publish dot files
2 parents 9b70fbf + 85c0ef6 commit 1386c95

File tree

8 files changed

+37
-1
lines changed

8 files changed

+37
-1
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,11 @@ private function addAssetMapperSection(ArrayNodeDefinition $rootNode, callable $
899899
->prototype('scalar')->end()
900900
->example(['*/assets/build/*', '*/*_.scss'])
901901
->end()
902+
// boolean called defaulting to true
903+
->booleanNode('exclude_dotfiles')
904+
->info('If true, any files starting with "." will be excluded from the asset mapper')
905+
->defaultTrue()
906+
->end()
902907
->booleanNode('server')
903908
->info('If true, a "dev server" will return the assets from the public directory (true in "debug" mode only by default)')
904909
->defaultValue($this->debug)

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1351,7 +1351,8 @@ private function registerAssetMapperConfiguration(array $config, ContainerBuilde
13511351

13521352
$container->getDefinition('asset_mapper.repository')
13531353
->setArgument(0, $paths)
1354-
->setArgument(2, $excludedPathPatterns);
1354+
->setArgument(2, $excludedPathPatterns)
1355+
->setArgument(3, $config['exclude_dotfiles']);
13551356

13561357
$container->getDefinition('asset_mapper.public_assets_path_resolver')
13571358
->setArgument(0, $config['public_prefix']);

src/Symfony/Bundle/FrameworkBundle/Resources/config/asset_mapper.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
abstract_arg('array of asset mapper paths'),
7575
param('kernel.project_dir'),
7676
abstract_arg('array of excluded path patterns'),
77+
abstract_arg('exclude dot files'),
7778
])
7879

7980
->set('asset_mapper.public_assets_path_resolver', PublicAssetsPathResolver::class)

src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@
196196
<xsd:element name="importmap-script-attribute" type="asset_mapper_attribute" minOccurs="0" maxOccurs="unbounded" />
197197
</xsd:sequence>
198198
<xsd:attribute name="enabled" type="xsd:boolean" />
199+
<xsd:attribute name="exclude-dotfiles" type="xsd:boolean" />
199200
<xsd:attribute name="server" type="xsd:boolean" />
200201
<xsd:attribute name="public-prefix" type="xsd:string" />
201202
<xsd:attribute name="missing-import-mode" type="missing-import-mode" />

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ public function testAssetMapperCanBeEnabled()
137137
'importmap_polyfill' => 'es-module-shims',
138138
'vendor_dir' => '%kernel.project_dir%/assets/vendor',
139139
'importmap_script_attributes' => [],
140+
'exclude_dotfiles' => true,
140141
];
141142

142143
$this->assertEquals($defaultConfig, $config['asset_mapper']);
@@ -674,6 +675,7 @@ protected static function getBundleDefaultConfig()
674675
'importmap_polyfill' => 'es-module-shims',
675676
'vendor_dir' => '%kernel.project_dir%/assets/vendor',
676677
'importmap_script_attributes' => [],
678+
'exclude_dotfiles' => true,
677679
],
678680
'cache' => [
679681
'pools' => [],

src/Symfony/Component/AssetMapper/AssetMapperRepository.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public function __construct(
3333
private readonly array $paths,
3434
private readonly string $projectRootDir,
3535
private readonly array $excludedPathPatterns = [],
36+
private readonly bool $excludeDotFiles = true,
3637
) {
3738
}
3839

@@ -185,6 +186,10 @@ private function isExcluded(string $filesystemPath): bool
185186
}
186187
}
187188

189+
if ($this->excludeDotFiles && str_starts_with(basename($filesystemPath), '.')) {
190+
return true;
191+
}
192+
188193
return false;
189194
}
190195
}

src/Symfony/Component/AssetMapper/Tests/AssetMapperRepositoryTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,24 @@ public function testExcludedPaths()
162162
$this->assertNull($repository->find('file3.css'));
163163
$this->assertNull($repository->findLogicalPath(__DIR__.'/Fixtures/dir2/file3.css'));
164164
}
165+
166+
public function testDotFilesExcluded()
167+
{
168+
$repository = new AssetMapperRepository([
169+
'dot_file' => '',
170+
], __DIR__.'/Fixtures', [], true);
171+
172+
$actualAssets = array_keys($repository->all());
173+
$this->assertEquals([], $actualAssets);
174+
}
175+
176+
public function testDotFilesNotExcluded()
177+
{
178+
$repository = new AssetMapperRepository([
179+
'dot_file' => '',
180+
], __DIR__.'/Fixtures', [], false);
181+
182+
$actualAssets = array_keys($repository->all());
183+
$this->assertEquals(['.dotfile'], $actualAssets);
184+
}
165185
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
I'm a dot file!

0 commit comments

Comments
 (0)
0