You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
3.7 KiB
115 lines
3.7 KiB
<?php
|
|
|
|
$app->get('/micropub/syndications', function() use($app) {
|
|
if($user=require_login($app)) {
|
|
$data = get_micropub_config($user, ['q'=>'config']);
|
|
$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' => (isset($r['location']) && $r['location'] ? Mf2\resolveUrl($user->micropub_endpoint, $r['location']) : null),
|
|
'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) {
|
|
correct_photo_rotation($file['tmp_name']);
|
|
$r = micropub_post_for_user($user, $_POST, $file);
|
|
} 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'] ? Mf2\resolveUrl($user->micropub_endpoint, $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) {
|
|
correct_photo_rotation($file['tmp_name']);
|
|
$r = micropub_media_post_for_user($user, $file);
|
|
} 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([
|
|
'location' => (isset($r['location']) && $r['location'] ? Mf2\resolveUrl($user->micropub_endpoint, $r['location']) : null),
|
|
'error' => $r['error'],
|
|
'response' => $r['response']
|
|
]));
|
|
}
|
|
});
|