Skip to content
Snippets Groups Projects
Commit 1023f728 authored by Tomasz Wolniewicz's avatar Tomasz Wolniewicz
Browse files

restoring the non-docker validator class

parent 83901436
No related branches found
No related tags found
No related merge requests found
<?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']) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment