Add secure context loader that require https even when redirecting.
This commit is contained in:
parent
dfbea38c6f
commit
41ee90f02c
58
jsonld.php
58
jsonld.php
|
@ -219,12 +219,18 @@ function jsonld_get_url($url) {
|
||||||
*/
|
*/
|
||||||
function jsonld_default_get_url($url) {
|
function jsonld_default_get_url($url) {
|
||||||
// default JSON-LD GET implementation
|
// default JSON-LD GET implementation
|
||||||
$opts = array('http' =>
|
$opts = array(
|
||||||
array(
|
'http' => array(
|
||||||
'method' => "GET",
|
'method' => "GET",
|
||||||
'header' =>
|
'header' =>
|
||||||
"Accept: application/ld+json\r\n" .
|
"Accept: application/ld+json\r\n" .
|
||||||
"User-Agent: PaySwarm PHP Client/1.0\r\n"));
|
"User-Agent: PaySwarm PHP Client/1.0\r\n"),
|
||||||
|
'https' => array(
|
||||||
|
'verify_peer' => true,
|
||||||
|
'method' => "GET",
|
||||||
|
'header' =>
|
||||||
|
"Accept: application/ld+json\r\n" .
|
||||||
|
"User-Agent: PaySwarm PHP Client/1.0\r\n"));
|
||||||
$stream = stream_context_create($opts);
|
$stream = stream_context_create($opts);
|
||||||
$result = @file_get_contents($url, false, $stream);
|
$result = @file_get_contents($url, false, $stream);
|
||||||
if($result === false) {
|
if($result === false) {
|
||||||
|
@ -233,6 +239,50 @@ function jsonld_default_get_url($url) {
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default implementation to retrieve JSON-LD at the given secure URL.
|
||||||
|
*
|
||||||
|
* @param string $url the secure URL to to retrieve.
|
||||||
|
*
|
||||||
|
* @return the JSON-LD.
|
||||||
|
*/
|
||||||
|
function jsonld_default_get_secure_url($url) {
|
||||||
|
if(strpos($url, 'https') !== 0) {
|
||||||
|
throw new Exception("Could not GET url: '$url'; 'https' is required.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$redirects = array();
|
||||||
|
|
||||||
|
// default JSON-LD https GET implementation
|
||||||
|
$opts = array(
|
||||||
|
'https' => array(
|
||||||
|
'verify_peer' => true,
|
||||||
|
'method' => "GET",
|
||||||
|
'header' =>
|
||||||
|
"Accept: application/ld+json\r\n" .
|
||||||
|
"User-Agent: PaySwarm PHP Client/1.0\r\n"));
|
||||||
|
$stream = stream_context_create($opts);
|
||||||
|
stream_context_set_params($stream, array('notification' =>
|
||||||
|
function($notification_code, $severity, $message) use (&$redirects) {
|
||||||
|
switch($notification_code) {
|
||||||
|
case STREAM_NOTIFY_REDIRECTED:
|
||||||
|
$redirects[] = $message;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
$result = @file_get_contents($url, false, $stream);
|
||||||
|
if($result === false) {
|
||||||
|
throw new Exception("Could not GET url: '$url'");
|
||||||
|
}
|
||||||
|
foreach($redirects as $redirect) {
|
||||||
|
if(strpos($redirect, 'https') !== 0) {
|
||||||
|
throw new Exception(
|
||||||
|
"Could not GET redirected url: '$redirect'; 'https' is required.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
/** Registered global RDF Statement parsers hashed by content-type. */
|
/** Registered global RDF Statement parsers hashed by content-type. */
|
||||||
global $jsonld_rdf_parsers;
|
global $jsonld_rdf_parsers;
|
||||||
$jsonld_rdf_parsers = new stdClass();
|
$jsonld_rdf_parsers = new stdClass();
|
||||||
|
|
Loading…
Reference in a new issue