diff --git a/app/Libraries/EarcUtils.php b/app/Libraries/EarcUtils.php index e414af0951800c707b6bf6d2b0d778e139e0024c..65a9178b3e3d8526735283c1d404ae12818ac239 100755 --- a/app/Libraries/EarcUtils.php +++ b/app/Libraries/EarcUtils.php @@ -84,7 +84,7 @@ class EarcUtils } /** - * Parse attribute OID to hunam readable attributes + * Parse attribute OID to human readable attributes * * @return array */ @@ -470,4 +470,111 @@ class EarcUtils return array('mark' => 'A'.self::getExtraPoints('A', $sp_metadata, $released_attributes, $superfluous_attributes, $idp_metadata, $non_personal_attributes), 'text' => 'Great! IdP sends all necessary information', 'additional_information' => $additional_information); } } + + /** + * Check attributes for Anonymous Access Entity Category and its version + * v1 must contain [eduPersonScopedAffiliation, schacHomeOrganization, eduPersonEntitlement, eduPersonOrgDN] + * v2 must contain [eduPersonScopedAffiliation, schacHomeOrganization] + * + * @param mixed $idp_metadata + * + * @return array + */ + public static function isAnonymous($idp_metadata) + { + $attributesV1 = ["eduPersonScopedAffiliation", "schacHomeOrganization", "eduPersonEntitlement", "eduPersonOrgDN"]; + $attributesV2 = ["eduPersonScopedAffiliation", "schacHomeOrganization"]; + $flag = false; + + if (array_key_exists('EntityAttributes', $idp_metadata) + && array_key_exists('http://macedir.org/entity-category-support', $idp_metadata['EntityAttributes']) + && is_array($idp_metadata['EntityAttributes']['http://macedir.org/entity-category-support'])) { + + foreach ($idp_metadata['EntityAttributes']['http://macedir.org/entity-category-support'] as $encat) { + if ($encat === 'http://refeds.org/category/anonymous') { + $flag = true; + break; + } + } + + if($flag) { + if (count(array_intersect($attributesV1, array_keys($idp_metadata))) == count($attributesV1)) { + return ['compliant' => true, 'version' => 1]; + } + + if (count(array_intersect($attributesV2, array_keys($idp_metadata))) == count($attributesV2)) { + return ['compliant' => true, 'version' => 2]; + } + } + } + + return ['compliant' => false, 'version' => false]; + } + + /** + * Check attributes for Pseudonymous Access Entity Category and its version + * v1 must contain [eduPersonScopedAffiliation, schacHomeOrganization, pairwise-id, eduPersonAssurance, eduPersonOrgDN, eduPersonEntitlement ] + * v2 must contain [eduPersonScopedAffiliation, schacHomeOrganization, pairwise-id, eduPersonAssurance ] + * + * @param mixed $idp_metadata + * + * @return array + */ + public function isPseudonymous($idp_metadata) + { + $attributesV1 = ["eduPersonScopedAffiliation", "schacHomeOrganization", "pairwise-id", "eduPersonAssurance", "eduPersonOrgDN", "eduPersonEntitlement"]; + $attributesV2 = ["eduPersonScopedAffiliation", "schacHomeOrganization", "pairwise-id", "eduPersonAssurance"]; + + $flag = false; + + if (array_key_exists('EntityAttributes', $idp_metadata) + && array_key_exists('http://macedir.org/entity-category-support', $idp_metadata['EntityAttributes']) + && is_array($idp_metadata['EntityAttributes']['http://macedir.org/entity-category-support'])) { + + foreach ($idp_metadata['EntityAttributes']['http://macedir.org/entity-category-support'] as $encat) { + if ($encat === 'https://refeds.org/category/pseudonymous') { + $flag = true; + } + } + + if($flag) { + if (count(array_intersect($attributesV1, array_keys($idp_metadata))) == count($attributesV1)) { + return ['compliant' => true, 'version' => 1]; + } + + if (count(array_intersect($attributesV2, array_keys($idp_metadata))) == count($attributesV2)) { + return ['compliant' => true, 'version' => 2]; + } + } + } + + return ['compliant' => false, 'version' => false]; + } + + /** + * Check attributes for Personalized Access Entity Category and its version + * must contain [eduPersonScopedAffiliation, schacHomeOrganization, eduPersonAssurance, mail, sn, givenName, displayName, subject-id ] + * + * @param mixed $idp_metadata + * + * @return bool + */ + public function isPersonalized($idp_metadata) + { + $attributes = ["eduPersonScopedAffiliation", "schacHomeOrganization", "eduPersonAssurance", "mail", "sn", "givenName", "displayName", "subject-id"]; + + if (array_key_exists('EntityAttributes', $idp_metadata) + && array_key_exists('http://macedir.org/entity-category-support', $idp_metadata['EntityAttributes']) + && is_array($idp_metadata['EntityAttributes']['http://macedir.org/entity-category-support'])) { + + foreach ($idp_metadata['EntityAttributes']['http://macedir.org/entity-category-support'] as $encat) { + if ($encat === 'https://refeds.org/category/personalized' + && count(array_intersect($attributes, array_keys($idp_metadata))) == count($attributes)) { + return true; + } + } + } + + return false; + } }