From eadf625a51b23a8f62505949df863bdc8b2d0546 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Sun, 6 Jun 2010 18:08:06 +0200 Subject: create a class folder and move FedoraClient --- class/FedoraClient.php | 267 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 class/FedoraClient.php (limited to 'class/FedoraClient.php') diff --git a/class/FedoraClient.php b/class/FedoraClient.php new file mode 100644 index 0000000..e003a03 --- /dev/null +++ b/class/FedoraClient.php @@ -0,0 +1,267 @@ + + * + * @category Main + * @package FedoraClient + * + * @author Remi Collet + * @author Johan Cwiklinski + * @copyright 2010 Remi Collet + * @license http://www.gnu.org/licenses/lgpl-2.1.txt LGPL License 2.1 or (at your option) any later version + * @link http://github.com/remicollet/rpmphp/ + * @since The begining of times. + */ + +define('FEDORACLIENT_VERSION', '0.1.0-dev'); + +if (!function_exists('curl_version')) { + die("curl extension required\n"); +} +require_once 'Cache/Lite.php'; + +abstract class FedoraClient +{ + private $url; + private $agent; + private $debug = 0; + protected $cache; + + function __construct ($url, array $options) + { + $dir = "/tmp/cachelite-".posix_getlogin()."/"; + @mkdir($dir); + $this->cache = new Cache_Lite( + array( + 'memoryCaching' => true, + 'cacheDir' => $dir, + 'automaticSerialization' => true + ) + ); + + $this->url = $url; + if (isset($options['agent']) && !empty($options['agent'])) { + $this->agent = $options['agent']; + } else { + $this->agent = 'Fedora PHPClient/'.FEDORACLIENT_VERSION; + } + if (isset($options['debug']) && intval($options['debug'])>0) { + $this->debug = intval($options['debug']); + } + $this->logDebug( + 3, + __CLASS__."::".__FUNCTION__.": url='$url', agent='".$this->agent."'" + ); + } + + function logDebug($level, $msg) + { + if ($this->debug>=$level) { + echo "[debug][$level] $msg\n"; + } + } + + function sendRequest($method, array $options=array()) + { + $curl = curl_init(); + // And join to make our url. + $url = $this->url.$method; + curl_setopt($curl, CURLOPT_URL, $url); + // Boilerplate so pycurl processes cookies + curl_setopt($curl, CURLOPT_COOKIEFILE, '/dev/null'); + + //# Associate with the response to accumulate data + $this->data=''; + curl_setopt($curl, CURLOPT_WRITEFUNCTION, array($this, 'receive')); + + // Follow redirect + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($curl, CURLOPT_MAXREDIRS, 5); + + // Set standard headers + curl_setopt( + $curl, + CURLOPT_HTTPHEADER, + array('User-agent: '.$this->agent, 'Accept: application/json') + ); + + // run the request + $this->logDebug( + 2, + __CLASS__."::".__FUNCTION__.": call '$url'" + ); + curl_exec($curl); + + + // Check for auth failures + // Note: old TG apps returned 403 Forbidden on authentication failures. + // Updated apps return 401 Unauthorized + // We need to accept both until all apps are updated to return 401. + $http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE); + if ($http_status==401 || $http_status==403) { + $this->logDebug( + 1, + __CLASS__."::".__FUNCTION__. + ": http_status '$http_status' Authentication failed logging in" + ); + return array(); + } else if ($http_status>=400) { + $this->logDebug( + 1, + __CLASS__."::".__FUNCTION__. + ": http_status '$http_status' Unknown HTTP Server Response" + ); + return array(); + } else { + $this->logDebug( + 2, + __CLASS__."::".__FUNCTION__.": http_status '$http_status'" + ); + } + + $this->logDebug( + 2, + __CLASS__."::".__FUNCTION__.": close connexion" + ); + + curl_close($curl); + return json_decode($this->data, true); + } + + function receive($curl, $data) + { + $this->logDebug( + 9, + __CLASS__."::".__FUNCTION__.": $data" + ); + $this->data .= $data; + return strlen($data); + } +} + + +class FedoraPkgdb extends FedoraClient +{ + + function __construct (array $options=array()) + { + parent::__construct('https://admin.fedoraproject.org/pkgdb/', $options); + $this->logDebug( + 3, + __CLASS__."::".__FUNCTION__ + ); + } + + function getBranches($refresh=false) + { + $rep = ($refresh ? false : $this->cache->get(__FUNCTION__, __CLASS__)); + if ($rep) { + $this->logDebug( + 2, + __CLASS__."::".__FUNCTION__."() get from cache" + ); + } else { + $rep =$this->sendRequest('collections'); + $this->cache->save($rep, __FUNCTION__, __CLASS__); + $this->logDebug( + 2, + __CLASS__."::".__FUNCTION__."() save to cache" + ); + } + + $branches = array(); + if (isset($rep['collections'])) { + foreach ($rep['collections'] as $coll) { + if (isset($coll[0]['branchname'])) { + $branches[$coll[0]['branchname']] = $coll[0]; + } + } + } + return $branches; + } + + function getPackageInfo($name, $refresh=false) + { + $url="acls/name/$name"; + $rep = ($refresh ? false : $this->cache->get($url, __CLASS__)); + if ($rep) { + $this->logDebug( + 2, + __CLASS__."::".__FUNCTION__."($name) get from cache" + ); + } else { + $rep =$this->sendRequest($url); + $this->cache->save($rep, $url, __CLASS__); + $this->logDebug( + 2, + __CLASS__."::".__FUNCTION__."($name) save to cache" + ); + } + + if (isset($rep['status']) && !$rep['status']) { + $this->logDebug( + 1, + __CLASS__."::".__FUNCTION__."($name) ".$rep['message'] + ); + return false; + } + $branches = array(); + foreach ($rep['packageListings'] as $pack) { + $branches[$pack['collection']['branchname']] = $pack; + } + return $branches; + } + + function getBranch($name, $refresh=false) + { + $branches = $this->getBranches($refresh); + + if (isset($branches[$name])) { + return $branches[$name]; + } + return false; + } + + function getCritPath($refresh=false) + { + $url="lists/critpath"; + $rep = ($refresh ? false : $this->cache->get($url, __CLASS__)); + if ($rep) { + $this->logDebug( + 2, + __CLASS__."::".__FUNCTION__." get from cache" + ); + } else { + $rep =$this->sendRequest($url); + $this->cache->save($rep, $url, __CLASS__); + $this->logDebug( + 2, + __CLASS__."::".__FUNCTION__." save to cache" + ); + } + return $rep['pkgs']; + } +} +?> -- cgit From 5330ba05cafe0c33ea7f6d0e0a0b7117117f246f Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Sun, 6 Jun 2010 20:35:36 +0200 Subject: Introduce CommonTable, TableIterator, TablePearRepo classes (and use it in refresh) --- class/FedoraClient.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'class/FedoraClient.php') diff --git a/class/FedoraClient.php b/class/FedoraClient.php index e003a03..43d9dce 100644 --- a/class/FedoraClient.php +++ b/class/FedoraClient.php @@ -227,10 +227,12 @@ class FedoraPkgdb extends FedoraClient ); return false; } + $this->logDebug(8,print_r($rep,true)); $branches = array(); foreach ($rep['packageListings'] as $pack) { $branches[$pack['collection']['branchname']] = $pack; } + $this->logDebug(7,print_r($branches,true)); return $branches; } -- cgit From a6282ca0e8a13fd53b4bea6eeff7a69f1312eef3 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 8 Jun 2010 18:39:20 +0200 Subject: autoload --- class/FedoraClient.php | 107 +------------------------------------------------ 1 file changed, 1 insertion(+), 106 deletions(-) (limited to 'class/FedoraClient.php') diff --git a/class/FedoraClient.php b/class/FedoraClient.php index 43d9dce..ed29f54 100644 --- a/class/FedoraClient.php +++ b/class/FedoraClient.php @@ -161,109 +161,4 @@ abstract class FedoraClient } } - -class FedoraPkgdb extends FedoraClient -{ - - function __construct (array $options=array()) - { - parent::__construct('https://admin.fedoraproject.org/pkgdb/', $options); - $this->logDebug( - 3, - __CLASS__."::".__FUNCTION__ - ); - } - - function getBranches($refresh=false) - { - $rep = ($refresh ? false : $this->cache->get(__FUNCTION__, __CLASS__)); - if ($rep) { - $this->logDebug( - 2, - __CLASS__."::".__FUNCTION__."() get from cache" - ); - } else { - $rep =$this->sendRequest('collections'); - $this->cache->save($rep, __FUNCTION__, __CLASS__); - $this->logDebug( - 2, - __CLASS__."::".__FUNCTION__."() save to cache" - ); - } - - $branches = array(); - if (isset($rep['collections'])) { - foreach ($rep['collections'] as $coll) { - if (isset($coll[0]['branchname'])) { - $branches[$coll[0]['branchname']] = $coll[0]; - } - } - } - return $branches; - } - - function getPackageInfo($name, $refresh=false) - { - $url="acls/name/$name"; - $rep = ($refresh ? false : $this->cache->get($url, __CLASS__)); - if ($rep) { - $this->logDebug( - 2, - __CLASS__."::".__FUNCTION__."($name) get from cache" - ); - } else { - $rep =$this->sendRequest($url); - $this->cache->save($rep, $url, __CLASS__); - $this->logDebug( - 2, - __CLASS__."::".__FUNCTION__."($name) save to cache" - ); - } - - if (isset($rep['status']) && !$rep['status']) { - $this->logDebug( - 1, - __CLASS__."::".__FUNCTION__."($name) ".$rep['message'] - ); - return false; - } - $this->logDebug(8,print_r($rep,true)); - $branches = array(); - foreach ($rep['packageListings'] as $pack) { - $branches[$pack['collection']['branchname']] = $pack; - } - $this->logDebug(7,print_r($branches,true)); - return $branches; - } - - function getBranch($name, $refresh=false) - { - $branches = $this->getBranches($refresh); - - if (isset($branches[$name])) { - return $branches[$name]; - } - return false; - } - - function getCritPath($refresh=false) - { - $url="lists/critpath"; - $rep = ($refresh ? false : $this->cache->get($url, __CLASS__)); - if ($rep) { - $this->logDebug( - 2, - __CLASS__."::".__FUNCTION__." get from cache" - ); - } else { - $rep =$this->sendRequest($url); - $this->cache->save($rep, $url, __CLASS__); - $this->logDebug( - 2, - __CLASS__."::".__FUNCTION__." save to cache" - ); - } - return $rep['pkgs']; - } -} -?> +?> \ No newline at end of file -- cgit From e6b48f0d645a72b2b4898f3ddc90fc8437f9b1e2 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Sun, 11 Jul 2010 18:43:12 +0200 Subject: add PkdDb link on zoom page, solves #58 --- class/FedoraClient.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'class/FedoraClient.php') diff --git a/class/FedoraClient.php b/class/FedoraClient.php index ed29f54..c1a10c5 100644 --- a/class/FedoraClient.php +++ b/class/FedoraClient.php @@ -44,7 +44,7 @@ require_once 'Cache/Lite.php'; abstract class FedoraClient { - private $url; + protected $url; private $agent; private $debug = 0; protected $cache; -- cgit From 6e6d59bf0677c6b2d5b92a6abdab15a7ecaf9947 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Sun, 11 Jul 2010 19:10:36 +0200 Subject: move FEDORACLIENT_VERSION to class, so FedoraClient::VERSION --- class/FedoraClient.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'class/FedoraClient.php') diff --git a/class/FedoraClient.php b/class/FedoraClient.php index c1a10c5..f1ce8f6 100644 --- a/class/FedoraClient.php +++ b/class/FedoraClient.php @@ -35,8 +35,6 @@ * @since The begining of times. */ -define('FEDORACLIENT_VERSION', '0.1.0-dev'); - if (!function_exists('curl_version')) { die("curl extension required\n"); } @@ -44,6 +42,7 @@ require_once 'Cache/Lite.php'; abstract class FedoraClient { + const VERSION='0.1.0-dev'; protected $url; private $agent; private $debug = 0; @@ -65,7 +64,7 @@ abstract class FedoraClient if (isset($options['agent']) && !empty($options['agent'])) { $this->agent = $options['agent']; } else { - $this->agent = 'Fedora PHPClient/'.FEDORACLIENT_VERSION; + $this->agent = 'Fedora PHPClient/'.self::VERSION; } if (isset($options['debug']) && intval($options['debug'])>0) { $this->debug = intval($options['debug']); -- cgit