@@ -50,19 +50,19 @@ discard block |
||
50 | 50 | |
51 | 51 | array_push($FAQ, [ |
52 | 52 | 'title' => sprintf(_("Is it safe to use %s installers?"), \config\Master::APPEARANCE['productname']), |
53 | - 'text' => sprintf(_("%s installers configure security settings on your device, therefore you should be sure that you are using genuine ones."), \config\Master::APPEARANCE['productname']) . ' ' . ( isset(\config\ConfAssistant::CONSORTIUM['signer_name']) && \config\ConfAssistant::CONSORTIUM['signer_name'] != "" ? sprintf(_("This is why %s installers are digitally signed by %s. Watch out for a system message confirming this."), \config\Master::APPEARANCE['productname'], \config\ConfAssistant::CONSORTIUM['signer_name']) : ""), |
|
53 | + 'text' => sprintf(_("%s installers configure security settings on your device, therefore you should be sure that you are using genuine ones."), \config\Master::APPEARANCE['productname']).' '.(isset(\config\ConfAssistant::CONSORTIUM['signer_name']) && \config\ConfAssistant::CONSORTIUM['signer_name'] != "" ? sprintf(_("This is why %s installers are digitally signed by %s. Watch out for a system message confirming this."), \config\Master::APPEARANCE['productname'], \config\ConfAssistant::CONSORTIUM['signer_name']) : ""), |
|
54 | 54 | ]); |
55 | 55 | |
56 | 56 | array_push($FAQ, [ |
57 | 57 | 'title' => _("Windows 'SmartScreen' or 'Internet Explorer' tell me that the file is not commonly downloaded and possibly harmful. Should I be concerned?"), |
58 | - 'text' => _("Contrary to what the name suggests, 'SmartScreen' isn't actually very smart. The warning merely means that the file has not yet been downloaded by enough users to make Microsoft consider it popular (which would strangely enough make it be considered 'safe'). This message alone is not a security problem.") . " " . (isset(\config\ConfAssistant::CONSORTIUM['signer_name']) && \config\ConfAssistant::CONSORTIUM['signer_name'] != "" ? sprintf(_("So long as the file is carrying a valid signature from %s, the download is safe."), \config\ConfAssistant::CONSORTIUM['signer_name']) . " " : "") . sprintf(_("Please see also Microsoft's FAQ regarding SmartScreen at %s."), "<a href='http://windows.microsoft.com/en-US/windows7/SmartScreen-Filter-frequently-asked-questions-IE9?SignedIn=1'>Microsoft FAQ</a>") |
|
58 | + 'text' => _("Contrary to what the name suggests, 'SmartScreen' isn't actually very smart. The warning merely means that the file has not yet been downloaded by enough users to make Microsoft consider it popular (which would strangely enough make it be considered 'safe'). This message alone is not a security problem.")." ".(isset(\config\ConfAssistant::CONSORTIUM['signer_name']) && \config\ConfAssistant::CONSORTIUM['signer_name'] != "" ? sprintf(_("So long as the file is carrying a valid signature from %s, the download is safe."), \config\ConfAssistant::CONSORTIUM['signer_name'])." " : "").sprintf(_("Please see also Microsoft's FAQ regarding SmartScreen at %s."), "<a href='http://windows.microsoft.com/en-US/windows7/SmartScreen-Filter-frequently-asked-questions-IE9?SignedIn=1'>Microsoft FAQ</a>") |
|
59 | 59 | ]); |
60 | 60 | |
61 | 61 | if (\config\Master::FUNCTIONALITY_LOCATIONS['DIAGNOSTICS'] == NULL) { |
62 | 62 | $text = sprintf(_("There can be a number of different reasons. The network you see may not be a genuine %s one and your device silently drops the connection attempt; there may be something wrong with the configuration of the network; your account may have expired; there may be a connection problem with your home authentication server; you may have broken the regulations of the network you are using and have been refused access as a consequence. You should contact your organisation and report the problem, the administrators should be able to trace your connections."), \config\ConfAssistant::CONSORTIUM['display_name']); |
63 | 63 | } else { |
64 | 64 | if (\config\Master::FUNCTIONALITY_LOCATIONS['DIAGNOSTICS'] == 'LOCAL') { |
65 | - $diagUrl = \config\Master::PATHS['cat_base_url'] . "diag/"; |
|
65 | + $diagUrl = \config\Master::PATHS['cat_base_url']."diag/"; |
|
66 | 66 | } else { |
67 | 67 | $diagUrl = \config\Master::FUNCTIONALITY_LOCATIONS['DIAGNOSTICS']; |
68 | 68 | } |
@@ -99,8 +99,8 @@ discard block |
||
99 | 99 | $tocText = ""; |
100 | 100 | $fullText = ""; |
101 | 101 | foreach ($FAQ as $faq) { |
102 | - $tocText .= '<a href="#toc' . $counter . '">' . $faq['title'] . "</a><br>\n"; |
|
103 | - $fullText .= "<dt><a name=toc$counter>" . $faq['title'] . "</a></dt>\n<dd>" . $faq['text'] . "</dd>\n"; |
|
102 | + $tocText .= '<a href="#toc'.$counter.'">'.$faq['title']."</a><br>\n"; |
|
103 | + $fullText .= "<dt><a name=toc$counter>".$faq['title']."</a></dt>\n<dd>".$faq['text']."</dd>\n"; |
|
104 | 104 | $counter++; |
105 | 105 | } |
106 | 106 | ?> |
@@ -142,17 +142,17 @@ discard block |
||
142 | 142 | foreach (array_keys($this->typeDb) as $name) { |
143 | 143 | if ($className === 0) { |
144 | 144 | $tempArray[] = $name; |
145 | - } elseif (preg_match('/^' . $className . ':/', $name) > 0) { |
|
145 | + } elseif (preg_match('/^'.$className.':/', $name) > 0) { |
|
146 | 146 | $tempArray[] = $name; |
147 | 147 | } |
148 | 148 | } |
149 | 149 | $returnArray = $tempArray; |
150 | 150 | // remove silverbullet-specific options if this deployment is not SB |
151 | 151 | foreach ($tempArray as $key => $val) { |
152 | - if (( \config\Master::FUNCTIONALITY_LOCATIONS['CONFASSISTANT_SILVERBULLET'] != 'LOCAL') && (preg_match('/^fed:silverbullet/', $val) > 0)) { |
|
152 | + if ((\config\Master::FUNCTIONALITY_LOCATIONS['CONFASSISTANT_SILVERBULLET'] != 'LOCAL') && (preg_match('/^fed:silverbullet/', $val) > 0)) { |
|
153 | 153 | unset($returnArray[$key]); |
154 | 154 | } |
155 | - if (( \config\Master::FUNCTIONALITY_LOCATIONS['CONFASSISTANT_RADIUS'] != 'LOCAL') && (preg_match('/^fed:minted_ca_file/', $val) > 0)) { |
|
155 | + if ((\config\Master::FUNCTIONALITY_LOCATIONS['CONFASSISTANT_RADIUS'] != 'LOCAL') && (preg_match('/^fed:minted_ca_file/', $val) > 0)) { |
|
156 | 156 | unset($returnArray[$key]); |
157 | 157 | } |
158 | 158 | } |
@@ -172,7 +172,7 @@ discard block |
||
172 | 172 | if (isset($this->typeDb[$optionname])) { |
173 | 173 | return $this->typeDb[$optionname]; |
174 | 174 | } |
175 | - throw new Exception("Metadata about an option was requested, but the option name does not exist in the system: " . htmlentities($optionname)); |
|
175 | + throw new Exception("Metadata about an option was requested, but the option name does not exist in the system: ".htmlentities($optionname)); |
|
176 | 176 | } |
177 | 177 | |
178 | 178 | /** |
@@ -21,14 +21,14 @@ discard block |
||
21 | 21 | */ |
22 | 22 | |
23 | 23 | require_once "autoloader.php"; |
24 | -require_once __DIR__ . "/../packageRoot.php"; |
|
24 | +require_once __DIR__."/../packageRoot.php"; |
|
25 | 25 | |
26 | 26 | // enable Composer autoloader, if exists |
27 | -if (file_exists(__DIR__ . "/../vendor/autoload.php") !== FALSE) { |
|
28 | - include_once __DIR__ . "/../vendor/autoload.php"; |
|
27 | +if (file_exists(__DIR__."/../vendor/autoload.php") !== FALSE) { |
|
28 | + include_once __DIR__."/../vendor/autoload.php"; |
|
29 | 29 | } |
30 | 30 | |
31 | -if (!file_exists(ROOT . "/config/Master.php")) { |
|
31 | +if (!file_exists(ROOT."/config/Master.php")) { |
|
32 | 32 | echo "Master configuration file not found. You need to configure the product! At least config/Master.php is required!"; |
33 | 33 | throw new Exception("Master config file not found!"); |
34 | 34 | } |
@@ -36,14 +36,14 @@ discard block |
||
36 | 36 | /* load sub-configs if we are dealing with those in this installation */ |
37 | 37 | |
38 | 38 | if (\config\Master::FUNCTIONALITY_LOCATIONS['CONFASSISTANT_SILVERBULLET'] == 'LOCAL' || \config\Master::FUNCTIONALITY_LOCATIONS['CONFASSISTANT_RADIUS'] == 'LOCAL') { |
39 | - if (!file_exists(ROOT . "/config/ConfAssistant.php")) { |
|
39 | + if (!file_exists(ROOT."/config/ConfAssistant.php")) { |
|
40 | 40 | echo "ConfAssistant configuration file not found. You need to configure the product!"; |
41 | 41 | throw new Exception("ConfAssistant config file not found!"); |
42 | 42 | } |
43 | 43 | } |
44 | 44 | |
45 | 45 | if (\config\Master::FUNCTIONALITY_LOCATIONS['DIAGNOSTICS'] == 'LOCAL') { |
46 | - if (!file_exists(ROOT . "/config/Diagnostics.php")) { |
|
46 | + if (!file_exists(ROOT."/config/Diagnostics.php")) { |
|
47 | 47 | echo "Diagnostics configuration file not found. You need to configure the product!"; |
48 | 48 | throw new Exception("Diagnostics config file not found!"); |
49 | 49 | } |
@@ -25,7 +25,7 @@ discard block |
||
25 | 25 | * @author Stefan Winter <[email protected]> |
26 | 26 | */ |
27 | 27 | |
28 | -require_once dirname(dirname(dirname(__FILE__))) . "/config/_config.php"; |
|
28 | +require_once dirname(dirname(dirname(__FILE__)))."/config/_config.php"; |
|
29 | 29 | |
30 | 30 | $auth = new \web\lib\admin\Authentication(); |
31 | 31 | $deco = new \web\lib\admin\PageDecoration(); |
@@ -46,18 +46,18 @@ discard block |
||
46 | 46 | |
47 | 47 | if ($submitGiven == web\lib\common\FormElements::BUTTON_SAVE) { // here we go |
48 | 48 | $fed_name = $my_fed->name; |
49 | - echo "<h1>" . sprintf(_("Submitted attributes for %s '%s'"), $uiElements->nomenclatureFed, $fed_name) . "</h1>"; |
|
49 | + echo "<h1>".sprintf(_("Submitted attributes for %s '%s'"), $uiElements->nomenclatureFed, $fed_name)."</h1>"; |
|
50 | 50 | echo "<table>"; |
51 | 51 | echo $optionParser->processSubmittedFields($my_fed, $_POST, $_FILES); |
52 | 52 | echo "</table>"; |
53 | 53 | |
54 | 54 | $loggerInstance = new \core\common\Logging(); |
55 | - $loggerInstance->writeAudit($_SESSION['user'], "MOD", "FED " . $my_fed->name . " - attributes changed"); |
|
55 | + $loggerInstance->writeAudit($_SESSION['user'], "MOD", "FED ".$my_fed->name." - attributes changed"); |
|
56 | 56 | |
57 | 57 | // re-instantiate ourselves... profiles need fresh data |
58 | 58 | |
59 | 59 | $my_fed = $validator->existingFederation($_GET['fed_id'], $_SESSION['user']); |
60 | 60 | |
61 | - echo "<br/><form method='post' action='overview_federation.php' accept-charset='UTF-8'><button type='submit'>" . _("Continue to dashboard") . "</button></form>"; |
|
61 | + echo "<br/><form method='post' action='overview_federation.php' accept-charset='UTF-8'><button type='submit'>"._("Continue to dashboard")."</button></form>"; |
|
62 | 62 | } |
63 | 63 | echo $deco->footer(); |
@@ -8,7 +8,7 @@ |
||
8 | 8 | * License: see the web/copyright.php file in the file structure |
9 | 9 | * ****************************************************************************** |
10 | 10 | */ |
11 | -require_once dirname(dirname(__FILE__)) . "/config/_config.php"; |
|
11 | +require_once dirname(dirname(__FILE__))."/config/_config.php"; |
|
12 | 12 | |
13 | 13 | const AREAS = ["web_admin", "web_user", "devices", "core", "diagnostics"]; |
14 | 14 | foreach (\config\Master::LANGUAGES as $lang => $details) { |
@@ -607,8 +607,7 @@ |
||
607 | 607 | $output = json_encode(["result" => "SUCCESS", "details" => $details], JSON_PRETTY_PRINT); |
608 | 608 | if ($output === FALSE) { |
609 | 609 | $this->returnError(API::ERROR_INTERNAL_ERROR, "Unable to JSON encode return data: ". json_last_error(). " - ". json_last_error_msg()); |
610 | - } |
|
611 | - else { |
|
610 | + } else { |
|
612 | 611 | echo $output; |
613 | 612 | } |
614 | 613 | } |
@@ -253,7 +253,7 @@ discard block |
||
253 | 253 | const ACTIONS = [ |
254 | 254 | // Inst-level actions. |
255 | 255 | API::ACTION_NEWINST_BY_REF => [ |
256 | - "REQ" => [API::AUXATTRIB_EXTERNALID,], |
|
256 | + "REQ" => [API::AUXATTRIB_EXTERNALID, ], |
|
257 | 257 | "OPT" => [ |
258 | 258 | 'general:geo_coordinates', |
259 | 259 | 'general:logo_file', |
@@ -270,7 +270,7 @@ discard block |
||
270 | 270 | "FLAG" => [], |
271 | 271 | ], |
272 | 272 | API::ACTION_NEWINST => [ |
273 | - "REQ" => [API::AUXATTRIB_INSTTYPE,], // "IdP", "SP" or "IdPSP" |
|
273 | + "REQ" => [API::AUXATTRIB_INSTTYPE, ], // "IdP", "SP" or "IdPSP" |
|
274 | 274 | "OPT" => [ |
275 | 275 | 'general:instname', |
276 | 276 | 'general:geo_coordinates', |
@@ -489,12 +489,12 @@ discard block |
||
489 | 489 | public function scrub($inputJson, $fedObject) { |
490 | 490 | $optionInstance = \core\Options::instance(); |
491 | 491 | $parameters = []; |
492 | - $allPossibleAttribs = array_merge(API::ACTIONS[$inputJson['ACTION']]['REQ'], API::ACTIONS[$inputJson['ACTION']]['OPT'], API::ACTIONS[$inputJson['ACTION']]['FLAG']); |
|
492 | + $allPossibleAttribs = array_merge(API::ACTIONS[$inputJson['ACTION']]['REQ'], API::ACTIONS[$inputJson['ACTION']]['OPT'], API::ACTIONS[$inputJson['ACTION']]['FLAG']); |
|
493 | 493 | // some actions don't need parameters. Don't get excited when there aren't any. |
494 | 494 | if (!isset($inputJson['PARAMETERS'])) { |
495 | 495 | return []; |
496 | 496 | } |
497 | - \core\common\Logging::debug_s(4, $inputJson['PARAMETERS'], "JSON:\n","\n"); |
|
497 | + \core\common\Logging::debug_s(4, $inputJson['PARAMETERS'], "JSON:\n", "\n"); |
|
498 | 498 | foreach ($inputJson['PARAMETERS'] as $number => $oneIncomingParam) { |
499 | 499 | // index has to be an integer |
500 | 500 | if (!is_int($number)) { |
@@ -543,7 +543,7 @@ discard block |
||
543 | 543 | break; |
544 | 544 | } |
545 | 545 | } elseif (preg_match("/^FLAG-/", $oneIncomingParam['NAME'])) { |
546 | - if ($oneIncomingParam['VALUE'] != "TRUE" && $oneIncomingParam['VALUE'] != "FALSE" ) { |
|
546 | + if ($oneIncomingParam['VALUE'] != "TRUE" && $oneIncomingParam['VALUE'] != "FALSE") { |
|
547 | 547 | // incorrect FLAG value |
548 | 548 | $parameters[$number] = array_merge($oneIncomingParam, ['VERFY_RESULT'=>false, 'VERIFY_DESC'=>"Incorrect FLAG value"]); |
549 | 549 | continue; |
@@ -603,8 +603,8 @@ discard block |
||
603 | 603 | |
604 | 604 | case \core\Options::TYPECODE_COORDINATES: |
605 | 605 | $extension = \core\Options::TYPECODE_TEXT; |
606 | - $coercedInline["option"][$basename] = $oneAttrib['NAME'] . "#"; |
|
607 | - $coercedInline["value"][$basename . "-" . $extension] = $oneAttrib['VALUE']; |
|
606 | + $coercedInline["option"][$basename] = $oneAttrib['NAME']."#"; |
|
607 | + $coercedInline["value"][$basename."-".$extension] = $oneAttrib['VALUE']; |
|
608 | 608 | break; |
609 | 609 | case \core\Options::TYPECODE_TEXT: |
610 | 610 | // Fall-through: they all get the same treatment. |
@@ -614,18 +614,18 @@ discard block |
||
614 | 614 | // Fall-through: they all get the same treatment. |
615 | 615 | case \core\Options::TYPECODE_INTEGER: |
616 | 616 | $extension = $optionInfo['type']; |
617 | - $coercedInline["option"][$basename] = $oneAttrib['NAME'] . "#"; |
|
618 | - $coercedInline["value"][$basename . "-" . $extension] = $oneAttrib['VALUE']; |
|
617 | + $coercedInline["option"][$basename] = $oneAttrib['NAME']."#"; |
|
618 | + $coercedInline["value"][$basename."-".$extension] = $oneAttrib['VALUE']; |
|
619 | 619 | if ($optionInfo['flag'] == "ML") { |
620 | - $coercedInline["value"][$basename . "-lang"] = $oneAttrib['LANG']; |
|
620 | + $coercedInline["value"][$basename."-lang"] = $oneAttrib['LANG']; |
|
621 | 621 | } |
622 | 622 | break; |
623 | 623 | case \core\Options::TYPECODE_FILE: |
624 | 624 | // Binary data is expected in base64 encoding. This is true also for PEM files! |
625 | 625 | $extension = $optionInfo['type']; |
626 | - $coercedInline["option"][$basename] = $oneAttrib['NAME'] . "#"; |
|
627 | - file_put_contents($dir['dir'] . "/" . $basename . "-" . $extension, base64_decode($oneAttrib['VALUE'])); |
|
628 | - $coercedFile["value"]['tmp_name'][$basename . "-" . $extension] = $dir['dir'] . "/" . $basename . "-" . $extension; |
|
626 | + $coercedInline["option"][$basename] = $oneAttrib['NAME']."#"; |
|
627 | + file_put_contents($dir['dir']."/".$basename."-".$extension, base64_decode($oneAttrib['VALUE'])); |
|
628 | + $coercedFile["value"]['tmp_name'][$basename."-".$extension] = $dir['dir']."/".$basename."-".$extension; |
|
629 | 629 | break; |
630 | 630 | default: |
631 | 631 | throw new Exception("We don't seem to know this type code!"); |
@@ -654,7 +654,7 @@ discard block |
||
654 | 654 | public function returnSuccess($details) { |
655 | 655 | $output = json_encode(["result" => "SUCCESS", "details" => $details], JSON_PRETTY_PRINT); |
656 | 656 | if ($output === FALSE) { |
657 | - $this->returnError(API::ERROR_INTERNAL_ERROR, "Unable to JSON encode return data: ". json_last_error(). " - ". json_last_error_msg()); |
|
657 | + $this->returnError(API::ERROR_INTERNAL_ERROR, "Unable to JSON encode return data: ".json_last_error()." - ".json_last_error_msg()); |
|
658 | 658 | } |
659 | 659 | else { |
660 | 660 | echo $output; |
@@ -19,7 +19,7 @@ discard block |
||
19 | 19 | * <base_url>/copyright.php after deploying the software |
20 | 20 | */ |
21 | 21 | |
22 | -require_once dirname(dirname(__DIR__)) . '/config/_config.php'; |
|
22 | +require_once dirname(dirname(__DIR__)).'/config/_config.php'; |
|
23 | 23 | |
24 | 24 | $uiElements = new web\lib\admin\UIElements(); |
25 | 25 | |
@@ -75,7 +75,7 @@ discard block |
||
75 | 75 | // filesystem cleanup |
76 | 76 | case web\lib\common\FormElements::BUTTON_DELETE: |
77 | 77 | $i = web\lib\admin\Maintenance::deleteObsoleteTempDirs(); |
78 | - echo "<div class='ca-summary'><table>" . $uiElements->boxRemark(sprintf("Deleted %d cache directories.", $i), "Cache deleted") . "</table></div>"; |
|
78 | + echo "<div class='ca-summary'><table>".$uiElements->boxRemark(sprintf("Deleted %d cache directories.", $i), "Cache deleted")."</table></div>"; |
|
79 | 79 | break; |
80 | 80 | default: |
81 | 81 | break; |
@@ -141,7 +141,7 @@ discard block |
||
141 | 141 | $admin_query = $dbHandle->exec("SELECT SUM(downloads_admin) AS admin, SUM(downloads_user) AS user, SUM(downloads_silverbullet) as silverbullet FROM downloads WHERE device_id = '$index'"); |
142 | 142 | // SELECT -> mysqli_result, not boolean |
143 | 143 | while ($a = mysqli_fetch_object(/** @scrutinizer ignore-type */ $admin_query)) { |
144 | - echo "<td>" . $device_array['display'] . "</td><td>" . $a->admin . "</td><td>" . $a->user . "</td><td>" . $a->silverbullet . "</td><td>" . sprintf("%s", $a->user + $a->silverbullet) . "</td>"; |
|
144 | + echo "<td>".$device_array['display']."</td><td>".$a->admin."</td><td>".$a->user."</td><td>".$a->silverbullet."</td><td>".sprintf("%s", $a->user + $a->silverbullet)."</td>"; |
|
145 | 145 | $gross_admin = $gross_admin + $a->admin; |
146 | 146 | $gross_user = $gross_user + $a->user; |
147 | 147 | $gross_silverbullet = $gross_silverbullet + $a->silverbullet; |
@@ -1,10 +1,10 @@ |
||
1 | 1 | <?php |
2 | 2 | require_once dirname(dirname(__FILE__)) . "/config/_config.php"; |
3 | 3 | /** |
4 | - * check if URL responds with 200 |
|
5 | - * |
|
6 | - * @param string $srv server name |
|
7 | - * @return integer or NULL |
|
4 | + * check if URL responds with 200 |
|
5 | + * |
|
6 | + * @param string $srv server name |
|
7 | + * @return integer or NULL |
|
8 | 8 | */ |
9 | 9 | function checkConfigRADIUSDaemon ($srv) { |
10 | 10 | $ch = curl_init(); |
@@ -1,22 +1,22 @@ discard block |
||
1 | 1 | <?php |
2 | -require_once dirname(dirname(__FILE__)) . "/config/_config.php"; |
|
2 | +require_once dirname(dirname(__FILE__))."/config/_config.php"; |
|
3 | 3 | /** |
4 | 4 | * check if URL responds with 200 |
5 | 5 | * |
6 | 6 | * @param string $srv server name |
7 | 7 | * @return integer or NULL |
8 | 8 | */ |
9 | -function checkConfigRADIUSDaemon ($srv) { |
|
9 | +function checkConfigRADIUSDaemon($srv) { |
|
10 | 10 | $ch = curl_init(); |
11 | 11 | if ($ch === FALSE) { |
12 | 12 | return NULL; |
13 | 13 | } |
14 | 14 | $timeout = 10; |
15 | - curl_setopt ( $ch, CURLOPT_URL, $srv ); |
|
16 | - curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); |
|
17 | - curl_setopt ( $ch, CURLOPT_TIMEOUT, $timeout ); |
|
15 | + curl_setopt($ch, CURLOPT_URL, $srv); |
|
16 | + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
|
17 | + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); |
|
18 | 18 | curl_exec($ch); |
19 | - $http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE ); |
|
19 | + $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); |
|
20 | 20 | curl_close($ch); |
21 | 21 | if ($http_code == 200) { |
22 | 22 | return 1; |
@@ -53,8 +53,8 @@ discard block |
||
53 | 53 | } |
54 | 54 | $siteStatus = array(); |
55 | 55 | foreach (array_keys($brokenDeployments) as $server_id) { |
56 | - print "check $server_id " . $radiusSite[$server_id] . "\n"; |
|
57 | - $siteStatus[$server_id] = checkConfigRADIUSDaemon('http://' . $radiusSite[$server_id]); |
|
56 | + print "check $server_id ".$radiusSite[$server_id]."\n"; |
|
57 | + $siteStatus[$server_id] = checkConfigRADIUSDaemon('http://'.$radiusSite[$server_id]); |
|
58 | 58 | if ($siteStatus[$server_id]) { |
59 | 59 | echo "\ncheck radius\n"; |
60 | 60 | echo \config\Diagnostics::RADIUSSPTEST['port']."\n"; |
@@ -417,7 +417,7 @@ |
||
417 | 417 | $userId = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID); |
418 | 418 | $userName = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERNAME); |
419 | 419 | $certSerial = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL); |
420 | - $certCN = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTCN); |
|
420 | + $certCN = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTCN); |
|
421 | 421 | if ($userId === FALSE && $userName === FALSE && $certSerial === FALSE && $certCN === FALSE) { |
422 | 422 | // we need at least one of those |
423 | 423 | $adminApi->returnError(\web\lib\admin\API::ERROR_MISSING_PARAMETER, "At least one of User ID, Username, certificate serial, or certificate CN is required."); |
@@ -20,7 +20,7 @@ discard block |
||
20 | 20 | * <base_url>/copyright.php after deploying the software |
21 | 21 | */ |
22 | 22 | |
23 | -require_once dirname(dirname(dirname(__FILE__))) . "/config/_config.php"; |
|
23 | +require_once dirname(dirname(dirname(__FILE__)))."/config/_config.php"; |
|
24 | 24 | |
25 | 25 | // no SAML auth on this page. The API key authenticates the entity |
26 | 26 | |
@@ -38,7 +38,7 @@ discard block |
||
38 | 38 | |
39 | 39 | $inputDecoded = json_decode($inputRaw, TRUE); |
40 | 40 | if (!is_array($inputDecoded)) { |
41 | - $adminApi->returnError(web\lib\admin\API::ERROR_MALFORMED_REQUEST, "Unable to decode JSON POST data." . json_last_error_msg() . $inputRaw); |
|
41 | + $adminApi->returnError(web\lib\admin\API::ERROR_MALFORMED_REQUEST, "Unable to decode JSON POST data.".json_last_error_msg().$inputRaw); |
|
42 | 42 | exit(1); |
43 | 43 | } |
44 | 44 | |
@@ -132,7 +132,7 @@ discard block |
||
132 | 132 | throw new Exception("A required parameter is missing, and this wasn't caught earlier?!"); |
133 | 133 | } |
134 | 134 | $newtokens = $mgmt->createTokens(true, [$admin], $idp); |
135 | - $URL = "https://" . $_SERVER['SERVER_NAME'] . dirname($_SERVER['SCRIPT_NAME']) . "/action_enrollment.php?token=" . array_keys($newtokens)[0]; |
|
135 | + $URL = "https://".$_SERVER['SERVER_NAME'].dirname($_SERVER['SCRIPT_NAME'])."/action_enrollment.php?token=".array_keys($newtokens)[0]; |
|
136 | 136 | $success = ["TOKEN URL" => $URL, "TOKEN" => array_keys($newtokens)[0]]; |
137 | 137 | // done with the essentials - display in response. But if we also have an email address, send it there |
138 | 138 | $email = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_TARGETMAIL); |
@@ -169,7 +169,7 @@ discard block |
||
169 | 169 | if ($found) { |
170 | 170 | $adminApi->returnSuccess([]); |
171 | 171 | } |
172 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The admin with ID $toBeDeleted is not associated to IdP " . $idp->identifier); |
|
172 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The admin with ID $toBeDeleted is not associated to IdP ".$idp->identifier); |
|
173 | 173 | break; |
174 | 174 | case web\lib\admin\API::ACTION_STATISTICS_FED: |
175 | 175 | $detail = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_DETAIL); |
@@ -281,10 +281,10 @@ discard block |
||
281 | 281 | $outer = ""; |
282 | 282 | $profile->setAnonymousIDSupport(FALSE); |
283 | 283 | } else { |
284 | - $outer = $outer . "@"; |
|
284 | + $outer = $outer."@"; |
|
285 | 285 | $profile->setAnonymousIDSupport(TRUE); |
286 | 286 | } |
287 | - $profile->setRealm($outer . $realm); |
|
287 | + $profile->setRealm($outer.$realm); |
|
288 | 288 | } |
289 | 289 | /* const AUXATTRIB_PROFILE_TESTUSER = 'ATTRIB-PROFILE-TESTUSER'; */ |
290 | 290 | $testuser = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_TESTUSER); |
@@ -531,7 +531,7 @@ discard block |
||
531 | 531 | // extract relevant subset of information from cert objects |
532 | 532 | $certDetails = []; |
533 | 533 | foreach ($certs as $cert) { |
534 | - $certDetails[$cert->ca_type . ":" . $cert->serial] = ["ISSUED" => $cert->issued, "EXPIRY" => $cert->expiry, "STATUS" => $cert->status, "DEVICE" => $cert->device, "CN" => $cert->username, "ANNOTATION" => $cert->annotation]; |
|
534 | + $certDetails[$cert->ca_type.":".$cert->serial] = ["ISSUED" => $cert->issued, "EXPIRY" => $cert->expiry, "STATUS" => $cert->status, "DEVICE" => $cert->device, "CN" => $cert->username, "ANNOTATION" => $cert->annotation]; |
|
535 | 535 | } |
536 | 536 | $adminApi->returnSuccess($certDetails); |
537 | 537 | break; |
@@ -91,142 +91,142 @@ discard block |
||
91 | 91 | |
92 | 92 | |
93 | 93 | switch ($inputDecoded['ACTION']) { |
94 | - case web\lib\admin\API::ACTION_NEWINST: |
|
95 | - // create the inst, no admin, no attributes |
|
96 | - $typeRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_INSTTYPE); |
|
97 | - if ($typeRaw === FALSE) { |
|
98 | - throw new Exception("We did not receive a valid participant type!"); |
|
99 | - } |
|
100 | - $type = $validator->partType($typeRaw); |
|
101 | - $idp = new \core\IdP($fed->newIdP('TOKEN', $type, "PENDING", "API")); |
|
102 | - // now add all submitted attributes |
|
103 | - $inputs = $adminApi->uglify($scrubbedParameters); |
|
104 | - $optionParser->processSubmittedFields($idp, $inputs["POST"], $inputs["FILES"]); |
|
105 | - $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_CAT_INST_ID => $idp->identifier]); |
|
106 | - break; |
|
107 | - case web\lib\admin\API::ACTION_DELINST: |
|
108 | - try { |
|
109 | - $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
110 | - } catch (Exception $e) { |
|
111 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
112 | - exit(1); |
|
113 | - } |
|
114 | - $idp->destroy(); |
|
115 | - $adminApi->returnSuccess([]); |
|
116 | - break; |
|
117 | - case web\lib\admin\API::ACTION_ADMIN_LIST: |
|
118 | - try { |
|
119 | - $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
120 | - } catch (Exception $e) { |
|
121 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
122 | - exit(1); |
|
123 | - } |
|
124 | - $adminApi->returnSuccess($idp->listOwners()); |
|
125 | - break; |
|
126 | - case web\lib\admin\API::ACTION_ADMIN_ADD: |
|
127 | - // IdP in question |
|
128 | - try { |
|
129 | - $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
130 | - } catch (Exception $e) { |
|
131 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
132 | - exit(1); |
|
133 | - } |
|
134 | - // here is the token |
|
135 | - $mgmt = new core\UserManagement(); |
|
136 | - // we know we have an admin ID but scrutinizer wants this checked more explicitly |
|
137 | - $admin = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_ADMINID); |
|
138 | - if ($admin === FALSE) { |
|
139 | - throw new Exception("A required parameter is missing, and this wasn't caught earlier?!"); |
|
140 | - } |
|
141 | - $newtokens = $mgmt->createTokens(true, [$admin], $idp); |
|
142 | - $URL = "https://" . $_SERVER['SERVER_NAME'] . dirname($_SERVER['SCRIPT_NAME']) . "/action_enrollment.php?token=" . array_keys($newtokens)[0]; |
|
143 | - $success = ["TOKEN URL" => $URL, "TOKEN" => array_keys($newtokens)[0]]; |
|
144 | - // done with the essentials - display in response. But if we also have an email address, send it there |
|
145 | - $email = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_TARGETMAIL); |
|
146 | - if ($email !== FALSE) { |
|
147 | - $sent = \core\common\OutsideComm::adminInvitationMail($email, "EXISTING-FED", array_keys($newtokens)[0], $idp->name, $fed, $idp->type); |
|
148 | - $success["EMAIL SENT"] = $sent["SENT"]; |
|
149 | - if ($sent["SENT"] === TRUE) { |
|
150 | - $success["EMAIL TRANSPORT SECURE"] = $sent["TRANSPORT"]; |
|
94 | + case web\lib\admin\API::ACTION_NEWINST: |
|
95 | + // create the inst, no admin, no attributes |
|
96 | + $typeRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_INSTTYPE); |
|
97 | + if ($typeRaw === FALSE) { |
|
98 | + throw new Exception("We did not receive a valid participant type!"); |
|
151 | 99 | } |
152 | - } |
|
153 | - $adminApi->returnSuccess($success); |
|
154 | - break; |
|
155 | - case web\lib\admin\API::ACTION_ADMIN_DEL: |
|
156 | - // IdP in question |
|
157 | - try { |
|
158 | - $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
159 | - } catch (Exception $e) { |
|
160 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
161 | - exit(1); |
|
162 | - } |
|
163 | - $currentAdmins = $idp->listOwners(); |
|
164 | - $toBeDeleted = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_ADMINID); |
|
165 | - if ($toBeDeleted === FALSE) { |
|
166 | - throw new Exception("A required parameter is missing, and this wasn't caught earlier?!"); |
|
167 | - } |
|
168 | - $found = FALSE; |
|
169 | - foreach ($currentAdmins as $oneAdmin) { |
|
170 | - if ($oneAdmin['MAIL'] == $toBeDeleted) { |
|
171 | - $found = TRUE; |
|
172 | - $mgmt = new core\UserManagement(); |
|
173 | - $mgmt->removeAdminFromIdP($idp, $oneAdmin['ID']); |
|
100 | + $type = $validator->partType($typeRaw); |
|
101 | + $idp = new \core\IdP($fed->newIdP('TOKEN', $type, "PENDING", "API")); |
|
102 | + // now add all submitted attributes |
|
103 | + $inputs = $adminApi->uglify($scrubbedParameters); |
|
104 | + $optionParser->processSubmittedFields($idp, $inputs["POST"], $inputs["FILES"]); |
|
105 | + $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_CAT_INST_ID => $idp->identifier]); |
|
106 | + break; |
|
107 | + case web\lib\admin\API::ACTION_DELINST: |
|
108 | + try { |
|
109 | + $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
110 | + } catch (Exception $e) { |
|
111 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
112 | + exit(1); |
|
174 | 113 | } |
175 | - } |
|
176 | - if ($found) { |
|
114 | + $idp->destroy(); |
|
177 | 115 | $adminApi->returnSuccess([]); |
178 | - } |
|
179 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The admin with ID $toBeDeleted is not associated to IdP " . $idp->identifier); |
|
180 | - break; |
|
181 | - case web\lib\admin\API::ACTION_STATISTICS_FED: |
|
182 | - $detail = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_DETAIL); |
|
183 | - $adminApi->returnSuccess($fed->downloadStats("array", $detail)); |
|
184 | - break; |
|
185 | - case \web\lib\admin\API::ACTION_FEDERATION_LISTIDP: |
|
186 | - $retArray = []; |
|
187 | - $noLogo = null; |
|
188 | - $idpIdentifier = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID); |
|
189 | - $logoFlag = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::FLAG_NOLOGO); |
|
190 | - $detail = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_DETAIL); |
|
191 | - if ($logoFlag === "TRUE") { |
|
192 | - $noLogo = 'general:logo_file'; |
|
193 | - } |
|
194 | - if ($idpIdentifier === FALSE) { |
|
195 | - $allIdPs = $fed->listIdentityProviders(0); |
|
196 | - foreach ($allIdPs as $instanceId => $oneIdP) { |
|
197 | - $theIdP = $oneIdP["instance"]; |
|
198 | - $retArray[$instanceId] = $theIdP->getAttributes(null, $noLogo); |
|
116 | + break; |
|
117 | + case web\lib\admin\API::ACTION_ADMIN_LIST: |
|
118 | + try { |
|
119 | + $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
120 | + } catch (Exception $e) { |
|
121 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
122 | + exit(1); |
|
199 | 123 | } |
200 | - } else { |
|
124 | + $adminApi->returnSuccess($idp->listOwners()); |
|
125 | + break; |
|
126 | + case web\lib\admin\API::ACTION_ADMIN_ADD: |
|
127 | + // IdP in question |
|
201 | 128 | try { |
202 | - $thisIdP = $validator->existingIdP($idpIdentifier, NULL, $fed); |
|
129 | + $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
203 | 130 | } catch (Exception $e) { |
204 | 131 | $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
205 | 132 | exit(1); |
206 | 133 | } |
207 | - $retArray[$idpIdentifier] = $thisIdP->getAttributes(null, $noLogo); |
|
208 | - foreach ($thisIdP->listProfiles() as $oneProfile) { |
|
209 | - $retArray[$idpIdentifier]["PROFILES"][$oneProfile->identifier] = $oneProfile->getAttributes(null, $noLogo); |
|
134 | + // here is the token |
|
135 | + $mgmt = new core\UserManagement(); |
|
136 | + // we know we have an admin ID but scrutinizer wants this checked more explicitly |
|
137 | + $admin = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_ADMINID); |
|
138 | + if ($admin === FALSE) { |
|
139 | + throw new Exception("A required parameter is missing, and this wasn't caught earlier?!"); |
|
210 | 140 | } |
211 | - } |
|
212 | - foreach ($retArray as $instNumber => $oneInstData) { |
|
213 | - foreach ($oneInstData as $attribNumber => $oneAttrib) { |
|
214 | - if ($oneAttrib['name'] == "general:logo_file") { |
|
215 | - // JSON doesn't cope well with raw binary data, so b64 it |
|
216 | - $retArray[$instNumber][$attribNumber]['value'] = base64_encode($oneAttrib['value']); |
|
141 | + $newtokens = $mgmt->createTokens(true, [$admin], $idp); |
|
142 | + $URL = "https://" . $_SERVER['SERVER_NAME'] . dirname($_SERVER['SCRIPT_NAME']) . "/action_enrollment.php?token=" . array_keys($newtokens)[0]; |
|
143 | + $success = ["TOKEN URL" => $URL, "TOKEN" => array_keys($newtokens)[0]]; |
|
144 | + // done with the essentials - display in response. But if we also have an email address, send it there |
|
145 | + $email = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_TARGETMAIL); |
|
146 | + if ($email !== FALSE) { |
|
147 | + $sent = \core\common\OutsideComm::adminInvitationMail($email, "EXISTING-FED", array_keys($newtokens)[0], $idp->name, $fed, $idp->type); |
|
148 | + $success["EMAIL SENT"] = $sent["SENT"]; |
|
149 | + if ($sent["SENT"] === TRUE) { |
|
150 | + $success["EMAIL TRANSPORT SECURE"] = $sent["TRANSPORT"]; |
|
151 | + } |
|
152 | + } |
|
153 | + $adminApi->returnSuccess($success); |
|
154 | + break; |
|
155 | + case web\lib\admin\API::ACTION_ADMIN_DEL: |
|
156 | + // IdP in question |
|
157 | + try { |
|
158 | + $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
159 | + } catch (Exception $e) { |
|
160 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
161 | + exit(1); |
|
162 | + } |
|
163 | + $currentAdmins = $idp->listOwners(); |
|
164 | + $toBeDeleted = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_ADMINID); |
|
165 | + if ($toBeDeleted === FALSE) { |
|
166 | + throw new Exception("A required parameter is missing, and this wasn't caught earlier?!"); |
|
167 | + } |
|
168 | + $found = FALSE; |
|
169 | + foreach ($currentAdmins as $oneAdmin) { |
|
170 | + if ($oneAdmin['MAIL'] == $toBeDeleted) { |
|
171 | + $found = TRUE; |
|
172 | + $mgmt = new core\UserManagement(); |
|
173 | + $mgmt->removeAdminFromIdP($idp, $oneAdmin['ID']); |
|
174 | + } |
|
175 | + } |
|
176 | + if ($found) { |
|
177 | + $adminApi->returnSuccess([]); |
|
178 | + } |
|
179 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The admin with ID $toBeDeleted is not associated to IdP " . $idp->identifier); |
|
180 | + break; |
|
181 | + case web\lib\admin\API::ACTION_STATISTICS_FED: |
|
182 | + $detail = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_DETAIL); |
|
183 | + $adminApi->returnSuccess($fed->downloadStats("array", $detail)); |
|
184 | + break; |
|
185 | + case \web\lib\admin\API::ACTION_FEDERATION_LISTIDP: |
|
186 | + $retArray = []; |
|
187 | + $noLogo = null; |
|
188 | + $idpIdentifier = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID); |
|
189 | + $logoFlag = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::FLAG_NOLOGO); |
|
190 | + $detail = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_DETAIL); |
|
191 | + if ($logoFlag === "TRUE") { |
|
192 | + $noLogo = 'general:logo_file'; |
|
193 | + } |
|
194 | + if ($idpIdentifier === FALSE) { |
|
195 | + $allIdPs = $fed->listIdentityProviders(0); |
|
196 | + foreach ($allIdPs as $instanceId => $oneIdP) { |
|
197 | + $theIdP = $oneIdP["instance"]; |
|
198 | + $retArray[$instanceId] = $theIdP->getAttributes(null, $noLogo); |
|
217 | 199 | } |
218 | - if ($attribNumber == "PROFILES") { |
|
219 | - // scan for included fed:logo_file and b64 escape it, t2oo |
|
220 | - foreach ($oneAttrib as $profileNumber => $profileContent) { |
|
221 | - foreach ($profileContent as $oneProfileIterator => $oneProfileContent) { |
|
222 | - if ($oneProfileContent['name'] == "fed:logo_file" || $oneProfileContent['name'] == "general:logo_file" || $oneProfileContent['name'] == "eap:ca_file") { |
|
223 | - $retArray[$instNumber]["PROFILES"][$profileNumber][$oneProfileIterator]['value'] = base64_encode($oneProfileContent['value']); |
|
224 | - } |
|
225 | - } |
|
200 | + } else { |
|
201 | + try { |
|
202 | + $thisIdP = $validator->existingIdP($idpIdentifier, NULL, $fed); |
|
203 | + } catch (Exception $e) { |
|
204 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
205 | + exit(1); |
|
206 | + } |
|
207 | + $retArray[$idpIdentifier] = $thisIdP->getAttributes(null, $noLogo); |
|
208 | + foreach ($thisIdP->listProfiles() as $oneProfile) { |
|
209 | + $retArray[$idpIdentifier]["PROFILES"][$oneProfile->identifier] = $oneProfile->getAttributes(null, $noLogo); |
|
210 | + } |
|
211 | + } |
|
212 | + foreach ($retArray as $instNumber => $oneInstData) { |
|
213 | + foreach ($oneInstData as $attribNumber => $oneAttrib) { |
|
214 | + if ($oneAttrib['name'] == "general:logo_file") { |
|
215 | + // JSON doesn't cope well with raw binary data, so b64 it |
|
216 | + $retArray[$instNumber][$attribNumber]['value'] = base64_encode($oneAttrib['value']); |
|
217 | + } |
|
218 | + if ($attribNumber == "PROFILES") { |
|
219 | + // scan for included fed:logo_file and b64 escape it, t2oo |
|
220 | + foreach ($oneAttrib as $profileNumber => $profileContent) { |
|
221 | + foreach ($profileContent as $oneProfileIterator => $oneProfileContent) { |
|
222 | + if ($oneProfileContent['name'] == "fed:logo_file" || $oneProfileContent['name'] == "general:logo_file" || $oneProfileContent['name'] == "eap:ca_file") { |
|
223 | + $retArray[$instNumber]["PROFILES"][$profileNumber][$oneProfileIterator]['value'] = base64_encode($oneProfileContent['value']); |
|
224 | + } |
|
225 | + } |
|
226 | + } |
|
226 | 227 | } |
227 | 228 | } |
228 | 229 | } |
229 | - } |
|
230 | 230 | |
231 | 231 | /* |
232 | 232 | $retArray[$idpIdentifier] = []; |
@@ -237,102 +237,102 @@ discard block |
||
237 | 237 | * |
238 | 238 | */ |
239 | 239 | |
240 | - $adminApi->returnSuccess($retArray); |
|
241 | - break; |
|
242 | - case \web\lib\admin\API::ACTION_NEWPROF_RADIUS: |
|
243 | - // fall-through intended: both get mostly identical treatment |
|
244 | - case web\lib\admin\API::ACTION_NEWPROF_SB: |
|
245 | - try { |
|
246 | - $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
247 | - } catch (Exception $e) { |
|
248 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
249 | - exit(1); |
|
250 | - } |
|
251 | - if ($inputDecoded['ACTION'] == web\lib\admin\API::ACTION_NEWPROF_RADIUS) { |
|
252 | - $type = "RADIUS"; |
|
253 | - } else { |
|
254 | - $type = "SILVERBULLET"; |
|
255 | - } |
|
256 | - $profile = $idp->newProfile($type); |
|
257 | - if ($profile === NULL) { |
|
258 | - $adminApi->returnError(\web\lib\admin\API::ERROR_INTERNAL_ERROR, "Unable to create a new Profile, for no apparent reason. Please contact support."); |
|
259 | - exit(1); |
|
260 | - } |
|
261 | - $inputs = $adminApi->uglify($scrubbedParameters); |
|
262 | - $optionParser->processSubmittedFields($profile, $inputs["POST"], $inputs["FILES"]); |
|
263 | - if ($inputDecoded['ACTION'] == web\lib\admin\API::ACTION_NEWPROF_SB) { |
|
264 | - // auto-accept ToU? |
|
265 | - if ($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_TOU) !== FALSE) { |
|
266 | - $profile->addAttribute("hiddenprofile:tou_accepted", NULL, 1); |
|
267 | - } |
|
268 | - // we're done at this point |
|
269 | - $adminApi->returnSuccess([\web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID => $profile->identifier]); |
|
240 | + $adminApi->returnSuccess($retArray); |
|
270 | 241 | break; |
271 | - } |
|
272 | - if (!$profile instanceof core\ProfileRADIUS) { |
|
273 | - throw new Exception("Can't be. This is only here to convince Scrutinizer that we're really talking RADIUS."); |
|
274 | - } |
|
275 | - /* const AUXATTRIB_PROFILE_REALM = 'ATTRIB-PROFILE-REALM'; |
|
276 | - const AUXATTRIB_PROFILE_OUTERVALUE = 'ATTRIB-PROFILE-OUTERVALUE'; */ |
|
277 | - $realm = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_REALM); |
|
278 | - $outer = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_OUTERVALUE); |
|
279 | - if ($realm !== FALSE) { |
|
280 | - if ($outer === FALSE) { |
|
281 | - $outer = ""; |
|
282 | - $profile->setAnonymousIDSupport(FALSE); |
|
242 | + case \web\lib\admin\API::ACTION_NEWPROF_RADIUS: |
|
243 | + // fall-through intended: both get mostly identical treatment |
|
244 | + case web\lib\admin\API::ACTION_NEWPROF_SB: |
|
245 | + try { |
|
246 | + $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed); |
|
247 | + } catch (Exception $e) { |
|
248 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
249 | + exit(1); |
|
250 | + } |
|
251 | + if ($inputDecoded['ACTION'] == web\lib\admin\API::ACTION_NEWPROF_RADIUS) { |
|
252 | + $type = "RADIUS"; |
|
283 | 253 | } else { |
284 | - $outer = $outer . "@"; |
|
285 | - $profile->setAnonymousIDSupport(TRUE); |
|
254 | + $type = "SILVERBULLET"; |
|
286 | 255 | } |
287 | - $profile->setRealm($outer . $realm); |
|
288 | - } |
|
289 | - /* const AUXATTRIB_PROFILE_TESTUSER = 'ATTRIB-PROFILE-TESTUSER'; */ |
|
290 | - $testuser = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_TESTUSER); |
|
291 | - if ($testuser !== FALSE) { |
|
292 | - $profile->setRealmCheckUser(TRUE, $testuser); |
|
293 | - } |
|
294 | - /* const AUXATTRIB_PROFILE_INPUT_HINT = 'ATTRIB-PROFILE-HINTREALM'; |
|
256 | + $profile = $idp->newProfile($type); |
|
257 | + if ($profile === NULL) { |
|
258 | + $adminApi->returnError(\web\lib\admin\API::ERROR_INTERNAL_ERROR, "Unable to create a new Profile, for no apparent reason. Please contact support."); |
|
259 | + exit(1); |
|
260 | + } |
|
261 | + $inputs = $adminApi->uglify($scrubbedParameters); |
|
262 | + $optionParser->processSubmittedFields($profile, $inputs["POST"], $inputs["FILES"]); |
|
263 | + if ($inputDecoded['ACTION'] == web\lib\admin\API::ACTION_NEWPROF_SB) { |
|
264 | + // auto-accept ToU? |
|
265 | + if ($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_TOU) !== FALSE) { |
|
266 | + $profile->addAttribute("hiddenprofile:tou_accepted", NULL, 1); |
|
267 | + } |
|
268 | + // we're done at this point |
|
269 | + $adminApi->returnSuccess([\web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID => $profile->identifier]); |
|
270 | + break; |
|
271 | + } |
|
272 | + if (!$profile instanceof core\ProfileRADIUS) { |
|
273 | + throw new Exception("Can't be. This is only here to convince Scrutinizer that we're really talking RADIUS."); |
|
274 | + } |
|
275 | + /* const AUXATTRIB_PROFILE_REALM = 'ATTRIB-PROFILE-REALM'; |
|
276 | + const AUXATTRIB_PROFILE_OUTERVALUE = 'ATTRIB-PROFILE-OUTERVALUE'; */ |
|
277 | + $realm = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_REALM); |
|
278 | + $outer = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_OUTERVALUE); |
|
279 | + if ($realm !== FALSE) { |
|
280 | + if ($outer === FALSE) { |
|
281 | + $outer = ""; |
|
282 | + $profile->setAnonymousIDSupport(FALSE); |
|
283 | + } else { |
|
284 | + $outer = $outer . "@"; |
|
285 | + $profile->setAnonymousIDSupport(TRUE); |
|
286 | + } |
|
287 | + $profile->setRealm($outer . $realm); |
|
288 | + } |
|
289 | + /* const AUXATTRIB_PROFILE_TESTUSER = 'ATTRIB-PROFILE-TESTUSER'; */ |
|
290 | + $testuser = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_TESTUSER); |
|
291 | + if ($testuser !== FALSE) { |
|
292 | + $profile->setRealmCheckUser(TRUE, $testuser); |
|
293 | + } |
|
294 | + /* const AUXATTRIB_PROFILE_INPUT_HINT = 'ATTRIB-PROFILE-HINTREALM'; |
|
295 | 295 | const AUXATTRIB_PROFILE_INPUT_VERIFY = 'ATTRIB-PROFILE-VERIFYREALM'; */ |
296 | - $hint = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_INPUT_HINT); |
|
297 | - $enforce = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_INPUT_VERIFY); |
|
298 | - if ($enforce !== FALSE) { |
|
299 | - $profile->setInputVerificationPreference($enforce, $hint); |
|
300 | - } |
|
301 | - /* const AUXATTRIB_PROFILE_EAPTYPE */ |
|
302 | - $iterator = 1; |
|
303 | - foreach ($scrubbedParameters as $oneParam) { |
|
304 | - if ($oneParam['NAME'] == web\lib\admin\API::AUXATTRIB_PROFILE_EAPTYPE && is_int($oneParam["VALUE"])) { |
|
305 | - $type = new \core\common\EAP($oneParam["VALUE"]); |
|
306 | - $profile->addSupportedEapMethod($type, $iterator); |
|
307 | - $iterator = $iterator + 1; |
|
296 | + $hint = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_INPUT_HINT); |
|
297 | + $enforce = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_INPUT_VERIFY); |
|
298 | + if ($enforce !== FALSE) { |
|
299 | + $profile->setInputVerificationPreference($enforce, $hint); |
|
308 | 300 | } |
309 | - } |
|
310 | - // reinstantiate $profile freshly from DB - it was updated in the process |
|
311 | - $profileFresh = new core\ProfileRADIUS($profile->identifier); |
|
312 | - $profileFresh->prepShowtime(); |
|
313 | - $adminApi->returnSuccess([\web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID => $profileFresh->identifier]); |
|
314 | - break; |
|
315 | - case web\lib\admin\API::ACTION_ENDUSER_NEW: |
|
316 | - // fall-through intentional, those two actions are doing nearly identical things |
|
317 | - case web\lib\admin\API::ACTION_ENDUSER_CHANGEEXPIRY: |
|
318 | - $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
319 | - if ($prof_id === FALSE) { |
|
320 | - exit(1); |
|
321 | - } |
|
322 | - $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id); |
|
323 | - if ($evaluation === FALSE) { |
|
324 | - exit(1); |
|
325 | - } |
|
326 | - list($idp, $profile) = $evaluation; |
|
327 | - $user = $validator->string($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERNAME)); |
|
328 | - $expiryRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_EXPIRY); |
|
329 | - if ($expiryRaw === FALSE) { |
|
330 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The expiry date wasn't found in the request."); |
|
301 | + /* const AUXATTRIB_PROFILE_EAPTYPE */ |
|
302 | + $iterator = 1; |
|
303 | + foreach ($scrubbedParameters as $oneParam) { |
|
304 | + if ($oneParam['NAME'] == web\lib\admin\API::AUXATTRIB_PROFILE_EAPTYPE && is_int($oneParam["VALUE"])) { |
|
305 | + $type = new \core\common\EAP($oneParam["VALUE"]); |
|
306 | + $profile->addSupportedEapMethod($type, $iterator); |
|
307 | + $iterator = $iterator + 1; |
|
308 | + } |
|
309 | + } |
|
310 | + // reinstantiate $profile freshly from DB - it was updated in the process |
|
311 | + $profileFresh = new core\ProfileRADIUS($profile->identifier); |
|
312 | + $profileFresh->prepShowtime(); |
|
313 | + $adminApi->returnSuccess([\web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID => $profileFresh->identifier]); |
|
331 | 314 | break; |
332 | - } |
|
333 | - $expiry = new DateTime($expiryRaw); |
|
334 | - try { |
|
335 | - switch ($inputDecoded['ACTION']) { |
|
315 | + case web\lib\admin\API::ACTION_ENDUSER_NEW: |
|
316 | + // fall-through intentional, those two actions are doing nearly identical things |
|
317 | + case web\lib\admin\API::ACTION_ENDUSER_CHANGEEXPIRY: |
|
318 | + $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
319 | + if ($prof_id === FALSE) { |
|
320 | + exit(1); |
|
321 | + } |
|
322 | + $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id); |
|
323 | + if ($evaluation === FALSE) { |
|
324 | + exit(1); |
|
325 | + } |
|
326 | + list($idp, $profile) = $evaluation; |
|
327 | + $user = $validator->string($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERNAME)); |
|
328 | + $expiryRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_EXPIRY); |
|
329 | + if ($expiryRaw === FALSE) { |
|
330 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The expiry date wasn't found in the request."); |
|
331 | + break; |
|
332 | + } |
|
333 | + $expiry = new DateTime($expiryRaw); |
|
334 | + try { |
|
335 | + switch ($inputDecoded['ACTION']) { |
|
336 | 336 | case web\lib\admin\API::ACTION_ENDUSER_NEW: |
337 | 337 | $retval = $profile->addUser($user, $expiry); |
338 | 338 | break; |
@@ -345,7 +345,7 @@ discard block |
||
345 | 345 | $retval = 1; // function doesn't have any failure vectors not raising an Exception and doesn't return a value |
346 | 346 | } |
347 | 347 | break; |
348 | - } |
|
348 | + } |
|
349 | 349 | } catch (Exception $e) { |
350 | 350 | $adminApi->returnError(web\lib\admin\API::ERROR_INTERNAL_ERROR, "The operation failed. Maybe a duplicate username, or malformed expiry date?"); |
351 | 351 | exit(1); |
@@ -356,25 +356,25 @@ discard block |
||
356 | 356 | } |
357 | 357 | $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_SB_USERNAME => $user, \web\lib\admin\API::AUXATTRIB_SB_USERID => $retval]); |
358 | 358 | break; |
359 | - case \web\lib\admin\API::ACTION_ENDUSER_DEACTIVATE: |
|
360 | - // fall-through intended: both actions are very similar |
|
361 | - case \web\lib\admin\API::ACTION_TOKEN_NEW: |
|
362 | - $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
363 | - if ($profile_id === FALSE) { |
|
364 | - exit(1); |
|
365 | - } |
|
366 | - $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id); |
|
367 | - if ($evaluation === FALSE) { |
|
368 | - exit(1); |
|
369 | - } |
|
370 | - list($idp, $profile) = $evaluation; |
|
371 | - $userId = $validator->integer($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID)); |
|
372 | - if ($userId === FALSE) { |
|
373 | - $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "User ID is not an integer."); |
|
374 | - exit(1); |
|
375 | - } |
|
376 | - $additionalInfo = []; |
|
377 | - switch ($inputDecoded['ACTION']) { // this is where the two differ |
|
359 | + case \web\lib\admin\API::ACTION_ENDUSER_DEACTIVATE: |
|
360 | + // fall-through intended: both actions are very similar |
|
361 | + case \web\lib\admin\API::ACTION_TOKEN_NEW: |
|
362 | + $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
363 | + if ($profile_id === FALSE) { |
|
364 | + exit(1); |
|
365 | + } |
|
366 | + $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id); |
|
367 | + if ($evaluation === FALSE) { |
|
368 | + exit(1); |
|
369 | + } |
|
370 | + list($idp, $profile) = $evaluation; |
|
371 | + $userId = $validator->integer($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID)); |
|
372 | + if ($userId === FALSE) { |
|
373 | + $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "User ID is not an integer."); |
|
374 | + exit(1); |
|
375 | + } |
|
376 | + $additionalInfo = []; |
|
377 | + switch ($inputDecoded['ACTION']) { // this is where the two differ |
|
378 | 378 | case \web\lib\admin\API::ACTION_ENDUSER_DEACTIVATE: |
379 | 379 | $result = $profile->deactivateUser($userId); |
380 | 380 | break; |
@@ -407,7 +407,7 @@ discard block |
||
407 | 407 | } |
408 | 408 | } |
409 | 409 | break; |
410 | - } |
|
410 | + } |
|
411 | 411 | |
412 | 412 | if ($result !== TRUE) { |
413 | 413 | $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "These parameters did not lead to an existing, active user."); |
@@ -415,69 +415,69 @@ discard block |
||
415 | 415 | } |
416 | 416 | $adminApi->returnSuccess($additionalInfo); |
417 | 417 | break; |
418 | - case \web\lib\admin\API::ACTION_ENDUSER_IDENTIFY: |
|
419 | - $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
420 | - if ($profile_id === FALSE) { |
|
421 | - exit(1); |
|
422 | - } |
|
423 | - $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id); |
|
424 | - if ($evaluation === FALSE) { |
|
425 | - exit(1); |
|
426 | - } |
|
427 | - list($idp, $profile) = $evaluation; |
|
428 | - $userId = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID); |
|
429 | - $userName = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERNAME); |
|
430 | - $certSerial = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL); |
|
431 | - $certCN = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTCN); |
|
432 | - if ($userId === FALSE && $userName === FALSE && $certSerial === FALSE && $certCN === FALSE) { |
|
433 | - // we need at least one of those |
|
434 | - $adminApi->returnError(\web\lib\admin\API::ERROR_MISSING_PARAMETER, "At least one of User ID, Username, certificate serial, or certificate CN is required."); |
|
435 | - break; |
|
436 | - } |
|
437 | - if ($certSerial !== FALSE) { // we got a cert serial |
|
438 | - $serial = explode(":", $certSerial); |
|
439 | - $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]); |
|
418 | + case \web\lib\admin\API::ACTION_ENDUSER_IDENTIFY: |
|
419 | + $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
420 | + if ($profile_id === FALSE) { |
|
421 | + exit(1); |
|
440 | 422 | } |
441 | - if ($certCN !== FALSE) { // we got a cert CN |
|
442 | - $cert = new \core\SilverbulletCertificate($certCN); |
|
443 | - } |
|
444 | - if ($cert !== NULL) { // we found a cert; verify it and extract userId |
|
445 | - if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) { |
|
446 | - return $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Certificate not found."); |
|
423 | + $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id); |
|
424 | + if ($evaluation === FALSE) { |
|
425 | + exit(1); |
|
447 | 426 | } |
448 | - if ($cert->profileId != $profile->identifier) { |
|
449 | - return $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Certificate does not belong to this profile."); |
|
427 | + list($idp, $profile) = $evaluation; |
|
428 | + $userId = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID); |
|
429 | + $userName = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERNAME); |
|
430 | + $certSerial = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL); |
|
431 | + $certCN = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTCN); |
|
432 | + if ($userId === FALSE && $userName === FALSE && $certSerial === FALSE && $certCN === FALSE) { |
|
433 | + // we need at least one of those |
|
434 | + $adminApi->returnError(\web\lib\admin\API::ERROR_MISSING_PARAMETER, "At least one of User ID, Username, certificate serial, or certificate CN is required."); |
|
435 | + break; |
|
450 | 436 | } |
451 | - $userId = $cert->userId; |
|
452 | - } |
|
453 | - if ($userId !== FALSE) { |
|
454 | - $userList = $profile->getUserById($userId); |
|
455 | - } |
|
456 | - if ($userName !== FALSE) { |
|
457 | - $userList = $profile->getUserByName($userName); |
|
458 | - } |
|
459 | - if (count($userList) === 1) { |
|
460 | - foreach ($userList as $oneUserId => $oneUserName) { |
|
461 | - return $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_SB_USERNAME => $oneUserName, \web\lib\admin\API::AUXATTRIB_SB_USERID => $oneUserId]); |
|
437 | + if ($certSerial !== FALSE) { // we got a cert serial |
|
438 | + $serial = explode(":", $certSerial); |
|
439 | + $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]); |
|
440 | + } |
|
441 | + if ($certCN !== FALSE) { // we got a cert CN |
|
442 | + $cert = new \core\SilverbulletCertificate($certCN); |
|
462 | 443 | } |
463 | - } |
|
464 | - $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "No matching user found in this profile."); |
|
465 | - break; |
|
466 | - case \web\lib\admin\API::ACTION_ENDUSER_LIST: |
|
467 | - // fall-through: those two are similar |
|
468 | - case \web\lib\admin\API::ACTION_TOKEN_LIST: |
|
469 | - $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
470 | - if ($profile_id === FALSE) { |
|
471 | - exit(1); |
|
472 | - } |
|
473 | - $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id); |
|
474 | - if ($evaluation === FALSE) { |
|
475 | - exit(1); |
|
476 | - } |
|
477 | - list($idp, $profile) = $evaluation; |
|
478 | - $allUsers = $profile->listAllUsers(); |
|
479 | - // this is where they differ |
|
480 | - switch ($inputDecoded['ACTION']) { |
|
444 | + if ($cert !== NULL) { // we found a cert; verify it and extract userId |
|
445 | + if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) { |
|
446 | + return $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Certificate not found."); |
|
447 | + } |
|
448 | + if ($cert->profileId != $profile->identifier) { |
|
449 | + return $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Certificate does not belong to this profile."); |
|
450 | + } |
|
451 | + $userId = $cert->userId; |
|
452 | + } |
|
453 | + if ($userId !== FALSE) { |
|
454 | + $userList = $profile->getUserById($userId); |
|
455 | + } |
|
456 | + if ($userName !== FALSE) { |
|
457 | + $userList = $profile->getUserByName($userName); |
|
458 | + } |
|
459 | + if (count($userList) === 1) { |
|
460 | + foreach ($userList as $oneUserId => $oneUserName) { |
|
461 | + return $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_SB_USERNAME => $oneUserName, \web\lib\admin\API::AUXATTRIB_SB_USERID => $oneUserId]); |
|
462 | + } |
|
463 | + } |
|
464 | + $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "No matching user found in this profile."); |
|
465 | + break; |
|
466 | + case \web\lib\admin\API::ACTION_ENDUSER_LIST: |
|
467 | + // fall-through: those two are similar |
|
468 | + case \web\lib\admin\API::ACTION_TOKEN_LIST: |
|
469 | + $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
470 | + if ($profile_id === FALSE) { |
|
471 | + exit(1); |
|
472 | + } |
|
473 | + $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id); |
|
474 | + if ($evaluation === FALSE) { |
|
475 | + exit(1); |
|
476 | + } |
|
477 | + list($idp, $profile) = $evaluation; |
|
478 | + $allUsers = $profile->listAllUsers(); |
|
479 | + // this is where they differ |
|
480 | + switch ($inputDecoded['ACTION']) { |
|
481 | 481 | case \web\lib\admin\API::ACTION_ENDUSER_LIST: |
482 | 482 | $adminApi->returnSuccess($allUsers); |
483 | 483 | break; |
@@ -496,123 +496,123 @@ discard block |
||
496 | 496 | $infoSet[$oneTokenObject->userId] = [\web\lib\admin\API::AUXATTRIB_TOKEN => $oneTokenObject->invitationTokenString, "STATUS" => $oneTokenObject->invitationTokenStatus]; |
497 | 497 | } |
498 | 498 | $adminApi->returnSuccess($infoSet); |
499 | - } |
|
500 | - break; |
|
501 | - case \web\lib\admin\API::ACTION_TOKEN_REVOKE: |
|
502 | - $tokenRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_TOKEN); |
|
503 | - if ($tokenRaw === FALSE) { |
|
504 | - exit(1); |
|
505 | - } |
|
506 | - $token = new core\SilverbulletInvitation($tokenRaw); |
|
507 | - if ($token->invitationTokenStatus !== core\SilverbulletInvitation::SB_TOKENSTATUS_VALID && $token->invitationTokenStatus !== core\SilverbulletInvitation::SB_TOKENSTATUS_PARTIALLY_REDEEMED) { |
|
508 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "This is not a currently valid token."); |
|
509 | - exit(1); |
|
510 | - } |
|
511 | - $token->revokeInvitation(); |
|
512 | - $adminApi->returnSuccess([]); |
|
513 | - break; |
|
514 | - case \web\lib\admin\API::ACTION_CERT_LIST: |
|
515 | - $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
516 | - $user_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID); |
|
517 | - if ($prof_id === FALSE || !is_int($user_id)) { |
|
518 | - exit(1); |
|
519 | - } |
|
520 | - $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id); |
|
521 | - if ($evaluation === FALSE) { |
|
522 | - exit(1); |
|
523 | - } |
|
524 | - list($idp, $profile) = $evaluation; |
|
525 | - $invitations = $profile->userStatus($user_id); |
|
526 | - // now pull out cert information from the object |
|
527 | - $certs = []; |
|
528 | - foreach ($invitations as $oneInvitation) { |
|
529 | - $certs = array_merge($certs, $oneInvitation->associatedCertificates); |
|
530 | - } |
|
531 | - // extract relevant subset of information from cert objects |
|
532 | - $certDetails = []; |
|
533 | - foreach ($certs as $cert) { |
|
534 | - $certDetails[$cert->ca_type . ":" . $cert->serial] = ["ISSUED" => $cert->issued, "EXPIRY" => $cert->expiry, "STATUS" => $cert->status, "DEVICE" => $cert->device, "CN" => $cert->username, "ANNOTATION" => $cert->annotation]; |
|
535 | - } |
|
536 | - $adminApi->returnSuccess($certDetails); |
|
537 | - break; |
|
538 | - case \web\lib\admin\API::ACTION_CERT_REVOKE: |
|
539 | - $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
540 | - if ($prof_id === FALSE) { |
|
541 | - exit(1); |
|
542 | - } |
|
543 | - $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id); |
|
544 | - if ($evaluation === FALSE) { |
|
545 | - exit(1); |
|
546 | - } |
|
547 | - list($idp, $profile) = $evaluation; |
|
548 | - // tear apart the serial |
|
549 | - $serialRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL); |
|
550 | - if ($serialRaw === FALSE) { |
|
551 | - exit(1); |
|
552 | - } |
|
553 | - $serial = explode(":", $serialRaw); |
|
554 | - $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]); |
|
555 | - if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) { |
|
556 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial not found."); |
|
557 | - } |
|
558 | - if ($cert->profileId != $profile->identifier) { |
|
559 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial does not belong to this profile."); |
|
560 | - } |
|
561 | - $cert->revokeCertificate(); |
|
562 | - $adminApi->returnSuccess([]); |
|
499 | + } |
|
563 | 500 | break; |
564 | - case \web\lib\admin\API::ACTION_CERT_ANNOTATE: |
|
565 | - $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
566 | - if ($prof_id === FALSE) { |
|
567 | - exit(1); |
|
568 | - } |
|
569 | - $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id); |
|
570 | - if ($evaluation === FALSE) { |
|
571 | - exit(1); |
|
572 | - } |
|
573 | - list($idp, $profile) = $evaluation; |
|
574 | - // tear apart the serial |
|
575 | - $serialRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL); |
|
576 | - if ($serialRaw === FALSE) { |
|
577 | - exit(1); |
|
578 | - } |
|
579 | - $serial = explode(":", $serialRaw); |
|
580 | - $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]); |
|
581 | - if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) { |
|
582 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial not found."); |
|
583 | - } |
|
584 | - if ($cert->profileId != $profile->identifier) { |
|
585 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial does not belong to this profile."); |
|
586 | - } |
|
587 | - $annotationRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTANNOTATION); |
|
588 | - if ($annotationRaw === FALSE) { |
|
589 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Unable to extract annotation."); |
|
501 | + case \web\lib\admin\API::ACTION_TOKEN_REVOKE: |
|
502 | + $tokenRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_TOKEN); |
|
503 | + if ($tokenRaw === FALSE) { |
|
504 | + exit(1); |
|
505 | + } |
|
506 | + $token = new core\SilverbulletInvitation($tokenRaw); |
|
507 | + if ($token->invitationTokenStatus !== core\SilverbulletInvitation::SB_TOKENSTATUS_VALID && $token->invitationTokenStatus !== core\SilverbulletInvitation::SB_TOKENSTATUS_PARTIALLY_REDEEMED) { |
|
508 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "This is not a currently valid token."); |
|
509 | + exit(1); |
|
510 | + } |
|
511 | + $token->revokeInvitation(); |
|
512 | + $adminApi->returnSuccess([]); |
|
590 | 513 | break; |
591 | - } |
|
592 | - $annotation = json_decode($annotationRaw, TRUE); |
|
593 | - $cert->annotate($annotation); |
|
594 | - $adminApi->returnSuccess([]); |
|
595 | - |
|
596 | - break; |
|
597 | - case web\lib\admin\API::ACTION_STATISTICS_INST: |
|
598 | - $retArray = []; |
|
599 | - $idpIdentifier = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID); |
|
600 | - if ($idpIdentifier === FALSE) { |
|
601 | - throw new Exception("A required parameter is missing, and this wasn't caught earlier?!"); |
|
602 | - } else { |
|
603 | - try { |
|
604 | - $thisIdP = $validator->existingIdP($idpIdentifier, NULL, $fed); |
|
605 | - } catch (Exception $e) { |
|
606 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
514 | + case \web\lib\admin\API::ACTION_CERT_LIST: |
|
515 | + $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
516 | + $user_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID); |
|
517 | + if ($prof_id === FALSE || !is_int($user_id)) { |
|
607 | 518 | exit(1); |
608 | 519 | } |
609 | - $retArray[$idpIdentifier] = []; |
|
610 | - foreach ($thisIdP->listProfiles() as $oneProfile) { |
|
611 | - $retArray[$idpIdentifier][$oneProfile->identifier] = $oneProfile->getUserDownloadStats(); |
|
520 | + $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id); |
|
521 | + if ($evaluation === FALSE) { |
|
522 | + exit(1); |
|
612 | 523 | } |
613 | - } |
|
614 | - $adminApi->returnSuccess($retArray); |
|
615 | - break; |
|
616 | - default: |
|
617 | - $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_ACTION, "Not implemented yet."); |
|
524 | + list($idp, $profile) = $evaluation; |
|
525 | + $invitations = $profile->userStatus($user_id); |
|
526 | + // now pull out cert information from the object |
|
527 | + $certs = []; |
|
528 | + foreach ($invitations as $oneInvitation) { |
|
529 | + $certs = array_merge($certs, $oneInvitation->associatedCertificates); |
|
530 | + } |
|
531 | + // extract relevant subset of information from cert objects |
|
532 | + $certDetails = []; |
|
533 | + foreach ($certs as $cert) { |
|
534 | + $certDetails[$cert->ca_type . ":" . $cert->serial] = ["ISSUED" => $cert->issued, "EXPIRY" => $cert->expiry, "STATUS" => $cert->status, "DEVICE" => $cert->device, "CN" => $cert->username, "ANNOTATION" => $cert->annotation]; |
|
535 | + } |
|
536 | + $adminApi->returnSuccess($certDetails); |
|
537 | + break; |
|
538 | + case \web\lib\admin\API::ACTION_CERT_REVOKE: |
|
539 | + $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
540 | + if ($prof_id === FALSE) { |
|
541 | + exit(1); |
|
542 | + } |
|
543 | + $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id); |
|
544 | + if ($evaluation === FALSE) { |
|
545 | + exit(1); |
|
546 | + } |
|
547 | + list($idp, $profile) = $evaluation; |
|
548 | + // tear apart the serial |
|
549 | + $serialRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL); |
|
550 | + if ($serialRaw === FALSE) { |
|
551 | + exit(1); |
|
552 | + } |
|
553 | + $serial = explode(":", $serialRaw); |
|
554 | + $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]); |
|
555 | + if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) { |
|
556 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial not found."); |
|
557 | + } |
|
558 | + if ($cert->profileId != $profile->identifier) { |
|
559 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial does not belong to this profile."); |
|
560 | + } |
|
561 | + $cert->revokeCertificate(); |
|
562 | + $adminApi->returnSuccess([]); |
|
563 | + break; |
|
564 | + case \web\lib\admin\API::ACTION_CERT_ANNOTATE: |
|
565 | + $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID); |
|
566 | + if ($prof_id === FALSE) { |
|
567 | + exit(1); |
|
568 | + } |
|
569 | + $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id); |
|
570 | + if ($evaluation === FALSE) { |
|
571 | + exit(1); |
|
572 | + } |
|
573 | + list($idp, $profile) = $evaluation; |
|
574 | + // tear apart the serial |
|
575 | + $serialRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL); |
|
576 | + if ($serialRaw === FALSE) { |
|
577 | + exit(1); |
|
578 | + } |
|
579 | + $serial = explode(":", $serialRaw); |
|
580 | + $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]); |
|
581 | + if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) { |
|
582 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial not found."); |
|
583 | + } |
|
584 | + if ($cert->profileId != $profile->identifier) { |
|
585 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial does not belong to this profile."); |
|
586 | + } |
|
587 | + $annotationRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTANNOTATION); |
|
588 | + if ($annotationRaw === FALSE) { |
|
589 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Unable to extract annotation."); |
|
590 | + break; |
|
591 | + } |
|
592 | + $annotation = json_decode($annotationRaw, TRUE); |
|
593 | + $cert->annotate($annotation); |
|
594 | + $adminApi->returnSuccess([]); |
|
595 | + |
|
596 | + break; |
|
597 | + case web\lib\admin\API::ACTION_STATISTICS_INST: |
|
598 | + $retArray = []; |
|
599 | + $idpIdentifier = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID); |
|
600 | + if ($idpIdentifier === FALSE) { |
|
601 | + throw new Exception("A required parameter is missing, and this wasn't caught earlier?!"); |
|
602 | + } else { |
|
603 | + try { |
|
604 | + $thisIdP = $validator->existingIdP($idpIdentifier, NULL, $fed); |
|
605 | + } catch (Exception $e) { |
|
606 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!"); |
|
607 | + exit(1); |
|
608 | + } |
|
609 | + $retArray[$idpIdentifier] = []; |
|
610 | + foreach ($thisIdP->listProfiles() as $oneProfile) { |
|
611 | + $retArray[$idpIdentifier][$oneProfile->identifier] = $oneProfile->getUserDownloadStats(); |
|
612 | + } |
|
613 | + } |
|
614 | + $adminApi->returnSuccess($retArray); |
|
615 | + break; |
|
616 | + default: |
|
617 | + $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_ACTION, "Not implemented yet."); |
|
618 | 618 | } |
619 | 619 | \ No newline at end of file |