Passed
Push — release_2_1 ( 0d79c2...47647a )
by Tomasz
09:46
created
web/admin/inc/sendinvite.inc.php 1 patch
Switch Indentation   +87 added lines, -87 removed lines patch added patch discarded remove patch
@@ -98,98 +98,98 @@
 block discarded – undo
98 98
 }
99 99
 
100 100
 switch ($operationMode) {
101
-    case OPERATION_MODE_EDIT:
102
-        $idp = $validator->existingIdP($_GET['inst_id']);
103
-        // editing IdPs is done from within the popup. When we're done, send the 
104
-        // user back to the popup (append the result of the operation later)
105
-        $redirectDestination = "manageAdmins.inc.php?inst_id=" . $idp->identifier . "&";
106
-        if (count($validAddresses) == 0) {
107
-            header("Location: $redirectDestination" . "invitation=INVALIDSYNTAX");
108
-            exit(1);
109
-        }
110
-        // is the user primary admin of this IdP?
111
-        $is_owner = $idp->isPrimaryOwner($_SESSION['user']);
112
-        // check if he is (also) federation admin for the federation this IdP is in. His invitations have more blessing then.
113
-        $fedadmin = $userObject->isFederationAdmin($idp->federation);
114
-        // check if he is either one, if not, complain
115
-        if (!$is_owner && !$fedadmin) {
116
-            echo "<p>" . sprintf(_("Something's wrong... you are a %s admin, but not for the %s the requested %s belongs to!"), $uiElements->nomenclatureFed, $uiElements->nomenclatureFed, $uiElements->nomenclatureParticipant) . "</p>";
117
-            exit(1);
118
-        }
101
+        case OPERATION_MODE_EDIT:
102
+            $idp = $validator->existingIdP($_GET['inst_id']);
103
+            // editing IdPs is done from within the popup. When we're done, send the 
104
+            // user back to the popup (append the result of the operation later)
105
+            $redirectDestination = "manageAdmins.inc.php?inst_id=" . $idp->identifier . "&";
106
+            if (count($validAddresses) == 0) {
107
+                header("Location: $redirectDestination" . "invitation=INVALIDSYNTAX");
108
+                exit(1);
109
+            }
110
+            // is the user primary admin of this IdP?
111
+            $is_owner = $idp->isPrimaryOwner($_SESSION['user']);
112
+            // check if he is (also) federation admin for the federation this IdP is in. His invitations have more blessing then.
113
+            $fedadmin = $userObject->isFederationAdmin($idp->federation);
114
+            // check if he is either one, if not, complain
115
+            if (!$is_owner && !$fedadmin) {
116
+                echo "<p>" . sprintf(_("Something's wrong... you are a %s admin, but not for the %s the requested %s belongs to!"), $uiElements->nomenclatureFed, $uiElements->nomenclatureFed, $uiElements->nomenclatureParticipant) . "</p>";
117
+                exit(1);
118
+            }
119 119
 
120
-        $prettyprintname = $idp->name;
121
-        $newtokens = $mgmt->createTokens($fedadmin, $validAddresses, $idp);
122
-        $loggerInstance->writeAudit($_SESSION['user'], "NEW", "IdP " . $idp->identifier . " - Token created for " . implode(",", $validAddresses));
123
-        $introtext = "CO-ADMIN";
124
-        $participant_type = $idp->type;
125
-        break;
126
-    case OPERATION_MODE_NEWUNLINKED:
127
-        $redirectDestination = "../overview_federation.php?";
128
-        if (count($validAddresses) == 0) {
129
-            header("Location: $redirectDestination"."invitation=INVALIDSYNTAX");
130
-            exit(1);
131
-        }
132
-        // run an input check and conversion of the raw inputs... just in case
133
-        $newinstname = $validator->string($_POST['name']);
134
-        $newcountry = $validator->string($_POST['country']);
135
-        $participant_type = $validator->partType($_POST['participant_type']);
136
-        $new_idp_authorized_fedadmin = $userObject->isFederationAdmin($newcountry);
137
-        if ($new_idp_authorized_fedadmin !== TRUE) {
138
-            throw new Exception("Something's wrong... you want to create a new " . $uiElements->nomenclatureParticipant . ", but are not a " . $uiElements->nomenclatureFed . " admin for the " . $uiElements->nomenclatureFed . " it should be in!");
139
-        }
140
-        $federation = $validator->existingFederation($newcountry);
141
-        $prettyprintname = $newinstname;
142
-        $introtext = "NEW-FED";
143
-        // send the user back to his federation overview page, append the result of the operation later
144
-        // do the token creation magic
145
-        $newtokens = $mgmt->createTokens(TRUE, $validAddresses, $newinstname, 0, $newcountry, $participant_type);
146
-        $loggerInstance->writeAudit($_SESSION['user'], "NEW", "ORG FUTURE  - Token created for $participant_type " . implode(",", $validAddresses));
147
-        break;
148
-    case OPERATION_MODE_NEWFROMDB:
149
-        $redirectDestination = "../overview_federation.php?";
150
-        if (count($validAddresses) == 0) {
151
-            header("Location: $redirectDestination"."invitation=INVALIDSYNTAX");
152
-            exit(1);
153
-        }
154
-        // a real external DB entry was submitted and all the required parameters are there
155
-        $newexternalid = $validator->string($_POST['externals']);
156
-        $extinfo = $catInstance->getExternalDBEntityDetails($newexternalid);
157
-        $new_idp_authorized_fedadmin = $userObject->isFederationAdmin($extinfo['country']);
158
-        if ($new_idp_authorized_fedadmin !== TRUE) {
159
-            throw new Exception("Something's wrong... you want to create a new " . $uiElements->nomenclatureParticipant . ", but are not a " . $uiElements->nomenclatureFed . " admin for the " . $uiElements->nomenclatureFed . " it should be in!");
160
-        }
161
-        $federation = $validator->existingFederation($extinfo['country']);
162
-        $newcountry = $extinfo['country'];
163
-        // see if the inst name is defined in the currently set language; if not, pick its English name; if N/A, pick the last in the list
164
-        $prettyprintname = "";
165
-        foreach ($extinfo['names'] as $lang => $name) {
166
-            if ($lang == $languageInstance->getLang()) {
167
-                $prettyprintname = $name;
120
+            $prettyprintname = $idp->name;
121
+            $newtokens = $mgmt->createTokens($fedadmin, $validAddresses, $idp);
122
+            $loggerInstance->writeAudit($_SESSION['user'], "NEW", "IdP " . $idp->identifier . " - Token created for " . implode(",", $validAddresses));
123
+            $introtext = "CO-ADMIN";
124
+            $participant_type = $idp->type;
125
+            break;
126
+        case OPERATION_MODE_NEWUNLINKED:
127
+            $redirectDestination = "../overview_federation.php?";
128
+            if (count($validAddresses) == 0) {
129
+                header("Location: $redirectDestination"."invitation=INVALIDSYNTAX");
130
+                exit(1);
168 131
             }
169
-        }
170
-        if ($prettyprintname == "" && isset($extinfo['names']['en'])) {
171
-            $prettyprintname = $extinfo['names']['en'];
172
-        }
173
-        if ($prettyprintname == "") {
174
-            foreach ($extinfo['names'] as $name) {
175
-                $prettyprintname = $name;
132
+            // run an input check and conversion of the raw inputs... just in case
133
+            $newinstname = $validator->string($_POST['name']);
134
+            $newcountry = $validator->string($_POST['country']);
135
+            $participant_type = $validator->partType($_POST['participant_type']);
136
+            $new_idp_authorized_fedadmin = $userObject->isFederationAdmin($newcountry);
137
+            if ($new_idp_authorized_fedadmin !== TRUE) {
138
+                throw new Exception("Something's wrong... you want to create a new " . $uiElements->nomenclatureParticipant . ", but are not a " . $uiElements->nomenclatureFed . " admin for the " . $uiElements->nomenclatureFed . " it should be in!");
176 139
             }
177
-        }
178
-        $participant_type = $extinfo['type'];
179
-        // fill the rest of the text
180
-        $introtext = "EXISTING-FED";
181
-        // do the token creation magic
182
-        $newtokens = $mgmt->createTokens(TRUE, $validAddresses, $prettyprintname, $newexternalid);
183
-        $loggerInstance->writeAudit($_SESSION['user'], "NEW", "IdP FUTURE  - Token created for " . implode(",", $validAddresses));
184
-        break;
185
-    default: // includes OPERATION_MODE_INVALID
186
-        // second param is TRUE, so the variable *will* contain a string
187
-        // i.e. ignore Scrutinizer type warning later
188
-        $wrongcontent = print_r($_POST, TRUE);
189
-        echo "<pre>Wrong parameters in POST:
140
+            $federation = $validator->existingFederation($newcountry);
141
+            $prettyprintname = $newinstname;
142
+            $introtext = "NEW-FED";
143
+            // send the user back to his federation overview page, append the result of the operation later
144
+            // do the token creation magic
145
+            $newtokens = $mgmt->createTokens(TRUE, $validAddresses, $newinstname, 0, $newcountry, $participant_type);
146
+            $loggerInstance->writeAudit($_SESSION['user'], "NEW", "ORG FUTURE  - Token created for $participant_type " . implode(",", $validAddresses));
147
+            break;
148
+        case OPERATION_MODE_NEWFROMDB:
149
+            $redirectDestination = "../overview_federation.php?";
150
+            if (count($validAddresses) == 0) {
151
+                header("Location: $redirectDestination"."invitation=INVALIDSYNTAX");
152
+                exit(1);
153
+            }
154
+            // a real external DB entry was submitted and all the required parameters are there
155
+            $newexternalid = $validator->string($_POST['externals']);
156
+            $extinfo = $catInstance->getExternalDBEntityDetails($newexternalid);
157
+            $new_idp_authorized_fedadmin = $userObject->isFederationAdmin($extinfo['country']);
158
+            if ($new_idp_authorized_fedadmin !== TRUE) {
159
+                throw new Exception("Something's wrong... you want to create a new " . $uiElements->nomenclatureParticipant . ", but are not a " . $uiElements->nomenclatureFed . " admin for the " . $uiElements->nomenclatureFed . " it should be in!");
160
+            }
161
+            $federation = $validator->existingFederation($extinfo['country']);
162
+            $newcountry = $extinfo['country'];
163
+            // see if the inst name is defined in the currently set language; if not, pick its English name; if N/A, pick the last in the list
164
+            $prettyprintname = "";
165
+            foreach ($extinfo['names'] as $lang => $name) {
166
+                if ($lang == $languageInstance->getLang()) {
167
+                    $prettyprintname = $name;
168
+                }
169
+            }
170
+            if ($prettyprintname == "" && isset($extinfo['names']['en'])) {
171
+                $prettyprintname = $extinfo['names']['en'];
172
+            }
173
+            if ($prettyprintname == "") {
174
+                foreach ($extinfo['names'] as $name) {
175
+                    $prettyprintname = $name;
176
+                }
177
+            }
178
+            $participant_type = $extinfo['type'];
179
+            // fill the rest of the text
180
+            $introtext = "EXISTING-FED";
181
+            // do the token creation magic
182
+            $newtokens = $mgmt->createTokens(TRUE, $validAddresses, $prettyprintname, $newexternalid);
183
+            $loggerInstance->writeAudit($_SESSION['user'], "NEW", "IdP FUTURE  - Token created for " . implode(",", $validAddresses));
184
+            break;
185
+        default: // includes OPERATION_MODE_INVALID
186
+            // second param is TRUE, so the variable *will* contain a string
187
+            // i.e. ignore Scrutinizer type warning later
188
+            $wrongcontent = print_r($_POST, TRUE);
189
+            echo "<pre>Wrong parameters in POST:
190 190
 " . htmlspecialchars(/** @scrutinizer ignore-type */ $wrongcontent) . "
191 191
 </pre>";
192
-        exit(1);
192
+            exit(1);
193 193
 }
194 194
 
195 195
 // send, and invalidate the token immediately if the mail could not be sent!
Please login to merge, or discard this patch.
web/admin/edit_hotspot.php 1 patch
Switch Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -156,12 +156,12 @@
 block discarded – undo
156 156
     }
157 157
     if (isset($_POST['command'])) {
158 158
         switch ($_POST['command']) {
159
-        case web\lib\common\FormElements::BUTTON_CLOSE:
160
-            header("Location: overview_org.php?inst_id=" . $my_inst->identifier);
161
-            exit(0);
162
-        default:
163
-            header("Location: overview_org.php?inst_id=" . $my_inst->identifier);
164
-            exit(0);
159
+            case web\lib\common\FormElements::BUTTON_CLOSE:
160
+                header("Location: overview_org.php?inst_id=" . $my_inst->identifier);
161
+                exit(0);
162
+            default:
163
+                header("Location: overview_org.php?inst_id=" . $my_inst->identifier);
164
+                exit(0);
165 165
         }
166 166
     }
167 167
     $vlan = $deployment->getAttributes("managedsp:vlan")[0]['value'] ?? NULL;
Please login to merge, or discard this patch.
web/admin/API.php 1 patch
Switch Indentation   +406 added lines, -406 removed lines patch added patch discarded remove patch
@@ -84,142 +84,142 @@  discard block
 block discarded – undo
84 84
 }
