1
|
|
|
<?php |
2
|
|
|
/* |
3
|
|
|
* ***************************************************************************** |
4
|
|
|
* Contributions to this work were made on behalf of the GÉANT project, a |
5
|
|
|
* project that has received funding from the European Union’s Framework |
6
|
|
|
* Programme 7 under Grant Agreements No. 238875 (GN3) and No. 605243 (GN3plus), |
7
|
|
|
* Horizon 2020 research and innovation programme under Grant Agreements No. |
8
|
|
|
* 691567 (GN4-1) and No. 731122 (GN4-2). |
9
|
|
|
* On behalf of the aforementioned projects, GEANT Association is the sole owner |
10
|
|
|
* of the copyright in all material which was developed by a member of the GÉANT |
11
|
|
|
* project. GÉANT Vereniging (Association) is registered with the Chamber of |
12
|
|
|
* Commerce in Amsterdam with registration number 40535155 and operates in the |
13
|
|
|
* UK as a branch of GÉANT Vereniging. |
14
|
|
|
* |
15
|
|
|
* Registered office: Hoekenrode 3, 1102BR Amsterdam, The Netherlands. |
16
|
|
|
* UK branch address: City House, 126-130 Hills Road, Cambridge CB2 1PQ, UK |
17
|
|
|
* |
18
|
|
|
* License: see the web/copyright.inc.php file in the file structure or |
19
|
|
|
* <base_url>/copyright.php after deploying the software |
20
|
|
|
*/ |
21
|
|
|
|
22
|
|
|
/** |
23
|
|
|
* This page displays the dashboard overview of an entire IdP. |
24
|
|
|
* |
25
|
|
|
* @author Stefan Winter <[email protected]> |
26
|
|
|
*/ |
27
|
|
|
?> |
28
|
|
|
<?php |
29
|
|
|
require_once dirname(dirname(dirname(__FILE__))) . "/config/_config.php"; |
30
|
|
|
|
31
|
|
|
$deco = new \web\lib\admin\PageDecoration(); |
32
|
|
|
$validator = new \web\lib\common\InputValidation(); |
33
|
|
|
$uiElements = new web\lib\admin\UIElements(); |
34
|
|
|
|
35
|
|
|
// our own location, to give to diag URLs |
36
|
|
|
if (isset($_SERVER['HTTPS'])) { |
37
|
|
|
$link = 'https://'; |
38
|
|
|
} else { |
39
|
|
|
$link = 'http://'; |
40
|
|
|
} |
41
|
|
|
$link .= $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME']; |
42
|
|
|
$link = htmlspecialchars($link); |
43
|
|
|
|
44
|
|
|
echo $deco->defaultPagePrelude(sprintf(_("%s: %s Dashboard"), \config\Master::APPEARANCE['productname'], $uiElements->nomenclatureHotspot)); |
45
|
|
|
require_once "inc/click_button_js.php"; |
46
|
|
|
|
47
|
|
|
// RADIUS status icons |
48
|
|
|
$radiusMessages = [ |
49
|
|
|
\core\AbstractDeployment::RADIUS_OK => ['icon' => '../resources/images/icons/Quetto/check-icon.png', 'text' => _("Successfully set profile")], |
50
|
|
|
\core\AbstractDeployment::RADIUS_FAILURE => ['icon' => '../resources/images/icons/Quetto/no-icon.png', 'text' => _("Some problem occured during profile update")], |
51
|
|
|
]; |
52
|
|
|
// let's check if the inst handle actually exists in the DB |
53
|
|
|
$my_inst = $validator->existingIdP($_GET['inst_id'], $_SESSION['user']); |
54
|
|
|
|
55
|
|
|
// delete stored realm |
56
|
|
|
|
57
|
|
|
if (isset($_SESSION['check_realm'])) { |
58
|
|
|
unset($_SESSION['check_realm']); |
59
|
|
|
} |
60
|
|
|
$mapCode = web\lib\admin\AbstractMap::instance($my_inst, TRUE); |
61
|
|
|
echo $mapCode->htmlHeadCode(); |
62
|
|
|
?> |
63
|
|
|
</head> |
64
|
|
|
<body |
65
|
|
|
<?php echo $mapCode->bodyTagCode(); ?>> |
66
|
|
|
<?php |
67
|
|
|
echo $deco->productheader("ADMIN-SP"); |
68
|
|
|
// Sanity check complete. Show what we know about this IdP. |
69
|
|
|
$idpoptions = $my_inst->getAttributes(); |
70
|
|
|
?> |
71
|
|
|
<h1><?php echo sprintf(_("%s Overview"), $uiElements->nomenclatureHotspot); ?></h1> |
72
|
|
|
<div> |
73
|
|
|
<h2><?php echo sprintf(_("%s general settings"), $uiElements->nomenclatureHotspot); ?></h2> |
74
|
|
|
<?php |
75
|
|
|
echo $uiElements->instLevelInfoBoxes($my_inst); |
76
|
|
|
?> |
77
|
|
|
<?php |
78
|
|
|
foreach ($idpoptions as $optionname => $optionvalue) { |
79
|
|
|
if ($optionvalue['name'] == "general:geo_coordinates") { |
80
|
|
|
echo '<div class="infobox">'; |
81
|
|
|
echo $mapCode->htmlShowtime(); |
82
|
|
|
echo '</div>'; |
83
|
|
|
break; |
84
|
|
|
} |
85
|
|
|
} |
86
|
|
|
?> |
87
|
|
|
</div> |
88
|
|
|
<?php |
89
|
|
|
$readonly = \config\Master::DB['INST']['readonly']; |
90
|
|
|
?> |
91
|
|
|
<hr><h2><?php echo _("Available Support actions"); ?></h2> |
92
|
|
|
<table> |
93
|
|
|
<?php |
94
|
|
|
if (\config\Master::FUNCTIONALITY_LOCATIONS['DIAGNOSTICS'] !== NULL) { |
95
|
|
|
echo "<tr> |
96
|
|
|
<td>" . _("Check another realm's reachability") . "</td> |
97
|
|
|
<td><form method='post' action='../diag/action_realmcheck.php?inst_id=$my_inst->identifier' accept-charset='UTF-8'> |
98
|
|
|
<input type='text' name='realm' id='realm'> |
99
|
|
|
<input type='hidden' name='comefrom' id='comefrom' value='$link'/> |
100
|
|
|
<button type='submit'>" . _("Go!") . "</button> |
101
|
|
|
</form> |
102
|
|
|
</td> |
103
|
|
|
</tr>"; |
104
|
|
|
} |
105
|
|
|
if (\config\ConfAssistant::CONSORTIUM['name'] == "eduroam") { // SW: APPROVED |
106
|
|
|
echo "<tr> |
107
|
|
|
<td>" . sprintf(_("Check %s server status"), $uiElements->nomenclatureFed) . "</td> |
108
|
|
|
<td> |
109
|
|
|
<form action='https://monitor.eduroam.org/mon_direct.php' accept-charset='UTF-8'> |
110
|
|
|
<button type='submit'>" . _("Go!") . "</button> |
111
|
|
|
</form> |
112
|
|
|
</td> |
113
|
|
|
</tr>"; |
114
|
|
|
} |
115
|
|
|
?> |
116
|
|
|
</table> |
117
|
|
|
<hr/> |
118
|
|
|
<?php |
119
|
|
|
$hotspotProfiles = $my_inst->listDeployments(); |
120
|
|
|
if (count($hotspotProfiles) == 0) { // no profiles yet. |
121
|
|
|
echo "<h2>" . sprintf(_("There are not yet any known deployments for your %s."), $uiElements->nomenclatureHotspot) . "</h2>"; |
122
|
|
|
} |
123
|
|
|
if (count($hotspotProfiles) > 0) { // no profiles yet. |
124
|
|
|
echo "<h2>" . sprintf(_("Deployments for this %s"), $uiElements->nomenclatureHotspot) . "</h2>"; |
125
|
|
|
// display an info box with the connection data |
126
|
|
|
} |
127
|
|
|
|
128
|
|
|
foreach ($hotspotProfiles as $counter => $deploymentObject) { |
129
|
|
|
$radius_status = array(); |
130
|
|
|
$radius_status[0] = $deploymentObject->radius_status_1; |
131
|
|
|
$radius_status[1] = $deploymentObject->radius_status_2; |
132
|
|
|
$retry = $deploymentObject->checkRADIUSconfigDaemon(); |
|
|
|
|
133
|
|
|
$deploymentObject->checkRADIUSHost(1); |
|
|
|
|
134
|
|
|
?> |
135
|
|
|
<div style='display: table-row; margin-bottom: 20px;'> |
136
|
|
|
<div class='profilebox' style='display: table-cell;'> |
137
|
|
|
<h2><?php echo core\DeploymentManaged::PRODUCTNAME . " (<span style='color:" . ( $deploymentObject->status == \core\AbstractDeployment::INACTIVE ? "red;'>" . _("inactive") : "green;'>" . _("active") ) . "</span>)"; ?></h2> |
138
|
|
|
<table> |
139
|
|
|
<tr> |
140
|
|
|
<td><strong><?php echo _("Your primary RADIUS server") ?></strong><br/> |
141
|
|
|
<?php |
142
|
|
|
if ($deploymentObject->host1_v4 !== NULL) { |
143
|
|
|
echo _("IPv4") . ": " . $deploymentObject->host1_v4; |
144
|
|
|
} |
145
|
|
|
if ($deploymentObject->host1_v4 !== NULL && $deploymentObject->host1_v6 !== NULL) { |
146
|
|
|
echo "<br/>"; |
147
|
|
|
} |
148
|
|
|
if ($deploymentObject->host1_v6 !== NULL) { |
149
|
|
|
echo _("IPv6") . ": " . $deploymentObject->host1_v6; |
150
|
|
|
} |
151
|
|
|
?> |
152
|
|
|
</td> |
153
|
|
|
<td><?php echo _("RADIUS port number: ") ?></td> |
154
|
|
|
<td><?php echo $deploymentObject->port1; ?></td> |
155
|
|
|
<td> |
156
|
|
|
<?php |
157
|
|
|
echo "<img src='" . $radiusMessages[$deploymentObject->radius_status_1]['icon'] . |
158
|
|
|
"' alt='" . $radiusMessages[$deploymentObject->radius_status_1]['text'] . |
159
|
|
|
"' title='" . $radiusMessages[$deploymentObject->radius_status_1]['text'] . "'>"; |
160
|
|
|
?> |
161
|
|
|
</td> |
162
|
|
|
</tr> |
163
|
|
|
<tr> |
164
|
|
|
<td><strong><?php echo _("Your backup RADIUS server") ?><br/></strong> |
165
|
|
|
<?php |
166
|
|
|
if ($deploymentObject->host2_v4 !== NULL) { |
167
|
|
|
echo _("IPv4") . ": " . $deploymentObject->host2_v4; |
168
|
|
|
} |
169
|
|
|
if ($deploymentObject->host2_v4 !== NULL && $deploymentObject->host2_v6 !== NULL) { |
170
|
|
|
echo "<br/>"; |
171
|
|
|
} |
172
|
|
|
if ($deploymentObject->host2_v6 !== NULL) { |
173
|
|
|
echo _("IPv6") . ": " . $deploymentObject->host2_v6; |
174
|
|
|
} |
175
|
|
|
?></td> |
176
|
|
|
<td><?php echo _("RADIUS port number: ") ?></td> |
177
|
|
|
<td><?php echo $deploymentObject->port2; ?></td> |
178
|
|
|
<td> |
179
|
|
|
<?php |
180
|
|
|
echo "<img src='" . $radiusMessages[$deploymentObject->radius_status_2]['icon'] . |
181
|
|
|
"' alt='" . $radiusMessages[$deploymentObject->radius_status_2]['text'] . |
182
|
|
|
"' title='" . $radiusMessages[$deploymentObject->radius_status_2]['text'] . "'>"; |
183
|
|
|
?> |
184
|
|
|
</td> |
185
|
|
|
</tr> |
186
|
|
|
|
187
|
|
|
<tr> |
188
|
|
|
<td><strong><?php echo _("RADIUS shared secret"); ?></strong></td> |
189
|
|
|
<td><?php echo $deploymentObject->secret; ?></td> |
190
|
|
|
</tr> |
191
|
|
|
|
192
|
|
|
<?php if ($opname = $deploymentObject->getAttributes("managedsp:operatorname")[0]['value'] ?? NULL) { ?> |
193
|
|
|
<tr> |
194
|
|
|
<td><strong><?php echo _("Custom Operator-Name"); ?></strong></td> |
195
|
|
|
<td><?php echo $opname; ?></td> |
196
|
|
|
</tr> |
197
|
|
|
<?php |
198
|
|
|
} |
199
|
|
|
if ($vlan = $deploymentObject->getAttributes("managedsp:vlan")[0]['value'] ?? NULL) { ?> |
200
|
|
|
<tr> |
201
|
|
|
<td><strong><?php echo _("VLAN tag for own users"); ?></strong></td> |
202
|
|
|
<td><?php echo $vlan; ?></td> |
203
|
|
|
</tr> |
204
|
|
|
<?php } ?> |
205
|
|
|
<?php |
206
|
|
|
$allRealms = array_values(array_unique(array_column($deploymentObject->getAttributes("managedsp:realmforvlan"), "value"))); |
207
|
|
|
if (!empty($allRealms)) { |
208
|
|
|
?> |
209
|
|
|
<tr> |
210
|
|
|
<td><strong><?php echo _("Realm to be considered own users"); ?></strong></td> |
211
|
|
|
<td><?php echo implode(', ', $allRealms); ?></td> |
212
|
|
|
</tr> |
213
|
|
|
<?php |
214
|
|
|
} |
215
|
|
|
?> |
216
|
|
|
</table> |
217
|
|
|
<div class='buttongroupprofilebox' style='clear:both;'> |
218
|
|
|
<form action='edit_hotspot.php?inst_id=<?php echo $my_inst->identifier; ?>&deployment_id=<?php echo $deploymentObject->identifier; ?>' method='post' accept-charset='UTF-8'> |
219
|
|
|
<hr/> |
220
|
|
|
<button type='submit' name='profile_action' value='edit'><?php echo _("Advanced Configuration"); ?></button> |
221
|
|
|
</form> |
222
|
|
|
<?php if ($deploymentObject->status == \core\AbstractDeployment::ACTIVE) { ?> |
223
|
|
|
<form action='edit_hotspot.php?inst_id=<?php echo $my_inst->identifier; ?>&deployment_id=<?php echo $deploymentObject->identifier; ?>' method='post' accept-charset='UTF-8'> |
224
|
|
|
<button class='delete' type='submit' name='submitbutton' value='<?php echo web\lib\common\FormElements::BUTTON_DELETE; ?>' onclick="return confirm('<?php printf(_("Do you really want to deactivate the %s deployment?"), core\DeploymentManaged::PRODUCTNAME); ?>')"> |
225
|
|
|
<?php echo _("Deactivate"); ?> |
226
|
|
|
</button> |
227
|
|
|
<?php |
228
|
|
|
if (isset($_GET['res']) && is_array($_GET['res'])) { |
229
|
|
|
$res = array_count_values($_GET['res']); |
230
|
|
|
if (isset($res['FAILURE']) && $res['FAILURE'] > 0) { |
231
|
|
|
echo '<br>'; |
232
|
|
|
if ($res['FAILURE'] == 2) { |
233
|
|
|
echo ' <span style="color: red;">' . _("Activation failure.") . '</span>'; |
234
|
|
|
} else { |
235
|
|
|
if (isset($_GET['res'][1]) && $_GET['res']['1'] == 'FAILURE') { |
236
|
|
|
echo ' <span style="color: red;">' . _("Activation failure for your primary RADIUS server.") . '</span>'; |
237
|
|
|
} else { |
238
|
|
|
echo ' <span style="color: red;">' . _("Activation failure for your backup RADIUS server.") . '</span>'; |
239
|
|
|
} |
240
|
|
|
} |
241
|
|
|
} |
242
|
|
|
} |
243
|
|
|
?> |
244
|
|
|
</form> |
245
|
|
|
<?php |
246
|
|
|
} else { |
247
|
|
|
?> |
248
|
|
|
<form action='edit_hotspot.php?inst_id=<?php echo $my_inst->identifier; ?>&deployment_id=<?php echo $deploymentObject->identifier; ?>' method='post' accept-charset='UTF-8'> |
249
|
|
|
<button class='delete' style='background-color: green;' type='submit' name='submitbutton' value='<?php echo web\lib\common\FormElements::BUTTON_ACTIVATE; ?>'> |
250
|
|
|
<?php echo _("Activate"); ?> |
251
|
|
|
</button> |
252
|
|
|
<?php |
253
|
|
|
if (isset($_GET['res']) && is_array($_GET['res'])) { |
254
|
|
|
$res = array_count_values($_GET['res']); |
255
|
|
|
if ($res['FAILURE'] > 0) { |
256
|
|
|
echo '<br>'; |
257
|
|
|
if ($res['FAILURE'] == 2) { |
258
|
|
|
echo ' <span style="color: red;">' . _("Failure during deactivation, your request is queued for handling") . '</span>'; |
259
|
|
|
} else { |
260
|
|
|
if (isset($_GET['res'][1]) && $_GET['res']['1'] == 'FAILURE') { |
261
|
|
|
echo ' <span style="color: red;">' . _("Deactivation failure for your primary RADIUS server, your request is queued.") . '</span>'; |
262
|
|
|
} else { |
263
|
|
|
echo ' <span style="color: red;">' . _("Deactivation failure for your backup RADIUS server, your request is queued.") . '</span>'; |
264
|
|
|
} |
265
|
|
|
} |
266
|
|
|
} |
267
|
|
|
} |
268
|
|
|
?> |
269
|
|
|
</form> |
270
|
|
|
<?php |
271
|
|
|
} |
272
|
|
|
if (in_array(1, $retry)) { |
273
|
|
|
?> |
274
|
|
|
<form action='edit_hotspot.php?inst_id=<?php echo $my_inst->identifier; ?>&deployment_id=<?php echo $deploymentObject->identifier; ?>' method='post' accept-charset='UTF-8'> |
275
|
|
|
<button class='delete' style='background-color: green;' type='submit' name='submitbutton' value='<?php echo web\lib\common\FormElements::BUTTON_RETRY; ?>'> |
276
|
|
|
<?php echo _("Push missing configuration update"); ?> |
277
|
|
|
</button> |
278
|
|
|
<?php |
279
|
|
|
foreach ($retry as $key => $value) { |
280
|
|
|
if ($value == 1) { |
281
|
|
|
?> |
282
|
|
|
<input type="hidden" name='update[]' value='<?php echo $key;?>'> |
283
|
|
|
<?php |
284
|
|
|
} |
285
|
|
|
} |
286
|
|
|
?> |
287
|
|
|
</form> |
288
|
|
|
<?php |
289
|
|
|
} |
290
|
|
|
?> |
291
|
|
|
</div> |
292
|
|
|
</div> |
293
|
|
|
<div style='width:20px;'></div> <!-- QR code space, reserved --> |
294
|
|
|
<div style='display: table-cell; min-width:200px;'></div> <!-- statistics space, reserved --> |
295
|
|
|
</div> |
296
|
|
|
|
297
|
|
|
<?php |
298
|
|
|
} |
299
|
|
|
if ($readonly === FALSE) { |
300
|
|
|
// the opportunity to add a new silverbullet profile is only shown if |
301
|
|
|
// a) there is no SB profile yet |
302
|
|
|
// b) federation wants this to happen |
303
|
|
|
|
304
|
|
|
$myfed = new \core\Federation($my_inst->federation); |
305
|
|
|
if (\config\Master::FUNCTIONALITY_LOCATIONS['CONFASSISTANT_SILVERBULLET'] == "LOCAL" && count($myfed->getAttributes("fed:silverbullet")) > 0 && $my_inst->deploymentCount() == 0) { |
306
|
|
|
// the button is grayed out if there's no support email address configured... |
307
|
|
|
$hasMail = count($my_inst->getAttributes("support:email")); |
308
|
|
|
?> |
309
|
|
|
<form action='edit_hotspot.php?inst_id=<?php echo $my_inst->identifier; ?>' method='post' accept-charset='UTF-8'> |
310
|
|
|
<div> |
311
|
|
|
<button type='submit' <?php echo ($hasMail > 0 ? "" : "disabled"); ?> name='profile_action' value='new'> |
312
|
|
|
<?php echo sprintf(_("Add %s deployment ..."), \core\DeploymentManaged::PRODUCTNAME); ?> |
313
|
|
|
</button> |
314
|
|
|
</div> |
315
|
|
|
</form> |
316
|
|
|
<?php |
317
|
|
|
} |
318
|
|
|
|
319
|
|
|
// adding a normal profile is always possible if we're configured for it |
320
|
|
|
} |
321
|
|
|
echo $deco->footer(); |
322
|
|
|
|
323
|
|
|
|