Skip to content

Commit a33919e

Browse files
[6.x] Add serializable classes to allowlist (#14416)
Co-authored-by: Jason Varga <jason@pixelfear.com>
1 parent 9534464 commit a33919e

4 files changed

Lines changed: 60 additions & 1 deletion

File tree

src/Providers/AddonServiceProvider.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,20 @@ public function registerExternalStylesheet(string $url)
717717
Statamic::externalStyle($url);
718718
}
719719

720+
protected function registerSerializableClasses(array $classes)
721+
{
722+
$existing = $this->app['config']->get('cache.serializable_classes');
723+
724+
if ($existing === true) {
725+
return;
726+
}
727+
728+
$this->app['config']->set('cache.serializable_classes', array_merge(
729+
is_array($existing) ? $existing : [],
730+
$classes
731+
));
732+
}
733+
720734
protected function schedule(Schedule $schedule)
721735
{
722736
//

src/Providers/AppServiceProvider.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,45 @@ public function register()
229229
->finalNewline(config('statamic.templates.style.final_newline', false))
230230
->preferComponentSyntax(config('statamic.templates.antlers.use_components', false));
231231
});
232+
233+
$this->registerSerializableClasses();
234+
}
235+
236+
private function registerSerializableClasses()
237+
{
238+
$existing = $this->app['config']->get('cache.serializable_classes');
239+
240+
if ($existing === true) {
241+
return;
242+
}
243+
244+
$classes = [
245+
\Statamic\Auth\File\User::class,
246+
\Statamic\Assets\Asset::class,
247+
\Statamic\Assets\AssetContainer::class,
248+
\Statamic\Entries\Collection::class,
249+
\Statamic\Entries\Entry::class,
250+
\Statamic\Forms\Form::class,
251+
\Statamic\Forms\Submission::class,
252+
\Statamic\Globals\GlobalSet::class,
253+
\Statamic\Globals\Variables::class,
254+
\Statamic\Revisions\Revision::class,
255+
\Statamic\Structures\Nav::class,
256+
\Statamic\Structures\NavTree::class,
257+
\Statamic\Structures\CollectionTree::class,
258+
\Statamic\Structures\CollectionStructure::class,
259+
\Statamic\Taxonomies\Taxonomy::class,
260+
\Statamic\Taxonomies\LocalizedTerm::class,
261+
\Statamic\Taxonomies\Term::class,
262+
\Carbon\Carbon::class,
263+
\Illuminate\Support\Carbon::class,
264+
\Illuminate\Support\Collection::class,
265+
];
266+
267+
$this->app['config']->set('cache.serializable_classes', array_merge(
268+
is_array($existing) ? $existing : [],
269+
$classes
270+
));
232271
}
233272

234273
protected function registerMiddlewareGroup()

src/Providers/CacheServiceProvider.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,12 @@ private function extendFileStore()
4545

4646
Cache::extend('file', function ($app, $config) {
4747
return Cache::repository(
48-
(new FileStore($app['files'], $config['path'], $config['permission'] ?? null))
48+
(new FileStore(
49+
$app['files'],
50+
$config['path'],
51+
$config['permission'] ?? null,
52+
$app['config']['cache.serializable_classes'] ?? null
53+
))
4954
->setLockDirectory($config['lock_path'] ?? null),
5055
$config
5156
);

tests/Stache/BasicStoreTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public function it_gets_an_item_by_key()
4444
public function items_are_different_instances_every_time()
4545
{
4646
config(['cache.default' => 'file']); // Doesn't work when they're arrays since the object is stored in memory.
47+
config()->set('cache.serializable_classes', [TestBasicStoreItem::class]);
4748
\Illuminate\Support\Facades\Cache::clear();
4849

4950
file_put_contents($this->tempDir.'/foo.yaml', '');

0 commit comments

Comments
 (0)