85 85
 
86 86
 switch ($inputDecoded['ACTION']) {
87
-    case web\lib\admin\API::ACTION_NEWINST:
88
-        // create the inst, no admin, no attributes
89
-        $typeRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_INSTTYPE);
90
-        if ($typeRaw === FALSE) {
91
-            throw new Exception("We did not receive a valid participant type!");
92
-        }
93
-        $type = $validator->partType($typeRaw);
94
-        $idp = new \core\IdP($fed->newIdP($type, "PENDING", "API"));
95
-        // now add all submitted attributes
96
-        $inputs = $adminApi->uglify($scrubbedParameters);
97
-        $optionParser->processSubmittedFields($idp, $inputs["POST"], $inputs["FILES"]);
98
-        $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_CAT_INST_ID => $idp->identifier]);
99
-        break;
100
-    case web\lib\admin\API::ACTION_DELINST:
101
-        try {
102
-            $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
103
-        } catch (Exception $e) {
104
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
105
-            exit(1);
106
-        }
107
-        $idp->destroy();
108
-        $adminApi->returnSuccess([]);
109
-        break;
110
-    case web\lib\admin\API::ACTION_ADMIN_LIST:
111
-        try {
112
-            $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
113
-        } catch (Exception $e) {
114
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
115
-            exit(1);
116
-        }
117
-        $adminApi->returnSuccess($idp->listOwners());
118
-        break;
119
-    case web\lib\admin\API::ACTION_ADMIN_ADD:
120
-        // IdP in question
121
-        try {
122
-            $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
123
-        } catch (Exception $e) {
124
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
125
-            exit(1);
126
-        }
127
-        // here is the token
128
-        $mgmt = new core\UserManagement();
129
-        // we know we have an admin ID but scrutinizer wants this checked more explicitly
130
-        $admin = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_ADMINID);
131
-        if ($admin === FALSE) {
132
-            throw new Exception("A required parameter is missing, and this wasn't caught earlier?!");
133
-        }
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];
136
-        $success = ["TOKEN URL" => $URL, "TOKEN" => array_keys($newtokens)[0]];
137
-        // done with the essentials - display in response. But if we also have an email address, send it there
138
-        $email = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_TARGETMAIL);
139
-        if ($email !== FALSE) {
140
-            $sent = \core\common\OutsideComm::adminInvitationMail($email, "EXISTING-FED", array_keys($newtokens)[0], $idp->name, $fed, $idp->type);
141
-            $success["EMAIL SENT"] = $sent["SENT"];
142
-            if ($sent["SENT"] === TRUE) {
143
-                $success["EMAIL TRANSPORT SECURE"] = $sent["TRANSPORT"];
87
+        case web\lib\admin\API::ACTION_NEWINST:
88
+            // create the inst, no admin, no attributes
89
+            $typeRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_INSTTYPE);
90
+            if ($typeRaw === FALSE) {
91
+                throw new Exception("We did not receive a valid participant type!");
144 92
             }
145
-        }
146
-        $adminApi->returnSuccess($success);
147
-        break;
148
-    case web\lib\admin\API::ACTION_ADMIN_DEL:
149
-        // IdP in question
150
-        try {
151
-            $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
152
-        } catch (Exception $e) {
153
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
154
-            exit(1);
155
-        }
156
-        $currentAdmins = $idp->listOwners();
157
-        $toBeDeleted = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_ADMINID);
158
-        if ($toBeDeleted === FALSE) {
159
-            throw new Exception("A required parameter is missing, and this wasn't caught earlier?!");
160
-        }
161
-        $found = FALSE;
162
-        foreach ($currentAdmins as $oneAdmin) {
163
-            if ($oneAdmin['MAIL'] == $toBeDeleted) {
164
-                $found = TRUE;
165
-                $mgmt = new core\UserManagement();
166
-                $mgmt->removeAdminFromIdP($idp, $oneAdmin['ID']);
93
+            $type = $validator->partType($typeRaw);
94
+            $idp = new \core\IdP($fed->newIdP($type, "PENDING", "API"));
95
+            // now add all submitted attributes
96
+            $inputs = $adminApi->uglify($scrubbedParameters);
97
+            $optionParser->processSubmittedFields($idp, $inputs["POST"], $inputs["FILES"]);
98
+            $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_CAT_INST_ID => $idp->identifier]);
99
+            break;
100
+        case web\lib\admin\API::ACTION_DELINST:
101
+            try {
102
+                $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
103
+            } catch (Exception $e) {
104
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
105
+                exit(1);
167 106
             }
