Skip to content
This repository was archived by the owner on Sep 19, 2022. It is now read-only.

Commit 4322a18

Browse files
Merge pull request #83 from BaranekD/getFacilitiesByEntityId
Using getFacilityByEntityId in all possible places
2 parents c0236f4 + 3ac8ed1 commit 4322a18

File tree

6 files changed

+143
-74
lines changed

6 files changed

+143
-74
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@
22
All notable changes to this project will be documented in this file.
33

44
## [Unreleased]
5+
#### Added
6+
- Added method getFacilityByEntityId
7+
58
#### Changed
69
- Slightly modified text displayed on WAYF
710
- Updated phpcs ruleset to PSR-12
811
- is_null() changed to === null
912
- Using identity comparison instead of equality comparison
1013
- Removed checks in ifs that var is (not) null before empty(var) function (empty checks that itself)
1114
- Double quotes changed to single quotes
15+
- getFacilitiesByEntityId marked as deprecated (getFacilityByEntityId should be used instead)
16+
- Using of getFacilityByEntityId instead of getFacilitiesByEntityId
1217

1318
#### Fixed
1419
- Fixed wrong dictionary name in post.php

lib/Adapter.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,18 @@ abstract public function getVoAttributes($vo, $attrNames);
119119
abstract public function getFacilityAttribute($facility, $attrName);
120120

121121
/**
122+
* @deprecated getFacilityByEntityId($spEntityId) should be used instead
122123
* @param string $spEntityId
123124
* @return Facility entities[]
124125
*/
125126
abstract public function getFacilitiesByEntityId($spEntityId);
126127

