@@ -106,6 +106,7 @@ public class AccessGrantClient {
106106 private static final String IS_CONSENT_FOR_DATA_SUBJECT = "isConsentForDataSubject" ;
107107 private static final String FOR_PERSONAL_DATA = "forPersonalData" ;
108108 private static final String HAS_STATUS = "hasStatus" ;
109+ private static final String REQUEST = "request" ;
109110 private static final String VERIFIED_REQUEST = "verifiedRequest" ;
110111 private static final String MODE = "mode" ;
111112 private static final String PROVIDED_CONSENT = "providedConsent" ;
@@ -252,17 +253,28 @@ private CompletionStage<AccessRequest> requestAccess(final URI recipient, final
252253 }
253254
254255 /**
255- * Issue an access grant based on an access request.
256+ * Issue an access grant based on an access request. The access request is not verified.
256257 *
257258 * @param request the access request
258259 * @return the next stage of completion containing the issued access grant
259260 */
260261 public CompletionStage <AccessGrant > grantAccess (final AccessRequest request ) {
262+ return grantAccess (request , false );
263+ }
264+
265+ /**
266+ * Issue an access grant based on an access request.
267+ *
268+ * @param request the access request
269+ * @param verifyRequest whether the request should be verified before issuing the access grant
270+ * @return the next stage of completion containing the issued access grant
271+ */
272+ public CompletionStage <AccessGrant > grantAccess (final AccessRequest request , final boolean verifyRequest ) {
261273 Objects .requireNonNull (request , "Request may not be null!" );
262274 return v1Metadata ().thenCompose (metadata -> {
263275 final Map <String , Object > data = buildAccessGrantv1 (request .getCreator (), request .getResources (),
264276 request .getModes (), request .getPurposes (), request .getExpiration (), request .getIssuedAt (),
265- request .getIdentifier ());
277+ request .getIdentifier (), verifyRequest );
266278 final Request req = Request .newBuilder (metadata .issueEndpoint )
267279 .header (CONTENT_TYPE , APPLICATION_JSON )
268280 .POST (Request .BodyPublishers .ofByteArray (serialize (data ))).build ();
@@ -285,17 +297,28 @@ public CompletionStage<AccessGrant> grantAccess(final AccessRequest request) {
285297 }
286298
287299 /**
288- * Issue an access denial receipt based on an access request.
300+ * Issue an access denial receipt based on an access request. The access request is not verified.
289301 *
290302 * @param request the access request
291303 * @return the next stage of completion containing the issued access denial
292304 */
293305 public CompletionStage <AccessDenial > denyAccess (final AccessRequest request ) {
306+ return denyAccess (request , false );
307+ }
308+
309+ /**
310+ * Issue an access denial receipt based on an access request.
311+ *
312+ * @param request the access request
313+ * @param verifyRequest whether the request should be verified before issuing the access denial
314+ * @return the next stage of completion containing the issued access denial
315+ */
316+ public CompletionStage <AccessDenial > denyAccess (final AccessRequest request , final boolean verifyRequest ) {
294317 Objects .requireNonNull (request , "Request may not be null!" );
295318 return v1Metadata ().thenCompose (metadata -> {
296319 final Map <String , Object > data = buildAccessDenialv1 (request .getCreator (), request .getResources (),
297320 request .getModes (), request .getPurposes (), request .getExpiration (), request .getIssuedAt (),
298- request .getIdentifier ());
321+ request .getIdentifier (), verifyRequest );
299322 final Request req = Request .newBuilder (metadata .issueEndpoint )
300323 .header (CONTENT_TYPE , APPLICATION_JSON )
301324 .POST (Request .BodyPublishers .ofByteArray (serialize (data ))).build ();
@@ -716,15 +739,26 @@ static URI asUri(final Object value) {
716739 return null ;
717740 }
718741
719- static Map <String , Object > buildAccessDenialv1 (final URI agent , final Set <URI > resources , final Set <String > modes ,
720- final Set <URI > purposes , final Instant expiration , final Instant issuance , final URI accessRequest ) {
742+ static Map <String , Object > buildAccessDenialv1 (
743+ final URI agent ,
744+ final Set <URI > resources ,
745+ final Set <String > modes ,
746+ final Set <URI > purposes ,
747+ final Instant expiration ,
748+ final Instant issuance ,
749+ final URI accessRequest ,
750+ final boolean verifiedRequest ) {
721751 Objects .requireNonNull (agent , "Access denial agent may not be null!" );
722752 final Map <String , Object > consent = new HashMap <>();
723753 consent .put (MODE , modes );
724754 consent .put (HAS_STATUS , "https://w3id.org/GConsent#ConsentStatusRefused" );
725755 consent .put (FOR_PERSONAL_DATA , resources );
726756 consent .put (IS_PROVIDED_TO , agent );
727- consent .put (VERIFIED_REQUEST , accessRequest );
757+ if (verifiedRequest ) {
758+ consent .put (VERIFIED_REQUEST , accessRequest );
759+ } else {
760+ consent .put (REQUEST , accessRequest );
761+ }
728762 if (!purposes .isEmpty ()) {
729763 consent .put (FOR_PURPOSE , purposes );
730764 }
@@ -747,15 +781,26 @@ static Map<String, Object> buildAccessDenialv1(final URI agent, final Set<URI> r
747781 return data ;
748782 }
749783
750- static Map <String , Object > buildAccessGrantv1 (final URI agent , final Set <URI > resources , final Set <String > modes ,
751- final Set <URI > purposes , final Instant expiration , final Instant issuance , final URI accessRequest ) {
784+ static Map <String , Object > buildAccessGrantv1 (
785+ final URI agent ,
786+ final Set <URI > resources ,
787+ final Set <String > modes ,
788+ final Set <URI > purposes ,
789+ final Instant expiration ,
790+ final Instant issuance ,
791+ final URI accessRequest ,
792+ final boolean verifiedRequest ) {
752793 Objects .requireNonNull (agent , "Access grant agent may not be null!" );
753794 final Map <String , Object > consent = new HashMap <>();
754795 consent .put (MODE , modes );
755796 consent .put (HAS_STATUS , "https://w3id.org/GConsent#ConsentStatusExplicitlyGiven" );
756797 consent .put (FOR_PERSONAL_DATA , resources );
757798 consent .put (IS_PROVIDED_TO , agent );
758- consent .put (VERIFIED_REQUEST , accessRequest );
799+ if (verifiedRequest ) {
800+ consent .put (VERIFIED_REQUEST , accessRequest );
801+ } else {
802+ consent .put (REQUEST , accessRequest );
803+ }
759804 if (!purposes .isEmpty ()) {
760805 consent .put (FOR_PURPOSE , purposes );
761806 }
0 commit comments