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

Commit 1e8b21d

Browse files
committed
fix: It is possible to rewrite default value for entityIdAttr
1 parent 01e4b1d commit 1e8b21d

File tree

6 files changed

+82
-30
lines changed

6 files changed

+82
-30
lines changed

lib/Adapter.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,13 @@ abstract public function getMemberGroups($user, $vo);
101101
abstract public function getGroupsWhereMemberIsActive($user, $vo);
102102

103103
/**
104-
* @param string $spEntityId entity id of the sp
104+
* @param string $spEntityId entity id of the sp
105+
* @param string $entityIdAttr entity id attribute
105106
*
106107
* @return Group[] from vo which are assigned to all facilities with spEntityId.
107108
* registering to those groups should should allow access to the service
108109
*/
109-
abstract public function getSpGroups(string $spEntityId): array;
110+
abstract public function getSpGroups(string $spEntityId, string $entityIdAttr): array;
110111

111112
/**
112113
* @param Facility $facility representing the SP
@@ -165,7 +166,7 @@ abstract public function getFacilityAttribute($facility, $attrName);
165166

166167
/**
167168
* @param string $spEntityId Value of the entityID identifier
168-
* @param mixed $entityIdAttr
169+
* @param string $entityIdAttr entity id attribute
169170
*
170171
* @return Facility facility
171172
*/
@@ -181,12 +182,13 @@ abstract public function getFacilityByEntityId($spEntityId, $entityIdAttr);
181182
abstract public function getFacilityByClientId($clientId, $clientIdAttr);
182183

183184
/**
184-
* @param string $spEntityId entity id of the sp
185+
* @param string $spEntityId entity id of the sp
185186
* @param int $userId
187+
* @param string $entityIdAttr entity id attribute
186188
*
187189
* @return Group[] from vo which are assigned to all facilities with spEntityId for this userId
188190
*/
189-
abstract public function getUsersGroupsOnFacility($spEntityId, $userId);
191+
abstract public function getUsersGroupsOnFacility($spEntityId, $userId, $entityIdAttr);
190192

191193
/**
192194
* @param Facility $facility entity id of the sp
@@ -263,19 +265,21 @@ abstract public function getMemberStatusByUserAndVo($user, $vo);
263265
abstract public function isUserInVo($user, $voShortName);
264266

265267
/**
266-
* @param int $entityId entityId
267-
* @param array $userGroups of groups where user belongs to
268+
* @param int $entityId entityId
269+
* @param array $userGroups of groups where user belongs to
270+
* @param string $entityIdAttr entity id attribute
268271
*
269272
* @return array of resource capabilities
270273
*/
271-
abstract public function getResourceCapabilities($entityId, $userGroups);
274+
abstract public function getResourceCapabilities($entityId, $userGroups, $entityIdAttr);
272275

273276
/**
274-
* @param int $entityId entityId
277+
* @param int $entityId entityId
278+
* @param string $entityIdAttr entity id attribute
275279
*
276280
* @return array of facility capabilities
277281
*/
278-
abstract public function getFacilityCapabilities($entityId);
282+
abstract public function getFacilityCapabilities($entityId, $entityIdAttr);
279283