128+
/**
129+
* @param string $spEntityId
130+
* @return Facility facility
131+
*/
132+
abstract public function getFacilityByEntityId($spEntityId);
133+
127134
/**
128135
* @param string $spEntityId entity id of the sp
129136
* @param int $userId

lib/AdapterLdap.php

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use SimpleSAML\Module\perun\model\Group;
88
use SimpleSAML\Module\perun\model\Vo;
99
use SimpleSAML\Module\perun\model\Member;
10+
use SimpleSAML\Module\perun\model\Facility;
1011
use SimpleSAML\Error\Exception;
1112
use SimpleSAML\Logger;
1213

@@ -28,6 +29,9 @@ class AdapterLdap extends Adapter
2829
const LDAP_USER = 'ldap.username';
2930
const LDAP_PASSWORD = 'ldap.password';
3031
const LDAP_BASE = 'ldap.base';
32+
const PERUN_FACILITY_ID = 'perunFacilityId';
33+
const CN = 'cn';
34+
const DESCRIPTION = 'description';
3135

3236
private $ldapBase;
3337

@@ -118,13 +122,14 @@ public function getMemberGroups($user, $vo)
118122

119123
public function getSpGroups($spEntityId)
120124
{
121-
$facility = $this->connector->searchForEntity(
122-
$this->ldapBase,
123-
'(&(objectClass=perunFacility)(entityID=' . $spEntityId . '))',
124-
['perunFacilityId']
125-
);
125+
$facility = $this->getFacilityByEntityId($spEntityId);
126+
127+
if ($facility === null) {
128+
return [];
129+
}
130+
131+
$id = $facility->getId();
126132

127-
$id = $facility['perunFacilityId'][0];
128133
$resources = $this->connector->searchForEntities(
129134
$this->ldapBase,
130135
'(&(objectClass=perunResource)(perunFacilityDn=perunFacilityId=' . $id . ',' . $this->ldapBase . '))',
@@ -226,6 +231,31 @@ public function getFacilitiesByEntityId($spEntityId)
226231
// TODO: Implement getEntityByEntityId() method.
227232
}
228233

234+
public function getFacilityByEntityId($spEntityId)
235+
{
236+
$ldapResult = $this->connector->searchForEntity(
237+
$this->ldapBase,
238+
'(&(objectClass=perunFacility)(entityID=' . $spEntityId . '))',
239+
[self::PERUN_FACILITY_ID, self::CN, self::DESCRIPTION]
240+
);
241+
242+
if (empty($ldapResult)) {
243+
Logger::warning(
244+
'perun:AdapterLdap: No facility with entityID \'' . $spEntityId . '\' found.'
245+
);
246+
return null;
247+
}
248+
249+
$facility = new Facility(
250+
$ldapResult[self::PERUN_FACILITY_ID][0],
251+
$ldapResult[self::CN][0],
252+
$ldapResult[self::DESCRIPTION][0],
253+
$spEntityId
254+
);
255+
256+
return $facility;
257+
}
258+
229259
public function getEntitylessAttribute($attrName)
230260
{
231261
throw new BadMethodCallException('NotImplementedException');
@@ -278,13 +308,14 @@ public function setUserExtSourceAttributes($userExtSourceId, $attributes)
278308

279309
public function getUsersGroupsOnFacility($spEntityId, $userId)
280310
{
281-
$facility = $this->connector->searchForEntity(
282-
$this->ldapBase,
283-
'(&(objectClass=perunFacility)(entityID=' . $spEntityId . '))',
284-
['perunFacilityId']
285-
);
311+
$facility = $this->getFacilityByEntityId($spEntityId);
312+
313+
if ($facility === null) {
314+
return [];
315+
}
316+
317+
$id = $facility->getId();
286318

287-
$id = $facility['perunFacilityId'][0];
288319
$resources = $this->connector->searchForEntities(
289320
$this->ldapBase,
290321
'(&(objectClass=perunResource)(perunFacilityDn=perunFacilityId=' . $id . ',' . $this->ldapBase . '))',

lib/AdapterRpc.php

Lines changed: 62 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use SimpleSAML\Module\perun\model\Resource;
1111
use SimpleSAML\Module\perun\model\Member;
1212
use SimpleSAML\Error\Exception;
13+
use SimpleSAML\Logger;
1314
use SimpleSAML\Module\perun\Exception as PerunException;
1415

1516
/**
@@ -135,16 +136,11 @@ public function getMemberGroups($user, $vo)
135136

136137
public function getSpGroups($spEntityId)
137138
{
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+
}
148144

149145
$perunAttrs = $this->connector->get('facilitiesManager', 'getAssignedResources', [
150146
'facility' => $facility->getId(),
@@ -304,37 +300,35 @@ public function getFacilityAttribute($facility, $attrName)
304300

305301
public function getUsersGroupsOnFacility($spEntityId, $userId)
306302
{
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);
312304
$groups = [];
313305

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+
}
324309

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+
);
329319

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+
));
338332
}
339333
}
340334
$groups = $this->removeDuplicateEntities($groups);
@@ -363,6 +357,37 @@ public function getFacilitiesByEntityId($spEntityId)
363357
return $facilities;
364358
}
365359

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+
366391
/**
367392
* Returns member by User and Vo
368393
* @param User $user

lib/Auth/Process/ForceAup.php

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -118,28 +118,31 @@ public function process(&$request)
118118
}
119119

120120
try {
121-
$facilities = $this->adapter->getFacilitiesByEntityId($request['SPMetadata']['entityid']);
121+
$facility = $this->adapter->getFacilityByEntityId($request['SPMetadata']['entityid']);
122+
123+
if ($facility === null) {
124+
return;
125+
}
122126

123127
$requiredAups = [];
124128
$voShortNames = [];
125-
foreach ($facilities as $facility) {
126-
$facilityAups = $this->adapter->getFacilityAttribute($facility, $this->perunFacilityReqAupsAttr);
127129

128-
if ($facilityAups !== null) {
129-
foreach ($facilityAups as $facilityAup) {
130-
array_push($requiredAups, $facilityAup);
131-
}
130+
$facilityAups = $this->adapter->getFacilityAttribute($facility, $this->perunFacilityReqAupsAttr);
131+
132+
if ($facilityAups !== null) {
133+
foreach ($facilityAups as $facilityAup) {
134+
array_push($requiredAups, $facilityAup);
132135
}
136+
}
133137

134-
$facilityVoShortNames = $this->adapter->getFacilityAttribute(
135-
$facility,
136-
$this->perunFacilityVoShortNames
137-
);
138+
$facilityVoShortNames = $this->adapter->getFacilityAttribute(
139+
$facility,
140+
$this->perunFacilityVoShortNames
141+
);
138142

139-
if ($facilityVoShortNames !== null) {
140-
foreach ($facilityVoShortNames as $facilityVoShortName) {
141-
array_push($voShortNames, $facilityVoShortName);
142-
}
143+
if ($facilityVoShortNames !== null) {
144+
foreach ($facilityVoShortNames as $facilityVoShortName) {
145+
array_push($voShortNames, $facilityVoShortName);
143146
}
144147
}
145148

lib/Auth/Process/PerunIdentity.php

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -430,48 +430,46 @@ public static function unauthorized($request)
430430
protected function getSPAttributes($spEntityID)
431431
{
432432
try {
433-
$facilities = $this->rpcAdapter->getFacilitiesByEntityId($spEntityID);
434-
if (empty($facilities)) {
435-
Logger::warning(
436-
'perun:PerunIdentity: No facility with entityID \'' . $spEntityID . '\' found.'
437-
);
433+
$facility = $this->rpcAdapter->getFacilityByEntityId($spEntityID);
434+
435+
if ($facility === null) {
438436
return;
439437
}
440438

441439
$checkGroupMembership = $this->rpcAdapter->getFacilityAttribute(
442-
$facilities[0],
440+
$facility,
443441
$this->facilityCheckGroupMembershipAttr
444442
);
445443
if ($checkGroupMembership !== null) {
446444
$this->checkGroupMembership = $checkGroupMembership;
447445
}
448446

449447
$facilityVoShortNames = $this->rpcAdapter->getFacilityAttribute(
450-
$facilities[0],
448+
$facility,
451449
$this->facilityVoShortNamesAttr
452450
);
453451
if (!empty($facilityVoShortNames)) {
454452
$this->facilityVoShortNames = $facilityVoShortNames;
455453
}
456454

457455
$dynamicRegistration = $this->rpcAdapter->getFacilityAttribute(
458-
$facilities[0],
456+
$facility,
459457
$this->facilityDynamicRegistrationAttr
460458
);
461459
if ($dynamicRegistration !== null) {
462460
$this->dynamicRegistration = $dynamicRegistration;
463461
}
464462

465463
$this->registerUrl = $this->rpcAdapter->getFacilityAttribute(
466-
$facilities[0],
464+
$facility,
467465
$this->facilityRegisterUrlAttr
468466
);
469467
if ($this->registerUrl === null) {
470468
$this->registerUrl = $this->defaultRegisterUrl;
471469
}
472470

473471
$allowRegistartionToGroups = $this->rpcAdapter->getFacilityAttribute(
474-
$facilities[0],
472+
$facility,
475473
$this->facilityAllowRegistrationToGroupsAttr
476474
);
477475
if ($allowRegistartionToGroups !== null) {

0 commit comments

Comments
 (0)