From 19779aa4073cbef477e09596da6f6fd4af84fb43 Mon Sep 17 00:00:00 2001 From: spirit Date: Mon, 25 Nov 2019 23:47:56 +0800 Subject: [PATCH 1/3] change curl to wp_remote_post --- inc/api.php | 273 +++++++++++++++++++++++++++------------------------- 1 file changed, 140 insertions(+), 133 deletions(-) diff --git a/inc/api.php b/inc/api.php index 15c56c4..3e39ec0 100644 --- a/inc/api.php +++ b/inc/api.php @@ -4,84 +4,77 @@ * Router */ add_action('rest_api_init', function () { - 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', - )); + 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,81 @@ 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, "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"); - $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"]); + /** + * php curl + * + $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); - $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 = curl_exec($ch); - curl_close($ch); + $reply = json_decode($reply); + */ - $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 +225,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 +233,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(); @@ -263,7 +269,8 @@ 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 缓存控制 + 'Cache-Control' => 'max-age=3600')); + // json 缓存控制 return $result; } From 13c5b996e7597c8595c871e48f4ec9b4dd707760 Mon Sep 17 00:00:00 2001 From: spirit Date: Tue, 26 Nov 2019 13:53:37 +0800 Subject: [PATCH 2/3] fix SM.MS upload --- inc/api.php | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/inc/api.php b/inc/api.php index 3e39ec0..9cb0ca8 100644 --- a/inc/api.php +++ b/inc/api.php @@ -153,8 +153,11 @@ function SMMS_API($image) { $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); $fields = array(); array_push($fields, "--" . $Boundary); @@ -172,23 +175,6 @@ function SMMS_API($image) { $response = wp_remote_post($upload_url, $args); $reply = json_decode($response["body"]); - /** - * php curl - * - $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; @@ -197,8 +183,7 @@ function SMMS_API($image) { $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 放进一个字段 + $status = 200; // sm.ms 接口不规范,建议检测到重复的情况下返回标准化的 code,并单独把 url 放进一个字段 $success = true; $message = $reply->message; $link = str_replace('Image upload repeated limit, this image exists at: ', '', $reply->message); @@ -268,9 +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; } From 90c6ff19d8a00710bcbdf4ea0c9317ff2ae31d09 Mon Sep 17 00:00:00 2001 From: spirit Date: Tue, 26 Nov 2019 17:08:44 +0800 Subject: [PATCH 3/3] remove curl notice --- header.php | 1 - 1 file changed, 1 deletion(-) 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.'; ?>