1
0

Merge branch 'master' of github.com:s9y/Serendipity

This commit is contained in:
Garvin Hicking
2016-09-25 15:30:10 +02:00
2 changed files with 112 additions and 0 deletions

View File

@ -14,6 +14,10 @@ Version 2.1-beta1 (June 8th, 2016)
disabled to prevent Server Side Request Forgery (SSRF).
Thanks to Xu Yue for pointing this out!
* Added new API wrapper serendipity_request_url() to request URLs.
Currently uses HTTP_Request2, might change to curl or others in
the future, but irrelevant to plugins using this function.
* Removed outdated themes blue, carl_contest, kubrick and wp. They
live on Spartacus now.

View File

@ -1120,6 +1120,114 @@ function serendipity_request_end() {
return true;
}
/* Request the contents of an URL, API wrapper
* @param $uri string The URL to fetch
* @param $method string HTTP method (GET/POST/PUT/OPTIONS...)
* @param $contenttype string optional HTTP content type
* @param $contenttype mixed optional extra data (i.e. POST body), can be an array
* @param $extra_options array Extra options for HTTP_Request $options array (can override defaults)
* @param $addData string possible extra event addData declaration for 'backend_http_request' hook
* @param $auth array Array with 'user' and 'pass' for HTTP Auth
* @return $content string The URL contents
*/
function serendipity_request_url($uri, $method = 'GET', $contenttype = null, $data = null, $extra_options = null, $addData = null, $auth = null) {
global $serendipity;
require_once S9Y_PEAR_PATH . 'HTTP/Request2.php';
$options = array('follow_redirects' => true, 'max_redirects' => 5);
if (is_array($extra_options)) {
foreach($extra_options AS $okey => $oval) {
$options[$okey] = $oval;
}
}
serendipity_plugin_api::hook_event('backend_http_request', $options, $addData);
serendipity_request_start();
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
// On earlier PHP versions, the certificate validation fails. We deactivate it on them to restore the functionality we had with HTTP/Request1
$options['ssl_verify_peer'] = false;
}
switch(strtoupper($method)) {
case 'GET':
$http_method = HTTP_Request2::METHOD_GET;
break;
case 'PUT':
$http_method = HTTP_Request2::METHOD_PUT;
break;
case 'OPTIONS':
$http_method = HTTP_Request2::METHOD_OPTIONS;
break;
case 'HEAD':
$http_method = HTTP_Request2::METHOD_HEAD;
break;
case 'DELETE':
$http_method = HTTP_Request2::METHOD_DELETE;
break;
case 'TRACE':
$http_method = HTTP_Request2::METHOD_TRACE;
break;
case 'CONNECT':
$http_method = HTTP_Request2::METHOD_CONNECT;
break;
default:
case 'POST':
$http_method = HTTP_Request2::METHOD_POST;
break;
}
$req = new HTTP_Request2($uri, $http_method, $options);
if (isset($contenttype) && $contenttype !== null) {
$req->setHeader('Content-Type', $contenttype);
}
if (is_array($auth)) {
$req->setAuth($auth['user'], $auth['pass']);
}
if ($data != null) {
if (is_array($data)) {
$req->addPostParameter($data);
} else {
$req->setBody($data);
}
}
try {
$res = $req->send();
} catch (HTTP_Request2_Exception $e) {
serendipity_request_end();
return false;
}
$fContent = $res->getBody();
$serendipity['last_http_request'] = array(
'responseCode' => $res->getStatus(),
'effectiveUrl' => $res->getEffectiveUrl(),
'reasonPhrase' => $res->getReasonPhrase(),
'isRedirect' => $res->isRedirect(),
'cookies' => $res->getCookies(),
'version' => $res->getVersion(),
'header' => $res->getHeader(),
'object' => $res // forward compatibility for possible other checks
);
serendipity_request_end();
return $fContent;
}
if (!function_exists('microtime_float')) {
/**
* Get current timestamp as microseconds