summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extras/import-idp.php45
1 files changed, 36 insertions, 9 deletions
diff --git a/extras/import-idp.php b/extras/import-idp.php
index aecafe8..b18b923 100644
--- a/extras/import-idp.php
+++ b/extras/import-idp.php
@@ -2,6 +2,19 @@
error_reporting(E_ALL);
+function pdebug($text)
+{
+ if (DEBUG) echo "$text\n";
+}
+
+if ($argc < 2) die("To few arguments. Pass config file!\n");
+if ($argv[1] === '--debug') {
+ $argc--;
+ array_shift($argv);
+ define('DEBUG', true);
+} else {
+ define('DEBUG', false);
+}
if ($argc < 2) die("To few arguments. Pass config file!\n");
$handle = fopen($argv[1], 'r') or die("Cannot open mysql config given on command line\n");
$settings = array();
@@ -29,9 +42,8 @@ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
if ($data === false) die("Could not download DFN-AAI meta data\n");
-preg_match_all('#<EntityDescriptor.*?</EntityDescriptor>#s', $data, $out);
-
-
+$count = preg_match_all('#<EntityDescriptor.*?</EntityDescriptor>#s', $data, $out);
+pdebug("Found $count EntityDescriptors");
function getAttributes($array, $path)
{
@@ -98,20 +110,35 @@ foreach ($out[0] as $data) {
$xml = json_decode(json_encode(simplexml_load_string('<?xml version="1.0" encoding="utf-8" standalone="yes" ?'.'>'
. $data
)), true);
- if (!in_array('http://aai.dfn.de/category/bwidm-member', getAttributes($xml, 'Extensions/EntityAttributes/Attribute/AttributeValue'))) continue;
- $scope = getAttributes($xml, "IDPSSODescriptor/Extensions/Scope");
- if (empty($scope)) continue;
$name = getAttributes($xml, "IDPSSODescriptor/Extensions/UIInfo/DisplayName");
+ if (is_array($name) && !empty($name)) {
+ $name = $name[0];
+ pdebug(" *** Found $name");
+ } else {
+ pdebug(" *** Entry without DisplayName...");
+ continue;
+ }
+ if (!in_array('http://aai.dfn.de/category/bwidm-member', getAttributes($xml, 'Extensions/EntityAttributes/Attribute/AttributeValue'))) {
+ pdebug("Not bwIDM member...");
+ continue;
+ }
+ $scope = getAttributes($xml, "IDPSSODescriptor/Extensions/Scope");
+ if (empty($scope)) {
+ pdebug("No list of scopes...");
+ continue;
+ }
$ecp = false;
- if (is_array($name)) $name = $name[0];
foreach (getAttributes($xml, "IDPSSODescriptor/SingleSignOnService") as $sso) {
if (isset($sso['@attributes']['Binding']) && $sso['@attributes']['Binding'] === 'urn:oasis:names:tc:SAML:2.0:bindings:SOAP') {
$ecp = $sso['@attributes']['Location'];
break;
}
}
- // Now usable: $scope (kind of, arrayize), $name, $ecp (if known, false otherwise)
- if ($ecp && !empty($scope)) {
+ // Now usable: $scope, $name, $ecp (if known, false otherwise)
+ if ($ecp === false) {
+ pdebug("No ECP end-point...");
+ } else {
+ pdebug("Adding/Updating with ECP URL $ecp, suffixes: " . implode(', ', $scope));
wipeDb();
$eid = $db->escape_string($scope[0]);
$ename = $db->escape_string($name);