Skip to content

Commit cdf7ab4

Browse files
authored
[5.x] Restrict markdown preview endpoint (#14326)
1 parent 33e0ceb commit cdf7ab4

2 files changed

Lines changed: 62 additions & 1 deletion

File tree

src/Http/Controllers/CP/Fieldtypes/MarkdownFieldtypeController.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ class MarkdownFieldtypeController extends CpController
1212
{
1313
public function preview(Request $request)
1414
{
15-
return $this->fieldtype($request->config)->augment($request->value);
15+
$config = $request->config;
16+
17+
abort_unless(($config['type'] ?? null) === 'markdown', 400, 'Bad Request');
18+
19+
return $this->fieldtype($config)->augment($request->value);
1620
}
1721

1822
protected function fieldtype($config)
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
namespace Tests\Feature\Fieldtypes;
4+
5+
use PHPUnit\Framework\Attributes\Test;
6+
use Statamic\Facades\User;
7+
use Tests\FakesRoles;
8+
use Tests\PreventSavingStacheItemsToDisk;
9+
use Tests\TestCase;
10+
11+
class PreviewMarkdownTest extends TestCase
12+
{
13+
use FakesRoles;
14+
use PreventSavingStacheItemsToDisk;
15+
16+
private function request($payload)
17+
{
18+
return $this->postJson(cp_route('markdown.preview'), $payload);
19+
}
20+
21+
#[Test]
22+
public function it_parses_markdown()
23+
{
24+
$this->setTestRoles(['test' => ['access cp']]);
25+
$user = User::make()->assignRole('test')->save();
26+
27+
$this
28+
->actingAs($user)
29+
->request(['config' => ['type' => 'markdown'], 'value' => '**Hello**'])
30+
->assertContent("<p><strong>Hello</strong></p>\n");
31+
}
32+
33+
#[Test]
34+
public function it_aborts_for_non_markdown()
35+
{
36+
$this->setTestRoles(['test' => ['access cp']]);
37+
$user = User::make()->assignRole('test')->save();
38+
39+
$this
40+
->actingAs($user)
41+
->request(['config' => ['type' => 'text'], 'value' => '**Hello**'])
42+
->assertBadRequest()
43+
->assertJson(['message' => 'Bad Request']);
44+
}
45+
46+
#[Test]
47+
public function it_denies_access_without_control_panel_permission()
48+
{
49+
$this->setTestRoles(['test' => []]);
50+
$user = User::make()->assignRole('test')->save();
51+
52+
$this
53+
->actingAs($user)
54+
->request(['config' => ['type' => 'markdown'], 'value' => '**Hello**'])
55+
->assertForbidden();
56+
}
57+
}

0 commit comments

Comments
 (0)