168
-        }
169
-        if ($found) {
107
+            $idp->destroy();
170 108
             $adminApi->returnSuccess([]);
171
-        }
172
-        $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The admin with ID $toBeDeleted is not associated to IdP " . $idp->identifier);
173
-        break;
174
-    case web\lib\admin\API::ACTION_STATISTICS_FED:
175
-        $detail = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_DETAIL);
176
-        $adminApi->returnSuccess($fed->downloadStats("array", $detail));
177
-        break;
178
-    case \web\lib\admin\API::ACTION_FEDERATION_LISTIDP:
179
-        $retArray = [];
180
-        $noLogo = null;
181
-        $idpIdentifier = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID);
182
-        $logoFlag = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::FLAG_NOLOGO);
183
-        $detail = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_DETAIL);
184
-        if ($logoFlag === "TRUE") {
185
-            $noLogo = 'general:logo_file';
186
-        }
187
-        if ($idpIdentifier === FALSE) {
188
-            $allIdPs = $fed->listIdentityProviders(0);
189
-            foreach ($allIdPs as $instanceId => $oneIdP) {
190
-                $theIdP = $oneIdP["instance"];
191
-                $retArray[$instanceId] = $theIdP->getAttributes(null, $noLogo);
109
+            break;
110
+        case web\lib\admin\API::ACTION_ADMIN_LIST:
111
+            try {
112
+                $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
113
+            } catch (Exception $e) {
114
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
115
+                exit(1);
192 116
             }
193
-        } else {
117
+            $adminApi->returnSuccess($idp->listOwners());
118
+            break;
119
+        case web\lib\admin\API::ACTION_ADMIN_ADD:
120
+            // IdP in question
194 121
             try {
195
-                $thisIdP = $validator->existingIdP($idpIdentifier, NULL, $fed);
122
+                $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
196 123
             } catch (Exception $e) {
197 124
                 $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
198 125
                 exit(1);
199 126
             }
200
-            $retArray[$idpIdentifier] = $thisIdP->getAttributes(null, $noLogo);
201
-            foreach ($thisIdP->listProfiles() as $oneProfile) {
202
-                $retArray[$idpIdentifier]["PROFILES"][$oneProfile->identifier] = $oneProfile->getAttributes(null, $noLogo);
127
+            // here is the token
128
+            $mgmt = new core\UserManagement();
129
+            // we know we have an admin ID but scrutinizer wants this checked more explicitly
130
+            $admin = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_ADMINID);
131
+            if ($admin === FALSE) {
132
+                throw new Exception("A required parameter is missing, and this wasn't caught earlier?!");
203 133
             }
204
-        }
205
-        foreach ($retArray as $instNumber => $oneInstData) {
206
-            foreach ($oneInstData as $attribNumber => $oneAttrib) {
207
-                if ($oneAttrib['name'] == "general:logo_file") {
208
-                    // JSON doesn't cope well with raw binary data, so b64 it
209
-                    $retArray[$instNumber][$attribNumber]['value'] = base64_encode($oneAttrib['value']);
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];
136
+            $success = ["TOKEN URL" => $URL, "TOKEN" => array_keys($newtokens)[0]];
137
+            // done with the essentials - display in response. But if we also have an email address, send it there
138
+            $email = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_TARGETMAIL);
139
+            if ($email !== FALSE) {
140
+                $sent = \core\common\OutsideComm::adminInvitationMail($email, "EXISTING-FED", array_keys($newtokens)[0], $idp->name, $fed, $idp->type);
141
+                $success["EMAIL SENT"] = $sent["SENT"];
142
+                if ($sent["SENT"] === TRUE) {
143
+                    $success["EMAIL TRANSPORT SECURE"] = $sent["TRANSPORT"];
144
+                }
145
+            }
146
+            $adminApi->returnSuccess($success);
147
+            break;
148
+        case web\lib\admin\API::ACTION_ADMIN_DEL:
149
+            // IdP in question
150
+            try {
151
+                $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
152
+            } catch (Exception $e) {
153
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
154
+                exit(1);
155
+            }
156
+            $currentAdmins = $idp->listOwners();
157
+            $toBeDeleted = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_ADMINID);
158
+            if ($toBeDeleted === FALSE) {
159
+                throw new Exception("A required parameter is missing, and this wasn't caught earlier?!");
160
+            }
161
+            $found = FALSE;
162
+            foreach ($currentAdmins as $oneAdmin) {
163
+                if ($oneAdmin['MAIL'] == $toBeDeleted) {
164
+                    $found = TRUE;
165
+                    $mgmt = new core\UserManagement();
166
+                    $mgmt->removeAdminFromIdP($idp, $oneAdmin['ID']);
167
+                }
168
+            }
169
+            if ($found) {
170
+                $adminApi->returnSuccess([]);
171
+            }
172
+            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The admin with ID $toBeDeleted is not associated to IdP " . $idp->identifier);
173
+            break;
174
+        case web\lib\admin\API::ACTION_STATISTICS_FED:
175
+            $detail = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_DETAIL);
176
+            $adminApi->returnSuccess($fed->downloadStats("array", $detail));
177
+            break;
178
+        case \web\lib\admin\API::ACTION_FEDERATION_LISTIDP:
179
+            $retArray = [];
180
+            $noLogo = null;
181
+            $idpIdentifier = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID);
182
+            $logoFlag = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::FLAG_NOLOGO);
183
+            $detail = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_DETAIL);
184
+            if ($logoFlag === "TRUE") {
185
+                $noLogo = 'general:logo_file';
186
+            }
187
+            if ($idpIdentifier === FALSE) {
188
+                $allIdPs = $fed->listIdentityProviders(0);
189
+                foreach ($allIdPs as $instanceId => $oneIdP) {
190
+                    $theIdP = $oneIdP["instance"];
191
+                    $retArray[$instanceId] = $theIdP->getAttributes(null, $noLogo);
210 192
                 }
211
-                if ($attribNumber == "PROFILES") {
212
-                    // scan for included fed:logo_file and b64 escape it, t2oo
213
-                    foreach ($oneAttrib as $profileNumber => $profileContent) {
214
-                            foreach ($profileContent as $oneProfileIterator => $oneProfileContent) {
215
-                                    if ($oneProfileContent['name'] == "fed:logo_file" || $oneProfileContent['name'] == "general:logo_file" || $oneProfileContent['name'] == "eap:ca_file") {
216
-                                            $retArray[$instNumber]["PROFILES"][$profileNumber][$oneProfileIterator]['value'] = base64_encode($oneProfileContent['value']);
217
-                                    }
218
-                            }
193
+            } else {
194
+                try {
195
+                    $thisIdP = $validator->existingIdP($idpIdentifier, NULL, $fed);
196
+                } catch (Exception $e) {
197
+                    $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
198
+                    exit(1);
199
+                }
200
+                $retArray[$idpIdentifier] = $thisIdP->getAttributes(null, $noLogo);
201
+                foreach ($thisIdP->listProfiles() as $oneProfile) {
202
+                    $retArray[$idpIdentifier]["PROFILES"][$oneProfile->identifier] = $oneProfile->getAttributes(null, $noLogo);
203
+                }
204
+            }
205
+            foreach ($retArray as $instNumber => $oneInstData) {
206
+                foreach ($oneInstData as $attribNumber => $oneAttrib) {
207
+                    if ($oneAttrib['name'] == "general:logo_file") {
208
+                        // JSON doesn't cope well with raw binary data, so b64 it
209
+                        $retArray[$instNumber][$attribNumber]['value'] = base64_encode($oneAttrib['value']);
210
+                    }
211
+                    if ($attribNumber == "PROFILES") {
212
+                        // scan for included fed:logo_file and b64 escape it, t2oo
213
+                        foreach ($oneAttrib as $profileNumber => $profileContent) {
214
+                                foreach ($profileContent as $oneProfileIterator => $oneProfileContent) {
215
+                                        if ($oneProfileContent['name'] == "fed:logo_file" || $oneProfileContent['name'] == "general:logo_file" || $oneProfileContent['name'] == "eap:ca_file") {
216
+                                                $retArray[$instNumber]["PROFILES"][$profileNumber][$oneProfileIterator]['value'] = base64_encode($oneProfileContent['value']);
217
+                                        }
218
+                                }
219
+                        }
219 220
                     }
220 221
                 }
221 222
             }
222
-        }
223 223
         
224 224
 /*        
225 225
                     $retArray[$idpIdentifier] = [];
@@ -230,102 +230,102 @@  discard block
 block discarded – undo
230 230
  * 
231 231
  */        
232 232
         
233
-        $adminApi->returnSuccess($retArray);
234
-        break;
235
-    case \web\lib\admin\API::ACTION_NEWPROF_RADIUS:
236
-    // fall-through intended: both get mostly identical treatment
237
-    case web\lib\admin\API::ACTION_NEWPROF_SB:
238
-        try {
239
-            $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
240
-        } catch (Exception $e) {
241
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
242
-            exit(1);
243
-        }
244
-        if ($inputDecoded['ACTION'] == web\lib\admin\API::ACTION_NEWPROF_RADIUS) {
245
-            $type = "RADIUS";
246
-        } else {
247
-            $type = "SILVERBULLET";
248
-        }
249
-        $profile = $idp->newProfile($type);
250
-        if ($profile === NULL) {
251
-            $adminApi->returnError(\web\lib\admin\API::ERROR_INTERNAL_ERROR, "Unable to create a new Profile, for no apparent reason. Please contact support.");
252
-            exit(1);
253
-        }
254
-        $inputs = $adminApi->uglify($scrubbedParameters);
255
-        $optionParser->processSubmittedFields($profile, $inputs["POST"], $inputs["FILES"]);
256
-        if ($inputDecoded['ACTION'] == web\lib\admin\API::ACTION_NEWPROF_SB) {
257
-            // auto-accept ToU?
258
-            if ($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_TOU) !== FALSE) {
259
-                $profile->addAttribute("hiddenprofile:tou_accepted", NULL, 1);
260
-            }
261
-            // we're done at this point
262
-            $adminApi->returnSuccess([\web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID => $profile->identifier]);
233
+            $adminApi->returnSuccess($retArray);
263 234
             break;
264
-        }
265
-        if (!$profile instanceof core\ProfileRADIUS) {
266
-            throw new Exception("Can't be. This is only here to convince Scrutinizer that we're really talking RADIUS.");
267
-        }
268
-        /* const AUXATTRIB_PROFILE_REALM = 'ATTRIB-PROFILE-REALM';
269
-          const AUXATTRIB_PROFILE_OUTERVALUE = 'ATTRIB-PROFILE-OUTERVALUE'; */
270
-        $realm = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_REALM);
271
-        $outer = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_OUTERVALUE);
272
-        if ($realm !== FALSE) {
273
-            if ($outer === FALSE) {
274
-                $outer = "";
275
-                $profile->setAnonymousIDSupport(FALSE);
235
+        case \web\lib\admin\API::ACTION_NEWPROF_RADIUS:
236
+        // fall-through intended: both get mostly identical treatment
237
+        case web\lib\admin\API::ACTION_NEWPROF_SB:
238
+            try {
239
+                $idp = $validator->existingIdP($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID), NULL, $fed);
240
+            } catch (Exception $e) {
241
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
242
+                exit(1);
243
+            }
244
+            if ($inputDecoded['ACTION'] == web\lib\admin\API::ACTION_NEWPROF_RADIUS) {
245
+                $type = "RADIUS";
276 246
             } else {
277
-                $outer = $outer . "@";
278
-                $profile->setAnonymousIDSupport(TRUE);
247
+                $type = "SILVERBULLET";
279 248
             }
280
-            $profile->setRealm($outer . $realm);
281
-        }
282
-        /* const AUXATTRIB_PROFILE_TESTUSER = 'ATTRIB-PROFILE-TESTUSER'; */
283
-        $testuser = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_TESTUSER);
284
-        if ($testuser !== FALSE) {
285
-            $profile->setRealmCheckUser(TRUE, $testuser);
286
-        }
287
-        /* const AUXATTRIB_PROFILE_INPUT_HINT = 'ATTRIB-PROFILE-HINTREALM';
249
+            $profile = $idp->newProfile($type);
250
+            if ($profile === NULL) {
251
+                $adminApi->returnError(\web\lib\admin\API::ERROR_INTERNAL_ERROR, "Unable to create a new Profile, for no apparent reason. Please contact support.");
252
+                exit(1);
253
+            }
254
+            $inputs = $adminApi->uglify($scrubbedParameters);
255
+            $optionParser->processSubmittedFields($profile, $inputs["POST"], $inputs["FILES"]);
256
+            if ($inputDecoded['ACTION'] == web\lib\admin\API::ACTION_NEWPROF_SB) {
257
+                // auto-accept ToU?
258
+                if ($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_TOU) !== FALSE) {
259
+                    $profile->addAttribute("hiddenprofile:tou_accepted", NULL, 1);
260
+                }
261
+                // we're done at this point
262
+                $adminApi->returnSuccess([\web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID => $profile->identifier]);
263
+                break;
264
+            }
265
+            if (!$profile instanceof core\ProfileRADIUS) {
266
+                throw new Exception("Can't be. This is only here to convince Scrutinizer that we're really talking RADIUS.");
267
+            }
268
+            /* const AUXATTRIB_PROFILE_REALM = 'ATTRIB-PROFILE-REALM';
269
+          const AUXATTRIB_PROFILE_OUTERVALUE = 'ATTRIB-PROFILE-OUTERVALUE'; */
270
+            $realm = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_REALM);
271
+            $outer = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_OUTERVALUE);
272
+            if ($realm !== FALSE) {
273
+                if ($outer === FALSE) {
274
+                    $outer = "";
275
+                    $profile->setAnonymousIDSupport(FALSE);
276
+                } else {
277
+                    $outer = $outer . "@";
278
+                    $profile->setAnonymousIDSupport(TRUE);
279
+                }
280
+                $profile->setRealm($outer . $realm);
281
+            }
282
+            /* const AUXATTRIB_PROFILE_TESTUSER = 'ATTRIB-PROFILE-TESTUSER'; */
283
+            $testuser = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_TESTUSER);
284
+            if ($testuser !== FALSE) {
285
+                $profile->setRealmCheckUser(TRUE, $testuser);
286
+            }
287
+            /* const AUXATTRIB_PROFILE_INPUT_HINT = 'ATTRIB-PROFILE-HINTREALM';
288 288
           const AUXATTRIB_PROFILE_INPUT_VERIFY = 'ATTRIB-PROFILE-VERIFYREALM'; */
