Die Verwaltung kann umziehen: /admin ist frei waehlbar
php bin/console cms:admin:path <neu> legt die Verwaltung auf eine andere Adresse. Geprueft wird, dass der Name frei ist und keine Seite verdeckt; der Wert steht in .env.local und fuellt einen Parameter, der als Praefix in jeder Verwaltungsroute steht, in der Firewall, in den Schutzkopfzeilen und in der Statistik. Die robots.txt nennt einen geaenderten Namen nicht - sie ist oeffentlich und waere sonst ein Wegweiser. Beim Standardnamen bleibt die Zeile, weil diese Adresse ohnehin jeder kennt. Die Auffangroute fuer Seiten steht jetzt zuletzt: sie kann einen frei gewaehlten Namen nicht per Regex ausschliessen, und die Reihenfolge ist ohnehin die richtige. Der Befehl raeumt den Zwischenspeicher auf, aber nicht den, in dem er selbst laeuft. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9f1ac39251
commit
aaea385422
26 files changed
+293
-45
No files matched your search
@@ -1009,6 +1009,44 @@ final class CmsTest extends TestCase
|
||||
self::assertStringContainsString('Datenschutz', $mit);
|
||||
}
|
||||
|
||||
public function testTheAdministrationCanLiveSomewhereElseAndIsNotAdvertised(): void
|
||||
{
|
||||
// Umut: „Erstelle mal Möglichkeit, Backend anzupassen. Also URL, Admin auf irgendwas."
|
||||
// /admin ist die erste Adresse, die ein Scanner probiert. Wer sie umbenennt, nimmt der
|
||||
// Maschinerie das Ziel - aber nur, wenn der neue Name nirgends öffentlich steht.
|
||||
$this->pages->publish('page-1', $this->pages->saveDraft('page-1', DemoContent::starter('Startseite'), 0), 1);
|
||||
|
||||
// Beim Standardnamen bleibt die Zeile in der robots.txt: diese Adresse kennt ohnehin jeder.
|
||||
self::assertStringContainsString('Disallow: /admin', $this->request('/robots.txt')->getContent());
|
||||
|
||||
// Bei geändertem Namen darf er dort nicht auftauchen.
|
||||
$vorher = $_SERVER['ADMIN_PATH'] ?? null;
|
||||
$_SERVER['ADMIN_PATH'] = $_ENV['ADMIN_PATH'] = 'stiller-eingang';
|
||||
try {
|
||||
$robots = $this->request('/robots.txt')->getContent();
|
||||
self::assertStringNotContainsString('stiller-eingang', $robots, 'robots.txt ist öffentlich - der Name gehört dort nicht hinein.');
|
||||
self::assertStringNotContainsString('Disallow: /admin', $robots);
|
||||
self::assertStringContainsString('Disallow: /formular/', $robots, 'Der Rest der Datei bleibt, wie er war.');
|
||||
} finally {
|
||||
if (null === $vorher) {
|
||||
unset($_SERVER['ADMIN_PATH'], $_ENV['ADMIN_PATH']);
|
||||
} else {
|
||||
$_SERVER['ADMIN_PATH'] = $_ENV['ADMIN_PATH'] = $vorher;
|
||||
}
|
||||
}
|
||||
|
||||
// Und keine Route trägt die Adresse fest im Text: sonst zöge eine Umbenennung die Hälfte
|
||||
// der Verwaltung nicht mit.
|
||||
foreach (glob(__DIR__.'/../src/Controller/*.php') ?: [] as $datei) {
|
||||
$inhalt = (string) file_get_contents($datei);
|
||||
self::assertDoesNotMatchRegularExpression(
|
||||
"#\#\[Route\('/admin#",
|
||||
$inhalt,
|
||||
basename($datei).' schreibt /admin fest, statt den eingestellten Pfad zu nehmen.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function testNoStylesheetHasADanglingSelector(): void
|
||||
{
|
||||
// Gefunden, als der Einwilligungsdialog plötzlich ungestaltet unter dem Fuß stand: beim
|
||||
|
||||
Reference in new issue
Block a user