1111use SimpleSAML \OpenID \Helpers ;
1212use SimpleSAML \OpenID \VerifiableCredentials \VcDataModel \Claims \VcAtContextClaimValue ;
1313use SimpleSAML \OpenID \VerifiableCredentials \VcDataModel \Claims \VcClaimValue ;
14+ use SimpleSAML \OpenID \VerifiableCredentials \VcDataModel \Claims \VcCredentialSchemaClaimBag ;
15+ use SimpleSAML \OpenID \VerifiableCredentials \VcDataModel \Claims \VcCredentialSchemaClaimValue ;
1416use SimpleSAML \OpenID \VerifiableCredentials \VcDataModel \Claims \VcCredentialStatusClaimValue ;
1517use SimpleSAML \OpenID \VerifiableCredentials \VcDataModel \Claims \VcCredentialSubjectClaimBag ;
1618use SimpleSAML \OpenID \VerifiableCredentials \VcDataModel \Claims \VcCredentialSubjectClaimValue ;
@@ -39,6 +41,7 @@ public function buildVcClaimValue(
3941 ?VcProofClaimValue $ vcProofClaimValue ,
4042 ?DateTimeImmutable $ vcExpirationDate ,
4143 ?VcCredentialStatusClaimValue $ vcCredentialStatusClaimValue ,
44+ ?VcCredentialSchemaClaimBag $ vcCredentialSchemaClaimBag ,
4245 ): VcClaimValue {
4346 return new VcClaimValue (
4447 $ vcAtContextClaimValue ,
@@ -50,6 +53,7 @@ public function buildVcClaimValue(
5053 $ vcProofClaimValue ,
5154 $ vcExpirationDate ,
5255 $ vcCredentialStatusClaimValue ,
56+ $ vcCredentialSchemaClaimBag ,
5357 );
5458 }
5559
@@ -71,10 +75,17 @@ public function buildVcCredentialSubjectClaimValue(array $data): VcCredentialSub
7175 }
7276
7377 /**
74- * @param non-empty-array<non-empty-array<mixed>> $data
78+ * @param mixed[] $data
79+ * @throws \SimpleSAML\OpenID\Exceptions\InvalidValueException
7580 */
7681 public function buildVcCredentialSubjectClaimBag (array $ data ): VcCredentialSubjectClaimBag
7782 {
83+ if ($ this ->helpers ->arr ()->isAssociative ($ data )) {
84+ $ data = [$ data ];
85+ }
86+
87+ $ data = $ this ->helpers ->type ()->enforceNonEmptyArrayOfNonEmptyArrays ($ data );
88+
7889 $ vcCredentialSubjectClaimValueData = array_shift ($ data );
7990
8091 $ vcCredentialSubjectClaimValue = $ this ->buildVcCredentialSubjectClaimValue ($ vcCredentialSubjectClaimValueData );
@@ -91,14 +102,14 @@ public function buildVcCredentialSubjectClaimBag(array $data): VcCredentialSubje
91102 }
92103
93104 /**
94- * @param non-empty-array< mixed> $data
105+ * @param mixed[] $data
95106 * @throws \SimpleSAML\OpenID\Exceptions\VcDataModelException
96107 * @throws \SimpleSAML\OpenID\Exceptions\InvalidValueException
97108 */
98109 public function buildVcIssuerClaimValue (array $ data ): VcIssuerClaimValue
99110 {
100111 $ id = $ data [ClaimsEnum::Id->value ] ?? throw new VcDataModelException (
101- 'No Issuer ID claim value available. ' ,
112+ 'No ID claim value available. ' ,
102113 );
103114
104115 $ id = $ this ->helpers ->type ()->enforceUri ($ id );
@@ -107,7 +118,7 @@ public function buildVcIssuerClaimValue(array $data): VcIssuerClaimValue
107118 }
108119
109120 /**
110- * @param non-empty-array< mixed> $data
121+ * @param mixed[] $data
111122 * @throws \SimpleSAML\OpenID\Exceptions\VcDataModelException
112123 * @throws \SimpleSAML\OpenID\Exceptions\InvalidValueException
113124 */
@@ -123,14 +134,14 @@ public function buildVcProofClaimValue(array $data): VcProofClaimValue
123134 }
124135
125136 /**
126- * @param non-empty-array< mixed> $data
137+ * @param mixed[] $data
127138 * @throws \SimpleSAML\OpenID\Exceptions\InvalidValueException
128139 * @throws \SimpleSAML\OpenID\Exceptions\VcDataModelException
129140 */
130141 public function buildVcCredentialStatusClaimValue (array $ data ): VcCredentialStatusClaimValue
131142 {
132143 $ id = $ data [ClaimsEnum::Id->value ] ?? throw new VcDataModelException (
133- 'No Issuer ID claim value available. ' ,
144+ 'No ID claim value available. ' ,
134145 );
135146 $ id = $ this ->helpers ->type ()->enforceUri ($ id );
136147
@@ -141,4 +152,52 @@ public function buildVcCredentialStatusClaimValue(array $data): VcCredentialStat
141152
142153 return new VcCredentialStatusClaimValue ($ id , $ type , $ data );
143154 }
155+
156+ /**
157+ * @param non-empty-array<mixed> $data
158+ * @throws \SimpleSAML\OpenID\Exceptions\InvalidValueException
159+ * @throws \SimpleSAML\OpenID\Exceptions\VcDataModelException
160+ */
161+ public function buildVcCredentialSchemaClaimValue (array $ data ): VcCredentialSchemaClaimValue
162+ {
163+ $ id = $ data [ClaimsEnum::Id->value ] ?? throw new VcDataModelException (
164+ 'No ID claim value available. ' ,
165+ );
166+ $ id = $ this ->helpers ->type ()->enforceUri ($ id );
167+
168+ $ type = $ data [ClaimsEnum::Type->value ] ?? throw new VcDataModelException (
169+ 'No Type claim value available. ' ,
170+ );
171+ $ type = $ this ->helpers ->type ()->ensureNonEmptyString ($ type );
172+
173+ return new VcCredentialSchemaClaimValue ($ id , $ type , $ data );
174+ }
175+
176+ /**
177+ * @param mixed[] $data
178+ * @throws \SimpleSAML\OpenID\Exceptions\InvalidValueException
179+ * @throws \SimpleSAML\OpenID\Exceptions\VcDataModelException
180+ */
181+ public function buildVcCredentialSchemaClaimBag (array $ data ): VcCredentialSchemaClaimBag
182+ {
183+ if ($ this ->helpers ->arr ()->isAssociative ($ data )) {
184+ $ data = [$ data ];
185+ }
186+
187+ $ data = $ this ->helpers ->type ()->enforceNonEmptyArrayOfNonEmptyArrays ($ data );
188+
189+ $ vcCredentialSchemaClaimValueData = array_shift ($ data );
190+
191+ $ vcCredentialSchemaClaimValue = $ this ->buildVcCredentialSchemaClaimValue ($ vcCredentialSchemaClaimValueData );
192+
193+ $ vcCredentialSchemaClaimValues = array_map (
194+ fn (array $ data ): VcCredentialSchemaClaimValue => $ this ->buildVcCredentialSchemaClaimValue ($ data ),
195+ $ data ,
196+ );
197+
198+ return new VcCredentialSchemaClaimBag (
199+ $ vcCredentialSchemaClaimValue ,
200+ ...$ vcCredentialSchemaClaimValues ,
201+ );
202+ }
144203}
0 commit comments