289
-        $hint = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_INPUT_HINT);
290
-        $enforce = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_INPUT_VERIFY);
291
-        if ($enforce !== FALSE) {
292
-            $profile->setInputVerificationPreference($enforce, $hint);
293
-        }
294
-        /* const AUXATTRIB_PROFILE_EAPTYPE */
295
-        $iterator = 1;
296
-        foreach ($scrubbedParameters as $oneParam) {
297
-            if ($oneParam['NAME'] == web\lib\admin\API::AUXATTRIB_PROFILE_EAPTYPE && is_int($oneParam["VALUE"])) {
298
-                $type = new \core\common\EAP($oneParam["VALUE"]);
299
-                $profile->addSupportedEapMethod($type, $iterator);
300
-                $iterator = $iterator + 1;
289
+            $hint = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_INPUT_HINT);
290
+            $enforce = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_PROFILE_INPUT_VERIFY);
291
+            if ($enforce !== FALSE) {
292
+                $profile->setInputVerificationPreference($enforce, $hint);
301 293
             }
302
-        }
303
-        // reinstantiate $profile freshly from DB - it was updated in the process
304
-        $profileFresh = new core\ProfileRADIUS($profile->identifier);
305
-        $profileFresh->prepShowtime();
306
-        $adminApi->returnSuccess([\web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID => $profileFresh->identifier]);
307
-        break;
308
-    case web\lib\admin\API::ACTION_ENDUSER_NEW:
309
-    // fall-through intentional, those two actions are doing nearly identical things
310
-    case web\lib\admin\API::ACTION_ENDUSER_CHANGEEXPIRY:
311
-        $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
312
-        if ($prof_id === FALSE) {
313
-            exit(1);
314
-        }
315
-        $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id);
316
-        if ($evaluation === FALSE) {
317
-            exit(1);
318
-        }
319
-        list($idp, $profile) = $evaluation;
320
-        $user = $validator->string($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERNAME));
321
-        $expiryRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_EXPIRY);
322
-        if ($expiryRaw === FALSE) {
323
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The expiry date wasn't found in the request.");
294
+            /* const AUXATTRIB_PROFILE_EAPTYPE */
295
+            $iterator = 1;
296
+            foreach ($scrubbedParameters as $oneParam) {
297
+                if ($oneParam['NAME'] == web\lib\admin\API::AUXATTRIB_PROFILE_EAPTYPE && is_int($oneParam["VALUE"])) {
298
+                    $type = new \core\common\EAP($oneParam["VALUE"]);
299
+                    $profile->addSupportedEapMethod($type, $iterator);
300
+                    $iterator = $iterator + 1;
301
+                }
302
+            }
303
+            // reinstantiate $profile freshly from DB - it was updated in the process
304
+            $profileFresh = new core\ProfileRADIUS($profile->identifier);
305
+            $profileFresh->prepShowtime();
306
+            $adminApi->returnSuccess([\web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID => $profileFresh->identifier]);
324 307
             break;
325
-        }
326
-        $expiry = new DateTime($expiryRaw);
327
-        try {
328
-            switch ($inputDecoded['ACTION']) {
308
+        case web\lib\admin\API::ACTION_ENDUSER_NEW:
309
+        // fall-through intentional, those two actions are doing nearly identical things
310
+        case web\lib\admin\API::ACTION_ENDUSER_CHANGEEXPIRY:
311
+            $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
312
+            if ($prof_id === FALSE) {
313
+                exit(1);
314
+            }
315
+            $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id);
316
+            if ($evaluation === FALSE) {
317
+                exit(1);
318
+            }
319
+            list($idp, $profile) = $evaluation;
320
+            $user = $validator->string($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERNAME));
321
+            $expiryRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_EXPIRY);
322
+            if ($expiryRaw === FALSE) {
323
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "The expiry date wasn't found in the request.");
324
+                break;
325
+            }
326
+            $expiry = new DateTime($expiryRaw);
327
+            try {
328
+                switch ($inputDecoded['ACTION']) {
329 329
                 case web\lib\admin\API::ACTION_ENDUSER_NEW:
330 330
                     $retval = $profile->addUser($user, $expiry);
331 331
                     break;
@@ -338,7 +338,7 @@  discard block
 block discarded – undo
338 338
                         $retval = 1; // function doesn't have any failure vectors not raising an Exception and doesn't return a value
339 339
                     }
340 340
                     break;
341
-            }
341
+                }
342 342
         } catch (Exception $e) {
343 343
             $adminApi->returnError(web\lib\admin\API::ERROR_INTERNAL_ERROR, "The operation failed. Maybe a duplicate username, or malformed expiry date?");
344 344
             exit(1);
@@ -349,25 +349,25 @@  discard block
 block discarded – undo
349 349
         }
