|
10 | 10 | use SimpleSAML\Module\perun\model\Resource; |
11 | 11 | use SimpleSAML\Module\perun\model\Member; |
12 | 12 | use SimpleSAML\Error\Exception; |
| 13 | +use SimpleSAML\Logger; |
13 | 14 | use SimpleSAML\Module\perun\Exception as PerunException; |
14 | 15 |
|
15 | 16 | /** |
@@ -135,16 +136,11 @@ public function getMemberGroups($user, $vo) |
135 | 136 |
|
136 | 137 | public function getSpGroups($spEntityId) |
137 | 138 | { |
138 | | - $perunAttr = $this->connector->get('facilitiesManager', 'getFacilitiesByAttribute', [ |
139 | | - 'attributeName' => 'urn:perun:facility:attribute-def:def:entityID', |
140 | | - 'attributeValue' => $spEntityId, |
141 | | - ])[0]; |
142 | | - $facility = new Facility( |
143 | | - $perunAttr['id'], |
144 | | - $perunAttr['name'], |
145 | | - $perunAttr['description'], |
146 | | - $spEntityId |
147 | | - ); |
| 139 | + $facility = $this->getFacilityByEntityId($spEntityId); |
| 140 | + |
| 141 | + if ($facility === null) { |
| 142 | + return []; |
| 143 | + } |
148 | 144 |
|
149 | 145 | $perunAttrs = $this->connector->get('facilitiesManager', 'getAssignedResources', [ |
150 | 146 | 'facility' => $facility->getId(), |
@@ -304,37 +300,35 @@ public function getFacilityAttribute($facility, $attrName) |
304 | 300 |
|
305 | 301 | public function getUsersGroupsOnFacility($spEntityId, $userId) |
306 | 302 | { |
307 | | - $facilities = $this->connector->get('facilitiesManager', 'getFacilitiesByAttribute', [ |
308 | | - 'attributeName' => 'urn:perun:facility:attribute-def:def:entityID', |
309 | | - 'attributeValue' => $spEntityId, |
310 | | - ]); |
311 | | - |
| 303 | + $facility = $this->getFacilityByEntityId($spEntityId); |
312 | 304 | $groups = []; |
313 | 305 |
|
314 | | - foreach ($facilities as $facility) { |
315 | | - $usersGroupsOnFacility = $this->connector->get( |
316 | | - 'usersManager', |
317 | | - 'getRichGroupsWhereUserIsActive', |
318 | | - [ |
319 | | - 'facility' => $facility['id'], |
320 | | - 'user' => $userId, |
321 | | - 'attrNames' => ['urn:perun:group:attribute-def:virt:voShortName'] |
322 | | - ] |
323 | | - ); |
| 306 | + if ($facility === null) { |
| 307 | + return $groups; |
| 308 | + } |
324 | 309 |
|
325 | | - foreach ($usersGroupsOnFacility as $usersGroupOnFacility) { |
326 | | - if (isset($usersGroupOnFacility['attributes'][0]['friendlyName']) && |
327 | | - $usersGroupOnFacility['attributes'][0]['friendlyName'] === 'voShortName') { |
328 | | - $uniqueName = $usersGroupOnFacility['attributes'][0]['value'] . ":" . $usersGroupOnFacility['name']; |
| 310 | + $usersGroupsOnFacility = $this->connector->get( |
| 311 | + 'usersManager', |
| 312 | + 'getRichGroupsWhereUserIsActive', |
| 313 | + [ |
| 314 | + 'facility' => $facility->getId(), |
| 315 | + 'user' => $userId, |
| 316 | + 'attrNames' => ['urn:perun:group:attribute-def:virt:voShortName'] |
| 317 | + ] |
| 318 | + ); |
329 | 319 |
|
330 | | - array_push($groups, new Group( |
331 | | - $usersGroupOnFacility['id'], |
332 | | - $usersGroupOnFacility['voId'], |
333 | | - $usersGroupOnFacility['name'], |
334 | | - $uniqueName, |
335 | | - $usersGroupOnFacility['description'] |
336 | | - )); |
337 | | - } |
| 320 | + foreach ($usersGroupsOnFacility as $usersGroupOnFacility) { |
| 321 | + if (isset($usersGroupOnFacility['attributes'][0]['friendlyName']) && |
| 322 | + $usersGroupOnFacility['attributes'][0]['friendlyName'] === 'voShortName') { |
| 323 | + $uniqueName = $usersGroupOnFacility['attributes'][0]['value'] . ":" . $usersGroupOnFacility['name']; |
| 324 | + |
| 325 | + array_push($groups, new Group( |
| 326 | + $usersGroupOnFacility['id'], |
| 327 | + $usersGroupOnFacility['voId'], |
| 328 | + $usersGroupOnFacility['name'], |
| 329 | + $uniqueName, |
| 330 | + $usersGroupOnFacility['description'] |
| 331 | + )); |
338 | 332 | } |
339 | 333 | } |
340 | 334 | $groups = $this->removeDuplicateEntities($groups); |
@@ -363,6 +357,37 @@ public function getFacilitiesByEntityId($spEntityId) |
363 | 357 | return $facilities; |
364 | 358 | } |
365 | 359 |
|
| 360 | + public function getFacilityByEntityId($spEntityId) |
| 361 | + { |
| 362 | + $perunAttr = $this->connector->get('facilitiesManager', 'getFacilitiesByAttribute', [ |
| 363 | + 'attributeName' => 'urn:perun:facility:attribute-def:def:entityID', |
| 364 | + 'attributeValue' => $spEntityId, |
| 365 | + ]); |
| 366 | + |
| 367 | + if (empty($perunAttr)) { |
| 368 | + Logger::warning( |
| 369 | + 'perun:AdapterRpc: No facility with entityID \'' . $spEntityId . '\' found.' |
| 370 | + ); |
| 371 | + return null; |
| 372 | + } |
| 373 | + |
| 374 | + if (count($perunAttr) > 1) { |
| 375 | + Logger::warning( |
| 376 | + 'perun:AdapterRpc: There is more than one facility with entityID \'' . $spEntityId . '.' |
| 377 | + ); |
| 378 | + return null; |
| 379 | + } |
| 380 | + |
| 381 | + $facility = new Facility( |
| 382 | + $perunAttr[0]['id'], |
| 383 | + $perunAttr[0]['name'], |
| 384 | + $perunAttr[0]['description'], |
| 385 | + $spEntityId |
| 386 | + ); |
| 387 | + |
| 388 | + return $facility; |
| 389 | + } |
| 390 | + |
366 | 391 | /** |
367 | 392 | * Returns member by User and Vo |
368 | 393 | * @param User $user |
|
0 commit comments