edit: allow any non-hidden filename
[minimedit.git] / edit.php
1 <?php
2 ob_clean();
3
4 function abort($status, $body) {
5         header("HTTP/1.1 $status");
6         print "$body\n";
7         exit;
8 }
9
10 if (!@$User['admin'])
11         abort('401 unauthorised', "geen beheersrechten");
12
13 if (!$_POST)
14         abort('405 post error', "niets te doen");
15 if (!isset($_SERVER['PATH_INFO']) or strlen($_SERVER['PATH_INFO']) <= 1)
16         abort('409 input error', "geen bestand aangeleverd");
17
18 $filename = ltrim($Args, '/').'.html';
19 if (preg_match('{^\.}', $filename))
20         abort('403 input error', "ongeldige bestandsnaam: $filename");
21 if (file_exists($filename) and !is_writable($filename))
22         abort('403 input error', "onwijzigbaar bestand: $filename");
23
24 if (!isset($_POST['body']))
25         abort('409 input error', "geen inhoud aangeleverd");
26
27 $upload = $_POST['body'];
28
29 if (!strlen($upload)) {
30         if (file_exists($filename) and !unlink($filename))
31                 abort('500 delete error', "fout bij het verwijderen van $filename");
32
33         print "Bestand verwijderd";
34         exit;
35 }
36
37 if (!file_exists(dirname($filename)) and !mkdir(dirname($filename)))
38         abort('500 save error', "fout bij aanmaken van map voor $filename");
39
40 if (!file_put_contents($filename, $upload))
41         abort('500 save error', "fout bij schrijven van $filename");
42
43 print "Bestand opgeslagen";
44