350 350
         $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_SB_USERNAME => $user, \web\lib\admin\API::AUXATTRIB_SB_USERID => $retval]);
351 351
         break;
352
-    case \web\lib\admin\API::ACTION_ENDUSER_DEACTIVATE:
353
-    // fall-through intended: both actions are very similar
354
-    case \web\lib\admin\API::ACTION_TOKEN_NEW:
355
-        $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
356
-        if ($profile_id === FALSE) {
357
-            exit(1);
358
-        }
359
-        $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id);
360
-        if ($evaluation === FALSE) {
361
-            exit(1);
362
-        }
363
-        list($idp, $profile) = $evaluation;
364
-        $userId = $validator->integer($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID));
365
-        if ($userId === FALSE) {
366
-            $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "User ID is not an integer.");
367
-            exit(1);
368
-        }
369
-        $additionalInfo = [];
370
-        switch ($inputDecoded['ACTION']) { // this is where the two differ
352
+        case \web\lib\admin\API::ACTION_ENDUSER_DEACTIVATE:
353
+        // fall-through intended: both actions are very similar
354
+        case \web\lib\admin\API::ACTION_TOKEN_NEW:
355
+            $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
356
+            if ($profile_id === FALSE) {
357
+                exit(1);
358
+            }
359
+            $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id);
360
+            if ($evaluation === FALSE) {
361
+                exit(1);
362
+            }
363
+            list($idp, $profile) = $evaluation;
364
+            $userId = $validator->integer($adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID));
365
+            if ($userId === FALSE) {
366
+                $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "User ID is not an integer.");
367
+                exit(1);
368
+            }
369
+            $additionalInfo = [];
370
+            switch ($inputDecoded['ACTION']) { // this is where the two differ
371 371
             case \web\lib\admin\API::ACTION_ENDUSER_DEACTIVATE:
372 372
                 $result = $profile->deactivateUser($userId);
373 373
                 break;
@@ -400,7 +400,7 @@  discard block
 block discarded – undo
400 400
                     }
