diff --git a/header.php b/header.php
index 96109ef..67ff33d 100644
--- a/header.php
+++ b/header.php
@@ -79,7 +79,6 @@ window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}
>
Plz rename the theme folder name as Sakura!
请将主题文件夹名改为 Sakura!'; ?>
- 主题需要 PHP 的 curl 支持!请在 `php.ini` 里开启或者联系你的主机商。
The theme requires PHP\'s curl support! Please turn on in `php.ini` or contact your hosting provider.'; ?>
'POST',
- 'callback' => 'upload_image',
- ));
- register_rest_route('sakura/v1', '/cache_search/json', array(
- 'methods' => 'GET',
- 'callback' => 'cache_search_json',
- ));
+ register_rest_route('sakura/v1', '/image/upload', array(
+ 'methods' => 'POST',
+ 'callback' => 'upload_image',
+ ));
+ register_rest_route('sakura/v1', '/cache_search/json', array(
+ 'methods' => 'GET',
+ 'callback' => 'cache_search_json',
+ ));
});
/**
* Image uploader response
*/
-function upload_image(WP_REST_Request $request)
-{
- // see: https://developer.wordpress.org/rest-api/requests/
+function upload_image(WP_REST_Request $request) {
+ // see: https://developer.wordpress.org/rest-api/requests/
- // handle file params $file === $_FILES
- /**
- * curl \
- * -F "filecomment=This is an img file" \
- * -F "cmt_img_file=@screenshot.jpg" \
- * https://dev.2heng.xin/wp-json/sakura/v1/image/upload
- */
- // $file = $request->get_file_params();
- if ( !check_ajax_referer('wp_rest', '_wpnonce', false) ) {
- $output = array(
- 'status' => 403,
- 'success' => false,
- 'message' => 'Unauthorized client.',
- 'link' => "https://view.moezx.cc/images/2019/11/14/step04.md.png",
- 'proxy' => akina_option('cmt_image_proxy') . "https://view.moezx.cc/images/2019/11/14/step04.md.png",
- );
- $result = new WP_REST_Response($output, 403);
+ // handle file params $file === $_FILES
+ /**
+ * curl \
+ * -F "filecomment=This is an img file" \
+ * -F "cmt_img_file=@screenshot.jpg" \
+ * https://dev.2heng.xin/wp-json/sakura/v1/image/upload
+ */
+ // $file = $request->get_file_params();
+ if (!check_ajax_referer('wp_rest', '_wpnonce', false)) {
+ $output = array(
+ 'status' => 403,
+ 'success' => false,
+ 'message' => 'Unauthorized client.',
+ 'link' => "https://view.moezx.cc/images/2019/11/14/step04.md.png",
+ 'proxy' => akina_option('cmt_image_proxy') . "https://view.moezx.cc/images/2019/11/14/step04.md.png",
+ );
+ $result = new WP_REST_Response($output, 403);
+ $result->set_headers(array('Content-Type' => 'application/json'));
+ return $result;
+ }
+
+ switch (akina_option("img_upload_api")) {
+ case 'imgur':
+ $image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]);
+ $API_Request = Imgur_API($image);
+ break;
+ case 'smms':
+ $image = $_FILES;
+ $API_Request = SMMS_API($image);
+ break;
+ case 'chevereto':
+ $image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]);
+ $API_Request = Chevereto_API($image);
+ break;
+ }
+
+ $result = new WP_REST_Response($API_Request, $API_Request->status);
$result->set_headers(array('Content-Type' => 'application/json'));
return $result;
- }
-
- switch (akina_option("img_upload_api")) {
- case 'imgur':
- $image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]);
- $API_Request = Imgur_API($image);
- break;
- case 'smms':
- $image = $_FILES;
- $API_Request = SMMS_API($image);
- break;
- case 'chevereto':
- $image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]);
- $API_Request = Chevereto_API($image);
- break;
- }
-
- $result = new WP_REST_Response($API_Request, $API_Request->status);
- $result->set_headers(array('Content-Type' => 'application/json'));
- return $result;
}
/**
* Chevereto upload interface
*/
-function Chevereto_API($image)
-{
- $fields = array(
- 'source' => base64_encode($image),
- 'key' => akina_option('chevereto_api_key')
+function Chevereto_API($image) {
+ $upload_url = akina_option('cheverto_url').'/api/1/upload';
+ $args = array(
+ 'body' => array(
+ 'source' => base64_encode($image),
+ 'key' => akina_option('chevereto_api_key')
+ )
);
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, akina_option('cheverto_url').'/api/1/upload');
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
-
- $reply = curl_exec($ch);
- curl_close($ch);
-
- $reply = json_decode($reply);
+ $response = wp_remote_post($upload_url, $args);
+ $reply = json_decode($response["body"]);
if ($reply->status_txt == 'OK' && $reply->status_code == 200) {
$status = 200;
@@ -109,21 +102,20 @@ function Chevereto_API($image)
/**
* Imgur upload interface
*/
-function Imgur_API($image)
-{
+function Imgur_API($image) {
$client_id = akina_option('imgur_client_id');
+ $upload_url = akina_option('imgur_upload_image_proxy');
+ $args = array(
+ 'headers' => array(
+ 'Authorization' => 'Client-ID ' . $client_id
+ ),
+ 'body' => array(
+ 'image' => base64_encode($image)
+ )
+ );
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, akina_option('imgur_upload_image_proxy'));
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . $client_id));
- curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode($image)));
-
- $reply = curl_exec($ch);
- curl_close($ch);
-
- $reply = json_decode($reply);
+ $response = wp_remote_post($upload_url, $args);
+ $reply = json_decode($response["body"]);
if ($reply->success && $reply->status == 200) {
$status = 200;
@@ -151,66 +143,66 @@ function Imgur_API($image)
/**
* smms upload interface
*/
-function SMMS_API($image)
-{
- $client_id = akina_option('smms_client_id');
+function SMMS_API($image) {
+ $client_id = akina_option('smms_client_id');
+ $upload_url = "https://sm.ms/api/v2/upload";
+ $filename = $image['cmt_img_file']['name'];
+ $filedata = $image['cmt_img_file']['tmp_name'];
+ $Boundary = wp_generate_password();
+ $bits = file_get_contents($filedata);
- $filename = $image['cmt_img_file']['name'];
- $filedata = $image['cmt_img_file']['tmp_name'];
- $filesize = $image['cmt_img_file']['size'];
+ $headers = array();
+ array_push($headers, "Content-Type: multipart/form-data; boundary=$Boundary");
+ array_push($headers, '');
+ array_push($headers, "Authorization: Basic " . $client_id);
+ array_push($headers, '');
+ array_push($headers, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97");
+ $headers = implode("\r\n", $headers);
- $url = "https://sm.ms/api/v2/upload";
- $headers = array();
- array_push($headers, "Content-Type: multipart/form-data");
- array_push($headers, "Authorization: Basic " . $client_id);
- array_push($headers, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97");
+ $fields = array();
+ array_push($fields, "--" . $Boundary);
+ array_push($fields, "Content-Disposition: form-data; name=\"smfile\"; filename=\"$filename\"");
+ array_push($fields, '');
+ array_push($fields, $bits);
+ array_push($fields, '');
+ array_push($fields, "--" . $Boundary . "--");
+ $fields = implode("\r\n", $fields);
- $finfo = new \finfo(FILEINFO_MIME_TYPE);
- $mimetype = $finfo->file($filedata);
+ $args = array(
+ 'headers' => $headers,
+ 'body' => $fields
+ );
- $fields = array('smfile' => curl_file_create($filedata, $mimetype, $filename));
+ $response = wp_remote_post($upload_url, $args);
+ $reply = json_decode($response["body"]);
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
-
- $reply = curl_exec($ch);
- curl_close($ch);
-
- $reply = json_decode($reply);
-
- if ($reply->success && $reply->code == 'success') {
- $status = 200;
- $success = true;
- $message = $reply->message;
- $link = $reply->data->url;
- $proxy = akina_option('cmt_image_proxy') . $link;
- } else if (preg_match("/Image upload repeated limit/i", $reply->message, $matches)) {
- $status = 200; // sm.ms 接口不规范,建议检测到重复的情况下返回标准化的 code,并单独把 url 放进一个字段
- $success = true;
- $message = $reply->message;
- $link = str_replace('Image upload repeated limit, this image exists at: ', '', $reply->message);
- $proxy = akina_option('cmt_image_proxy') . $link;
- } else {
- $status = 400;
- $success = false;
- $message = $reply->message;
- $link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif';
- $proxy = akina_option('cmt_image_proxy') . $link;
- }
- $output = array(
- 'status' => $status,
- 'success' => $success,
- 'message' => $message,
- 'link' => $link,
- 'proxy' => $proxy,
- );
- return $output;
+ if ($reply->success && $reply->code == 'success') {
+ $status = 200;
+ $success = true;
+ $message = $reply->message;
+ $link = $reply->data->url;
+ $proxy = akina_option('cmt_image_proxy') . $link;
+ } else if (preg_match("/Image upload repeated limit/i", $reply->message, $matches)) {
+ $status = 200; // sm.ms 接口不规范,建议检测到重复的情况下返回标准化的 code,并单独把 url 放进一个字段
+ $success = true;
+ $message = $reply->message;
+ $link = str_replace('Image upload repeated limit, this image exists at: ', '', $reply->message);
+ $proxy = akina_option('cmt_image_proxy') . $link;
+ } else {
+ $status = 400;
+ $success = false;
+ $message = $reply->message;
+ $link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif';
+ $proxy = akina_option('cmt_image_proxy') . $link;
+ }
+ $output = array(
+ 'status' => $status,
+ 'success' => $success,
+ 'message' => $message,
+ 'link' => $link,
+ 'proxy' => $proxy,
+ );
+ return $output;
}
/*
@@ -218,8 +210,7 @@ function SMMS_API($image)
* @rest api接口路径:https://sakura.2heng.xin/wp-json/sakura/v1/cache_search/json
* @可在cache_search_json()函数末尾通过设置 HTTP header 控制 json 缓存时间
*/
-function cache_search_json()
-{
+function cache_search_json() {
$vowels = array("[", "{", "]", "}", "<", ">", "\r\n", "\r", "\n", "-", "'", '"', '`', " ", ":", ";", '\\', " ", "toc");
$regex = <<])*>|begin[\S\s]*\/begin|hermit[\S\s]*\/hermit|img[\S\s]*\/img|{{.*?}}|:.*?:/m
@@ -227,7 +218,7 @@ EOS;
$posts = new WP_Query('posts_per_page=-1&post_status=publish&post_type=post');
while ($posts->have_posts()): $posts->the_post();
- $output .= '{"type":"post","link":"' . get_post_permalink() . '","title":' . json_encode(get_the_title()) . ',"comments":"' . get_comments_number('0', '1', '%') . '","text":' . json_encode(str_replace($vowels, " ", preg_replace($regex, ' ', get_the_content()))) . '},';
+ $output .= '{"type":"post","link":"' . get_post_permalink() . '","title":' . json_encode(get_the_title()) . ',"comments":"' . get_comments_number('0', '1', '%') . '","text":' . json_encode(str_replace($vowels, " ", preg_replace($regex, ' ', get_the_content()))) . '},';
endwhile;
wp_reset_postdata();
@@ -262,8 +253,12 @@ EOS;
$data = '[' . $output . ']';
$result = new WP_REST_Response(json_decode($data), 200);
- $result->set_headers(array('Content-Type' => 'application/json',
- 'Cache-Control' => 'max-age=3600')); // json 缓存控制
+ $result->set_headers(
+ array(
+ 'Content-Type' => 'application/json',
+ 'Cache-Control' => 'max-age=3600'// json 缓存控制
+ )
+ );
return $result;
}