From 1023f7282660e1fac442960d979641cda60cda8d Mon Sep 17 00:00:00 2001 From: Tomasz Wolniewicz <twoln@umk.pl> Date: Thu, 18 Jan 2024 21:32:11 +0100 Subject: [PATCH] restoring the non-docker validator class --- lib/validatorClass.php | 89 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 72 insertions(+), 17 deletions(-) diff --git a/lib/validatorClass.php b/lib/validatorClass.php index b9bc1dd..3e451c3 100644 --- a/lib/validatorClass.php +++ b/lib/validatorClass.php @@ -1,11 +1,13 @@ <?php class Validator { public $params; + private $validatordir; private $edugain; private $logger; public function __construct($params = array()) { + $this->validatordir = VALIDATOR_SCRIPTS; if (empty($params)) { $this->params = array( 'url' => '', @@ -64,6 +66,7 @@ class Validator { $fed_id = $this->edugain->getCode($fed_id); $this->edugain->load_federations(0,$fed_id); $this->edugain->load_federation_basic_details('all'); + $certdb = 0; if (empty($this->edugain->FEDS[$fed_id])) { $this->params['federror'] = 'No such federation in the eduGAIN database: '.$fed_id; } else { @@ -93,6 +96,7 @@ class Validator { $this->edugain->FEDS[$fed_id]['certificate'][$n]['certfile'] = $certfilename; } } + $certdb = $n; $ff = fopen($this->params['filename'].'-certinfo.json', 'w'); fputs($ff, json_encode($this->edugain->FEDS[$fed_id]['certificate'])); } @@ -278,35 +282,86 @@ class Validator { public function checkmetadata() { $params = $this->params; $schres = 0; - $certidx = 0; + $certidx = -1; if ( ($params['validate'] || $params['entities']) && ($params['url'] != "") ) { $ret = $this->get_data(); if ($ret[0] == 304) { + $result = array(); + $result['global']['required']['passed'] = array(); + $result['global']['required']['failed'] = array(); + $result['global']['required']['code'][] = 304; + $result['global']['recommended']['passed'] = array(); + $result['global']['recommended']['failed'] = array(); + $result['entities'] = array(); + $result['sources'] = $params['url']; + $f = fopen($this->params['filename'], 'w'); + fputs($f, json_encode($result)); + fclose($f); $res = $schres = 304; - $printres = "<div class='noticeerr'>URL fetching failed<br></div>"; } elseif ($ret[0] > 0) { + $result = array(); + $result['global']['required']['passed'] = array(); + $result['global']['required']['failed'][] = $ret[1]; + $result['global']['required']['code'][] = 14; + $result['global']['recommended']['passed'] = array(); + $result['global']['recommended']['failed'] = array(); + $result['entities'] = array(); + $result['sources'] = $url; + $f = fopen($params['filename'], 'w'); + fputs($f, json_encode($result)); + fclose($f); $res = $schres = 14; - $printres = "<div class='noticeerr'>URL fetching failed<br>" . $ret[1] . '</div>'; + $aggres = 0; + $pyffres = 0; } elseif ($ret[0] == 0) { $f = fopen($params['filename'].'-metadata.xml', 'w'); fputs($f, $ret[1]); fclose($f); - $this->params['feed'] = substr($this->params['filename'], strrpos($this->params['filename'], '/')+1); - $this->params['fedname'] = base64_encode($this->params['fedname']); - $f = fopen($this->params['filename'].'-params.json', 'w'); - fputs($f, json_encode($this->params)); - fclose($f); - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, VALIDATOR_REQ . $this->params['feed']); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - $response = curl_exec($ch); - if (file_exists($params['filename'] . '-result')) { - $printres = file_get_contents($params['filename'] . '-result'); - } else { - $printres = '<b>A problem occured.</b><p>Please let us know: <a href="mailto:edugain-ot@lists.geant.org">edugain-ot@lists.geant.org</a>'; - $printres = '<p>'.$params['filename'] . '-result'; + $aggres = 0; + $pyffres = 0; + $args = "\"".$params['url']."\" \"".$params['regauth']."\" ".$params['filename']." \"".$params['langsetting']."\" ".$params['validate']." ".$params['onlyone']." ".$params['weakkeys']." ".$params['xmlout']." ".$params['edugain']." ".base64_encode($params['fedname']); + system($this->validatordir."/schemas.py $args",$schres); + if ($params['onlyone'] && !$schres) { + $params['onlyone'] = 0; + unset($_REQUEST['oneentity']); } + #if ($params['validate'] && !$params['onlyone'] && ($schres<2)) { + if ($params['validate'] && !$params['onlyone']) { + if ($params['edugain'] || $params['gobetween']) $fromdb = 1; + else $fromdb = 0; + system($this->validatordir."/aggregator.py ".$params['filename']." $schres $fromdb >".$params['filename']."-aggregator.log 2>&1",$aggres); + $certidx = trim(file_get_contents($params['filename']."-aggregator.log")); + error_log("certidx=$certidx"); + if ($certidx == '') { + $certidx = 0; + } + system($this->validatordir."/mda.sh --verbose ".$params['filename'].".xml main > ".$params['filename']."-mda.log 2>&1", $res); + $searchfor = "Unable to validate signature"; + $matches = array(); + $handle = @fopen($params['filename']."-mda.log", "r"); + if ($handle) { + while (!feof($handle)) { + $buffer = fgets($handle); + if (strpos($buffer, $searchfor) !== FALSE) { + $matches[] = $buffer; + break; + } + } + fclose($handle); + } + if (count($matches) && $certdb > 1) { + system($this->validatordir."/aggregator.py ".$params['filename']." $schres $fromdb 1 >".$params['filename']."-aggregator2.log 2>&1",$aggres); + system($this->validatordir."/mda.sh --verbose ".$params['filename']."_1.xml main > ".$params['filename']."-mda.log 2>&1", $res); + $certidx = trim(file_get_contents($params['filename']."-aggregator2.log")); + if ($certidx == '') { + $certidx = 1; + } + } + system($this->validatordir."/pyff.sh ".$params['filename'].'>'.$params['filename']."-pyff.log 2>&1", $pyffres); + } else $res = $schres; } + $args = $params['filename']." \"".$params['langsetting']."\" ".$params['validate']." ".$params['onlyone']." ".$params['xmlout']." ".$params['gobetween']." ".$params['edugain']; + $printres = shell_exec($this->validatordir."/printresults.py $args $res $schres $aggres $pyffres $certidx"); } else $printres = "<span class='noticeerr'>URL fetching failed ".$ret[1]."</span>"; if (!$params['gobetween']) { -- GitLab