401 401
                 }
402 402
                 break;
403
-        }
403
+            }
404 404
 
405 405
         if ($result !== TRUE) {
406 406
             $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "These parameters did not lead to an existing, active user.");
@@ -408,69 +408,69 @@  discard block
 block discarded – undo
408 408
         }
409 409
         $adminApi->returnSuccess($additionalInfo);
410 410
         break;
411
-    case \web\lib\admin\API::ACTION_ENDUSER_IDENTIFY:
412
-        $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
413
-        if ($profile_id === FALSE) {
414
-            exit(1);
415
-        }
416
-        $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id);
417
-        if ($evaluation === FALSE) {
418
-            exit(1);
419
-        }
420
-        list($idp, $profile) = $evaluation;
421
-        $userId = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID);
422
-        $userName = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERNAME);
423
-        $certSerial = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL);
424
-		$certCN = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTCN);
425
-        if ($userId === FALSE && $userName === FALSE && $certSerial === FALSE && $certCN === FALSE) {
426
-            // we need at least one of those
427
-            $adminApi->returnError(\web\lib\admin\API::ERROR_MISSING_PARAMETER, "At least one of User ID, Username, certificate serial, or certificate CN is required.");
428
-            break;
429
-        }
430
-        if ($certSerial !== FALSE) { // we got a cert serial
431
-            $serial = explode(":", $certSerial);
432
-            $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]);
411
+        case \web\lib\admin\API::ACTION_ENDUSER_IDENTIFY:
412
+            $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
413
+            if ($profile_id === FALSE) {
414
+                exit(1);
433 415
             }
434
-        if ($certCN !== FALSE) { // we got a cert CN
435
-            $cert = new \core\SilverbulletCertificate($certCN);
436
-        }
437
-        if ($cert !== NULL) { // we found a cert; verify it and extract userId
438
-            if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) {
439
-                return $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Certificate not found.");
416
+            $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id);
417
+            if ($evaluation === FALSE) {
418
+                exit(1);
440 419
             }
441
-            if ($cert->profileId != $profile->identifier) {
442
-                return $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Certificate does not belong to this profile.");
420
+            list($idp, $profile) = $evaluation;
421
+            $userId = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID);
422
+            $userName = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERNAME);
423
+            $certSerial = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL);
424
+		    $certCN = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTCN);
425
+            if ($userId === FALSE && $userName === FALSE && $certSerial === FALSE && $certCN === FALSE) {
426
+                // we need at least one of those
427
+                $adminApi->returnError(\web\lib\admin\API::ERROR_MISSING_PARAMETER, "At least one of User ID, Username, certificate serial, or certificate CN is required.");
428
+                break;
443 429
             }
444
-            $userId = $cert->userId;
445
-        }
446
-        if ($userId !== FALSE) {
447
-            $userList = $profile->getUserById($userId);
448
-        }
449
-        if ($userName !== FALSE) {
450
-            $userList = $profile->getUserByName($userName);
451
-        }
452
-        if (count($userList) === 1) {
453
-            foreach ($userList as $oneUserId => $oneUserName) {
454
-                return $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_SB_USERNAME => $oneUserName, \web\lib\admin\API::AUXATTRIB_SB_USERID => $oneUserId]);
430
+            if ($certSerial !== FALSE) { // we got a cert serial
431
+                $serial = explode(":", $certSerial);
432
+                $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]);
433
+                }
434
+            if ($certCN !== FALSE) { // we got a cert CN
435
+                $cert = new \core\SilverbulletCertificate($certCN);
455 436
             }
