diff --git a/lib/AdapterRpc.php b/lib/AdapterRpc.php index eecbcd74103ae71baae5026c298d415d164d4d39..12e41068ad1a45e3761dec2477e096a8ef95e792 100644 --- a/lib/AdapterRpc.php +++ b/lib/AdapterRpc.php @@ -824,6 +824,26 @@ class AdapterRpc extends Adapter return $this->connector->post('facilitiesManager', 'createFacility', $facility); } + public function getFacilitiesByAttributeWithAttributes($attributeName, $attributeValue, $attrNames) + { + $facilitiesWithAttributes = $this->connector->post( + 'facilitiesManager', + 'getFacilitiesByAttributeWithAttributes', + ['attributeName' => $attributeName, 'attributeValue' => $attributeValue, 'attrNames' => $attrNames] + ); + + $attrNamesMap = AttributeUtils::getRpcAttrNames($attrNames); + + foreach ($facilitiesWithAttributes as $facilityWithAttributes) { + $facilityWithAttributes['attributes'] = $this->getAttributes( + $facilityWithAttributes['attributes'], + $attrNamesMap + ); + } + + return $facilitiesWithAttributes; + } + private function getAttributes($perunAttrs, $attrNamesMap) { $attributes = []; diff --git a/lib/MetadataFromPerun.php b/lib/MetadataFromPerun.php index 6cb39005f6e344614c20576157f8a8bf5ee42427..70d1761d3d7db1ba26ed07d84b393efea0698239 100644 --- a/lib/MetadataFromPerun.php +++ b/lib/MetadataFromPerun.php @@ -172,42 +172,36 @@ class MetadataFromPerun return $allAttrNames; } - /** - * Get all facilities with proxyIdentifiers. - */ - private function getFacilities() - { - $perunProxyIdentifierAttr = $this->conf->getString(self::PERUN_PROXY_IDENTIFIER_ATTR_NAME); - $perunProxyIdentifierRpcAttrName = AttributeUtils::getRpcAttrName($perunProxyIdentifierAttr); - $proxyIdentifier = $this->conf->getString(self::PROXY_IDENTIFIER); - $attributeDefinition = [ - $perunProxyIdentifierRpcAttrName => $proxyIdentifier, - ]; - - return $this->rpcAdapter->searchFacilitiesByAttributeValue($attributeDefinition); - } - /*+ * Get facilities with attributes. */ private function getFacilitiesWithAttributes() { + $perunProxyIdentifierAttr = $this->conf->getString(self::PERUN_PROXY_IDENTIFIER_ATTR_NAME); + $perunProxyIdentifierRpcAttrName = AttributeUtils::getRpcAttrName($perunProxyIdentifierAttr); $allAttrNames = $this->getAllAttributeNames(); - $facilitiesWithAttributes = []; - foreach ($this->getFacilities() as $facility) { - $attributes = $this->rpcAdapter->getFacilityAttributes($facility, $allAttrNames); + + $facilitiesWithAttributes = $this->rpcAdapter->getFacilitiesByAttributeWithAttributes( + $perunProxyIdentifierRpcAttrName, + $this->conf->getString(self::PROXY_IDENTIFIER), + $allAttrNames + ); + + $facilitiesWithAttributesRes = []; + foreach ($facilitiesWithAttributes as $facilityWithAttributes) { + $attributes = $facilityWithAttributes['attributes']; $facilityAttributes = []; foreach ($attributes as $attribute) { $facilityAttributes[$attribute['name']] = $attribute; } if (!empty($facilityAttributes[$this->perunProxyEntityIDAttr]['value'])) { - $facilitiesWithAttributes[$facility->getId()] = [ - 'facility' => $facility, + $facilitiesWithAttributesRes[$facilityWithAttributes['facility']['id']] = [ + 'facility' => $facilityWithAttributes['facility'], self::FACILITY_ATTRIBUTES => $facilityAttributes, ]; } } - return $facilitiesWithAttributes; + return $facilitiesWithAttributesRes; } } diff --git a/www/listOfSps.php b/www/listOfSps.php index bea2786a87ccc0ca4e7768dd80f81cc0ee29fda6..cdb558c71d441ad494a1dd668a192d04fe8c6285 100644 --- a/www/listOfSps.php +++ b/www/listOfSps.php @@ -74,12 +74,7 @@ $perunShowOnServiceListAttr = $conf->getString(PERUN_SHOW_ON_SERVICE_LIST_ATTR_NAME, null); $showProtocol = $conf->getBoolean(PERUN_SHOW_PROTOCOL, true); - $rpcAdapter = new AdapterRpc(); -$attributeDefinition = []; -$attributeDefinition[$perunProxyIdentifierAttr] = $proxyIdentifier; -$facilities - = $rpcAdapter->searchFacilitiesByAttributeValue($attributeDefinition); $attrNames = []; @@ -105,16 +100,21 @@ $samlServices = []; $oidcServices = []; $samlTestServicesCount = 0; $oidcTestServicesCount = 0; -foreach ($facilities as $facility) { - $attributes = $rpcAdapter->getFacilityAttributes($facility, $attrNames); +$facilitiesWithAttributes = $rpcAdapter->getFacilitiesByAttributeWithAttributes( + $perunProxyIdentifierAttr, + $proxyIdentifier, + $attrNames +); + +foreach ($facilitiesWithAttributes as $facilityWithAttributes) { $facilityAttributes = []; - foreach ($attributes as $attribute) { + foreach ($facilityWithAttributes['attributes'] as $attribute) { $facilityAttributes[$attribute['name']] = $attribute; } if (!empty($facilityAttributes[$perunSaml2EntityIdAttr]['value'])) { - $samlServices[$facility->getId()] = [ - 'facility' => $facility, + $samlServices[$facilityWithAttributes['facility']['id']] = [ + 'facility' => $facilityWithAttributes['facility'], 'name' => $facilityAttributes[$perunServiceNameAttr], 'loginURL' => $facilityAttributes[$perunLoginURLAttr], 'showOnServiceList' => $facilityAttributes[$perunShowOnServiceListAttr], @@ -126,8 +126,8 @@ foreach ($facilities as $facility) { } if ($showOIDCServices && !empty($facilityAttributes[$perunOidcClientIdAttr]['value'])) { - $oidcServices[$facility->getId()] = [ - 'facility' => $facility, + $oidcServices[$facilityWithAttributes['facility']['id']] = [ + 'facility' => $facilityWithAttributes['facility'], 'name' => $facilityAttributes[$perunServiceNameAttr], 'loginURL' => $facilityAttributes[$perunLoginURLAttr], 'showOnServiceList' => $facilityAttributes[$perunShowOnServiceListAttr],