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

Commit b1b9e8a

Browse files
Merge pull request #109 from BaranekD/facility_capabilities
Added facility capabilities
2 parents 7bbf6e0 + 5ba5a91 commit b1b9e8a

File tree

5 files changed

+60
-13
lines changed

5 files changed

+60
-13
lines changed

CHANGELOG.md

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

44
## [Unreleased]
5+
#### Added
6+
- Added facility capabilities to PerunEntitlement
57

68
## [v3.8.0]
79
#### Changed

lib/Adapter.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,12 @@ abstract public function getMemberStatusByUserAndVo($user, $vo);
190190
*/
191191
abstract public function getResourceCapabilities($entityId, $userGroups);
192192

193+
/**
194+
* @param $entityId int entityId
195+
* @return array of facility capabilities
196+
*/
197+
abstract public function getFacilityCapabilities($entityId);
198+
193199
/**
194200
* @param HasId[] $entities
195201
* @return HasId[] without duplicates

lib/AdapterLdap.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,4 +418,19 @@ public function getResourceCapabilities($entityId, $userGroups)
418418

419419
return $resourceCapabilities;
420420
}
421+
422+
public function getFacilityCapabilities($entityId)
423+
{
424+
$facilityCapabilities = $this->connector->searchForEntity(
425+
$this->ldapBase,
426+
'(&(objectClass=perunFacility)(entityID=' . $entityId . '))',
427+
[self::CAPABILITIES]
428+
);
429+
430+
if (empty($facilityCapabilities)) {
431+
return [];
432+
}
433+
434+
return $facilityCapabilities['capabilities'];
435+
}
421436
}

lib/AdapterRpc.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,4 +544,20 @@ public function getResourceCapabilities($entityId, $userGroups)
544544

545545
return $capabilities;
546546
}
547+
548+
public function getFacilityCapabilities($entityId)
549+
{
550+
$facility = $this->getFacilityByEntityId($entityId);
551+
552+
if ($facility === null) {
553+
return [];
554+
}
555+
556+
$facilityCapabilities = $this->connector->get('attributesManager', 'getAttribute', [
557+
'facility' => $facility->getId(),
558+
'attributeName' => 'urn:perun:facility:attribute-def:def:capabilities'
559+
])['value'];
560+
561+
return $facilityCapabilities;
562+
}
547563
}

lib/Auth/Process/PerunEntitlement.php

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
/**
1212
* Class PerunEntitlement
1313
*
14-
* This filter joins eduPersonEntitlement, forwardedEduPersonEntitlement and resource capabilities
14+
* This filter joins eduPersonEntitlement, forwardedEduPersonEntitlement, resource capabilities
15+
* and facility capabilities
1516
*
1617
* @author Dominik Baránek <[email protected]>
1718
* @author Pavel Vyskočil <[email protected]>
@@ -88,12 +89,12 @@ public function process(&$request)
8889
if ($this->releaseForwardedEntitlement) {
8990
$forwardedEduPersonEntitlement = $this->getForwardedEduPersonEntitlement($request);
9091
}
91-
$resourceCapabilities = $this->getResourceCapabilities($request);
92+
$capabilities = $this->getCapabilities($request);
9293

9394
$request['Attributes'][$this->eduPersonEntitlement] = array_unique(array_merge(
9495
$eduPersonEntitlement,
9596
$forwardedEduPersonEntitlement,
96-
$resourceCapabilities
97+
$capabilities
9798
));
9899
}
99100

@@ -154,21 +155,18 @@ private function getForwardedEduPersonEntitlement(&$request)
154155
return $forwardedEduPersonEntitlement;
155156
}
156157

157-
private function getResourceCapabilities(&$request)
158+
private function getCapabilities(&$request)
158159
{
159-
if (isset($request['SPMetadata']['entityid'])) {
160-
$spEntityId = $request['SPMetadata']['entityid'];
161-
} else {
162-
throw new Exception('perun:PerunEntitlement: Cannot find entityID of remote SP. ' .
163-
'hint: Do you have this filter in IdP context?');
164-
}
160+
$spEntityId = $this->getSpEntityId($request);
161+
$resourceCapabilities = $this->adapter->getResourceCapabilities($spEntityId, $request['perun']['groups']);
162+
$facilityCapabilities = $this->adapter->getFacilityCapabilities($spEntityId);
165163

166-
$capabilities = $this->adapter->getResourceCapabilities($spEntityId, $request['perun']['groups']);
164+
$capabilities = array_unique(array_merge($resourceCapabilities, $facilityCapabilities));
167165
$capabilitiesResult = [];
168166

169167
foreach ($capabilities as $capability) {
170-
$resourceCapability = $this->capabilitiesWrapper($capability);
171-
array_push($capabilitiesResult, $resourceCapability);
168+
$wrappedCapability = $this->capabilitiesWrapper($capability);
169+
array_push($capabilitiesResult, $wrappedCapability);
172170
}
173171

174172
return $capabilitiesResult;
@@ -243,4 +241,14 @@ private function encodeName($name)
243241

244242
return $name;
245243
}
244+
245+
private function getSpEntityId(&$request)
246+
{
247+
if (isset($request['SPMetadata']['entityid'])) {
248+
return $request['SPMetadata']['entityid'];
249+
} else {
250+
throw new Exception('perun:PerunEntitlement: Cannot find entityID of remote SP. ' .
251+
'hint: Do you have this filter in IdP context?');
252+
}
253+
}
246254
}

0 commit comments

Comments
 (0)