456
-        }
457
-        $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "No matching user found in this profile.");
458
-        break;
459
-    case \web\lib\admin\API::ACTION_ENDUSER_LIST:
460
-    // fall-through: those two are similar
461
-    case \web\lib\admin\API::ACTION_TOKEN_LIST:
462
-        $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
463
-        if ($profile_id === FALSE) {
464
-            exit(1);
465
-        }
466
-        $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id);
467
-        if ($evaluation === FALSE) {
468
-            exit(1);
469
-        }
470
-        list($idp, $profile) = $evaluation;
471
-        $allUsers = $profile->listAllUsers();
472
-        // this is where they differ
473
-        switch ($inputDecoded['ACTION']) {
437
+            if ($cert !== NULL) { // we found a cert; verify it and extract userId
438
+                if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) {
439
+                    return $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Certificate not found.");
440
+                }
441
+                if ($cert->profileId != $profile->identifier) {
442
+                    return $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Certificate does not belong to this profile.");
443
+                }
444
+                $userId = $cert->userId;
445
+            }
446
+            if ($userId !== FALSE) {
447
+                $userList = $profile->getUserById($userId);
448
+            }
449
+            if ($userName !== FALSE) {
450
+                $userList = $profile->getUserByName($userName);
451
+            }
452
+            if (count($userList) === 1) {
453
+                foreach ($userList as $oneUserId => $oneUserName) {
454
+                    return $adminApi->returnSuccess([web\lib\admin\API::AUXATTRIB_SB_USERNAME => $oneUserName, \web\lib\admin\API::AUXATTRIB_SB_USERID => $oneUserId]);
455
+                }
456
+            }
457
+            $adminApi->returnError(\web\lib\admin\API::ERROR_INVALID_PARAMETER, "No matching user found in this profile.");
458
+            break;
459
+        case \web\lib\admin\API::ACTION_ENDUSER_LIST:
460
+        // fall-through: those two are similar
461
+        case \web\lib\admin\API::ACTION_TOKEN_LIST:
462
+            $profile_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
463
+            if ($profile_id === FALSE) {
464
+                exit(1);
465
+            }
466
+            $evaluation = $adminApi->commonSbProfileChecks($fed, $profile_id);
467
+            if ($evaluation === FALSE) {
468
+                exit(1);
469
+            }
470
+            list($idp, $profile) = $evaluation;
471
+            $allUsers = $profile->listAllUsers();
472
+            // this is where they differ
473
+            switch ($inputDecoded['ACTION']) {
474 474
             case \web\lib\admin\API::ACTION_ENDUSER_LIST:
475 475
                 $adminApi->returnSuccess($allUsers);
476 476
                 break;
@@ -489,123 +489,123 @@  discard block
 block discarded – undo
489 489
                     $infoSet[$oneTokenObject->userId] = [\web\lib\admin\API::AUXATTRIB_TOKEN => $oneTokenObject->invitationTokenString, "STATUS" => $oneTokenObject->invitationTokenStatus];
490 490
                 }
491 491
                 $adminApi->returnSuccess($infoSet);
492
-        }
493
-        break;
494
-    case \web\lib\admin\API::ACTION_TOKEN_REVOKE:
495
-        $tokenRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_TOKEN);
496
-        if ($tokenRaw === FALSE) {
497
-            exit(1);
498
-        }
499
-        $token = new core\SilverbulletInvitation($tokenRaw);
500
-        if ($token->invitationTokenStatus !== core\SilverbulletInvitation::SB_TOKENSTATUS_VALID && $token->invitationTokenStatus !== core\SilverbulletInvitation::SB_TOKENSTATUS_PARTIALLY_REDEEMED) {
501
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "This is not a currently valid token.");
502
-            exit(1);
503
-        }
504
-        $token->revokeInvitation();
505
-        $adminApi->returnSuccess([]);
506
-        break;
507
-    case \web\lib\admin\API::ACTION_CERT_LIST:
508
-        $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
509
-        $user_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID);
510
-        if ($prof_id === FALSE || !is_int($user_id)) {
511
-            exit(1);
512
-        }
513
-        $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id);
514
-        if ($evaluation === FALSE) {
515
-            exit(1);
516
-        }
517
-        list($idp, $profile) = $evaluation;
518
-        $invitations = $profile->userStatus($user_id);
519
-        // now pull out cert information from the object
520
-        $certs = [];
521
-        foreach ($invitations as $oneInvitation) {
522
-            $certs = array_merge($certs, $oneInvitation->associatedCertificates);
523
-        }
524
-        // extract relevant subset of information from cert objects
525
-        $certDetails = [];
526
-        foreach ($certs as $cert) {
527
-            $certDetails[$cert->ca_type . ":" . $cert->serial] = ["ISSUED" => $cert->issued, "EXPIRY" => $cert->expiry, "STATUS" => $cert->status, "DEVICE" => $cert->device, "CN" => $cert->username, "ANNOTATION" => $cert->annotation];
528
-        }
529
-        $adminApi->returnSuccess($certDetails);
530
-        break;
531
-    case \web\lib\admin\API::ACTION_CERT_REVOKE:
532
-        $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
533
-        if ($prof_id === FALSE) {
534
-            exit(1);
535
-        }
536
-        $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id);
537
-        if ($evaluation === FALSE) {
538
-            exit(1);
539
-        }
540
-        list($idp, $profile) = $evaluation;
541
-        // tear apart the serial
542
-        $serialRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL);
543
-        if ($serialRaw === FALSE) {
544
-            exit(1);
545
-        }
546
-        $serial = explode(":", $serialRaw);
547
-        $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]);
548
-        if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) {
549
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial not found.");
550
-        }
551
-        if ($cert->profileId != $profile->identifier) {
552
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial does not belong to this profile.");
553
-        }
554
-        $cert->revokeCertificate();
555
-        $adminApi->returnSuccess([]);
492
+            }
556 493
         break;
557
-    case \web\lib\admin\API::ACTION_CERT_ANNOTATE:
558
-        $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
559
-        if ($prof_id === FALSE) {
560
-            exit(1);
561
-        }
562
-        $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id);
563
-        if ($evaluation === FALSE) {
564
-            exit(1);
565
-        }
566
-        list($idp, $profile) = $evaluation;
567
-        // tear apart the serial
568
-        $serialRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL);
569
-        if ($serialRaw === FALSE) {
570
-            exit(1);
571
-        }
572
-        $serial = explode(":", $serialRaw);
573
-        $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]);
574
-        if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) {
575
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial not found.");
576
-        }
577
-        if ($cert->profileId != $profile->identifier) {
578
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial does not belong to this profile.");
579
-        }
580
-        $annotationRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTANNOTATION);
581
-        if ($annotationRaw === FALSE) {
582
-            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Unable to extract annotation.");
494
+        case \web\lib\admin\API::ACTION_TOKEN_REVOKE:
495
+            $tokenRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_TOKEN);
496
+            if ($tokenRaw === FALSE) {
497
+                exit(1);
498
+            }
499
+            $token = new core\SilverbulletInvitation($tokenRaw);
500
+            if ($token->invitationTokenStatus !== core\SilverbulletInvitation::SB_TOKENSTATUS_VALID && $token->invitationTokenStatus !== core\SilverbulletInvitation::SB_TOKENSTATUS_PARTIALLY_REDEEMED) {
501
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "This is not a currently valid token.");
502
+                exit(1);
503
+            }
504
+            $token->revokeInvitation();
505
+            $adminApi->returnSuccess([]);
583 506
             break;
