![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/spomky-labs/pki-framework/src/X509/AttributeCertificate/ |
<?php declare(strict_types=1); namespace SpomkyLabs\Pki\X509\AttributeCertificate; use SpomkyLabs\Pki\X501\ASN1\Attribute; use SpomkyLabs\Pki\X501\ASN1\AttributeType; use SpomkyLabs\Pki\X501\ASN1\AttributeValue\AttributeValue; use SpomkyLabs\Pki\X501\ASN1\Collection\SequenceOfAttributes; use SpomkyLabs\Pki\X509\AttributeCertificate\Attribute\AccessIdentityAttributeValue; use SpomkyLabs\Pki\X509\AttributeCertificate\Attribute\AuthenticationInfoAttributeValue; use SpomkyLabs\Pki\X509\AttributeCertificate\Attribute\ChargingIdentityAttributeValue; use SpomkyLabs\Pki\X509\AttributeCertificate\Attribute\GroupAttributeValue; use SpomkyLabs\Pki\X509\AttributeCertificate\Attribute\RoleAttributeValue; /** * Implements *Attributes* ASN.1 type of *AttributeCertificateInfo*. * * @see https://tools.ietf.org/html/rfc5755#section-4.1 * @see https://tools.ietf.org/html/rfc5755#section-4.2.7 */ final class Attributes extends SequenceOfAttributes { /** * Mapping from OID to attribute value class name. * * @internal * * @var array<string, string> */ private const MAP_OID_TO_CLASS = [ AccessIdentityAttributeValue::OID => AccessIdentityAttributeValue::class, AuthenticationInfoAttributeValue::OID => AuthenticationInfoAttributeValue::class, ChargingIdentityAttributeValue::OID => ChargingIdentityAttributeValue::class, GroupAttributeValue::OID => GroupAttributeValue::class, AttributeType::OID_ROLE => RoleAttributeValue::class, ]; /** * Initialize from attribute values. * * @param AttributeValue ...$values List of attribute values */ public static function fromAttributeValues(AttributeValue ...$values): static { return static::create(...array_map(static fn (AttributeValue $value) => $value->toAttribute(), $values)); } /** * Check whether 'Access Identity' attribute is present. */ public function hasAccessIdentity(): bool { return $this->has(AccessIdentityAttributeValue::OID); } /** * Get the first 'Access Identity' attribute value. */ public function accessIdentity(): AccessIdentityAttributeValue { return $this->firstOf(AccessIdentityAttributeValue::OID)->first(); } /** * Check whether 'Service Authentication Information' attribute is present. */ public function hasAuthenticationInformation(): bool { return $this->has(AuthenticationInfoAttributeValue::OID); } /** * Get the first 'Service Authentication Information' attribute value. */ public function authenticationInformation(): AuthenticationInfoAttributeValue { return $this->firstOf(AuthenticationInfoAttributeValue::OID)->first(); } /** * Check whether 'Charging Identity' attribute is present. */ public function hasChargingIdentity(): bool { return $this->has(ChargingIdentityAttributeValue::OID); } /** * Get the first 'Charging Identity' attribute value. */ public function chargingIdentity(): ChargingIdentityAttributeValue { return $this->firstOf(ChargingIdentityAttributeValue::OID)->first(); } /** * Check whether 'Group' attribute is present. */ public function hasGroup(): bool { return $this->has(GroupAttributeValue::OID); } /** * Get the first 'Group' attribute value. */ public function group(): GroupAttributeValue { return $this->firstOf(GroupAttributeValue::OID)->first(); } /** * Check whether 'Role' attribute is present. */ public function hasRole(): bool { return $this->has(AttributeType::OID_ROLE); } /** * Get the first 'Role' attribute value. */ public function role(): RoleAttributeValue { return $this->firstOf(AttributeType::OID_ROLE)->first(); } /** * Get all 'Role' attribute values. * * @return RoleAttributeValue[] */ public function roles(): array { return array_merge( [], ...array_map(static fn (Attribute $attr) => $attr->values(), $this->allOf(AttributeType::OID_ROLE)) ); } protected static function _castAttributeValues(Attribute $attribute): Attribute { $oid = $attribute->oid(); if (isset(self::MAP_OID_TO_CLASS[$oid])) { return $attribute->castValues(self::MAP_OID_TO_CLASS[$oid]); } return $attribute; } }