280284
/**
281285
* @param HasId[] $entities

lib/AdapterLdap.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,9 @@ public function getGroupsWhereMemberIsActive($user, $vo)
199199
return $groups;
200200
}
201201

202-
public function getSpGroups(string $spEntityId): array
202+
public function getSpGroups(string $spEntityId, string $entityIdAttr = 'perunFacilityAttr_entityID'): array
203203
{
204-
$facility = $this->getFacilityByEntityId($spEntityId);
204+
$facility = $this->getFacilityByEntityId($spEntityId, $entityIdAttr);
205205

206206
return $this->getSpGroupsByFacility($facility);
207207
}
@@ -471,9 +471,9 @@ public function setUserExtSourceAttributes($userExtSourceId, $attributes)
471471
$this->fallbackAdapter->setUserExtSourceAttributes($userExtSourceId, $attributes);
472472
}
473473

474-
public function getUsersGroupsOnFacility($spEntityId, $userId)
474+
public function getUsersGroupsOnFacility($spEntityId, $userId, $entityIdAttr = 'perunFacilityAttr_entityID')
475475
{
476-
$facility = $this->getFacilityByEntityId($spEntityId);
476+
$facility = $this->getFacilityByEntityId($spEntityId, $entityIdAttr);
477477

478478
return self::getUsersGroupsOnSp($facility, $userId);
479479
}
@@ -560,9 +560,9 @@ public function isUserInVo($user, $voShortName)
560560
return $this->getMemberStatusByUserAndVo($user, $vo) === Member::VALID;
561561
}
562562

563-
public function getResourceCapabilities($entityId, $userGroups)
563+
public function getResourceCapabilities($entityId, $userGroups, $entityIdAttr = 'perunFacilityAttr_entityID')
564564
{
565-
$facility = $this->getFacilityByEntityId($entityId);
565+
$facility = $this->getFacilityByEntityId($entityId, $entityIdAttr);
566566

567567
if ($facility === null) {
568568
return [];
@@ -603,11 +603,13 @@ public function getResourceCapabilities($entityId, $userGroups)
603603
return $resourceCapabilities;
604604
}
605605

606-
public function getFacilityCapabilities($entityId)
606+
public function getFacilityCapabilities($entityId, $entityIdAttr = 'perunFacilityAttr_entityID')
607607
{
608+
$attrName = AttributeUtils::getLdapAttrName($entityIdAttr);
609+
608610
$facilityCapabilities = $this->connector->searchForEntity(
609611
$this->ldapBase,
610-
'(&(objectClass=perunFacility)(entityID=' . $entityId . '))',
612+
'(&(objectClass=perunFacility)(' . $attrName . '=' . $entityId . '))',
611613
[self::CAPABILITIES]
612614
);
613615

lib/AdapterRpc.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,9 @@ public function getGroupsWhereMemberIsActive($user, $vo)
201201
return $convertedGroups;
202202
}
203203

204-
public function getSpGroups(string $spEntityId): array
204+
public function getSpGroups(string $spEntityId, string $entityIdAttr = 'perunFacilityAttr_entityID'): array
205205
{
206-
$facility = $this->getFacilityByEntityId($spEntityId);
206+
$facility = $this->getFacilityByEntityId($spEntityId, $entityIdAttr);
207207

208208
if ($facility === null) {
209209
return [];
@@ -385,9 +385,9 @@ public function getFacilityAttribute($facility, $attrName)
385385
return $perunAttr['value'];
386386
}
387387

388-
public function getUsersGroupsOnFacility($spEntityId, $userId)
388+
public function getUsersGroupsOnFacility($spEntityId, $userId, $entityIdAttr = 'perunFacilityAttr_entityID')
389389
{
390-
$facility = $this->getFacilityByEntityId($spEntityId);
390+
$facility = $this->getFacilityByEntityId($spEntityId, $entityIdAttr);
391391

392392
return self::getUsersGroupsOnSp($facility, $userId);
393393
}
@@ -649,9 +649,9 @@ public function getMemberStatusByUserAndVo($user, $vo)
649649
return $member->getStatus();
650650
}
651651

652-
public function getResourceCapabilities($entityId, $userGroups)
652+
public function getResourceCapabilities($entityId, $userGroups, $entityIdAttr = 'perunFacilityAttr_entityID')
653653
{
654-
$facility = $this->getFacilityByEntityId($entityId);
654+
$facility = $this->getFacilityByEntityId($entityId, $entityIdAttr);
655655

656656
if ($facility === null) {
657657
return [];
@@ -694,9 +694,9 @@ public function getResourceCapabilities($entityId, $userGroups)
694694
return $capabilities;
695695
}
696696

697-
public function getFacilityCapabilities($entityId)
697+
public function getFacilityCapabilities($entityId, $entityIdAttr = 'perunFacilityAttr_entityID')
698698
{
699-
$facility = $this->getFacilityByEntityId($entityId);
699+
$facility = $this->getFacilityByEntityId($entityId, $entityIdAttr);
700700

701701
if ($facility === null) {
702702
return [];

lib/Auth/Process/PerunIdentity.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ class PerunIdentity extends \SimpleSAML\Auth\ProcessingFilter
7979

8080
public const MODES = [self::MODE_FULL, self::MODE_USERONLY];
8181

82+
public const CONFIG_FILE_NAME = 'module_perun.php';
83+
84+
public const ENTITY_ID_ATTR = 'entityIdAttr';
85+
8286
private $uidsAttr;
8387

8488
private $registerUrlBase;
@@ -117,6 +121,8 @@ class PerunIdentity extends \SimpleSAML\Auth\ProcessingFilter
117121

118122
private $facilityAllowRegistrationToGroupsAttr;
119123

124+
private $entityIdAttr;
125+
120126
/**
121127
* @var Adapter
122128
*/
@@ -201,6 +207,13 @@ public function __construct($config, $reserved)
201207
);
202208
}
203209

