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). disabled to prevent Server Side Request Forgery (SSRF).
Thanks to Xu Yue for pointing this out! 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 * Removed outdated themes blue, carl_contest, kubrick and wp. They
live on Spartacus now. live on Spartacus now.

View File

@ -1120,6 +1120,114 @@ function serendipity_request_end() {
return true; 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')) { if (!function_exists('microtime_float')) {
/** /**
* Get current timestamp as microseconds * Get current timestamp as microseconds