584
-        }
585
-        $annotation = json_decode($annotationRaw, TRUE);
586
-        $cert->annotate($annotation);
587
-        $adminApi->returnSuccess([]);
588
-
589
-        break;
590
-    case web\lib\admin\API::ACTION_STATISTICS_INST:
591
-        $retArray = [];
592
-        $idpIdentifier = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID);
593
-        if ($idpIdentifier === FALSE) {
594
-            throw new Exception("A required parameter is missing, and this wasn't caught earlier?!");
595
-        } else {
596
-            try {
597
-                $thisIdP = $validator->existingIdP($idpIdentifier, NULL, $fed);
598
-            } catch (Exception $e) {
599
-                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
507
+        case \web\lib\admin\API::ACTION_CERT_LIST:
508
+            $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
509
+            $user_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_USERID);
510
+            if ($prof_id === FALSE || !is_int($user_id)) {
600 511
                 exit(1);
601 512
             }
602
-            $retArray[$idpIdentifier] = [];
603
-            foreach ($thisIdP->listProfiles() as $oneProfile) {
604
-                $retArray[$idpIdentifier][$oneProfile->identifier] = $oneProfile->getUserDownloadStats();
513
+            $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id);
514
+            if ($evaluation === FALSE) {
515
+                exit(1);
605 516
             }
606
-        }
607
-        $adminApi->returnSuccess($retArray);
608
-        break;
609
-    default:
610
-        $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_ACTION, "Not implemented yet.");
517
+            list($idp, $profile) = $evaluation;
518
+            $invitations = $profile->userStatus($user_id);
519
+            // now pull out cert information from the object
520
+            $certs = [];
521
+            foreach ($invitations as $oneInvitation) {
522
+                $certs = array_merge($certs, $oneInvitation->associatedCertificates);
523
+            }
524
+            // extract relevant subset of information from cert objects
525
+            $certDetails = [];
526
+            foreach ($certs as $cert) {
527
+                $certDetails[$cert->ca_type . ":" . $cert->serial] = ["ISSUED" => $cert->issued, "EXPIRY" => $cert->expiry, "STATUS" => $cert->status, "DEVICE" => $cert->device, "CN" => $cert->username, "ANNOTATION" => $cert->annotation];
528
+            }
529
+            $adminApi->returnSuccess($certDetails);
530
+            break;
531
+        case \web\lib\admin\API::ACTION_CERT_REVOKE:
532
+            $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
533
+            if ($prof_id === FALSE) {
534
+                exit(1);
535
+            }
536
+            $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id);
537
+            if ($evaluation === FALSE) {
538
+                exit(1);
539
+            }
540
+            list($idp, $profile) = $evaluation;
541
+            // tear apart the serial
542
+            $serialRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL);
543
+            if ($serialRaw === FALSE) {
544
+                exit(1);
545
+            }
546
+            $serial = explode(":", $serialRaw);
547
+            $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]);
548
+            if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) {
549
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial not found.");
550
+            }
551
+            if ($cert->profileId != $profile->identifier) {
552
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial does not belong to this profile.");
553
+            }
554
+            $cert->revokeCertificate();
555
+            $adminApi->returnSuccess([]);
556
+            break;
557
+        case \web\lib\admin\API::ACTION_CERT_ANNOTATE:
558
+            $prof_id = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_PROFILE_ID);
559
+            if ($prof_id === FALSE) {
560
+                exit(1);
561
+            }
562
+            $evaluation = $adminApi->commonSbProfileChecks($fed, $prof_id);
563
+            if ($evaluation === FALSE) {
564
+                exit(1);
565
+            }
566
+            list($idp, $profile) = $evaluation;
567
+            // tear apart the serial
568
+            $serialRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTSERIAL);
569
+            if ($serialRaw === FALSE) {
570
+                exit(1);
571
+            }
572
+            $serial = explode(":", $serialRaw);
573
+            $cert = new \core\SilverbulletCertificate($serial[1], $serial[0]);
574
+            if ($cert->status == \core\SilverbulletCertificate::CERTSTATUS_INVALID) {
575
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial not found.");
576
+            }
577
+            if ($cert->profileId != $profile->identifier) {
578
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Serial does not belong to this profile.");
579
+            }
580
+            $annotationRaw = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_SB_CERTANNOTATION);
581
+            if ($annotationRaw === FALSE) {
582
+                $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "Unable to extract annotation.");
583
+                break;
584
+            }
585
+            $annotation = json_decode($annotationRaw, TRUE);
586
+            $cert->annotate($annotation);
587
+            $adminApi->returnSuccess([]);
588
+
589
+            break;
590
+        case web\lib\admin\API::ACTION_STATISTICS_INST:
591
+            $retArray = [];
592
+            $idpIdentifier = $adminApi->firstParameterInstance($scrubbedParameters, web\lib\admin\API::AUXATTRIB_CAT_INST_ID);
593
+            if ($idpIdentifier === FALSE) {
594
+                throw new Exception("A required parameter is missing, and this wasn't caught earlier?!");
595
+            } else {
596
+                try {
597
+                    $thisIdP = $validator->existingIdP($idpIdentifier, NULL, $fed);
598
+                } catch (Exception $e) {
599
+                    $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_PARAMETER, "IdP identifier does not exist!");
600
+                    exit(1);
601
+                }
602
+                $retArray[$idpIdentifier] = [];
603
+                foreach ($thisIdP->listProfiles() as $oneProfile) {
604
+                    $retArray[$idpIdentifier][$oneProfile->identifier] = $oneProfile->getUserDownloadStats();
605
+                }
606
+            }
607
+            $adminApi->returnSuccess($retArray);
608
+            break;
609
+        default:
610
+            $adminApi->returnError(web\lib\admin\API::ERROR_INVALID_ACTION, "Not implemented yet.");
611 611
 }
612 612
\ No newline at end of file
Please login to merge, or discard this patch.
web/admin/action_enrollment.php 1 patch
Switch Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -49,15 +49,15 @@
 block discarded – undo
49 49
 }
50 50
 
51 51
 switch ($_GET['token']) {
52
-    case "SELF-REGISTER":
53
-        $token = "SELF-REGISTER";
54
-        $checkval = \core\UserManagement::TOKENSTATUS_OK_NEW;
55
-        $federation = \config\ConfAssistant::CONSORTIUM['selfservice_registration'];
56
-        break;
57
-    default:
58
-        $tokenUnfiltered = $validator->token(filter_input(INPUT_GET,'token'));
59
-        $token = htmlspecialchars(strip_tags($tokenUnfiltered));
60
-        $checkval = $usermgmt->checkTokenValidity($token);
52
+        case "SELF-REGISTER":
53
+            $token = "SELF-REGISTER";
54
+            $checkval = \core\UserManagement::TOKENSTATUS_OK_NEW;
55
+            $federation = \config\ConfAssistant::CONSORTIUM['selfservice_registration'];
56
+            break;
57
+        default:
58
+            $tokenUnfiltered = $validator->token(filter_input(INPUT_GET,'token'));
59
+            $token = htmlspecialchars(strip_tags($tokenUnfiltered));
60
+            $checkval = $usermgmt->checkTokenValidity($token);
61 61
 }
62 62
 
63 63
 if ($checkval < 0) {
Please login to merge, or discard this patch.