210+
try {
211+
$configuration = Configuration::getConfig(self::CONFIG_FILE_NAME);
212+
$this->entityIdAttr = $configuration->getString(self::ENTITY_ID_ATTR, null);
213+
} catch (Exception $e) {
214+
$this->entityIdAttr = null;
215+
}
216+
204217
$this->adapter = Adapter::getInstance($this->interface);
205218
$this->rpcAdapter = new AdapterRpc();
206219
}
@@ -263,7 +276,10 @@ public function process(&$request)
263276

264277
$this->checkMemberStateDefaultVo($request, $user, $uids);
265278

266-
$groups = $this->adapter->getUsersGroupsOnFacility($this->spEntityId, $user->getId());
279+
$groups = $this->entityIdAttr === null ? $this->adapter->getUsersGroupsOnFacility(
280+
$this->spEntityId,
281+
$user->getId()
282+
) : $this->adapter->getUsersGroupsOnFacility($this->spEntityId, $user->getId(), $this->entityIdAttr);
267283

268284
if ($this->checkGroupMembership && empty($groups)) {
269285
if ($this->allowRegistrationToGroups) {

lib/EntitlementUtils.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace SimpleSAML\Module\perun;
66

7+
use SimpleSAML\Configuration;
78
use SimpleSAML\Error\Exception;
89
use SimpleSAML\Logger;
910

@@ -20,6 +21,10 @@ class EntitlementUtils
2021

2122
public const DISPLAY_NAME = 'displayName';
2223

24+
public const CONFIG_FILE_NAME = 'module_perun.php';
25+
26+
public const ENTITY_ID_ATTR = 'entityIdAttr';
27+
2328
public static function getForwardedEduPersonEntitlement(&$request, $adapter, $forwardedEduPersonEntitlement)
2429
{
2530
$result = [];
@@ -61,8 +66,20 @@ public static function getCapabilities(&$request, $adapter, $prefix, $authority,
6166
$capabilitiesResult = [];
6267

6368
try {
64-
$resourceCapabilities = $adapter->getResourceCapabilities($spEntityId, $request['perun']['groups']);
65-
$facilityCapabilities = $adapter->getFacilityCapabilities($spEntityId);
69+
$configuration = Configuration::getConfig(self::CONFIG_FILE_NAME);
70+
$entityIdAttr = $configuration->getString(self::ENTITY_ID_ATTR, null);
71+
} catch (Exception $e) {
72+
$entityIdAttr = null;
73+
}
74+
75+
try {
76+
$resourceCapabilities = $entityIdAttr === null ? $adapter->getResourceCapabilities(
77+
$spEntityId,
78+
$request['perun']['groups']
79+
) : $adapter->getResourceCapabilities($spEntityId, $request['perun']['groups'], $entityIdAttr);
80+
$facilityCapabilities = $entityIdAttr === null ? $adapter->getFacilityCapabilities(
81+
$spEntityId
82+
) : $adapter->getFacilityCapabilities($spEntityId, $entityIdAttr);
6683
} catch (Exception $exception) {
6784
Logger::error(
6885
'perun:EntitlementUtils: Exception ' . $exception->getMessage() .

www/perun_identity_choose_vo_and_group.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,25 @@
1717
*
1818
* See PerunIdentity for mor information.
1919
*/
20+
const CONFIG_FILE_NAME = 'module_perun.php';
21+
const ENTITY_ID_ATTR = 'entityIdAttr';
22+
23+
try {
24+
$configuration = Configuration::getConfig(CONFIG_FILE_NAME);
25+
$entityIdAttr = $configuration->getString(ENTITY_ID_ATTR, null);
26+
} catch (Exception $e) {
27+
$entityIdAttr = null;
28+
}
29+
2030
$adapter = Adapter::getInstance($_REQUEST[PerunIdentity::INTERFACE_PROPNAME]);
2131
$rpcAdapter = new AdapterRpc();
2232
$spEntityId = $_REQUEST['spEntityId'];
2333
$vosIdForRegistration = $_REQUEST['vosIdForRegistration'];
2434
$stateId = $_REQUEST['stateId'];
25-
$spGroups = $adapter->getSpGroups($spEntityId);
35+
$spGroups = $entityIdAttr === null ? $adapter->getSpGroups($spEntityId) : $adapter->getSpGroups(
36+
$spEntityId,
37+
$entityIdAttr
38+
);
2639
$registerUrlBase = $_REQUEST[PerunIdentity::REGISTER_URL_BASE];
2740
$vosForRegistration = [];
2841
$groupsForRegistration = [];

0 commit comments

Comments
 (0)