Validate server connection in SimpleDB driver
This commit is contained in:
parent
cb37e4568b
commit
40f04571ed
|
@ -6,13 +6,49 @@ if (isset($_GET["simpledb"])) {
|
||||||
|
|
||||||
if (class_exists('SimpleXMLElement') && ini_bool('allow_url_fopen')) {
|
if (class_exists('SimpleXMLElement') && ini_bool('allow_url_fopen')) {
|
||||||
class Min_DB {
|
class Min_DB {
|
||||||
var $extension = "SimpleXML", $server_info = '2009-04-15', $error, $timeout, $next, $affected_rows, $_result;
|
var $extension = "SimpleXML", $server_info = '2009-04-15', $error, $timeout, $next, $affected_rows, $_url, $_result;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $server
|
||||||
|
* @param string $password
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function connect($server, $password) {
|
||||||
|
if ($server == '' || $password == '') {
|
||||||
|
$this->error = lang('Invalid credentials.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$parts = parse_url($server);
|
||||||
|
|
||||||
|
if (!$parts || !isset($parts['host']) || !preg_match('~^sdb\.([a-z0-9-]+\.)?amazonaws\.com$~i', $parts['host']) ||
|
||||||
|
isset($parts['port'])
|
||||||
|
) {
|
||||||
|
$this->error = lang('Invalid credentials.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_url = build_http_url($server, '', '', '');
|
||||||
|
|
||||||
|
return (bool) $this->workaroundLoginRequest('ListDomains', ['MaxNumberOfDomains' => 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: This is so wrong :-( Move sdb_request to Min_DB!
|
||||||
|
private function workaroundLoginRequest($action, $params = array()) {
|
||||||
|
global $connection;
|
||||||
|
|
||||||
|
$connection = $this;
|
||||||
|
$result = sdb_request($action, $params);
|
||||||
|
$connection = null;
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
function select_db($database) {
|
function select_db($database) {
|
||||||
return ($database == "domain");
|
return ($database == "domain");
|
||||||
}
|
}
|
||||||
|
|
||||||
function query($query, $unbuffered = false) {
|
function query($query) {
|
||||||
$params = array('SelectExpression' => $query, 'ConsistentRead' => 'true');
|
$params = array('SelectExpression' => $query, 'ConsistentRead' => 'true');
|
||||||
if ($this->next) {
|
if ($this->next) {
|
||||||
$params['NextToken'] = $this->next;
|
$params['NextToken'] = $this->next;
|
||||||
|
@ -248,11 +284,15 @@ if (isset($_GET["simpledb"])) {
|
||||||
|
|
||||||
function connect() {
|
function connect() {
|
||||||
global $adminer;
|
global $adminer;
|
||||||
list(, , $password) = $adminer->credentials();
|
|
||||||
if ($password != "") {
|
$connection = new Min_DB;
|
||||||
return lang('Database does not support password.');
|
|
||||||
|
list($server, , $password) = $adminer->credentials();
|
||||||
|
if ($connection->connect($server, $password)) {
|
||||||
|
return $connection;
|
||||||
}
|
}
|
||||||
return new Min_DB;
|
|
||||||
|
return $connection->error;
|
||||||
}
|
}
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
|
@ -422,7 +462,8 @@ if (isset($_GET["simpledb"])) {
|
||||||
$query = str_replace('%7E', '~', substr($query, 1));
|
$query = str_replace('%7E', '~', substr($query, 1));
|
||||||
$query .= "&Signature=" . urlencode(base64_encode(hmac('sha1', "POST\n" . preg_replace('~^https?://~', '', $host) . "\n/\n$query", $secret, true)));
|
$query .= "&Signature=" . urlencode(base64_encode(hmac('sha1', "POST\n" . preg_replace('~^https?://~', '', $host) . "\n/\n$query", $secret, true)));
|
||||||
@ini_set('track_errors', 1); // @ - may be disabled
|
@ini_set('track_errors', 1); // @ - may be disabled
|
||||||
$file = @file_get_contents((preg_match('~^https?://~', $host) ? $host : "http://$host"), false, stream_context_create(array('http' => array(
|
|
||||||
|
$file = @file_get_contents($connection->_url, false, stream_context_create(array('http' => array(
|
||||||
'method' => 'POST', // may not fit in URL with GET
|
'method' => 'POST', // may not fit in URL with GET
|
||||||
'content' => $query,
|
'content' => $query,
|
||||||
'ignore_errors' => 1,
|
'ignore_errors' => 1,
|
||||||
|
@ -430,7 +471,7 @@ if (isset($_GET["simpledb"])) {
|
||||||
'max_redirects' => 0,
|
'max_redirects' => 0,
|
||||||
))));
|
))));
|
||||||
if (!$file) {
|
if (!$file) {
|
||||||
$connection->error = $php_errormsg;
|
$connection->error = error_get_last()['message'];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
libxml_use_internal_errors(true);
|
libxml_use_internal_errors(true);
|
||||||
|
|
Loading…
Reference in a new issue