diff options
author | Aaron Parecki <aaron@parecki.com> | 2017-01-15 07:44:42 -0800 |
---|---|---|
committer | Aaron Parecki <aaron@parecki.com> | 2017-01-15 07:44:42 -0800 |
commit | d87042ab9d05921e17dd2b3c320d199cfb067d65 (patch) | |
tree | 4d6a69ec78ebba3d426af5fce9f2ed5ab0782aee /controllers/micropub.php | |
parent | 92615f6183c94c039d7591068768ae21ce6e0b11 (diff) |
move micropub routes to new file
Diffstat (limited to 'controllers/micropub.php')
-rw-r--r-- | controllers/micropub.php | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/controllers/micropub.php b/controllers/micropub.php new file mode 100644 index 0000000..5bf8a5f --- /dev/null +++ b/controllers/micropub.php @@ -0,0 +1,117 @@ +<?php + +$app->get('/micropub/syndications', function() use($app) { + if($user=require_login($app)) { + $data = get_micropub_config($user, ['q'=>'syndicate-to']); + $app->response()['Content-type'] = 'application/json'; + $app->response()->body(json_encode(array( + 'targets' => $data['targets'], + 'response' => $data['response'] + ))); + } +}); + +$app->post('/micropub/post', function() use($app) { + if($user=require_login($app)) { + $params = $app->request()->params(); + + // Remove any blank params + $params = array_filter($params, function($v){ + return $v !== ''; + }); + + $r = micropub_post_for_user($user, $params); + + $app->response()['Content-type'] = 'application/json'; + $app->response()->body(json_encode(array( + 'request' => htmlspecialchars($r['request']), + 'response' => htmlspecialchars($r['response']), + 'location' => $r['location'], + 'error' => $r['error'], + 'curlinfo' => $r['curlinfo'] + ))); + } +}); + +$app->post('/micropub/multipart', function() use($app) { + if($user=require_login($app)) { + // var_dump($app->request()->post()); + // + // Since $app->request()->post() with multipart is always + // empty (bug in Slim?) We're using the raw $_POST here. + // PHP empties everything in $_POST if the file upload size exceeds + // that is why we have to test if the variables exist first. + + $file = isset($_FILES['photo']) ? $_FILES['photo'] : null; + + if($file) { + $error = validate_photo($file); + + unset($_POST['null']); + + if(!$error) { + $file_path = $file['tmp_name']; + correct_photo_rotation($file_path); + $r = micropub_post_for_user($user, $_POST, $file_path); + } else { + $r = array('error' => $error); + } + } else { + unset($_POST['null']); + $r = micropub_post_for_user($user, $_POST); + } + + // Populate the error if there was no location header. + if(empty($r['location']) && empty($r['error'])) { + $r['error'] = "No 'Location' header in response."; + } + + $app->response()['Content-type'] = 'application/json'; + $app->response()->body(json_encode(array( + 'response' => (isset($r['response']) ? htmlspecialchars($r['response']) : null), + 'location' => (isset($r['location']) ? $r['location'] : null), + 'error' => (isset($r['error']) ? $r['error'] : null), + ))); + } +}); + +$app->post('/micropub/media', function() use($app) { + if($user=require_login($app)) { + $file = isset($_FILES['photo']) ? $_FILES['photo'] : null; + $error = validate_photo($file); + unset($_POST['null']); + + if(!$error) { + $file_path = $file['tmp_name']; + correct_photo_rotation($file_path); + $r = micropub_media_post_for_user($user, $file_path); + } else { + $r = array('error' => $error); + } + + if(empty($r['location']) && empty($r['error'])) { + $r['error'] = "No 'Location' header in response."; + } + + $app->response()['Content-type'] = 'application/json'; + $app->response()->body(json_encode(array( + 'location' => (isset($r['location']) ? $r['location'] : null), + 'error' => (isset($r['error']) ? $r['error'] : null), + ))); + } +}); + +$app->post('/micropub/postjson', function() use($app) { + if($user=require_login($app)) { + $params = $app->request()->params(); + + $r = micropub_post_for_user($user, json_decode($params['data'], true), null, true); + + $app->response()['Content-type'] = 'application/json'; + $app->response()->body(json_encode(array( + 'location' => $r['location'], + 'error' => $r['error'], + 'response' => $r['response'] + ))); + } +}); |