(no commit message)
[paste/363.git] / micropub-media-endpoint.php
1 <?php\r
2 /**\r
3  * Minimal micropub media endpoint\r
4  *\r
5  * @author Christian Weiske <cweiske@cweiske.de>\r
6  */\r
7 function error($code, $error, $description)\r
8 {\r
9     header('HTTP/1.0 ' . $code);\r
10     header('Content-type: application/json');\r
11     echo json_encode(\r
12         ['error' => $error, 'error_description' => $description]\r
13     ) . "\n";\r
14     exit(1);\r
15 }\r
16 \r
17 if (!isset($_FILES['file'])) {\r
18     error(400, 'invalid_request', 'file property missing');\r
19 }\r
20 $file = $_FILES['file'];\r
21 if (!is_int($file['error'])) {\r
22     error(400, 'invalid_request', 'file not uploaded correctly');\r
23 }\r
24 if ($file['error'] != 0) {\r
25     error(\r
26         400, 'invalid_request',\r
27         'file upload failed; php upload error' . $file['error']\r
28     );\r
29 }\r
30 \r
31 $reldir = '/micropub-media-endpoint/' . microtime(true) . '/';\r
32 if (!is_dir(__DIR__ . $reldir)) {\r
33     $ok = mkdir(__DIR__ . $reldir, 0700, true);\r
34     if (!$ok) {\r
35         error(403, 'forbidden', 'Failed to create upload directory');\r
36     }\r
37 }\r
38 if ($file['name'] == '') {\r
39     $file['name'] = 'file.dat';\r
40 }\r
41 $relfile = $reldir . $file['name'];\r
42 $ok = move_uploaded_file($file['tmp_name'], __DIR__ . $relfile);\r
43 if (!$ok) {\r
44     error(500, 'internal_error', 'Failed to move uploaded file');\r
45 }\r
46 \r
47 $dir = dirname($_SERVER['PHP_SELF']);\r
48 header('HTTP/1.1 201 Created');\r
49 //RFC 7231 allows relative URIs in location header\r
50 header('Location: ' . str_replace('//', '/', $dir . $relfile));\r
51 ?>\r