From 1f7b0d8014524e6ef790af9d5d6b5e7af804a43e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Mon, 16 Sep 2024 16:50:20 +0200 Subject: [PATCH 01/58] refactor: remove business logic --- .../java/eu/enmeshed/EnmeshedFileService.java | 31 - .../eu/enmeshed/EnmeshedMessagingService.java | 166 ----- .../enmeshed/EnmeshedOnboardingService.java | 345 --------- .../eu/enmeshed/EnmeshedRequestService.java | 22 - .../eu/enmeshed/EnmeshedFileServiceTest.java | 54 -- .../EnmeshedMessagingServiceTest.java | 505 ------------- .../EnmeshedOnboardingServiceTest.java | 672 ------------------ .../enmeshed/EnmeshedRequestServiceTest.java | 56 -- 8 files changed, 1851 deletions(-) delete mode 100644 src/main/java/eu/enmeshed/EnmeshedFileService.java delete mode 100644 src/main/java/eu/enmeshed/EnmeshedMessagingService.java delete mode 100644 src/main/java/eu/enmeshed/EnmeshedOnboardingService.java delete mode 100644 src/main/java/eu/enmeshed/EnmeshedRequestService.java delete mode 100644 src/test/java/eu/enmeshed/EnmeshedFileServiceTest.java delete mode 100644 src/test/java/eu/enmeshed/EnmeshedMessagingServiceTest.java delete mode 100644 src/test/java/eu/enmeshed/EnmeshedOnboardingServiceTest.java delete mode 100644 src/test/java/eu/enmeshed/EnmeshedRequestServiceTest.java diff --git a/src/main/java/eu/enmeshed/EnmeshedFileService.java b/src/main/java/eu/enmeshed/EnmeshedFileService.java deleted file mode 100644 index bbb75fd..0000000 --- a/src/main/java/eu/enmeshed/EnmeshedFileService.java +++ /dev/null @@ -1,31 +0,0 @@ -package eu.enmeshed; - -import eu.enmeshed.client.EnmeshedClient; -import eu.enmeshed.model.file.FileMetaData; -import eu.enmeshed.model.file.FileReference; -import feign.Response; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@RequiredArgsConstructor -public class EnmeshedFileService { - - private final EnmeshedClient enmeshedClient; - - @SneakyThrows - public byte[] downloadFileById(String fileId) { - Response fileResponse = enmeshedClient.getFileResponseById(fileId); - return fileResponse.body().asInputStream().readAllBytes(); - } - - public FileMetaData getFileMetadataByFileId(String fileId) { - return enmeshedClient.getFileMetadataByFileId(fileId).getResult(); - } - - public FileMetaData getFileMetadataByReference(String reference) { - return enmeshedClient.getFileMetadataByReference( - FileReference.builder().reference(reference).build()).getResult(); - } -} diff --git a/src/main/java/eu/enmeshed/EnmeshedMessagingService.java b/src/main/java/eu/enmeshed/EnmeshedMessagingService.java deleted file mode 100644 index b6ed1b3..0000000 --- a/src/main/java/eu/enmeshed/EnmeshedMessagingService.java +++ /dev/null @@ -1,166 +0,0 @@ -package eu.enmeshed; - -import eu.enmeshed.client.EnmeshedClient; -import eu.enmeshed.model.messaging.SendMessage; -import eu.enmeshed.model.request.LocalRequest; -import eu.enmeshed.model.request.Request; -import eu.enmeshed.model.request.Response; -import eu.enmeshed.model.request.requestItems.AuthenticationRequestItem; -import feign.FeignException; -import java.time.Duration; -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@RequiredArgsConstructor -public class EnmeshedMessagingService { - - private final EnmeshedClient enmeshedClient; - - /** - * Send an authentication request to an enmeshed wallet. The peer needs to be already onboarded in order to send a - * message. The receiver can accept or reject the authentication request. The decision of the user can be checked with - * getAuthenticationStatus(String requestId). - * - * @param receiver enmeshed address of the receiver - * @param displayTitle Displayed title of the authentication request - * @param displayText Displayed description of the authentication request - * @param mandatory flag whether the acceptance of this authentication request is displayed as mandatory. - * @param lifetime Lifetime of the request, how long the receiver can answer the authentication request. - * @return the Request-ID to request the answer of the authentication request - */ - public String sendAuthenticationRequest( - String receiver, - String displayTitle, - String displayText, - boolean mandatory, - Duration lifetime) - throws SendMessageFailedException { - - return sendAuthenticationRequest( - receiver, displayTitle, displayText, mandatory, lifetime, Collections.emptyMap()); - } - - /** - * Send an authentication request to an enmeshed wallet. The peer needs to be already onboarded in order to send a - * message. The receiver can accept or reject the authentication request. The decision of the user can be checked with - * getAuthenticationStatus(String requestId). - * - * @param receiver enmeshed address of the receiver - * @param displayTitle Displayed title of the authentication request - * @param displayText Displayed description of the authentication request - * @param mandatory flag whether the acceptance of this authentication request is displayed as mandatory. - * @param lifetime Lifetime of the request, how long the receiver can answer the authentication request. - * @param metadata Map with metadata that will be attached to the AuthenticationRequestItem. - * @return the Request-ID to request the answer of the authentication request - */ - public String sendAuthenticationRequest( - String receiver, - String displayTitle, - String displayText, - boolean mandatory, - Duration lifetime, - Map metadata) - throws SendMessageFailedException { - - Request request = - Request.builder() - .title(displayTitle) - .description(displayText) - .expiresAt(ZonedDateTime.now().plus(lifetime)) - .items( - List.of( - AuthenticationRequestItem.builder() - .title(displayTitle) - .description(displayText) - .mustBeAccepted(mandatory) - .requireManualDecision(true) - .metadata(metadata) - .build())) - .build(); - - try { - Request createdRequest = - enmeshedClient - .createOutgoingRequest(LocalRequest.builder().peer(receiver).content(request).build()) - .getResult() - .getContent(); - - enmeshedClient.sendMessage( - SendMessage.builder().recipients(List.of(receiver)).content(createdRequest).build()); - - return createdRequest.getId(); - } catch (FeignException e) { - if (e.status() == 404) { - throw new SendMessageFailedException( - request, 404, "Receiver doesn't exist or is not properly onboarded."); - } else if (e.status() == 400) { - throw new SendMessageFailedException(request, 400, "Malformed message content."); - } else { - throw new SendMessageFailedException( - request, - e.status(), - "Unexpected exception occurred when sending message: " + e.getMessage()); - } - } - } - - /** - * Retrieve the Status of an AuthenticationRequest. - * - * @param requestId ID of the request returned previously by sendAuthenticationRequest() - * @return {@link AuthenticationStatus} containing information if the request exists, the receiver has answered and - * how he has decided. Returns null if the request does not exist. - */ - public AuthenticationStatus getAuthenticationStatus(String requestId) { - - enmeshedClient.sync(); - - LocalRequest localRequest; - try { - localRequest = enmeshedClient.getOutgoingRequest(requestId).getResult(); - } catch (FeignException e) { - if (e.status() == 404) { - return new AuthenticationStatus(null, false, false, false, false); - } else { - return null; - } - } - - if (localRequest.getStatus() == LocalRequest.LocalRequestStatus.EXPIRED) { - return new AuthenticationStatus(null, true, false, false, true); - } else if (localRequest.getResponse() != null) { - return new AuthenticationStatus( - localRequest.getResponse().getCreatedAt(), - true, - localRequest.getResponse().getContent().getResult() == Response.Result.ACCEPTED, - localRequest.getResponse().getContent().getResult() == Response.Result.REJECTED, - false); - } else { - return new AuthenticationStatus(null, true, false, false, false); - } - } - - @RequiredArgsConstructor - @Getter - public static class SendMessageFailedException extends Exception { - - private final Request request; - private final int httpStatus; - private final String Reason; - } - - public record AuthenticationStatus( - ZonedDateTime respondedAt, - boolean requestExists, - boolean accepted, - boolean rejected, - boolean expired) { - - } -} diff --git a/src/main/java/eu/enmeshed/EnmeshedOnboardingService.java b/src/main/java/eu/enmeshed/EnmeshedOnboardingService.java deleted file mode 100644 index bc25814..0000000 --- a/src/main/java/eu/enmeshed/EnmeshedOnboardingService.java +++ /dev/null @@ -1,345 +0,0 @@ -package eu.enmeshed; - -import eu.enmeshed.client.EnmeshedClient; -import eu.enmeshed.model.AttributeWrapper; -import eu.enmeshed.model.ContentWrapper; -import eu.enmeshed.model.IdentityInfo; -import eu.enmeshed.model.ResultWrapper; -import eu.enmeshed.model.attributes.IdentityAttribute; -import eu.enmeshed.model.attributes.values.AttributeValue; -import eu.enmeshed.model.attributes.values.identity.DisplayName; -import eu.enmeshed.model.qr.QrCode; -import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; -import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateContent; -import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateCreation; -import eu.enmeshed.model.relationships.Relationship; -import eu.enmeshed.model.relationships.RelationshipCreationContent; -import eu.enmeshed.model.relationships.RelationshipStatus; -import eu.enmeshed.model.request.Request; -import eu.enmeshed.model.request.requestItems.CreateAttributeRequestItem; -import eu.enmeshed.model.request.requestItems.ReadAttributeRequestItem; -import eu.enmeshed.model.request.requestItems.RequestItem; -import eu.enmeshed.model.request.requestItems.RequestItemDerivation; -import eu.enmeshed.model.request.requestItems.RequestItemGroup; -import eu.enmeshed.model.request.requestItems.ShareAttributeRequestItem; -import eu.enmeshed.model.request.responseItems.ReadAttributeAcceptResponseItem; -import eu.enmeshed.model.request.responseItems.ResponseItem; -import eu.enmeshed.model.request.responseItems.ResponseItemGroup; -import feign.Response; -import java.io.IOException; -import java.io.InputStream; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class EnmeshedOnboardingService { - - private static final Long QR_CODE_VALIDITY_MINUTES_DEFAULT = 60L; - private static final Integer QR_CODE_NUMBER_OF_ALLOCATIONS = 1; - - private final EnmeshedClient enmeshedClient; - - @Getter - private final IdentityInfo identityInfo; - - @Getter - private final AttributeWrapper connectorDisplayNameAttribute; - - private final List> requiredAttributes; - - private final List> optionalAttributes; - - private final List> createAttributes; - - public EnmeshedOnboardingService( - EnmeshedClient enmeshedClient, - String connectorDisplayName, - List> requiredAttributes, - List> optionalAttributes) { - this.enmeshedClient = enmeshedClient; - this.requiredAttributes = requiredAttributes; - this.optionalAttributes = optionalAttributes; - this.createAttributes = List.of(); - - // Get IdentifyInfo - identityInfo = enmeshedClient.getIdentityInfo().getResult(); - - // Setup Connector's Display Name - connectorDisplayNameAttribute = setupConnectorDisplayName(connectorDisplayName); - } - - public EnmeshedOnboardingService( - EnmeshedClient enmeshedClient, - String connectorDisplayName, - List> requiredAttributes, - List> optionalAttributes, - List> createAttributes) { - this.enmeshedClient = enmeshedClient; - this.requiredAttributes = requiredAttributes; - this.optionalAttributes = optionalAttributes; - this.createAttributes = createAttributes; - - // Get IdentifyInfo - identityInfo = enmeshedClient.getIdentityInfo().getResult(); - - // Setup Connector's Display Name - connectorDisplayNameAttribute = setupConnectorDisplayName(connectorDisplayName); - } - - private AttributeWrapper setupConnectorDisplayName(String connectorDisplayName) { - ResultWrapper> foundAttributes = - enmeshedClient.searchAttributes(DisplayName.class.getSimpleName()); - Optional displayNameAttribute = - foundAttributes.getResult().stream() - .filter(attribute -> attribute.getContent().getValue() instanceof DisplayName) - .filter( - attribute -> - ((DisplayName) attribute.getContent().getValue()) - .getValue() - .equals(connectorDisplayName)) - .findFirst(); - - if (displayNameAttribute.isPresent()) { - log.info( - "Display Name Attribute with Value '{}' already exist. Reusing it. (ID: {})", - connectorDisplayName, - displayNameAttribute.get().getId()); - - return displayNameAttribute.get(); - } - - log.info( - "Display Name Attribute with Value '{}' does not exist. Creating it.", - connectorDisplayName); - - // Attribute not found - Create it! - IdentityAttribute identityAttribute = new IdentityAttribute(); - identityAttribute.setValue(DisplayName.builder().value(connectorDisplayName).build()); - - AttributeWrapper createdDisplayNameAttribute = - enmeshedClient.createAttribute(ContentWrapper.containing(identityAttribute)).getResult(); - - log.info("Created Display Name Attribute with ID {}", createdDisplayNameAttribute.getId()); - - return createdDisplayNameAttribute; - } - - /** - * Generate a QR Code for setting up a new relationship to a client. - * - * @return Details of the registration process like the RelationshipTemplate ID which is required to keep track of the - * status of the registration. - */ - public RegistrationData generateQrCodeForRegistrationAsJpg( - String displayTextRequestedAttributes, - String displayTextSharedAttributes, - String displayTextCreateAttributes, - Long qrCodeValidityMinutes) { - RelationshipTemplate relationshipTemplate = - createOnboardingRelationshipTemplate( - displayTextRequestedAttributes, - displayTextSharedAttributes, - displayTextCreateAttributes, - qrCodeValidityMinutes); - Response qrCodeResponse = - enmeshedClient.getQrCodeForRelationshipTemplate(relationshipTemplate.getId()); - - try (InputStream inputStream = qrCodeResponse.body().asInputStream()) { - return new RegistrationData( - inputStream.readAllBytes(), - relationshipTemplate.getId(), - relationshipTemplate.getExpiresAt()); - } catch (IOException e) { - log.error("Failed to read QR Code Response"); - return null; - } - } - - /** - * Generate a QR Code for setting up a new relationship to a client as a model. - * - * @return {@link QrCode}. - */ - public QrCode generateQrCodeForRegistration( - String displayTextRequestedAttributes, - String displayTextSharedAttributes, - String displayTextCreateAttributes, - Long qrCodeValidityMinutes) { - - RelationshipTemplate relationshipTemplate = - createOnboardingRelationshipTemplate( - displayTextRequestedAttributes, displayTextSharedAttributes, - displayTextCreateAttributes, qrCodeValidityMinutes); - - return enmeshedClient.createRelationshipQrCode(relationshipTemplate.getId()).getResult(); - } - - /** - * Checks the current state of a registration. If registration is requested by client it will be accepted based on the - * passed acceptanceDecider. - * - * @param relationshipTemplateId ID of the RelationshipTemplate - * @param acceptanceDecider Functional Interface to decide whether the incoming request should be accepted or - * not. The send attributes will be passed to the method call. - * @return Registration Details and attributes shared by client during connecting. - */ - public RegistrationResult checkRegistrationState( - String relationshipTemplateId, - Predicate, AttributeValue>> acceptanceDecider) { - - enmeshedClient.sync(); - - List relationships = - enmeshedClient.searchRelationships(relationshipTemplateId, null, null).getResult(); - - if (relationships.isEmpty()) { - return null; - } - - Relationship relationship = relationships.get(0); - RelationshipCreationContent creationContent = relationship.getCreationContent(); - Map, AttributeValue> attributes = - getSharedSimpleAttributesFromResponseItems(creationContent.getResponse().getItems()); - - RelationshipStatus status = relationship.getStatus(); - if (status == RelationshipStatus.PENDING) { - boolean decision = acceptanceDecider.test(attributes); - - if (decision) { - enmeshedClient.acceptRelationship(relationship.getId()); - } else { - enmeshedClient.rejectRelationship(relationship.getId()); - } - return checkRegistrationState(relationshipTemplateId, registrationResult -> decision); - } else if (status == RelationshipStatus.ACTIVE) { - // Request was accepted by User and us - Get the send Attributes and return them - return new RegistrationResult( - attributes, - relationships.get(0).getPeerIdentity().getAddress(), - relationship.getId(), - true); - } else if (status == RelationshipStatus.REJECTED) { - // Request was accepted by User and us - Get the send Attributes and return them - return new RegistrationResult( - attributes, - relationships.get(0).getPeerIdentity().getAddress(), - relationship.getId(), - false); - } else { - return null; - } - } - - /** - * Checks the current state of a registration. If registration is requested by client it will be accepted. - * - * @param relationshipTemplateId ID of the RelationshipTemplate - * @return Registration Details and attributes shared by client during connecting. - */ - public RegistrationResult checkRegistrationState(String relationshipTemplateId) { - - return checkRegistrationState(relationshipTemplateId, registrationResult -> true); - } - - private Map, AttributeValue> - getSharedSimpleAttributesFromResponseItems(List responseItems) { - - Map, AttributeValue> attributes = new HashMap<>(); - - for (ResponseItem responseItem : responseItems) { - if (responseItem instanceof ReadAttributeAcceptResponseItem readAttributeAcceptResponseItem) { - AttributeValue attributeValue = readAttributeAcceptResponseItem.getAttribute().getValue(); - attributes.put(attributeValue.getClass(), attributeValue); - } else if (responseItem instanceof ResponseItemGroup responseItemGroup) { - attributes.putAll(getSharedSimpleAttributesFromResponseItems(responseItemGroup.getItems())); - } - // Ignore all other kinds of ResponseItems - } - - return attributes; - } - - private RelationshipTemplate createOnboardingRelationshipTemplate( - String displayTextRequestedAttributes, - String displayTextSharedAttributes, - String displayTextCreateAttributes, - Long qrCodeValidityMinutes) { - - RequestItemGroup sharedAttributesGroup = - RequestItemGroup.builder() - .title(displayTextSharedAttributes) - .items( - List.of(ShareAttributeRequestItem.fromWrapper(connectorDisplayNameAttribute, true))) - .build(); - - RequestItemGroup requestedAttributesGroup = - RequestItemGroup.builder().title(displayTextRequestedAttributes).build(); - - List readAttributeItems = new ArrayList<>(); - requiredAttributes.stream() - .map(attribute -> ReadAttributeRequestItem.withIdentityAttributeQuery(attribute, true)) - .forEach(readAttributeItems::add); - optionalAttributes.stream() - .map(attribute -> ReadAttributeRequestItem.withIdentityAttributeQuery(attribute, false)) - .forEach(readAttributeItems::add); - requestedAttributesGroup.setItems(readAttributeItems); - - RequestItemGroup createAttributeGroup = - RequestItemGroup.builder().title(displayTextCreateAttributes).build(); - List createAttributeItems = new ArrayList<>(); - createAttributes.stream() - .map( - createdAttribute -> - CreateAttributeRequestItem.fromWrapper(connectorDisplayNameAttribute, true)) - .forEach(createAttributeItems::add); - createAttributeGroup.setItems(createAttributeItems); - - List items = - new ArrayList<>(Arrays.asList(sharedAttributesGroup, requestedAttributesGroup)); - - if (!createAttributeGroup.getItems().isEmpty()) { - items.add(createAttributeGroup); - } - - RelationshipTemplateContent relationShipTemplateContent = - RelationshipTemplateContent.builder() - .onNewRelationship(Request.builder().items(items).build()) - .build(); - - Long qrCodeValidityTime = - Objects.isNull(qrCodeValidityMinutes) - ? QR_CODE_VALIDITY_MINUTES_DEFAULT - : qrCodeValidityMinutes; - - RelationshipTemplateCreation relationShipTemplateCreation = - RelationshipTemplateCreation.builder() - .expiresAt(ZonedDateTime.now().plusMinutes(qrCodeValidityTime)) - .maxNumberOfAllocations(QR_CODE_NUMBER_OF_ALLOCATIONS) - .content(relationShipTemplateContent) - .build(); - - return enmeshedClient.createOwnRelationshipTemplate(relationShipTemplateCreation).getResult(); - } - - public record RegistrationData( - byte[] qrCode, String relationshipTemplateId, ZonedDateTime expiresAt) { - - } - - public record RegistrationResult( - Map, AttributeValue> attributes, - String enmeshedAddress, - String relationshipId, - boolean accepted) { - - } -} diff --git a/src/main/java/eu/enmeshed/EnmeshedRequestService.java b/src/main/java/eu/enmeshed/EnmeshedRequestService.java deleted file mode 100644 index cf66f9d..0000000 --- a/src/main/java/eu/enmeshed/EnmeshedRequestService.java +++ /dev/null @@ -1,22 +0,0 @@ -package eu.enmeshed; - -import eu.enmeshed.client.EnmeshedClient; -import eu.enmeshed.model.request.LocalRequest; -import eu.enmeshed.model.request.Request; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@RequiredArgsConstructor -public class EnmeshedRequestService { - - private final EnmeshedClient enmeshedClient; - - public LocalRequest acceptIncomingRequestById(String requestId, Request request) { - return enmeshedClient.acceptIncomingRequestById(requestId, request).getResult(); - } - - public LocalRequest getIncomingRequestById(String requestId) { - return enmeshedClient.getIncomingRequestById(requestId).getResult(); - } -} diff --git a/src/test/java/eu/enmeshed/EnmeshedFileServiceTest.java b/src/test/java/eu/enmeshed/EnmeshedFileServiceTest.java deleted file mode 100644 index 54a30bf..0000000 --- a/src/test/java/eu/enmeshed/EnmeshedFileServiceTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package eu.enmeshed; - -import static eu.enmeshed.model.ResultWrapper.containing; -import static eu.enmeshed.model.file.FileMetaData.builder; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -import eu.enmeshed.client.EnmeshedClient; -import eu.enmeshed.model.file.FileMetaData; -import eu.enmeshed.model.file.FileReference; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class EnmeshedFileServiceTest { - - private static final String TEST_FILE_ID = "testId"; - private static final FileMetaData EXPECTED_TEST_FILE_METADATA = - builder().id(TEST_FILE_ID).title("Test data").build(); - - @Mock - EnmeshedClient enmeshedClientMock; - EnmeshedFileService enmeshedFileService; - - @BeforeEach - void setup() { - enmeshedFileService = new EnmeshedFileService(enmeshedClientMock); - } - - @Test - void shouldCorrectlyGetFileMetadataByFileId() { - when(enmeshedClientMock.getFileMetadataByFileId(eq(TEST_FILE_ID))) - .thenReturn(containing(EXPECTED_TEST_FILE_METADATA)); - - FileMetaData actualFileMetadata = enmeshedFileService.getFileMetadataByFileId(TEST_FILE_ID); - - assertSame(EXPECTED_TEST_FILE_METADATA, actualFileMetadata); - } - - @Test - void shouldCorrectlyGetFileMetadataByReference() { - when(enmeshedClientMock.getFileMetadataByReference(any(FileReference.class))) - .thenReturn(containing(EXPECTED_TEST_FILE_METADATA)); - - FileMetaData actualFileMetadata = enmeshedFileService.getFileMetadataByReference(TEST_FILE_ID); - - assertSame(EXPECTED_TEST_FILE_METADATA, actualFileMetadata); - } -} diff --git a/src/test/java/eu/enmeshed/EnmeshedMessagingServiceTest.java b/src/test/java/eu/enmeshed/EnmeshedMessagingServiceTest.java deleted file mode 100644 index d7f633b..0000000 --- a/src/test/java/eu/enmeshed/EnmeshedMessagingServiceTest.java +++ /dev/null @@ -1,505 +0,0 @@ -package eu.enmeshed; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import eu.enmeshed.client.EnmeshedClient; -import eu.enmeshed.model.ResultWrapper; -import eu.enmeshed.model.messaging.Message; -import eu.enmeshed.model.messaging.SendMessage; -import eu.enmeshed.model.request.LocalRequest; -import eu.enmeshed.model.request.LocalRequestResponse; -import eu.enmeshed.model.request.LocalRequestSource; -import eu.enmeshed.model.request.Request; -import eu.enmeshed.model.request.RequestResponseSource; -import eu.enmeshed.model.request.Response; -import eu.enmeshed.model.request.requestItems.AuthenticationRequestItem; -import eu.enmeshed.model.request.requestItems.RequestItemDerivation; -import eu.enmeshed.model.request.responseItems.AcceptResponseItem; -import eu.enmeshed.model.request.responseItems.RejectResponseItem; -import feign.FeignException; -import java.time.Duration; -import java.time.ZonedDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.ArgumentCaptor; -import org.mockito.InOrder; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; - -@Slf4j -@ExtendWith(MockitoExtension.class) -public class EnmeshedMessagingServiceTest { - - public static final String TEST_ENMESHED_ADDRESS = "idXXXXXXXXXXXXXXXXXXXXXXXXXXX"; - public static final String TEST_REQUEST_ID = "REQXXXXXXXXXXXXXXXXXXXXXXXXXX"; - public static final String TEST_MESSAGE_ID = "MSGXXXXXXXXXXXXXXXXXXXXXXXXXX"; - public static final String TEST_AUTH_TITLE = "Test Title"; - public static final String TEST_AUTH_TEXT = "Test Text"; - public static final Map TEST_METADATA = Map.of("K1", "V1", "K2", "V2"); - @Mock - EnmeshedClient enmeshedClientMock; - EnmeshedMessagingService enmeshedMessagingService; - - @BeforeEach - void setup() { - - enmeshedMessagingService = new EnmeshedMessagingService(enmeshedClientMock); - } - - @Test - void testSendMessage() throws EnmeshedMessagingService.SendMessageFailedException { - - ArgumentCaptor requestWrapperArgumentCaptor = - ArgumentCaptor.forClass(LocalRequest.class); - when(enmeshedClientMock.createOutgoingRequest(requestWrapperArgumentCaptor.capture())) - .thenAnswer( - invocationOnMock -> { - LocalRequest passedRequest = invocationOnMock.getArgument(0, LocalRequest.class); - return ResultWrapper.containing( - LocalRequest.builder() - .id(TEST_REQUEST_ID) - .isOwn(true) - .peer(TEST_ENMESHED_ADDRESS) - .createdAt(ZonedDateTime.now()) - .status(LocalRequest.LocalRequestStatus.DRAFT) - .content( - Request.builder() - .id(TEST_REQUEST_ID) - .expiresAt(passedRequest.getContent().getExpiresAt()) - .items(passedRequest.getContent().getItems()) - .build()) - .build()); - }); - - ArgumentCaptor sendMessageArgumentCaptor = - ArgumentCaptor.forClass(SendMessage.class); - when(enmeshedClientMock.sendMessage(sendMessageArgumentCaptor.capture())) - .thenAnswer( - invocationOnMock -> { - SendMessage passedMessage = invocationOnMock.getArgument(0, SendMessage.class); - return ResultWrapper.containing( - Message.builder() - .content(passedMessage.getContent()) - .id(TEST_MESSAGE_ID) - .createdAt(ZonedDateTime.now()) - .build()); - }); - - String requestId = - enmeshedMessagingService.sendAuthenticationRequest( - TEST_ENMESHED_ADDRESS, - TEST_AUTH_TITLE, - TEST_AUTH_TEXT, - true, - Duration.of(24, ChronoUnit.HOURS), - TEST_METADATA); - - // Test request is created before message is sent - InOrder inOrder = Mockito.inOrder(enmeshedClientMock); - inOrder.verify(enmeshedClientMock).createOutgoingRequest(any()); - inOrder.verify(enmeshedClientMock).sendMessage(any()); - - // Test sent request - Assertions.assertEquals(TEST_REQUEST_ID, requestId); - Assertions.assertEquals( - TEST_ENMESHED_ADDRESS, requestWrapperArgumentCaptor.getValue().getPeer()); - Assertions.assertNull(requestWrapperArgumentCaptor.getValue().getId()); - Assertions.assertEquals( - 1, requestWrapperArgumentCaptor.getValue().getContent().getItems().size()); - Assertions.assertInstanceOf( - AuthenticationRequestItem.class, - requestWrapperArgumentCaptor.getValue().getContent().getItems().get(0)); - Assertions.assertEquals( - TEST_AUTH_TITLE, - requestWrapperArgumentCaptor.getValue().getContent().getItems().get(0).getTitle()); - Assertions.assertEquals( - TEST_AUTH_TEXT, - requestWrapperArgumentCaptor.getValue().getContent().getItems().get(0).getDescription()); - Assertions.assertEquals( - TEST_METADATA, - requestWrapperArgumentCaptor.getValue().getContent().getItems().get(0).getMetadata()); - Assertions.assertTrue( - ((RequestItemDerivation) - requestWrapperArgumentCaptor.getValue().getContent().getItems().get(0)) - .getRequireManualDecision()); - - // Test sent message - Assertions.assertNull(sendMessageArgumentCaptor.getValue().getAttachments()); - Assertions.assertEquals(1, sendMessageArgumentCaptor.getValue().getRecipients().size()); - Assertions.assertEquals( - TEST_ENMESHED_ADDRESS, sendMessageArgumentCaptor.getValue().getRecipients().get(0)); - Assertions.assertInstanceOf(Request.class, sendMessageArgumentCaptor.getValue().getContent()); - Request sentRequest = (Request) sendMessageArgumentCaptor.getValue().getContent(); - Assertions.assertEquals(TEST_REQUEST_ID, sentRequest.getId()); - Assertions.assertEquals(1, sentRequest.getItems().size()); - Assertions.assertInstanceOf(AuthenticationRequestItem.class, sentRequest.getItems().get(0)); - Assertions.assertEquals(TEST_AUTH_TITLE, sentRequest.getItems().get(0).getTitle()); - Assertions.assertEquals(TEST_AUTH_TEXT, sentRequest.getItems().get(0).getDescription()); - Assertions.assertTrue( - ((RequestItemDerivation) sentRequest.getItems().get(0)).getRequireManualDecision()); - } - - @Test - void testSendMessageWithoutMetadata() throws EnmeshedMessagingService.SendMessageFailedException { - - ArgumentCaptor requestWrapperArgumentCaptor = - ArgumentCaptor.forClass(LocalRequest.class); - when(enmeshedClientMock.createOutgoingRequest(requestWrapperArgumentCaptor.capture())) - .thenAnswer( - invocationOnMock -> { - LocalRequest passedRequest = invocationOnMock.getArgument(0, LocalRequest.class); - return ResultWrapper.containing( - LocalRequest.builder() - .id(TEST_REQUEST_ID) - .isOwn(true) - .peer(TEST_ENMESHED_ADDRESS) - .createdAt(ZonedDateTime.now()) - .status(LocalRequest.LocalRequestStatus.DRAFT) - .content( - Request.builder() - .id(TEST_REQUEST_ID) - .expiresAt(passedRequest.getContent().getExpiresAt()) - .items(passedRequest.getContent().getItems()) - .build()) - .build()); - }); - - ArgumentCaptor sendMessageArgumentCaptor = - ArgumentCaptor.forClass(SendMessage.class); - when(enmeshedClientMock.sendMessage(sendMessageArgumentCaptor.capture())) - .thenAnswer( - invocationOnMock -> { - SendMessage passedMessage = invocationOnMock.getArgument(0, SendMessage.class); - return ResultWrapper.containing( - Message.builder() - .content(passedMessage.getContent()) - .id(TEST_MESSAGE_ID) - .createdAt(ZonedDateTime.now()) - .build()); - }); - - enmeshedMessagingService.sendAuthenticationRequest( - TEST_ENMESHED_ADDRESS, - TEST_AUTH_TITLE, - TEST_AUTH_TEXT, - true, - Duration.of(24, ChronoUnit.HOURS)); - - Assertions.assertEquals( - Collections.emptyMap(), - requestWrapperArgumentCaptor.getValue().getContent().getItems().get(0).getMetadata()); - } - - @ParameterizedTest - @ValueSource(ints = {400, 404, 500}) - void testSendMessageFailsBecauseFailingRequest(int statusCode) { - - when(enmeshedClientMock.createOutgoingRequest(any())) - .thenThrow( - new FeignException.FeignClientException( - statusCode, - "", - feign.Request.create( - feign.Request.HttpMethod.GET, - "", - Collections.emptyMap(), - new byte[0], - null, - null), - new byte[0], - null)); - - EnmeshedMessagingService.SendMessageFailedException e = - Assertions.assertThrows( - EnmeshedMessagingService.SendMessageFailedException.class, - () -> - enmeshedMessagingService.sendAuthenticationRequest( - TEST_ENMESHED_ADDRESS, - TEST_AUTH_TITLE, - TEST_AUTH_TEXT, - true, - Duration.of(24, ChronoUnit.HOURS))); - - Assertions.assertEquals(statusCode, e.getHttpStatus()); - Assertions.assertEquals(TEST_AUTH_TITLE, e.getRequest().getTitle()); - Assertions.assertEquals(TEST_AUTH_TEXT, e.getRequest().getDescription()); - Assertions.assertNotNull(e.getReason()); - - verify(enmeshedClientMock).createOutgoingRequest(any()); - verify(enmeshedClientMock, never()).sendMessage(any()); - } - - @Test - void testResponseAccepted() { - - ZonedDateTime timestamp = ZonedDateTime.now(); - - when(enmeshedClientMock.getOutgoingRequest(TEST_REQUEST_ID)) - .thenReturn( - ResultWrapper.containing( - LocalRequest.builder() - .id(TEST_REQUEST_ID) - .source( - LocalRequestSource.builder() - .reference(TEST_MESSAGE_ID) - .type(LocalRequestSource.RequestSourceType.MESSAGE) - .build()) - .response( - LocalRequestResponse.builder() - .createdAt(timestamp) - .source( - RequestResponseSource.builder() - .reference(TEST_MESSAGE_ID) - .type(RequestResponseSource.RequestSourceType.MESSAGE) - .build()) - .content( - Response.builder() - .requestId(TEST_REQUEST_ID) - .result(Response.Result.ACCEPTED) - .items(List.of(new AcceptResponseItem())) - .build()) - .build()) - .content( - Request.builder() - .items( - List.of( - AuthenticationRequestItem.builder() - .requireManualDecision(true) - .mustBeAccepted(true) - .description(TEST_AUTH_TEXT) - .title(TEST_AUTH_TITLE) - .build())) - .build()) - .status(LocalRequest.LocalRequestStatus.DECIDED) - .createdAt(timestamp) - .build())); - - EnmeshedMessagingService.AuthenticationStatus authenticationStatus = - enmeshedMessagingService.getAuthenticationStatus(TEST_REQUEST_ID); - - verify(enmeshedClientMock).getOutgoingRequest(TEST_REQUEST_ID); - - Assertions.assertTrue(authenticationStatus.requestExists()); - Assertions.assertTrue(authenticationStatus.accepted()); - Assertions.assertFalse(authenticationStatus.rejected()); - Assertions.assertEquals(timestamp, authenticationStatus.respondedAt()); - } - - @Test - void testResponseRejected() { - - ZonedDateTime timestamp = ZonedDateTime.now(); - - when(enmeshedClientMock.getOutgoingRequest(TEST_REQUEST_ID)) - .thenReturn( - ResultWrapper.containing( - LocalRequest.builder() - .id(TEST_REQUEST_ID) - .source( - LocalRequestSource.builder() - .reference(TEST_MESSAGE_ID) - .type(LocalRequestSource.RequestSourceType.MESSAGE) - .build()) - .response( - LocalRequestResponse.builder() - .createdAt(timestamp) - .source( - RequestResponseSource.builder() - .reference(TEST_MESSAGE_ID) - .type(RequestResponseSource.RequestSourceType.MESSAGE) - .build()) - .content( - Response.builder() - .requestId(TEST_REQUEST_ID) - .result(Response.Result.REJECTED) - .items(List.of(new RejectResponseItem())) - .build()) - .build()) - .content( - Request.builder() - .items( - List.of( - AuthenticationRequestItem.builder() - .requireManualDecision(true) - .mustBeAccepted(true) - .description(TEST_AUTH_TEXT) - .title(TEST_AUTH_TITLE) - .build())) - .build()) - .status(LocalRequest.LocalRequestStatus.DECIDED) - .createdAt(timestamp) - .build())); - - EnmeshedMessagingService.AuthenticationStatus authenticationStatus = - enmeshedMessagingService.getAuthenticationStatus(TEST_REQUEST_ID); - - verify(enmeshedClientMock).getOutgoingRequest(TEST_REQUEST_ID); - - Assertions.assertTrue(authenticationStatus.requestExists()); - Assertions.assertFalse(authenticationStatus.accepted()); - Assertions.assertTrue(authenticationStatus.rejected()); - Assertions.assertEquals(timestamp, authenticationStatus.respondedAt()); - } - - @Test - void testResponseExpired() { - - ZonedDateTime timestamp = ZonedDateTime.now(); - - when(enmeshedClientMock.getOutgoingRequest(TEST_REQUEST_ID)) - .thenReturn( - ResultWrapper.containing( - LocalRequest.builder() - .id(TEST_REQUEST_ID) - .source( - LocalRequestSource.builder() - .reference(TEST_MESSAGE_ID) - .type(LocalRequestSource.RequestSourceType.MESSAGE) - .build()) - .response( - LocalRequestResponse.builder() - .createdAt(null) - .source( - RequestResponseSource.builder() - .reference(TEST_MESSAGE_ID) - .type(RequestResponseSource.RequestSourceType.MESSAGE) - .build()) - .content(null) - .build()) - .content( - Request.builder() - .items( - List.of( - AuthenticationRequestItem.builder() - .requireManualDecision(true) - .mustBeAccepted(true) - .description(TEST_AUTH_TEXT) - .title(TEST_AUTH_TITLE) - .build())) - .build()) - .status(LocalRequest.LocalRequestStatus.EXPIRED) - .createdAt(timestamp) - .build())); - - EnmeshedMessagingService.AuthenticationStatus authenticationStatus = - enmeshedMessagingService.getAuthenticationStatus(TEST_REQUEST_ID); - - verify(enmeshedClientMock).getOutgoingRequest(TEST_REQUEST_ID); - - Assertions.assertTrue(authenticationStatus.requestExists()); - Assertions.assertFalse(authenticationStatus.accepted()); - Assertions.assertFalse(authenticationStatus.rejected()); - Assertions.assertTrue(authenticationStatus.expired()); - Assertions.assertNull(authenticationStatus.respondedAt()); - } - - @Test - void testResponseNotDecided() { - - ZonedDateTime timestamp = ZonedDateTime.now(); - - when(enmeshedClientMock.getOutgoingRequest(TEST_REQUEST_ID)) - .thenReturn( - ResultWrapper.containing( - LocalRequest.builder() - .id(TEST_REQUEST_ID) - .source( - LocalRequestSource.builder() - .reference(TEST_MESSAGE_ID) - .type(LocalRequestSource.RequestSourceType.MESSAGE) - .build()) - .response(null) - .content( - Request.builder() - .items( - List.of( - AuthenticationRequestItem.builder() - .requireManualDecision(true) - .mustBeAccepted(true) - .description(TEST_AUTH_TEXT) - .title(TEST_AUTH_TITLE) - .build())) - .build()) - .status(LocalRequest.LocalRequestStatus.DECISION_REQUIRED) - .createdAt(timestamp) - .build())); - - EnmeshedMessagingService.AuthenticationStatus authenticationStatus = - enmeshedMessagingService.getAuthenticationStatus(TEST_REQUEST_ID); - - verify(enmeshedClientMock).getOutgoingRequest(TEST_REQUEST_ID); - - Assertions.assertTrue(authenticationStatus.requestExists()); - Assertions.assertFalse(authenticationStatus.accepted()); - Assertions.assertFalse(authenticationStatus.rejected()); - Assertions.assertNull(authenticationStatus.respondedAt()); - } - - @Test - void testResponseRequestNotFound() { - - when(enmeshedClientMock.getOutgoingRequest(TEST_REQUEST_ID)) - .thenThrow( - new FeignException.FeignClientException( - 404, - "", - feign.Request.create( - feign.Request.HttpMethod.GET, - "", - Collections.emptyMap(), - new byte[0], - null, - null), - new byte[0], - null)); - - EnmeshedMessagingService.AuthenticationStatus authenticationStatus = - enmeshedMessagingService.getAuthenticationStatus(TEST_REQUEST_ID); - - verify(enmeshedClientMock).getOutgoingRequest(TEST_REQUEST_ID); - - Assertions.assertFalse(authenticationStatus.requestExists()); - Assertions.assertFalse(authenticationStatus.accepted()); - Assertions.assertFalse(authenticationStatus.rejected()); - Assertions.assertNull(authenticationStatus.respondedAt()); - } - - @Test - void testResponseUnexpectedError() { - - when(enmeshedClientMock.getOutgoingRequest(TEST_REQUEST_ID)) - .thenThrow( - new FeignException.FeignClientException( - 500, - "", - feign.Request.create( - feign.Request.HttpMethod.GET, - "", - Collections.emptyMap(), - new byte[0], - null, - null), - new byte[0], - null)); - - EnmeshedMessagingService.AuthenticationStatus authenticationStatus = - enmeshedMessagingService.getAuthenticationStatus(TEST_REQUEST_ID); - - verify(enmeshedClientMock).getOutgoingRequest(TEST_REQUEST_ID); - - Assertions.assertNull(authenticationStatus); - } -} diff --git a/src/test/java/eu/enmeshed/EnmeshedOnboardingServiceTest.java b/src/test/java/eu/enmeshed/EnmeshedOnboardingServiceTest.java deleted file mode 100644 index 63fc053..0000000 --- a/src/test/java/eu/enmeshed/EnmeshedOnboardingServiceTest.java +++ /dev/null @@ -1,672 +0,0 @@ -package eu.enmeshed; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import eu.enmeshed.client.EnmeshedClient; -import eu.enmeshed.model.AttributeWrapper; -import eu.enmeshed.model.ContentWrapper; -import eu.enmeshed.model.IdentityInfo; -import eu.enmeshed.model.ResultWrapper; -import eu.enmeshed.model.attributes.Attribute; -import eu.enmeshed.model.attributes.IdentityAttribute; -import eu.enmeshed.model.attributes.values.AttributeValue; -import eu.enmeshed.model.attributes.values.identity.BirthYear; -import eu.enmeshed.model.attributes.values.identity.DisplayName; -import eu.enmeshed.model.attributes.values.identity.EMailAddress; -import eu.enmeshed.model.attributes.values.identity.GivenName; -import eu.enmeshed.model.attributes.values.identity.Surname; -import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; -import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateCreation; -import eu.enmeshed.model.relationships.Relationship; -import eu.enmeshed.model.relationships.RelationshipCreationContent; -import eu.enmeshed.model.relationships.RelationshipStatus; -import eu.enmeshed.model.request.Request; -import eu.enmeshed.model.request.Response; -import eu.enmeshed.model.request.requestItems.CreateAttributeRequestItem; -import eu.enmeshed.model.request.requestItems.ReadAttributeRequestItem; -import eu.enmeshed.model.request.requestItems.RequestItem; -import eu.enmeshed.model.request.requestItems.RequestItemGroup; -import eu.enmeshed.model.request.requestItems.ShareAttributeRequestItem; -import eu.enmeshed.model.request.responseItems.ReadAttributeAcceptResponseItem; -import eu.enmeshed.model.request.responseItems.ResponseItem; -import eu.enmeshed.model.request.responseItems.ResponseItemGroup; -import java.time.Instant; -import java.util.Collections; -import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InOrder; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -public class EnmeshedOnboardingServiceTest { - - private static final String CONNECTOR_DISPLAY_NAME = "Test Connector"; - private static final List> REQUIRED_ATTRIBUTES = - List.of(GivenName.class, Surname.class); - private static final List> OPTIONAL_ATTRIBUTES = - List.of(EMailAddress.class); - private static final IdentityInfo TEST_IDENTITY_INFO = - IdentityInfo.builder() - .address("da88dd1b2b820360d4155162e657f84ea1394076faa1ce2909d8338811cb308d") - .publicKey("dbb5d8fd21caf827fdc128d73e783478d6677a9afc50120db56217726125425f") - .realm("4354b5ae54bab15544f852d7bc1b76bbd6d71a03b5e7ad876916cda3a602aaf9") - .build(); - private final List> CREATE_ATTRIBUTES = - List.of(CreateAttributeRequestItem.class); - - @Mock - EnmeshedClient enmeshedClientMock; - - @Captor - ArgumentCaptor> attributeCreateRequestCaptor; - - @Captor - ArgumentCaptor relationshipTemplateCreationArgumentCaptor; - EnmeshedOnboardingService enmeshedService; - - @Test - void shouldProvideIdentityInfoAndReuseConfiguredDisplayNameIfSet() { - - when(enmeshedClientMock.getIdentityInfo()) - .thenReturn(ResultWrapper.containing(TEST_IDENTITY_INFO)); - - AttributeWrapper wrappedDisplayNameAttribute = - AttributeWrapper.builder() - .id("ATTR_ID") - .content( - IdentityAttribute.builder() - .owner(TEST_IDENTITY_INFO.getAddress()) - .value(DisplayName.builder().value(CONNECTOR_DISPLAY_NAME).build()) - .build()) - .build(); - - when(enmeshedClientMock.searchAttributes(anyString())) - .thenReturn(ResultWrapper.containing(List.of(wrappedDisplayNameAttribute))); - - enmeshedService = - new EnmeshedOnboardingService( - enmeshedClientMock, CONNECTOR_DISPLAY_NAME, REQUIRED_ATTRIBUTES, OPTIONAL_ATTRIBUTES); - - Assertions.assertEquals(TEST_IDENTITY_INFO, enmeshedService.getIdentityInfo()); - Assertions.assertEquals( - CONNECTOR_DISPLAY_NAME, - ((DisplayName) enmeshedService.getConnectorDisplayNameAttribute().getContent().getValue()) - .getValue()); - verify(enmeshedClientMock, never()).createAttribute(any()); - } - - @Test - void itShouldProvideIdentityInfoAndConfigureItsDisplayNameIfNotSet() { - - when(enmeshedClientMock.getIdentityInfo()) - .thenReturn(ResultWrapper.containing(TEST_IDENTITY_INFO)); - - AttributeWrapper wrappedDisplayNameAttribute = - AttributeWrapper.builder() - .id("ATTR_ID") - .content( - IdentityAttribute.builder() - .owner(TEST_IDENTITY_INFO.getAddress()) - .value(DisplayName.builder().value(CONNECTOR_DISPLAY_NAME).build()) - .build()) - .build(); - - when(enmeshedClientMock.createAttribute(attributeCreateRequestCaptor.capture())) - .thenReturn(ResultWrapper.containing(wrappedDisplayNameAttribute)); - - when(enmeshedClientMock.searchAttributes(anyString())) - .thenReturn(ResultWrapper.containing(Collections.emptyList())); - - enmeshedService = - new EnmeshedOnboardingService( - enmeshedClientMock, CONNECTOR_DISPLAY_NAME, REQUIRED_ATTRIBUTES, OPTIONAL_ATTRIBUTES); - - Assertions.assertEquals(TEST_IDENTITY_INFO, enmeshedService.getIdentityInfo()); - Assertions.assertEquals( - CONNECTOR_DISPLAY_NAME, - ((DisplayName) enmeshedService.getConnectorDisplayNameAttribute().getContent().getValue()) - .getValue()); - verify(enmeshedClientMock).createAttribute(any()); - - Assertions.assertInstanceOf( - DisplayName.class, attributeCreateRequestCaptor.getValue().getContent().getValue()); - Assertions.assertEquals( - CONNECTOR_DISPLAY_NAME, - ((DisplayName) attributeCreateRequestCaptor.getValue().getContent().getValue()).getValue()); - Assertions.assertNull(attributeCreateRequestCaptor.getValue().getContent().getOwner()); - } - - @Test - void itShouldReturnRegistrationData() { - - enmeshedService = getServiceInstance(); - - byte[] testQrCodeData = new byte[]{0xd, 0xe, 0xa, 0xd, 0xb, 0xe, 0xe, 0xf}; - String testRelationshipTemplateId = "RLT_ID"; - String testDisplayNameRequestedAttributes = "Requested Attributes"; - String testDisplayNameSharedAttributes = "Shared Attributes"; - String testDisplayNameCreateAttributes = "Create Attributes"; - - when(enmeshedClientMock.createOwnRelationshipTemplate( - relationshipTemplateCreationArgumentCaptor.capture())) - .then( - mockInvocation -> - ResultWrapper.containing( - RelationshipTemplate.builder() - .id(testRelationshipTemplateId) - .isOwn(true) - .content( - mockInvocation - .getArgument(0, RelationshipTemplateCreation.class) - .getContent()) - .build())); - - when(enmeshedClientMock.getQrCodeForRelationshipTemplate(testRelationshipTemplateId)) - .thenReturn( - feign.Response.builder() - .status(200) - .body(testQrCodeData) - .request( - feign.Request.create( - feign.Request.HttpMethod.GET, "", Collections.emptyMap(), null, null, null)) - .build()); - - EnmeshedOnboardingService.RegistrationData registrationData = - enmeshedService.generateQrCodeForRegistrationAsJpg( - testDisplayNameRequestedAttributes, - testDisplayNameSharedAttributes, - testDisplayNameCreateAttributes, - null); - - Assertions.assertArrayEquals(testQrCodeData, registrationData.qrCode()); - Assertions.assertEquals(testRelationshipTemplateId, registrationData.relationshipTemplateId()); - - Assertions.assertEquals( - 1, relationshipTemplateCreationArgumentCaptor.getValue().getMaxNumberOfAllocations()); - - // At least one hour in future (with 5s tolerance) - Assertions.assertTrue( - Instant.from(relationshipTemplateCreationArgumentCaptor.getValue().getExpiresAt()) - .toEpochMilli() - - Instant.now().toEpochMilli() - > 3_595_000); - - Request request = - relationshipTemplateCreationArgumentCaptor.getValue().getContent().getOnNewRelationship(); - - // Shared Items - Assertions.assertTrue( - ((RequestItemGroup) request.getItems().get(0)).getItems().get(0).getMustBeAccepted()); - Assertions.assertEquals(testDisplayNameSharedAttributes, request.getItems().get(0).getTitle()); - Assertions.assertEquals( - CONNECTOR_DISPLAY_NAME, - ((DisplayName) - ((ShareAttributeRequestItem) - ((RequestItemGroup) request.getItems().get(0)).getItems().get(0)) - .getAttribute() - .getValue()) - .getValue()); - // Required Items - Assertions.assertTrue( - ((RequestItemGroup) request.getItems().get(1)).getItems().get(0).getMustBeAccepted()); - Assertions.assertEquals( - testDisplayNameRequestedAttributes, request.getItems().get(1).getTitle()); - Assertions.assertEquals( - REQUIRED_ATTRIBUTES.get(0).getSimpleName(), - ((ReadAttributeRequestItem) - ((RequestItemGroup) request.getItems().get(1)).getItems().get(0)) - .getQuery() - .get("valueType")); - Assertions.assertEquals( - REQUIRED_ATTRIBUTES.get(1).getSimpleName(), - ((ReadAttributeRequestItem) - ((RequestItemGroup) request.getItems().get(1)).getItems().get(1)) - .getQuery() - .get("valueType")); - Assertions.assertTrue( - ((RequestItemGroup) request.getItems().get(1)).getItems().get(1).getMustBeAccepted()); - - // Optional Items - Assertions.assertFalse( - ((RequestItemGroup) request.getItems().get(1)).getItems().get(2).getMustBeAccepted()); - Assertions.assertEquals( - OPTIONAL_ATTRIBUTES.get(0).getSimpleName(), - ((ReadAttributeRequestItem) - ((RequestItemGroup) request.getItems().get(1)).getItems().get(2)) - .getQuery() - .get("valueType")); - - // Created Items - Assertions.assertTrue( - ((RequestItemGroup) request.getItems().get(2)).getItems().get(0).getMustBeAccepted()); - Assertions.assertEquals(CREATE_ATTRIBUTES.get(0).getSimpleName(), "CreateAttributeRequestItem"); - } - - @Test - void shouldReturnNullIfRelationshipTemplateCouldNotBeFound() { - - String relationshipTemplateId = "RLTXXX"; - enmeshedService = getServiceInstance(); - - when(enmeshedClientMock.searchRelationships(any(), any(), any())) - .thenReturn(ResultWrapper.containing(Collections.emptyList())); - - Assertions.assertNull(enmeshedService.checkRegistrationState(relationshipTemplateId)); - - verify(enmeshedClientMock).sync(); - } - - @Test - void shouldReturnRegistrationDataIfRelationshipTemplateCouldBeFound() { - - String relationshipTemplateId = "RLT_XXX"; - String relationshipId = "REL_XXX"; - String userGivenName = "Max"; - String userSurname = "Muster"; - String userAddress = "ADDR_XXX"; - Integer userBirthyear = 2000; - enmeshedService = getServiceInstance(); - - when(enmeshedClientMock.searchRelationships(eq(relationshipTemplateId), any(), any())) - .thenReturn( - ResultWrapper.containing( - List.of( - Relationship.builder() - .id(relationshipId) - .template(RelationshipTemplate.builder().id(relationshipTemplateId).build()) - .peerIdentity(IdentityInfo.builder().address(userAddress).build()) - .peer(userAddress) - .creationContent( - RelationshipCreationContent.builder() - .response( - Response.builder() - .items( - List.of( - ResponseItemGroup.builder() - .items( - List.of( - ReadAttributeAcceptResponseItem - .builder() - .result( - ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - GivenName.builder() - .value( - userGivenName) - .build()) - .build()) - .build(), - ReadAttributeAcceptResponseItem - .builder() - .result( - ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - Surname.builder() - .value(userSurname) - .build()) - .build()) - .build(), - ReadAttributeAcceptResponseItem - .builder() - .result( - ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - BirthYear.builder() - .value( - userBirthyear) - .build()) - .build()) - .build())) - .build())) - .requestId("REQ_ID") - .result(Response.Result.ACCEPTED) - .build()) - .build()) - .status(RelationshipStatus.ACTIVE) - .build()))); - EnmeshedOnboardingService.RegistrationResult registrationResult = - enmeshedService.checkRegistrationState(relationshipTemplateId); - - Assertions.assertEquals(userAddress, registrationResult.enmeshedAddress()); - Assertions.assertEquals(relationshipId, registrationResult.relationshipId()); - Assertions.assertEquals( - userGivenName, - ((GivenName) registrationResult.attributes().get(GivenName.class)).getValue()); - Assertions.assertEquals( - userSurname, ((Surname) registrationResult.attributes().get(Surname.class)).getValue()); - Assertions.assertEquals( - userBirthyear, - ((BirthYear) registrationResult.attributes().get(BirthYear.class)).getValue()); - - InOrder inOrder = Mockito.inOrder(enmeshedClientMock); - inOrder.verify(enmeshedClientMock).sync(); - inOrder - .verify(enmeshedClientMock) - .searchRelationships(eq(relationshipTemplateId), any(), any()); - - verify(enmeshedClientMock, never()).acceptRelationship(anyString()); - } - - @Test - void shouldAcceptTheIncomingRequestAndReturnSentData() { - - String relationshipTemplateId = "RLT_XXX"; - String relationshipId = "REL_XXX"; - String userGivenName = "Max"; - String userSurname = "Muster"; - String userAddress = "ADDR_XXX"; - int userBirthYear = 1999; - enmeshedService = getServiceInstance(); - - RelationshipCreationContent creationContent = - RelationshipCreationContent.builder() - .response( - Response.builder() - .items( - List.of( - ResponseItemGroup.builder() - .items( - List.of( - ReadAttributeAcceptResponseItem.builder() - .result(ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - GivenName.builder() - .value(userGivenName) - .build()) - .build()) - .build(), - ReadAttributeAcceptResponseItem.builder() - .result(ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - Surname.builder() - .value(userSurname) - .build()) - .build()) - .build(), - ReadAttributeAcceptResponseItem.builder() - .result(ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - BirthYear.builder() - .value(userBirthYear) - .build()) - .build()) - .build())) - .build())) - .requestId("REQ_ID") - .result(Response.Result.ACCEPTED) - .build()) - .build(); - - when(enmeshedClientMock.searchRelationships(eq(relationshipTemplateId), any(), any())) - .thenReturn( - ResultWrapper.containing( - List.of( - Relationship.builder() - .id(relationshipId) - .template(RelationshipTemplate.builder().id(relationshipTemplateId).build()) - .peerIdentity(IdentityInfo.builder().address(userAddress).build()) - .peer(userAddress) - .status(RelationshipStatus.PENDING) - .creationContent(creationContent) - .build()))) - .thenReturn( - ResultWrapper.containing( - List.of( - Relationship.builder() - .id(relationshipId) - .template(RelationshipTemplate.builder().id(relationshipTemplateId).build()) - .peerIdentity(IdentityInfo.builder().address(userAddress).build()) - .peer(userAddress) - .creationContent(creationContent) - .status(RelationshipStatus.ACTIVE) - .build()))); - - EnmeshedOnboardingService.RegistrationResult registrationResult = - enmeshedService.checkRegistrationState(relationshipTemplateId); - BirthYear birthYear = (BirthYear) registrationResult.attributes().get(BirthYear.class); - - Assertions.assertEquals(userAddress, registrationResult.enmeshedAddress()); - Assertions.assertEquals(relationshipId, registrationResult.relationshipId()); - Assertions.assertEquals( - userGivenName, - ((GivenName) registrationResult.attributes().get(GivenName.class)).getValue()); - Assertions.assertEquals( - userSurname, ((Surname) registrationResult.attributes().get(Surname.class)).getValue()); - Assertions.assertEquals(userBirthYear, birthYear.getValue()); - Assertions.assertTrue(registrationResult.accepted()); - Assertions.assertEquals(3, registrationResult.attributes().size()); - - InOrder inOrder = Mockito.inOrder(enmeshedClientMock); - inOrder.verify(enmeshedClientMock).sync(); - inOrder - .verify(enmeshedClientMock) - .searchRelationships(eq(relationshipTemplateId), any(), any()); - inOrder.verify(enmeshedClientMock).acceptRelationship(eq(relationshipId)); - inOrder.verify(enmeshedClientMock).sync(); - inOrder - .verify(enmeshedClientMock) - .searchRelationships(eq(relationshipTemplateId), any(), any()); - } - - @Test - void shouldRejectTheIncomingRequestAndReturnSentData() { - - String relationshipTemplateId = "RLT_XXX"; - String relationshipId = "REL_XXX"; - String userGivenName = "Max"; - String userSurname = "Muster"; - String userAddress = "ADDR_XXX"; - enmeshedService = getServiceInstance(); - - RelationshipCreationContent creationContent = - RelationshipCreationContent.builder() - .response( - Response.builder() - .items( - List.of( - ResponseItemGroup.builder() - .items( - List.of( - ReadAttributeAcceptResponseItem.builder() - .result(ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - GivenName.builder() - .value(userGivenName) - .build()) - .build()) - .build(), - ReadAttributeAcceptResponseItem.builder() - .result(ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - Surname.builder() - .value(userSurname) - .build()) - .build()) - .build())) - .build())) - .requestId("REQ_ID") - .result(Response.Result.REJECTED) - .build()) - .build(); - - when(enmeshedClientMock.searchRelationships(eq(relationshipTemplateId), any(), any())) - .thenReturn( - ResultWrapper.containing( - List.of( - Relationship.builder() - .id(relationshipId) - .template(RelationshipTemplate.builder().id(relationshipTemplateId).build()) - .peerIdentity(IdentityInfo.builder().address(userAddress).build()) - .peer(userAddress) - .status(RelationshipStatus.PENDING) - .creationContent(creationContent) - .build()))) - .thenReturn( - ResultWrapper.containing( - List.of( - Relationship.builder() - .id(relationshipId) - .template(RelationshipTemplate.builder().id(relationshipTemplateId).build()) - .peerIdentity(IdentityInfo.builder().address(userAddress).build()) - .peer(userAddress) - .status(RelationshipStatus.REJECTED) - .creationContent(creationContent) - .build()))); - - EnmeshedOnboardingService.RegistrationResult registrationResult = - enmeshedService.checkRegistrationState(relationshipTemplateId, attributes -> false); - - Assertions.assertEquals(userAddress, registrationResult.enmeshedAddress()); - Assertions.assertEquals(relationshipId, registrationResult.relationshipId()); - Assertions.assertEquals( - userGivenName, - ((GivenName) registrationResult.attributes().get(GivenName.class)).getValue()); - Assertions.assertEquals( - userSurname, ((Surname) registrationResult.attributes().get(Surname.class)).getValue()); - Assertions.assertFalse(registrationResult.accepted()); - - InOrder inOrder = Mockito.inOrder(enmeshedClientMock); - inOrder.verify(enmeshedClientMock).sync(); - inOrder - .verify(enmeshedClientMock) - .searchRelationships(eq(relationshipTemplateId), any(), any()); - inOrder.verify(enmeshedClientMock).rejectRelationship(eq(relationshipId)); - inOrder.verify(enmeshedClientMock).sync(); - inOrder - .verify(enmeshedClientMock) - .searchRelationships(eq(relationshipTemplateId), any(), any()); - } - - @Test - void shouldPassTheSentAttributesToAcceptanceDecider() { - - String relationshipTemplateId = "RLT_XXX"; - String relationshipId = "REL_XXX"; - String userGivenName = "Max"; - String userSurname = "Muster"; - String userAddress = "ADDR_XXX"; - enmeshedService = getServiceInstance(); - - RelationshipCreationContent creationContent = - RelationshipCreationContent.builder() - .response( - Response.builder() - .items( - List.of( - ResponseItemGroup.builder() - .items( - List.of( - ReadAttributeAcceptResponseItem.builder() - .result(ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - GivenName.builder() - .value(userGivenName) - .build()) - .build()) - .build(), - ReadAttributeAcceptResponseItem.builder() - .result(ResponseItem.Result.ACCEPTED) - .attribute( - IdentityAttribute.builder() - .value( - Surname.builder() - .value(userSurname) - .build()) - .build()) - .build())) - .build())) - .requestId("REQ_ID") - .result(Response.Result.REJECTED) - .build()) - .build(); - - when(enmeshedClientMock.searchRelationships(eq(relationshipTemplateId), any(), any())) - .thenReturn( - ResultWrapper.containing( - List.of( - Relationship.builder() - .id(relationshipId) - .template(RelationshipTemplate.builder().id(relationshipTemplateId).build()) - .peerIdentity(IdentityInfo.builder().address(userAddress).build()) - .peer(userAddress) - .creationContent(creationContent) - .build()))) - .thenReturn( - ResultWrapper.containing( - List.of( - Relationship.builder() - .id(relationshipId) - .template(RelationshipTemplate.builder().id(relationshipTemplateId).build()) - .peerIdentity(IdentityInfo.builder().address(userAddress).build()) - .peer(userAddress) - .creationContent(creationContent) - .build()))); - - enmeshedService.checkRegistrationState( - relationshipTemplateId, - attributes -> { - Assertions.assertEquals( - userGivenName, ((GivenName) attributes.get(GivenName.class)).getValue()); - Assertions.assertEquals( - userSurname, ((Surname) attributes.get(Surname.class)).getValue()); - Assertions.assertEquals(2, attributes.size()); - - return true; - }); - } - - private EnmeshedOnboardingService getServiceInstance() { - - when(enmeshedClientMock.getIdentityInfo()) - .thenReturn(ResultWrapper.containing(TEST_IDENTITY_INFO)); - - AttributeWrapper wrappedDisplayNameAttribute = - AttributeWrapper.builder() - .id("ATTR_ID") - .content( - IdentityAttribute.builder() - .owner(TEST_IDENTITY_INFO.getAddress()) - .value(DisplayName.builder().value(CONNECTOR_DISPLAY_NAME).build()) - .build()) - .build(); - - when(enmeshedClientMock.searchAttributes(anyString())) - .thenReturn(ResultWrapper.containing(List.of(wrappedDisplayNameAttribute))); - - return new EnmeshedOnboardingService( - enmeshedClientMock, - CONNECTOR_DISPLAY_NAME, - REQUIRED_ATTRIBUTES, - OPTIONAL_ATTRIBUTES, - CREATE_ATTRIBUTES); - } -} diff --git a/src/test/java/eu/enmeshed/EnmeshedRequestServiceTest.java b/src/test/java/eu/enmeshed/EnmeshedRequestServiceTest.java deleted file mode 100644 index a9cec25..0000000 --- a/src/test/java/eu/enmeshed/EnmeshedRequestServiceTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package eu.enmeshed; - -import static eu.enmeshed.model.ResultWrapper.containing; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -import eu.enmeshed.client.EnmeshedClient; -import eu.enmeshed.model.request.LocalRequest; -import eu.enmeshed.model.request.Request; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class EnmeshedRequestServiceTest { - - private static final String TEST_REQUEST_ID = "testId"; - - @Mock - EnmeshedClient enmeshedClientMock; - EnmeshedRequestService enmeshedRequestService; - - @BeforeEach - void setup() { - enmeshedRequestService = new EnmeshedRequestService(enmeshedClientMock); - } - - @Test - void shouldCorrectlyAcceptIncomingRequestById() { - Request request = Request.builder().title("someTitle").build(); - LocalRequest expectedLocalRequest = LocalRequest.builder().peer("somePeer").build(); - when(enmeshedClientMock.acceptIncomingRequestById(eq(TEST_REQUEST_ID), any(Request.class))) - .thenReturn(containing(expectedLocalRequest)); - - LocalRequest actualLocalRequest = - enmeshedRequestService.acceptIncomingRequestById(TEST_REQUEST_ID, request); - - assertSame(expectedLocalRequest, actualLocalRequest); - } - - @Test - void shouldCorrectlyGetIncomingRequestById() { - LocalRequest expectedLocalRequest = LocalRequest.builder().peer("somePeer").build(); - when(enmeshedClientMock.getIncomingRequestById(eq(TEST_REQUEST_ID))) - .thenReturn(containing(expectedLocalRequest)); - - LocalRequest actualLocalRequest = - enmeshedRequestService.getIncomingRequestById(TEST_REQUEST_ID); - - assertSame(expectedLocalRequest, actualLocalRequest); - } -} From 3b80b8b581a84648081d328b678816bcccdebeb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Mon, 16 Sep 2024 16:51:03 +0200 Subject: [PATCH 02/58] refactor: make modular --- src/main/java/eu/enmeshed/ConnectorError.java | 14 ++ .../java/eu/enmeshed/ConnectorResponse.java | 13 ++ src/main/java/eu/enmeshed/EnmeshedClient.java | 86 +++++++++ .../decoder => }/EnmeshedErrorDecoder.java | 5 +- .../eu/enmeshed/client/EnmeshedClient.java | 165 ------------------ .../enmeshed/endpoints/AccountEndpoint.java | 19 ++ .../endpoints/AttributesEndpoint.java | 34 ++++ .../eu/enmeshed/endpoints/FilesEndpoint.java | 63 +++++++ .../endpoints/IncomingRequestsEndpoint.java | 25 +++ .../enmeshed/endpoints/MessagesEndpoint.java | 41 +++++ .../endpoints/MonitoringEndpoint.java | 31 ++++ .../endpoints/OutgoingRequestsEndpoint.java | 22 +++ .../RelationshipTemplatesEndpoint.java | 29 +++ .../endpoints/RelationshipsEndpoint.java | 30 ++++ .../exception/status/EnmeshedHttpStatus.java | 8 - .../status/EnmeshedHttpStatuses.java | 18 -- ...teWrapper.java => ConnectorAttribute.java} | 2 +- .../java/eu/enmeshed/model/ResultWrapper.java | 21 --- .../enmeshed/model/attributes/Attribute.java | 4 +- ...Attribute.java => ConnectorAttribute.java} | 4 +- ....java => ConnectorAttributeShareInfo.java} | 5 +- .../model/attributes/IdentityAttribute.java | 4 +- .../attributes/values/AttributeValue.java | 88 +++++----- .../values/RelationshipAttributeValue.java | 4 +- .../identity/AffiliationOrganization.java | 4 +- .../values/identity/AffiliationRole.java | 4 +- .../values/identity/AffiliationUnit.java | 4 +- .../attributes/values/identity/BirthCity.java | 4 +- .../values/identity/BirthCountry.java | 4 +- .../attributes/values/identity/BirthDay.java | 4 +- .../values/identity/BirthMonth.java | 4 +- .../attributes/values/identity/BirthName.java | 4 +- .../values/identity/BirthState.java | 4 +- .../attributes/values/identity/BirthYear.java | 4 +- .../values/identity/Citizenship.java | 4 +- .../attributes/values/identity/City.java | 4 +- .../identity/CommunicationLanguage.java | 4 +- .../attributes/values/identity/Country.java | 4 +- .../values/identity/DisplayName.java | 4 +- .../values/identity/EMailAddress.java | 4 +- .../attributes/values/identity/FaxNumber.java | 4 +- .../attributes/values/identity/GivenName.java | 4 +- .../values/identity/HonoricPrefix.java | 4 +- .../values/identity/HonoricSuffix.java | 4 +- .../values/identity/HouseNumber.java | 4 +- .../identity/IdentityFileReference.java | 4 +- .../attributes/values/identity/JobTitle.java | 4 +- .../values/identity/MiddleName.java | 4 +- .../values/identity/Nationality.java | 4 +- .../values/identity/PhoneNumber.java | 4 +- .../attributes/values/identity/Pseudonym.java | 4 +- .../model/attributes/values/identity/Sex.java | 4 +- .../attributes/values/identity/State.java | 4 +- .../attributes/values/identity/Street.java | 4 +- .../attributes/values/identity/Surname.java | 4 +- .../attributes/values/identity/Website.java | 4 +- .../attributes/values/identity/ZipCode.java | 4 +- .../event/MessageProcessedEventData.java | 2 +- .../event/RequestStatusChangedEventData.java | 9 +- .../java/eu/enmeshed/model/event/Webhook.java | 90 +++++----- .../eu/enmeshed/model/event/WebhookData.java | 8 +- .../{FileMetaData.java => ConnectorFile.java} | 2 +- .../eu/enmeshed/model/file/FileReference.java | 15 -- .../model/{messaging => messages}/Mail.java | 2 +- .../{messaging => messages}/Message.java | 2 +- .../MessageContent.java | 14 +- .../{messaging => messages}/Recipient.java | 2 +- .../enmeshed/model/messaging/SendMessage.java | 19 -- .../model/monitoring/ConnectorHealth.java | 18 ++ .../monitoring/ConnectorRequestCount.java | 19 ++ .../ConnectorSupportInformation.java | 21 +++ .../monitoring/ConnectorVersionInfo.java | 20 +++ .../model/notification/Notification.java | 2 +- .../notificationItems/NotificationItem.java | 4 +- ...ocalRequest.java => ConnectorRequest.java} | 10 +- ...nse.java => ConnectorRequestResponse.java} | 2 +- ...ource.java => ConnectorRequestSource.java} | 2 +- .../eu/enmeshed/model/request/Request.java | 2 +- .../model/request/ResponseWrapper.java | 2 +- .../AuthenticationRequestItem.java | 4 +- .../CreateAttributeRequestItem.java | 6 +- .../request/requestItems/RequestItem.java | 4 +- .../requestItems/RequestItemDerivation.java | 14 +- .../ShareAttributeRequestItem.java | 4 +- .../request/responseItems/ResponseItem.java | 4 +- .../responseItems/ResponseItemDerivation.java | 24 +-- .../enmeshed/model/tokens/ConnectorToken.java | 24 +++ .../attributes/SucceedAttributeRequest.java | 30 ++++ .../requests/files/GetFilesQuery.java | 17 ++ .../requests/files/GetOwnFilesQuery.java | 15 ++ .../requests/files/GetPeerFilesQuery.java | 15 ++ .../requests/files/LoadPeerFileRequest.java | 8 + .../messages/GetMessagesQuery.java} | 8 +- .../requests/messages/SendMessageRequest.java | 14 ++ 94 files changed, 799 insertions(+), 526 deletions(-) create mode 100644 src/main/java/eu/enmeshed/ConnectorError.java create mode 100644 src/main/java/eu/enmeshed/ConnectorResponse.java create mode 100644 src/main/java/eu/enmeshed/EnmeshedClient.java rename src/main/java/eu/enmeshed/{exception/decoder => }/EnmeshedErrorDecoder.java (92%) delete mode 100644 src/main/java/eu/enmeshed/client/EnmeshedClient.java create mode 100644 src/main/java/eu/enmeshed/endpoints/AccountEndpoint.java create mode 100644 src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java create mode 100644 src/main/java/eu/enmeshed/endpoints/FilesEndpoint.java create mode 100644 src/main/java/eu/enmeshed/endpoints/IncomingRequestsEndpoint.java create mode 100644 src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java create mode 100644 src/main/java/eu/enmeshed/endpoints/MonitoringEndpoint.java create mode 100644 src/main/java/eu/enmeshed/endpoints/OutgoingRequestsEndpoint.java create mode 100644 src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java create mode 100644 src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java delete mode 100644 src/main/java/eu/enmeshed/exception/status/EnmeshedHttpStatus.java delete mode 100644 src/main/java/eu/enmeshed/exception/status/EnmeshedHttpStatuses.java rename src/main/java/eu/enmeshed/model/{AttributeWrapper.java => ConnectorAttribute.java} (89%) delete mode 100644 src/main/java/eu/enmeshed/model/ResultWrapper.java rename src/main/java/eu/enmeshed/model/attributes/{LocalAttribute.java => ConnectorAttribute.java} (77%) rename src/main/java/eu/enmeshed/model/attributes/{LocalAttributeShareInfo.java => ConnectorAttributeShareInfo.java} (89%) rename src/main/java/eu/enmeshed/model/file/{FileMetaData.java => ConnectorFile.java} (95%) delete mode 100644 src/main/java/eu/enmeshed/model/file/FileReference.java rename src/main/java/eu/enmeshed/model/{messaging => messages}/Mail.java (90%) rename src/main/java/eu/enmeshed/model/{messaging => messages}/Message.java (94%) rename src/main/java/eu/enmeshed/model/{messaging => messages}/MessageContent.java (67%) rename src/main/java/eu/enmeshed/model/{messaging => messages}/Recipient.java (90%) delete mode 100644 src/main/java/eu/enmeshed/model/messaging/SendMessage.java create mode 100644 src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java create mode 100644 src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java create mode 100644 src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java create mode 100644 src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java rename src/main/java/eu/enmeshed/model/request/{LocalRequest.java => ConnectorRequest.java} (78%) rename src/main/java/eu/enmeshed/model/request/{LocalRequestResponse.java => ConnectorRequestResponse.java} (84%) rename src/main/java/eu/enmeshed/model/request/{LocalRequestSource.java => ConnectorRequestSource.java} (93%) create mode 100644 src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java create mode 100644 src/main/java/eu/enmeshed/requests/attributes/SucceedAttributeRequest.java create mode 100644 src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java create mode 100644 src/main/java/eu/enmeshed/requests/files/GetOwnFilesQuery.java create mode 100644 src/main/java/eu/enmeshed/requests/files/GetPeerFilesQuery.java create mode 100644 src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java rename src/main/java/eu/enmeshed/{client/MessageSearchQuery.java => requests/messages/GetMessagesQuery.java} (88%) create mode 100644 src/main/java/eu/enmeshed/requests/messages/SendMessageRequest.java diff --git a/src/main/java/eu/enmeshed/ConnectorError.java b/src/main/java/eu/enmeshed/ConnectorError.java new file mode 100644 index 0000000..fd56790 --- /dev/null +++ b/src/main/java/eu/enmeshed/ConnectorError.java @@ -0,0 +1,14 @@ +package eu.enmeshed; + +public record ConnectorError( + String id, + String code, + String message, + String docs, + String time, + String details, + String[] stackTrace) { + Exception toException() { + return new Exception(message); + } +} diff --git a/src/main/java/eu/enmeshed/ConnectorResponse.java b/src/main/java/eu/enmeshed/ConnectorResponse.java new file mode 100644 index 0000000..782fa63 --- /dev/null +++ b/src/main/java/eu/enmeshed/ConnectorResponse.java @@ -0,0 +1,13 @@ +package eu.enmeshed; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class ConnectorResponse { + + private T result; +} diff --git a/src/main/java/eu/enmeshed/EnmeshedClient.java b/src/main/java/eu/enmeshed/EnmeshedClient.java new file mode 100644 index 0000000..a7994f5 --- /dev/null +++ b/src/main/java/eu/enmeshed/EnmeshedClient.java @@ -0,0 +1,86 @@ +package eu.enmeshed; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.util.StdDateFormat; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import eu.enmeshed.endpoints.AccountEndpoint; +import eu.enmeshed.endpoints.AttributesEndpoint; +import eu.enmeshed.endpoints.FilesEndpoint; +import eu.enmeshed.endpoints.IncomingRequestsEndpoint; +import eu.enmeshed.endpoints.MessagesEndpoint; +import eu.enmeshed.endpoints.OutgoingRequestsEndpoint; +import eu.enmeshed.endpoints.RelationshipTemplatesEndpoint; +import eu.enmeshed.endpoints.RelationshipsEndpoint; +import feign.Feign; +import feign.Logger.Level; +import feign.Request.Options; +import feign.form.FormEncoder; +import feign.jackson.JacksonDecoder; +import feign.jackson.JacksonEncoder; + +public class EnmeshedClient { + + private static final ObjectMapper objectMapper = + new ObjectMapper() + .registerModule(new JavaTimeModule()) + .setSerializationInclusion(Include.NON_ABSENT) + .disable(SerializationFeature.INDENT_OUTPUT) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .setDateFormat(new StdDateFormat().withColonInTimeZone(true)); + + public final AccountEndpoint account; + public final AttributesEndpoint attributes; + public final FilesEndpoint files; + public final MessagesEndpoint messages; + public final RelationshipTemplatesEndpoint relationshipTemplates; + public final RelationshipsEndpoint relationships; + public final IncomingRequestsEndpoint incomingRequests; + public final OutgoingRequestsEndpoint outgoingRequests; + + public EnmeshedClient( + AccountEndpoint account, + AttributesEndpoint attributes, + FilesEndpoint files, + MessagesEndpoint messages, + RelationshipTemplatesEndpoint relationshipTemplates, + RelationshipsEndpoint relationships, + IncomingRequestsEndpoint incomingRequests, + OutgoingRequestsEndpoint outgoingRequests) { + this.account = account; + this.attributes = attributes; + this.files = files; + this.messages = messages; + this.relationshipTemplates = relationshipTemplates; + this.relationships = relationships; + this.incomingRequests = incomingRequests; + this.outgoingRequests = outgoingRequests; + } + + public static EnmeshedClient create(String url, String apiKey) { + return create(url, apiKey, new Options(), Level.NONE); + } + + public static EnmeshedClient create( + String url, String apiKey, Options options, Level loggerLevel) { + var builder = + Feign.builder() + .decoder(new JacksonDecoder(objectMapper)) + .encoder(new FormEncoder(new JacksonEncoder(objectMapper))) + .requestInterceptor(request -> request.header("X-API-KEY", apiKey)) + .logLevel(loggerLevel) + .options(options) + .errorDecoder(new EnmeshedErrorDecoder()); + + return new EnmeshedClient( + AccountEndpoint.configure(url, builder), + AttributesEndpoint.configure(url, builder), + FilesEndpoint.configure(url, builder), + MessagesEndpoint.configure(url, builder), + RelationshipTemplatesEndpoint.configure(url, builder), + RelationshipsEndpoint.configure(url, builder), + IncomingRequestsEndpoint.configure(url, builder), + OutgoingRequestsEndpoint.configure(url, builder)); + } +} diff --git a/src/main/java/eu/enmeshed/exception/decoder/EnmeshedErrorDecoder.java b/src/main/java/eu/enmeshed/EnmeshedErrorDecoder.java similarity index 92% rename from src/main/java/eu/enmeshed/exception/decoder/EnmeshedErrorDecoder.java rename to src/main/java/eu/enmeshed/EnmeshedErrorDecoder.java index 05cc842..1f13fbc 100644 --- a/src/main/java/eu/enmeshed/exception/decoder/EnmeshedErrorDecoder.java +++ b/src/main/java/eu/enmeshed/EnmeshedErrorDecoder.java @@ -1,4 +1,4 @@ -package eu.enmeshed.exception.decoder; +package eu.enmeshed; import feign.Request; import feign.Response; @@ -18,8 +18,7 @@ public Exception decode(String methodKey, Response response) { log.info( "Throw the RetryableException from a response error with status {} and reason {}", responseStatus, - responseReason - ); + responseReason); return new RetryableException( responseStatus, diff --git a/src/main/java/eu/enmeshed/client/EnmeshedClient.java b/src/main/java/eu/enmeshed/client/EnmeshedClient.java deleted file mode 100644 index b3f6115..0000000 --- a/src/main/java/eu/enmeshed/client/EnmeshedClient.java +++ /dev/null @@ -1,165 +0,0 @@ -package eu.enmeshed.client; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.util.StdDateFormat; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import eu.enmeshed.exception.decoder.EnmeshedErrorDecoder; -import eu.enmeshed.model.AttributeWrapper; -import eu.enmeshed.model.ContentWrapper; -import eu.enmeshed.model.IdentityInfo; -import eu.enmeshed.model.ResultWrapper; -import eu.enmeshed.model.attributes.Attribute; -import eu.enmeshed.model.file.FileMetaData; -import eu.enmeshed.model.file.FileReference; -import eu.enmeshed.model.file.FileUploadRequest; -import eu.enmeshed.model.messaging.Message; -import eu.enmeshed.model.messaging.SendMessage; -import eu.enmeshed.model.qr.QrCode; -import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; -import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateCreation; -import eu.enmeshed.model.relationships.Relationship; -import eu.enmeshed.model.request.LocalRequest; -import eu.enmeshed.model.request.Request; -import feign.Feign; -import feign.Headers; -import feign.Logger; -import feign.Param; -import feign.QueryMap; -import feign.RequestLine; -import feign.Response; -import feign.form.FormEncoder; -import feign.jackson.JacksonDecoder; -import feign.jackson.JacksonEncoder; -import java.util.List; - -public interface EnmeshedClient { - - ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()) - .setSerializationInclusion(JsonInclude.Include.NON_ABSENT) - .disable(SerializationFeature.INDENT_OUTPUT) - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .setDateFormat(new StdDateFormat().withColonInTimeZone(true)); - - static EnmeshedClient configure(String url, String apiKey) { - return configure(url, apiKey, new feign.Request.Options(), Logger.Level.NONE); - } - - static EnmeshedClient configure(String url, String apiKey, feign.Request.Options options, Logger.Level loggerLevel) { - return Feign.builder() - .decoder(new JacksonDecoder(objectMapper)) - .encoder(new FormEncoder(new JacksonEncoder(objectMapper))) - .requestInterceptor(request -> request.header("X-API-KEY", apiKey)) - .logLevel(loggerLevel) - .options(options) - .errorDecoder(new EnmeshedErrorDecoder()) - .target(EnmeshedClient.class, url); - } - - /* - Account - */ - @RequestLine("GET /api/v2/Account/IdentityInfo") - ResultWrapper getIdentityInfo(); - - @RequestLine("POST /api/v2/Account/Sync") - void sync(); - - /* - Attributes - */ - @RequestLine("GET /api/v2/Attributes?content.value.@type={type}") - ResultWrapper> searchAttributes(@Param("type") String contentValueType); - - @RequestLine("POST /api/v2/Attributes") - @Headers({"Content-Type: application/json"}) - ResultWrapper createAttribute(ContentWrapper attribute); - - @RequestLine("GET /api/v2/Attributes/{id}") - @Headers("Content-Type: application/json") - ResultWrapper getAttributeById(@Param("id") String attributeId); - - /* - Relationship Templates - */ - @RequestLine("POST /api/v2/RelationshipTemplates/Own") - @Headers("Content-Type: application/json") - ResultWrapper createOwnRelationshipTemplate(RelationshipTemplateCreation relationshipTemplate); - - @RequestLine("GET /api/v2/RelationshipTemplates/{0}") - @Headers("Accept: image/png") - Response getQrCodeForRelationshipTemplate(@Param("0") String relationshipTemplateId); - - @RequestLine("GET /api/v2/RelationshipTemplates/{relationshipTemplateId}") - @Headers("Accept: application/json") - ResultWrapper createRelationshipQrCode(@Param("relationshipTemplateId") String relationshipTemplateId); - - /* - Relationships - */ - @RequestLine("GET /api/v2/Relationships?template.id={0}&peer={1}&status={2}") - ResultWrapper> searchRelationships(@Param("0") String templateId, @Param("1") String peer, - @Param("2") String status); - - @RequestLine("GET /api/v2/Relationships/{id}") - ResultWrapper getRelationshipById(@Param("id") String id); - - @RequestLine("PUT /api/v2/Relationships/{id}/Accept") - @Headers("Content-Type: application/json") - ResultWrapper acceptRelationship(@Param("id") String id); - - @RequestLine("PUT /api/v2/Relationships/{0}/Reject") - @Headers("Content-Type: application/json") - ResultWrapper rejectRelationship(@Param("id") String id); - - /* - Messages - */ - @RequestLine("POST /api/v2/Messages") - @Headers("Content-Type: application/json") - ResultWrapper sendMessage(SendMessage message); - - @RequestLine("GET /api/v2/Messages") - ResultWrapper> searchMessages(@QueryMap MessageSearchQuery searchQuery); - - @RequestLine("GET /api/v2/Messages/{0}") - ResultWrapper getMessageById(@Param("0") String id); - - /* - Requests - */ - @RequestLine("POST /api/v2/Requests/Outgoing") - @Headers("Content-Type: application/json") - ResultWrapper createOutgoingRequest(LocalRequest request); - - @RequestLine("GET /api/v2/Requests/Outgoing/{0}") - ResultWrapper getOutgoingRequest(@Param("0") String requestId); - - @RequestLine("GET /api/v2/Requests/Incoming/{requestId}") - @Headers("Content-Type: application/json") - ResultWrapper getIncomingRequestById(@Param("requestId") String requestId); - - @RequestLine("PUT /api/v2/Requests/Incoming/{requestId}/Accept") - @Headers("Content-Type: application/json") - ResultWrapper acceptIncomingRequestById(@Param("requestId") String requestId, Request request); - - /* - Files - */ - @RequestLine("POST /api/v2/Files/Own") - @Headers({"Content-Type: multipart/form-data"}) - ResultWrapper uploadNewOwnFile(FileUploadRequest fileUploadRequest); - - @RequestLine("GET /api/v2/Files/{fileId}/Download") - @Headers("Accept: application/json") - Response getFileResponseById(@Param("fileId") String fileId); - - @RequestLine("GET /api/v2/Files/{fileId}") - @Headers("Accept: application/json") - ResultWrapper getFileMetadataByFileId(@Param("fileId") String fileId); - - @RequestLine("POST /api/v2/Files/Peer") - @Headers("Content-Type: application/json") - ResultWrapper getFileMetadataByReference(FileReference reference); -} diff --git a/src/main/java/eu/enmeshed/endpoints/AccountEndpoint.java b/src/main/java/eu/enmeshed/endpoints/AccountEndpoint.java new file mode 100644 index 0000000..2bd3f22 --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/AccountEndpoint.java @@ -0,0 +1,19 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.IdentityInfo; +import feign.Feign.Builder; +import feign.RequestLine; + +public interface AccountEndpoint { + + static AccountEndpoint configure(String url, Builder builder) { + return builder.target(AccountEndpoint.class, url); + } + + @RequestLine("GET /api/v2/Account/IdentityInfo") + ConnectorResponse getIdentityInfo(); + + @RequestLine("POST /api/v2/Account/Sync") + void sync(); +} diff --git a/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java new file mode 100644 index 0000000..ed6ee24 --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java @@ -0,0 +1,34 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.ContentWrapper; +import eu.enmeshed.model.ConnectorAttribute; +import eu.enmeshed.model.attributes.Attribute; +import eu.enmeshed.requests.attributes.SucceedAttributeRequest; +import feign.Feign.Builder; +import feign.Headers; +import feign.Param; +import feign.RequestLine; +import java.util.List; + +public interface AttributesEndpoint { + + static AttributesEndpoint configure(String url, Builder builder) { + return builder.target(AttributesEndpoint.class, url); + } + + @RequestLine("POST /api/v2/Attributes") + @Headers({"Content-Type: application/json"}) + ConnectorResponse createRepositoryAttribute(ContentWrapper attribute); + + @RequestLine("POST /api/v2/Attributes/{id}/Succeed") + @Headers("Content-Type: application/json") + ConnectorResponse succeedAttribute(@Param("id") String predecessorId, SucceedAttributeRequest request); + + @RequestLine("GET /api/v2/Attributes?content.value.@type={type}") + ConnectorResponse> searchAttributes(@Param("type") String contentValueType); + + @RequestLine("GET /api/v2/Attributes/{id}") + @Headers("Content-Type: application/json") + ConnectorResponse getAttributeById(@Param("id") String attributeId); +} diff --git a/src/main/java/eu/enmeshed/endpoints/FilesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/FilesEndpoint.java new file mode 100644 index 0000000..ef759fc --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/FilesEndpoint.java @@ -0,0 +1,63 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.file.ConnectorFile; +import eu.enmeshed.model.file.FileUploadRequest; +import eu.enmeshed.model.tokens.ConnectorToken; +import eu.enmeshed.requests.files.GetFilesQuery; +import eu.enmeshed.requests.files.GetOwnFilesQuery; +import eu.enmeshed.requests.files.GetPeerFilesQuery; +import eu.enmeshed.requests.files.LoadPeerFileRequest; +import feign.Feign.Builder; +import feign.Headers; +import feign.Param; +import feign.QueryMap; +import feign.RequestLine; +import feign.Response; + +public interface FilesEndpoint { + + static FilesEndpoint configure(String url, Builder builder) { + return builder.target(FilesEndpoint.class, url); + } + + @RequestLine("GET /api/v2/Files") + @Headers("Accept: application/json") + ConnectorResponse getFiles(@QueryMap GetFilesQuery query); + + @RequestLine("POST /api/v2/Files/Own") + @Headers({"Content-Type: multipart/form-data"}) + ConnectorResponse uploadOwnFile(FileUploadRequest fileUploadRequest); + + @RequestLine("GET /api/v2/Files/Own") + @Headers("Accept: application/json") + ConnectorResponse getOwnFiles(@QueryMap GetOwnFilesQuery query); + + @RequestLine("POST /api/v2/Files/Peer") + @Headers("Content-Type: application/json") + ConnectorResponse loadPeerFile(LoadPeerFileRequest fileUploadRequest); + + @RequestLine("GET /api/v2/Files/Peer") + @Headers("Accept: application/json") + ConnectorResponse getPeerFiles(@QueryMap GetPeerFilesQuery query); + + @RequestLine("GET /api/v2/Files/{fileId}") + @Headers("Accept: application/json") + ConnectorResponse getFile(@Param("fileId") String fileId); + + @RequestLine("GET /api/v2/Files/{fileId}/Download") + @Headers("Accept: application/json") + Response downloadFile(@Param("fileId") String fileId); + + @RequestLine("DELETE /api/v2/Files/{fileId}") + @Headers("Accept: image/png") + Response getQrCodeForFile(@Param("fileId") String fileId); + + @RequestLine("DELETE /api/v2/Files/{fileId}/Token") + @Headers("Accept: application/json") + ConnectorResponse createTokenForFile(@Param("fileId") String fileId); + + @RequestLine("DELETE /api/v2/Files/{fileId}/Token") + @Headers("Accept: image/png") + Response createTokenQrCodeForFile(@Param("fileId") String fileId); +} diff --git a/src/main/java/eu/enmeshed/endpoints/IncomingRequestsEndpoint.java b/src/main/java/eu/enmeshed/endpoints/IncomingRequestsEndpoint.java new file mode 100644 index 0000000..2b6a0e2 --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/IncomingRequestsEndpoint.java @@ -0,0 +1,25 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.request.ConnectorRequest; +import eu.enmeshed.model.request.Request; +import feign.Feign.Builder; +import feign.Headers; +import feign.Param; +import feign.RequestLine; + +public interface IncomingRequestsEndpoint { + + static IncomingRequestsEndpoint configure(String url, Builder builder) { + return builder.target(IncomingRequestsEndpoint.class, url); + } + + @RequestLine("GET /api/v2/Requests/Incoming/{requestId}") + @Headers("Content-Type: application/json") + ConnectorResponse getIncomingRequestById(@Param("requestId") String requestId); + + @RequestLine("PUT /api/v2/Requests/Incoming/{requestId}/Accept") + @Headers("Content-Type: application/json") + ConnectorResponse acceptIncomingRequestById( + @Param("requestId") String requestId, Request request); +} diff --git a/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java new file mode 100644 index 0000000..fc4c18d --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java @@ -0,0 +1,41 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.file.ConnectorFile; +import eu.enmeshed.model.messages.Message; +import eu.enmeshed.model.messages.MessageContent; +import eu.enmeshed.requests.messages.GetMessagesQuery; +import eu.enmeshed.requests.messages.SendMessageRequest; +import feign.Feign.Builder; +import feign.Headers; +import feign.Param; +import feign.QueryMap; +import feign.RequestLine; +import java.util.List; + +public interface MessagesEndpoint { + + static MessagesEndpoint configure(String url, Builder builder) { + return builder.target(MessagesEndpoint.class, url); + } + + @RequestLine("GET /api/v2/Messages") + @Headers("Accept: application/json") + ConnectorResponse> getMessages(@QueryMap GetMessagesQuery query); + + @RequestLine("POST /api/v2/Messages") + @Headers("Accept: application/json") + ConnectorResponse sendMessage(SendMessageRequest request); + + @RequestLine("GET /api/v2/Messages/{messageId}") + @Headers("Accept: application/json") + ConnectorResponse getMessage(@Param("messageId") String messageId); + + @RequestLine("GET /api/v2/Messages/{messageId}/Attachments/{attachmentId}") + @Headers("Accept: application/json") + ConnectorResponse getAttachment(@Param("messageId") String messageId, @Param("attachmentId") String attachmentId); + + @RequestLine("GET /api/v2/Messages/{messageId}/Attachments/{attachmentId}/Download") + @Headers("Accept: application/json") + feign.Response downloadAttachment(@Param("messageId") String messageId, @Param("attachmentId") String attachmentId); +} diff --git a/src/main/java/eu/enmeshed/endpoints/MonitoringEndpoint.java b/src/main/java/eu/enmeshed/endpoints/MonitoringEndpoint.java new file mode 100644 index 0000000..0b00c07 --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/MonitoringEndpoint.java @@ -0,0 +1,31 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.model.monitoring.ConnectorHealth; +import eu.enmeshed.model.monitoring.ConnectorRequestCount; +import eu.enmeshed.model.monitoring.ConnectorSupportInformation; +import eu.enmeshed.model.monitoring.ConnectorVersionInfo; +import feign.Feign.Builder; +import feign.Headers; +import feign.RequestLine; + +public interface MonitoringEndpoint { + static MonitoringEndpoint configure(String url, Builder builder) { + return builder.target(MonitoringEndpoint.class, url); + } + + @RequestLine("GET /health") + @Headers("Accept: application/json") + ConnectorHealth getHealth(); + + @RequestLine("GET /Monitoring/Version") + @Headers("Accept: application/json") + ConnectorVersionInfo getVersionInfo(); + + @RequestLine("GET /Monitoring/Requests") + @Headers("Accept: application/json") + ConnectorRequestCount getRequests(); + + @RequestLine("POST /Monitoring/Support") + @Headers("Accept: application/json") + ConnectorSupportInformation getSupportInformation(); +} diff --git a/src/main/java/eu/enmeshed/endpoints/OutgoingRequestsEndpoint.java b/src/main/java/eu/enmeshed/endpoints/OutgoingRequestsEndpoint.java new file mode 100644 index 0000000..f6708d5 --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/OutgoingRequestsEndpoint.java @@ -0,0 +1,22 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.request.ConnectorRequest; +import feign.Feign.Builder; +import feign.Headers; +import feign.Param; +import feign.RequestLine; + +public interface OutgoingRequestsEndpoint { + + static OutgoingRequestsEndpoint configure(String url, Builder builder) { + return builder.target(OutgoingRequestsEndpoint.class, url); + } + + @RequestLine("POST /api/v2/Requests/Outgoing") + @Headers("Accept: application/json") + ConnectorResponse createOutgoingRequest(ConnectorRequest request); + + @RequestLine("GET /api/v2/Requests/Outgoing/{0}") + ConnectorResponse getOutgoingRequest(@Param("0") String requestId); +} diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java new file mode 100644 index 0000000..925ec10 --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java @@ -0,0 +1,29 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.qr.QrCode; +import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; +import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateCreation; +import feign.Feign.Builder; +import feign.Headers; +import feign.Param; +import feign.RequestLine; + +public interface RelationshipTemplatesEndpoint { + + static RelationshipTemplatesEndpoint configure(String url, Builder builder) { + return builder.target(RelationshipTemplatesEndpoint.class, url); + } + + @RequestLine("POST /api/v2/RelationshipTemplates/Own") + @Headers("Content-Type: application/json") + ConnectorResponse createOwnRelationshipTemplate(RelationshipTemplateCreation relationshipTemplate); + + @RequestLine("GET /api/v2/RelationshipTemplates/{0}") + @Headers("Accept: image/png") + feign.Response getQrCodeForRelationshipTemplate(@Param("0") String relationshipTemplateId); + + @RequestLine("GET /api/v2/RelationshipTemplates/{relationshipTemplateId}") + @Headers("Accept: application/json") + ConnectorResponse createRelationshipQrCode(@Param("relationshipTemplateId") String relationshipTemplateId); +} diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java new file mode 100644 index 0000000..2405c75 --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java @@ -0,0 +1,30 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.relationships.Relationship; +import feign.Feign.Builder; +import feign.Headers; +import feign.Param; +import feign.RequestLine; +import java.util.List; + +public interface RelationshipsEndpoint { + + static RelationshipsEndpoint configure(String url, Builder builder) { + return builder.target(RelationshipsEndpoint.class, url); + } + + @RequestLine("GET /api/v2/Relationships?template.id={0}&peer={1}&status={2}") + ConnectorResponse> searchRelationships(@Param("0") String templateId, @Param("1") String peer, @Param("2") String status); + + @RequestLine("GET /api/v2/Relationships/{id}") + ConnectorResponse getRelationshipById(@Param("id") String id); + + @RequestLine("PUT /api/v2/Relationships/{id}/Accept") + @Headers("Content-Type: application/json") + ConnectorResponse acceptRelationship(@Param("id") String id); + + @RequestLine("PUT /api/v2/Relationships/{0}/Reject") + @Headers("Content-Type: application/json") + ConnectorResponse rejectRelationship(@Param("id") String id); +} diff --git a/src/main/java/eu/enmeshed/exception/status/EnmeshedHttpStatus.java b/src/main/java/eu/enmeshed/exception/status/EnmeshedHttpStatus.java deleted file mode 100644 index d0ee14b..0000000 --- a/src/main/java/eu/enmeshed/exception/status/EnmeshedHttpStatus.java +++ /dev/null @@ -1,8 +0,0 @@ -package eu.enmeshed.exception.status; - -import lombok.Builder; - -@Builder -public record EnmeshedHttpStatus(int errorCode, String message) { - -} diff --git a/src/main/java/eu/enmeshed/exception/status/EnmeshedHttpStatuses.java b/src/main/java/eu/enmeshed/exception/status/EnmeshedHttpStatuses.java deleted file mode 100644 index 4a51e2b..0000000 --- a/src/main/java/eu/enmeshed/exception/status/EnmeshedHttpStatuses.java +++ /dev/null @@ -1,18 +0,0 @@ -package eu.enmeshed.exception.status; - -import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR; -import static lombok.AccessLevel.PRIVATE; - -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor(access = PRIVATE) -public class EnmeshedHttpStatuses { - - public static final EnmeshedHttpStatus ACCEPT_REQUEST_NO_RELATION_ID = - EnmeshedHttpStatus.builder() - .errorCode(HTTP_INTERNAL_ERROR) - .message("Exception while getting relation Id from msg:") - .build(); -} diff --git a/src/main/java/eu/enmeshed/model/AttributeWrapper.java b/src/main/java/eu/enmeshed/model/ConnectorAttribute.java similarity index 89% rename from src/main/java/eu/enmeshed/model/AttributeWrapper.java rename to src/main/java/eu/enmeshed/model/ConnectorAttribute.java index b6f6769..d29163e 100644 --- a/src/main/java/eu/enmeshed/model/AttributeWrapper.java +++ b/src/main/java/eu/enmeshed/model/ConnectorAttribute.java @@ -14,7 +14,7 @@ @Getter @Setter @SuperBuilder -public class AttributeWrapper extends ContentWrapper { +public class ConnectorAttribute extends ContentWrapper { private String id; private ZonedDateTime createdAt; diff --git a/src/main/java/eu/enmeshed/model/ResultWrapper.java b/src/main/java/eu/enmeshed/model/ResultWrapper.java deleted file mode 100644 index 6f62007..0000000 --- a/src/main/java/eu/enmeshed/model/ResultWrapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package eu.enmeshed.model; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@AllArgsConstructor -@NoArgsConstructor -@Getter -@Setter -@SuperBuilder -public class ResultWrapper { - - private T result; - - public static ResultWrapper containing(T content) { - return new ResultWrapper<>(content); - } -} diff --git a/src/main/java/eu/enmeshed/model/attributes/Attribute.java b/src/main/java/eu/enmeshed/model/attributes/Attribute.java index 3c113cc..a98ce05 100644 --- a/src/main/java/eu/enmeshed/model/attributes/Attribute.java +++ b/src/main/java/eu/enmeshed/model/attributes/Attribute.java @@ -16,8 +16,8 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(IdentityAttribute.class), - @JsonSubTypes.Type(RelationshipAttribute.class) + @JsonSubTypes.Type(IdentityAttribute.class), + @JsonSubTypes.Type(RelationshipAttribute.class) }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/attributes/LocalAttribute.java b/src/main/java/eu/enmeshed/model/attributes/ConnectorAttribute.java similarity index 77% rename from src/main/java/eu/enmeshed/model/attributes/LocalAttribute.java rename to src/main/java/eu/enmeshed/model/attributes/ConnectorAttribute.java index 6437b86..ac36acb 100644 --- a/src/main/java/eu/enmeshed/model/attributes/LocalAttribute.java +++ b/src/main/java/eu/enmeshed/model/attributes/ConnectorAttribute.java @@ -12,7 +12,7 @@ @Getter @Setter @SuperBuilder -public class LocalAttribute extends ContentWrapper implements WebhookData { +public class ConnectorAttribute extends ContentWrapper implements WebhookData { private String id; @@ -24,5 +24,5 @@ public class LocalAttribute extends ContentWrapper implements Webhook private String succeededBy; - private LocalAttributeShareInfo shareInfo; + private ConnectorAttributeShareInfo shareInfo; } diff --git a/src/main/java/eu/enmeshed/model/attributes/LocalAttributeShareInfo.java b/src/main/java/eu/enmeshed/model/attributes/ConnectorAttributeShareInfo.java similarity index 89% rename from src/main/java/eu/enmeshed/model/attributes/LocalAttributeShareInfo.java rename to src/main/java/eu/enmeshed/model/attributes/ConnectorAttributeShareInfo.java index c0f474a..b73812b 100644 --- a/src/main/java/eu/enmeshed/model/attributes/LocalAttributeShareInfo.java +++ b/src/main/java/eu/enmeshed/model/attributes/ConnectorAttributeShareInfo.java @@ -11,13 +11,10 @@ @Getter @Setter @Builder -public class LocalAttributeShareInfo { +public class ConnectorAttributeShareInfo { private String peer; - private String requestReference; - private String notificationReference; - private String sourceAttribute; } diff --git a/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java b/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java index 271226e..c31c3a4 100644 --- a/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java +++ b/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java @@ -9,6 +9,4 @@ @Getter @Setter @SuperBuilder -public class IdentityAttribute extends Attribute { - -} +public class IdentityAttribute extends Attribute {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java b/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java index c105738..9afeea9 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java @@ -51,53 +51,51 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(Affiliation.class), - @JsonSubTypes.Type(AffiliationOrganization.class), - @JsonSubTypes.Type(AffiliationRole.class), - @JsonSubTypes.Type(AffiliationUnit.class), - @JsonSubTypes.Type(BirthCity.class), - @JsonSubTypes.Type(BirthCountry.class), - @JsonSubTypes.Type(BirthDate.class), - @JsonSubTypes.Type(BirthDay.class), - @JsonSubTypes.Type(BirthMonth.class), - @JsonSubTypes.Type(BirthName.class), - @JsonSubTypes.Type(BirthPlace.class), - @JsonSubTypes.Type(BirthState.class), - @JsonSubTypes.Type(BirthYear.class), - @JsonSubTypes.Type(Citizenship.class), - @JsonSubTypes.Type(City.class), - @JsonSubTypes.Type(CommunicationLanguage.class), - @JsonSubTypes.Type(Country.class), - @JsonSubTypes.Type(DeliveryBoxAddress.class), - @JsonSubTypes.Type(DisplayName.class), - @JsonSubTypes.Type(EMailAddress.class), - @JsonSubTypes.Type(FaxNumber.class), - @JsonSubTypes.Type(GivenName.class), - @JsonSubTypes.Type(HonoricPrefix.class), - @JsonSubTypes.Type(HonoricSuffix.class), - @JsonSubTypes.Type(HouseNumber.class), - @JsonSubTypes.Type(IdentityFileReference.class), - @JsonSubTypes.Type(JobTitle.class), - @JsonSubTypes.Type(MiddleName.class), - @JsonSubTypes.Type(Nationality.class), - @JsonSubTypes.Type(PersonName.class), - @JsonSubTypes.Type(PhoneNumber.class), - @JsonSubTypes.Type(PostOfficeBoxAddress.class), - @JsonSubTypes.Type(ProprietaryBoolean.class), - @JsonSubTypes.Type(Pseudonym.class), - @JsonSubTypes.Type(SchematizedXML.class), - @JsonSubTypes.Type(Sex.class), - @JsonSubTypes.Type(State.class), - @JsonSubTypes.Type(Street.class), - @JsonSubTypes.Type(StreetAddress.class), - @JsonSubTypes.Type(Surname.class), - @JsonSubTypes.Type(Website.class), - @JsonSubTypes.Type(ZipCode.class), + @JsonSubTypes.Type(Affiliation.class), + @JsonSubTypes.Type(AffiliationOrganization.class), + @JsonSubTypes.Type(AffiliationRole.class), + @JsonSubTypes.Type(AffiliationUnit.class), + @JsonSubTypes.Type(BirthCity.class), + @JsonSubTypes.Type(BirthCountry.class), + @JsonSubTypes.Type(BirthDate.class), + @JsonSubTypes.Type(BirthDay.class), + @JsonSubTypes.Type(BirthMonth.class), + @JsonSubTypes.Type(BirthName.class), + @JsonSubTypes.Type(BirthPlace.class), + @JsonSubTypes.Type(BirthState.class), + @JsonSubTypes.Type(BirthYear.class), + @JsonSubTypes.Type(Citizenship.class), + @JsonSubTypes.Type(City.class), + @JsonSubTypes.Type(CommunicationLanguage.class), + @JsonSubTypes.Type(Country.class), + @JsonSubTypes.Type(DeliveryBoxAddress.class), + @JsonSubTypes.Type(DisplayName.class), + @JsonSubTypes.Type(EMailAddress.class), + @JsonSubTypes.Type(FaxNumber.class), + @JsonSubTypes.Type(GivenName.class), + @JsonSubTypes.Type(HonoricPrefix.class), + @JsonSubTypes.Type(HonoricSuffix.class), + @JsonSubTypes.Type(HouseNumber.class), + @JsonSubTypes.Type(IdentityFileReference.class), + @JsonSubTypes.Type(JobTitle.class), + @JsonSubTypes.Type(MiddleName.class), + @JsonSubTypes.Type(Nationality.class), + @JsonSubTypes.Type(PersonName.class), + @JsonSubTypes.Type(PhoneNumber.class), + @JsonSubTypes.Type(PostOfficeBoxAddress.class), + @JsonSubTypes.Type(ProprietaryBoolean.class), + @JsonSubTypes.Type(Pseudonym.class), + @JsonSubTypes.Type(SchematizedXML.class), + @JsonSubTypes.Type(Sex.class), + @JsonSubTypes.Type(State.class), + @JsonSubTypes.Type(Street.class), + @JsonSubTypes.Type(StreetAddress.class), + @JsonSubTypes.Type(Surname.class), + @JsonSubTypes.Type(Website.class), + @JsonSubTypes.Type(ZipCode.class), }) @NoArgsConstructor @Getter @Setter @SuperBuilder -public abstract class AttributeValue { - -} +public abstract class AttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java b/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java index d32e297..547c242 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java @@ -9,6 +9,4 @@ @Getter @Setter @SuperBuilder -public abstract class RelationshipAttributeValue extends AttributeValue { - -} +public abstract class RelationshipAttributeValue extends AttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java index 17485de..447253f 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class AffiliationOrganization extends SimpleStringAttributeValue { - -} +public class AffiliationOrganization extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java index eaa7072..a90d643 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class AffiliationRole extends SimpleStringAttributeValue { - -} +public class AffiliationRole extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java index 3656d80..313954a 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class AffiliationUnit extends SimpleStringAttributeValue { - -} +public class AffiliationUnit extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java index 2fd6d4c..e81411c 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthCity extends SimpleStringAttributeValue { - -} +public class BirthCity extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java index 442bd5c..25562e5 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthCountry extends SimpleStringAttributeValue { - -} +public class BirthCountry extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java index f24c533..6407cde 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthDay extends SimpleNumberAttributeValue { - -} +public class BirthDay extends SimpleNumberAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java index eab1ae9..180310a 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthMonth extends SimpleNumberAttributeValue { - -} +public class BirthMonth extends SimpleNumberAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java index 321c4d4..31f2173 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthName extends SimpleStringAttributeValue { - -} +public class BirthName extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java index f1fc217..6835b96 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthState extends SimpleStringAttributeValue { - -} +public class BirthState extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java index c719d66..7b3b3c7 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthYear extends SimpleNumberAttributeValue { - -} +public class BirthYear extends SimpleNumberAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java index a099e58..7b775ed 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Citizenship extends SimpleStringAttributeValue { - -} +public class Citizenship extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java index 0586d76..cc95d4a 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class City extends SimpleStringAttributeValue { - -} +public class City extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java index 2ef775e..256786d 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class CommunicationLanguage extends SimpleStringAttributeValue { - -} +public class CommunicationLanguage extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java index fc92b64..d6ea64c 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Country extends SimpleStringAttributeValue { - -} +public class Country extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java index 92877c3..7aa96d8 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class DisplayName extends SimpleStringAttributeValue { - -} +public class DisplayName extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java index 792d56f..6f2cc10 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class EMailAddress extends SimpleStringAttributeValue { - -} +public class EMailAddress extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java index 62ae907..66bf280 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class FaxNumber extends SimpleStringAttributeValue { - -} +public class FaxNumber extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java index 5d7cf47..bbf6b1e 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class GivenName extends SimpleStringAttributeValue { - -} +public class GivenName extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java index 3aae896..068f2b2 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class HonoricPrefix extends SimpleStringAttributeValue { - -} +public class HonoricPrefix extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java index 6bcfc6e..31fc56c 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class HonoricSuffix extends SimpleStringAttributeValue { - -} +public class HonoricSuffix extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java index 808c330..8fe58c9 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class HouseNumber extends SimpleStringAttributeValue { - -} +public class HouseNumber extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java index ee6cf27..23a28b8 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class IdentityFileReference extends SimpleStringAttributeValue { - -} +public class IdentityFileReference extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java index c10eb92..08d9aee 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class JobTitle extends SimpleStringAttributeValue { - -} +public class JobTitle extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java index dceb06e..60a4410 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class MiddleName extends SimpleStringAttributeValue { - -} +public class MiddleName extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java index d13579d..230b816 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Nationality extends SimpleStringAttributeValue { - -} +public class Nationality extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java index 24b7c6a..22d0381 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class PhoneNumber extends SimpleStringAttributeValue { - -} +public class PhoneNumber extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java index ef0456d..0ed3844 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Pseudonym extends SimpleStringAttributeValue { - -} +public class Pseudonym extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java index 29a0da5..f83fa91 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Sex extends SimpleStringAttributeValue { - -} +public class Sex extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java index 955282b..e7621d0 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class State extends SimpleStringAttributeValue { - -} +public class State extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java index b12ff06..390ae3b 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Street extends SimpleStringAttributeValue { - -} +public class Street extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java index 9420333..dc0c0be 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Surname extends SimpleStringAttributeValue { - -} +public class Surname extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java index 78d4d39..1581276 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Website extends SimpleStringAttributeValue { - -} +public class Website extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java index bb0e9e4..595eeaf 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class ZipCode extends SimpleStringAttributeValue { - -} +public class ZipCode extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/event/MessageProcessedEventData.java b/src/main/java/eu/enmeshed/model/event/MessageProcessedEventData.java index a2cb017..f5f4f25 100644 --- a/src/main/java/eu/enmeshed/model/event/MessageProcessedEventData.java +++ b/src/main/java/eu/enmeshed/model/event/MessageProcessedEventData.java @@ -1,7 +1,7 @@ package eu.enmeshed.model.event; import com.fasterxml.jackson.annotation.JsonProperty; -import eu.enmeshed.model.messaging.Message; +import eu.enmeshed.model.messages.Message; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/eu/enmeshed/model/event/RequestStatusChangedEventData.java b/src/main/java/eu/enmeshed/model/event/RequestStatusChangedEventData.java index 25de2d3..4c9b472 100644 --- a/src/main/java/eu/enmeshed/model/event/RequestStatusChangedEventData.java +++ b/src/main/java/eu/enmeshed/model/event/RequestStatusChangedEventData.java @@ -1,6 +1,7 @@ package eu.enmeshed.model.event; -import eu.enmeshed.model.request.LocalRequest; +import eu.enmeshed.model.request.ConnectorRequest; +import eu.enmeshed.model.request.ConnectorRequest.Status; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -12,9 +13,9 @@ @Builder public class RequestStatusChangedEventData implements WebhookData { - private LocalRequest request; + private ConnectorRequest request; - private LocalRequest.LocalRequestStatus oldStatus; + private Status oldStatus; - private LocalRequest.LocalRequestStatus newStatus; + private Status newStatus; } diff --git a/src/main/java/eu/enmeshed/model/event/Webhook.java b/src/main/java/eu/enmeshed/model/event/Webhook.java index 8a45307..d12a656 100644 --- a/src/main/java/eu/enmeshed/model/event/Webhook.java +++ b/src/main/java/eu/enmeshed/model/event/Webhook.java @@ -2,11 +2,11 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import eu.enmeshed.model.attributes.LocalAttribute; -import eu.enmeshed.model.messaging.Message; +import eu.enmeshed.model.attributes.ConnectorAttribute; +import eu.enmeshed.model.messages.Message; import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; import eu.enmeshed.model.relationships.Relationship; -import eu.enmeshed.model.request.LocalRequest; +import eu.enmeshed.model.request.ConnectorRequest; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -21,48 +21,48 @@ public class Webhook { include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "trigger") @JsonSubTypes({ - @JsonSubTypes.Type( - value = LocalRequest.class, - names = { - WebhookTriggerNames.Consumption.INCOMING_REQUEST_RECEIVED, - WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED, - WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED_AND_COMPLETED, - WebhookTriggerNames.Consumption - .OUTGOING_REQUEST_FROM_RELATIONSHIP_CREATION_CREATED_AND_COMPLETED - }), - @JsonSubTypes.Type( - value = LocalAttribute.class, - names = { - WebhookTriggerNames.Consumption.ATTRIBUTE_CREATED, - WebhookTriggerNames.Consumption.ATTRIBUTE_DELETED, - WebhookTriggerNames.Consumption.ATTRIBUTE_SUCCEEDED, - WebhookTriggerNames.Consumption.ATTRIBUTE_UPDATED, - WebhookTriggerNames.Consumption.SHARED_ATTRIBUTE_COPY_CREATED - }), - @JsonSubTypes.Type( - value = RequestStatusChangedEventData.class, - names = { - WebhookTriggerNames.Consumption.INCOMING_REQUEST_STATUS_CHANGED, - WebhookTriggerNames.Consumption.OUTGOING_REQUEST_STATUS_CHANGED - }), - @JsonSubTypes.Type( - value = MessageProcessedEventData.class, - names = WebhookTriggerNames.Consumption.MESSAGE_PROCESSED), - @JsonSubTypes.Type( - value = RelationshipTemplateProcessedEventData.class, - names = WebhookTriggerNames.Consumption.RELATIONSHIP_TEMPLATE_PROCESSED), - @JsonSubTypes.Type( - value = Message.class, - names = { - WebhookTriggerNames.Transport.MESSAGE_RECEIVED, - WebhookTriggerNames.Transport.MESSAGE_SENT - }), - @JsonSubTypes.Type( - value = RelationshipTemplate.class, - names = WebhookTriggerNames.Transport.PEER_RELATIONSHIP_TEMPLATE_LOADED), - @JsonSubTypes.Type( - value = Relationship.class, - names = WebhookTriggerNames.Transport.RELATIONSHIP_CHANGED) + @JsonSubTypes.Type( + value = ConnectorRequest.class, + names = { + WebhookTriggerNames.Consumption.INCOMING_REQUEST_RECEIVED, + WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED, + WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED_AND_COMPLETED, + WebhookTriggerNames.Consumption + .OUTGOING_REQUEST_FROM_RELATIONSHIP_CREATION_CREATED_AND_COMPLETED + }), + @JsonSubTypes.Type( + value = ConnectorAttribute.class, + names = { + WebhookTriggerNames.Consumption.ATTRIBUTE_CREATED, + WebhookTriggerNames.Consumption.ATTRIBUTE_DELETED, + WebhookTriggerNames.Consumption.ATTRIBUTE_SUCCEEDED, + WebhookTriggerNames.Consumption.ATTRIBUTE_UPDATED, + WebhookTriggerNames.Consumption.SHARED_ATTRIBUTE_COPY_CREATED + }), + @JsonSubTypes.Type( + value = RequestStatusChangedEventData.class, + names = { + WebhookTriggerNames.Consumption.INCOMING_REQUEST_STATUS_CHANGED, + WebhookTriggerNames.Consumption.OUTGOING_REQUEST_STATUS_CHANGED + }), + @JsonSubTypes.Type( + value = MessageProcessedEventData.class, + names = WebhookTriggerNames.Consumption.MESSAGE_PROCESSED), + @JsonSubTypes.Type( + value = RelationshipTemplateProcessedEventData.class, + names = WebhookTriggerNames.Consumption.RELATIONSHIP_TEMPLATE_PROCESSED), + @JsonSubTypes.Type( + value = Message.class, + names = { + WebhookTriggerNames.Transport.MESSAGE_RECEIVED, + WebhookTriggerNames.Transport.MESSAGE_SENT + }), + @JsonSubTypes.Type( + value = RelationshipTemplate.class, + names = WebhookTriggerNames.Transport.PEER_RELATIONSHIP_TEMPLATE_LOADED), + @JsonSubTypes.Type( + value = Relationship.class, + names = WebhookTriggerNames.Transport.RELATIONSHIP_CHANGED) }) private T data; diff --git a/src/main/java/eu/enmeshed/model/event/WebhookData.java b/src/main/java/eu/enmeshed/model/event/WebhookData.java index 92072d3..9910967 100644 --- a/src/main/java/eu/enmeshed/model/event/WebhookData.java +++ b/src/main/java/eu/enmeshed/model/event/WebhookData.java @@ -1,8 +1,4 @@ package eu.enmeshed.model.event; -/** - * Interface helping to identify possible classes for Webhook Payload. - */ -public interface WebhookData { - -} +/** Interface helping to identify possible classes for Webhook Payload. */ +public interface WebhookData {} diff --git a/src/main/java/eu/enmeshed/model/file/FileMetaData.java b/src/main/java/eu/enmeshed/model/file/ConnectorFile.java similarity index 95% rename from src/main/java/eu/enmeshed/model/file/FileMetaData.java rename to src/main/java/eu/enmeshed/model/file/ConnectorFile.java index 09ecfd4..9af0298 100644 --- a/src/main/java/eu/enmeshed/model/file/FileMetaData.java +++ b/src/main/java/eu/enmeshed/model/file/ConnectorFile.java @@ -11,7 +11,7 @@ @Getter @Setter @Builder -public class FileMetaData { +public class ConnectorFile { private String id; private String title; diff --git a/src/main/java/eu/enmeshed/model/file/FileReference.java b/src/main/java/eu/enmeshed/model/file/FileReference.java deleted file mode 100644 index a2036a4..0000000 --- a/src/main/java/eu/enmeshed/model/file/FileReference.java +++ /dev/null @@ -1,15 +0,0 @@ -package eu.enmeshed.model.file; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class FileReference { - - private String reference; -} diff --git a/src/main/java/eu/enmeshed/model/messaging/Mail.java b/src/main/java/eu/enmeshed/model/messages/Mail.java similarity index 90% rename from src/main/java/eu/enmeshed/model/messaging/Mail.java rename to src/main/java/eu/enmeshed/model/messages/Mail.java index cb61ed7..cef6062 100644 --- a/src/main/java/eu/enmeshed/model/messaging/Mail.java +++ b/src/main/java/eu/enmeshed/model/messages/Mail.java @@ -1,4 +1,4 @@ -package eu.enmeshed.model.messaging; +package eu.enmeshed.model.messages; import java.util.List; import lombok.Getter; diff --git a/src/main/java/eu/enmeshed/model/messaging/Message.java b/src/main/java/eu/enmeshed/model/messages/Message.java similarity index 94% rename from src/main/java/eu/enmeshed/model/messaging/Message.java rename to src/main/java/eu/enmeshed/model/messages/Message.java index eab61ae..f68a0f9 100644 --- a/src/main/java/eu/enmeshed/model/messaging/Message.java +++ b/src/main/java/eu/enmeshed/model/messages/Message.java @@ -1,4 +1,4 @@ -package eu.enmeshed.model.messaging; +package eu.enmeshed.model.messages; import eu.enmeshed.model.ContentWrapper; import eu.enmeshed.model.event.WebhookData; diff --git a/src/main/java/eu/enmeshed/model/messaging/MessageContent.java b/src/main/java/eu/enmeshed/model/messages/MessageContent.java similarity index 67% rename from src/main/java/eu/enmeshed/model/messaging/MessageContent.java rename to src/main/java/eu/enmeshed/model/messages/MessageContent.java index 4229425..a4a694e 100644 --- a/src/main/java/eu/enmeshed/model/messaging/MessageContent.java +++ b/src/main/java/eu/enmeshed/model/messages/MessageContent.java @@ -1,4 +1,4 @@ -package eu.enmeshed.model.messaging; +package eu.enmeshed.model.messages; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -12,15 +12,13 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(Mail.class), - @JsonSubTypes.Type(Request.class), - @JsonSubTypes.Type(ResponseWrapper.class), - @JsonSubTypes.Type(Notification.class) + @JsonSubTypes.Type(Mail.class), + @JsonSubTypes.Type(Request.class), + @JsonSubTypes.Type(ResponseWrapper.class), + @JsonSubTypes.Type(Notification.class) }) @NoArgsConstructor @Getter @Setter @SuperBuilder -public abstract class MessageContent { - -} +public abstract class MessageContent {} diff --git a/src/main/java/eu/enmeshed/model/messaging/Recipient.java b/src/main/java/eu/enmeshed/model/messages/Recipient.java similarity index 90% rename from src/main/java/eu/enmeshed/model/messaging/Recipient.java rename to src/main/java/eu/enmeshed/model/messages/Recipient.java index 4655832..0e48d37 100644 --- a/src/main/java/eu/enmeshed/model/messaging/Recipient.java +++ b/src/main/java/eu/enmeshed/model/messages/Recipient.java @@ -1,4 +1,4 @@ -package eu.enmeshed.model.messaging; +package eu.enmeshed.model.messages; import java.time.ZonedDateTime; import lombok.Getter; diff --git a/src/main/java/eu/enmeshed/model/messaging/SendMessage.java b/src/main/java/eu/enmeshed/model/messaging/SendMessage.java deleted file mode 100644 index 3e873af..0000000 --- a/src/main/java/eu/enmeshed/model/messaging/SendMessage.java +++ /dev/null @@ -1,19 +0,0 @@ -package eu.enmeshed.model.messaging; - -import eu.enmeshed.model.ContentWrapper; -import java.util.List; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@NoArgsConstructor -@Getter -@Setter -@SuperBuilder -public class SendMessage extends ContentWrapper { - - private List recipients; - - private List attachments; -} diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java new file mode 100644 index 0000000..8e67839 --- /dev/null +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java @@ -0,0 +1,18 @@ +package eu.enmeshed.model.monitoring; + +import java.util.Map; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ConnectorHealth { + private Boolean isHealthy; + private Map services; +} diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java new file mode 100644 index 0000000..3b57b02 --- /dev/null +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java @@ -0,0 +1,19 @@ +package eu.enmeshed.model.monitoring; + +import java.util.Map; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ConnectorRequestCount { + private String since; + private int requestCount; + private Map requestCountByStatus; +} \ No newline at end of file diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java new file mode 100644 index 0000000..5f5769e --- /dev/null +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java @@ -0,0 +1,21 @@ +package eu.enmeshed.model.monitoring; + +import eu.enmeshed.model.IdentityInfo; +import java.util.Map; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ConnectorSupportInformation { + private ConnectorVersionInfo version; + private ConnectorHealth health; + private Map configuration; + private IdentityInfo identityInfo; +} \ No newline at end of file diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java new file mode 100644 index 0000000..8f36a96 --- /dev/null +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java @@ -0,0 +1,20 @@ +package eu.enmeshed.model.monitoring; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ConnectorVersionInfo { + private String version; + private String build; + private String date; + private String commit; + private String runtimeVersion; +} \ No newline at end of file diff --git a/src/main/java/eu/enmeshed/model/notification/Notification.java b/src/main/java/eu/enmeshed/model/notification/Notification.java index 4099301..479d684 100644 --- a/src/main/java/eu/enmeshed/model/notification/Notification.java +++ b/src/main/java/eu/enmeshed/model/notification/Notification.java @@ -1,7 +1,7 @@ package eu.enmeshed.model.notification; import com.fasterxml.jackson.annotation.JsonProperty; -import eu.enmeshed.model.messaging.MessageContent; +import eu.enmeshed.model.messages.MessageContent; import eu.enmeshed.model.notification.notificationItems.NotificationItem; import java.util.List; import lombok.Getter; diff --git a/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java b/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java index f8f2729..39f1044 100644 --- a/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java +++ b/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java @@ -13,6 +13,4 @@ @Getter @Setter @SuperBuilder -public abstract class NotificationItem { - -} +public abstract class NotificationItem {} diff --git a/src/main/java/eu/enmeshed/model/request/LocalRequest.java b/src/main/java/eu/enmeshed/model/request/ConnectorRequest.java similarity index 78% rename from src/main/java/eu/enmeshed/model/request/LocalRequest.java rename to src/main/java/eu/enmeshed/model/request/ConnectorRequest.java index e302114..0c54c7c 100644 --- a/src/main/java/eu/enmeshed/model/request/LocalRequest.java +++ b/src/main/java/eu/enmeshed/model/request/ConnectorRequest.java @@ -13,17 +13,17 @@ @Getter @Setter @SuperBuilder -public class LocalRequest extends ContentWrapper implements WebhookData { +public class ConnectorRequest extends ContentWrapper implements WebhookData { private String id; private Boolean isOwn; private String peer; private ZonedDateTime createdAt; - private LocalRequestStatus status; - private LocalRequestSource source; - private LocalRequestResponse response; + private Status status; + private ConnectorRequestSource source; + private ConnectorRequestResponse response; - public enum LocalRequestStatus { + public enum Status { @JsonProperty("Draft") DRAFT, diff --git a/src/main/java/eu/enmeshed/model/request/LocalRequestResponse.java b/src/main/java/eu/enmeshed/model/request/ConnectorRequestResponse.java similarity index 84% rename from src/main/java/eu/enmeshed/model/request/LocalRequestResponse.java rename to src/main/java/eu/enmeshed/model/request/ConnectorRequestResponse.java index 02a3934..4aa453b 100644 --- a/src/main/java/eu/enmeshed/model/request/LocalRequestResponse.java +++ b/src/main/java/eu/enmeshed/model/request/ConnectorRequestResponse.java @@ -13,7 +13,7 @@ @Getter @Setter @SuperBuilder -public class LocalRequestResponse extends ContentWrapper { +public class ConnectorRequestResponse extends ContentWrapper { private ZonedDateTime createdAt; private RequestResponseSource source; diff --git a/src/main/java/eu/enmeshed/model/request/LocalRequestSource.java b/src/main/java/eu/enmeshed/model/request/ConnectorRequestSource.java similarity index 93% rename from src/main/java/eu/enmeshed/model/request/LocalRequestSource.java rename to src/main/java/eu/enmeshed/model/request/ConnectorRequestSource.java index da3292f..390b731 100644 --- a/src/main/java/eu/enmeshed/model/request/LocalRequestSource.java +++ b/src/main/java/eu/enmeshed/model/request/ConnectorRequestSource.java @@ -12,7 +12,7 @@ @Getter @Setter @SuperBuilder -public class LocalRequestSource { +public class ConnectorRequestSource { private RequestSourceType type; private String reference; diff --git a/src/main/java/eu/enmeshed/model/request/Request.java b/src/main/java/eu/enmeshed/model/request/Request.java index c56d312..74d1905 100644 --- a/src/main/java/eu/enmeshed/model/request/Request.java +++ b/src/main/java/eu/enmeshed/model/request/Request.java @@ -1,7 +1,7 @@ package eu.enmeshed.model.request; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import eu.enmeshed.model.messaging.MessageContent; +import eu.enmeshed.model.messages.MessageContent; import eu.enmeshed.model.request.requestItems.RequestItem; import java.time.ZonedDateTime; import java.util.List; diff --git a/src/main/java/eu/enmeshed/model/request/ResponseWrapper.java b/src/main/java/eu/enmeshed/model/request/ResponseWrapper.java index 4c698df..26d6b55 100644 --- a/src/main/java/eu/enmeshed/model/request/ResponseWrapper.java +++ b/src/main/java/eu/enmeshed/model/request/ResponseWrapper.java @@ -1,7 +1,7 @@ package eu.enmeshed.model.request; import com.fasterxml.jackson.annotation.JsonProperty; -import eu.enmeshed.model.messaging.MessageContent; +import eu.enmeshed.model.messages.MessageContent; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java index 77b84b3..4043b63 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java @@ -9,6 +9,4 @@ @Getter @Setter @SuperBuilder -public class AuthenticationRequestItem extends RequestItemDerivation { - -} +public class AuthenticationRequestItem extends RequestItemDerivation {} diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java index 8a3c539..09c7655 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java @@ -1,6 +1,6 @@ package eu.enmeshed.model.request.requestItems; -import eu.enmeshed.model.AttributeWrapper; +import eu.enmeshed.model.ConnectorAttribute; import eu.enmeshed.model.attributes.Attribute; import eu.enmeshed.model.attributes.RelationshipAttribute; import eu.enmeshed.model.attributes.values.proprietary.ProprietaryBoolean; @@ -20,14 +20,14 @@ public class CreateAttributeRequestItem extends RequestItemDerivation { private Attribute attribute; public static CreateAttributeRequestItem fromWrapper( - AttributeWrapper wrapper, boolean mustBeAccepted) { + ConnectorAttribute wrapper, boolean mustBeAccepted) { return CreateAttributeRequestItem.builder() .attribute(relationshipAttribute(wrapper)) .mustBeAccepted(mustBeAccepted) .build(); } - private static RelationshipAttribute relationshipAttribute(AttributeWrapper wrapper) { + private static RelationshipAttribute relationshipAttribute(ConnectorAttribute wrapper) { return RelationshipAttribute.builder() .type(RelationshipAttribute.class.getSimpleName()) .owner(wrapper.getContent().getOwner()) diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java index 654fb0b..cb2b6bc 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java @@ -15,8 +15,8 @@ @JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(RequestItemGroup.class), - @JsonSubTypes.Type(RequestItemDerivation.class), + @JsonSubTypes.Type(RequestItemGroup.class), + @JsonSubTypes.Type(RequestItemDerivation.class), }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java index 73885c6..536e4ee 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java @@ -16,13 +16,13 @@ @JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(ReadAttributeRequestItem.class), - @JsonSubTypes.Type(ShareAttributeRequestItem.class), - @JsonSubTypes.Type(AuthenticationRequestItem.class), - @JsonSubTypes.Type(ConsentRequestItem.class), - @JsonSubTypes.Type(CreateAttributeRequestItem.class), - @JsonSubTypes.Type(FreeTextRequestItem.class), - @JsonSubTypes.Type(ProposeAttributeRequestItem.class) + @JsonSubTypes.Type(ReadAttributeRequestItem.class), + @JsonSubTypes.Type(ShareAttributeRequestItem.class), + @JsonSubTypes.Type(AuthenticationRequestItem.class), + @JsonSubTypes.Type(ConsentRequestItem.class), + @JsonSubTypes.Type(CreateAttributeRequestItem.class), + @JsonSubTypes.Type(FreeTextRequestItem.class), + @JsonSubTypes.Type(ProposeAttributeRequestItem.class) }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java index c9cc81f..da90a61 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java @@ -1,6 +1,6 @@ package eu.enmeshed.model.request.requestItems; -import eu.enmeshed.model.AttributeWrapper; +import eu.enmeshed.model.ConnectorAttribute; import eu.enmeshed.model.attributes.Attribute; import eu.enmeshed.model.attributes.IdentityAttribute; import lombok.AllArgsConstructor; @@ -20,7 +20,7 @@ public class ShareAttributeRequestItem extends RequestItemDerivation { private String sourceAttributeId; public static ShareAttributeRequestItem fromWrapper( - AttributeWrapper wrapper, boolean mustBeAccepted) { + ConnectorAttribute wrapper, boolean mustBeAccepted) { Attribute content = wrapper.getContent(); content.setType(IdentityAttribute.class.getSimpleName()); diff --git a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java index 1dcd118..9bfd47a 100644 --- a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java +++ b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java @@ -10,8 +10,8 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(ResponseItemGroup.class), - @JsonSubTypes.Type(ResponseItemDerivation.class), + @JsonSubTypes.Type(ResponseItemGroup.class), + @JsonSubTypes.Type(ResponseItemDerivation.class), }) @AllArgsConstructor @Getter diff --git a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java index f3f2504..7c0a294 100644 --- a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java +++ b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java @@ -10,20 +10,20 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - // Accept Items - @JsonSubTypes.Type(AcceptResponseItem.class), - @JsonSubTypes.Type(ReadAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(ShareAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(CreateAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(ProposeAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(FreeTextAcceptResponseItem.class), - @JsonSubTypes.Type(AttributeAlreadySharedAcceptResponseItem.class), + // Accept Items + @JsonSubTypes.Type(AcceptResponseItem.class), + @JsonSubTypes.Type(ReadAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(ShareAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(CreateAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(ProposeAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(FreeTextAcceptResponseItem.class), + @JsonSubTypes.Type(AttributeAlreadySharedAcceptResponseItem.class), - // Reject Items - @JsonSubTypes.Type(RejectResponseItem.class), + // Reject Items + @JsonSubTypes.Type(RejectResponseItem.class), - // Error Items - @JsonSubTypes.Type(ErrorResponseItem.class), + // Error Items + @JsonSubTypes.Type(ErrorResponseItem.class), }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java b/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java new file mode 100644 index 0000000..35d81a4 --- /dev/null +++ b/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java @@ -0,0 +1,24 @@ +package eu.enmeshed.model.tokens; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ConnectorToken { + private String id; + private String createdBy; + private String createdByDevice; + private Object content; + private String createdAt; + private String expiresAt; + private String secretKey; + private String truncatedReference; + private boolean isEphemeral; +} diff --git a/src/main/java/eu/enmeshed/requests/attributes/SucceedAttributeRequest.java b/src/main/java/eu/enmeshed/requests/attributes/SucceedAttributeRequest.java new file mode 100644 index 0000000..82c7722 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/attributes/SucceedAttributeRequest.java @@ -0,0 +1,30 @@ +package eu.enmeshed.requests.attributes; + +import eu.enmeshed.model.attributes.values.AttributeValue; +import java.time.ZonedDateTime; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Builder +public class SucceedAttributeRequest { + + private SuccessorContent successorContent; + + @AllArgsConstructor + @NoArgsConstructor + @Getter + @Builder + static class SuccessorContent { + private AttributeValue value; + private List tags; + private ZonedDateTime validFrom; + private ZonedDateTime validTo; + } +} diff --git a/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java b/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java new file mode 100644 index 0000000..101e020 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java @@ -0,0 +1,17 @@ +package eu.enmeshed.requests.files; + +import lombok.Builder; + +@Builder +public class GetFilesQuery { + private String createdAt; + private String createdBy; + private String createdByDevice; + private String description; + private String expiresAt; + private String filename; + private String filesize; + private String mimetype; + private String title; + private Boolean isOwn; +} diff --git a/src/main/java/eu/enmeshed/requests/files/GetOwnFilesQuery.java b/src/main/java/eu/enmeshed/requests/files/GetOwnFilesQuery.java new file mode 100644 index 0000000..7408bca --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/files/GetOwnFilesQuery.java @@ -0,0 +1,15 @@ +package eu.enmeshed.requests.files; + +import lombok.Builder; + +@Builder +public class GetOwnFilesQuery { + private String createdAt; + private String createdByDevice; + private String description; + private String expiresAt; + private String filename; + private String filesize; + private String mimetype; + private String title; +} diff --git a/src/main/java/eu/enmeshed/requests/files/GetPeerFilesQuery.java b/src/main/java/eu/enmeshed/requests/files/GetPeerFilesQuery.java new file mode 100644 index 0000000..4a171b5 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/files/GetPeerFilesQuery.java @@ -0,0 +1,15 @@ +package eu.enmeshed.requests.files; + +import lombok.Builder; + +@Builder +public class GetPeerFilesQuery { + private String createdAt; + private String createdBy; + private String description; + private String expiresAt; + private String filename; + private String filesize; + private String mimetype; + private String title; +} diff --git a/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java b/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java new file mode 100644 index 0000000..94b3315 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java @@ -0,0 +1,8 @@ +package eu.enmeshed.requests.files; + +import lombok.Builder; + +@Builder +public class LoadPeerFileRequest { + private String reference; +} diff --git a/src/main/java/eu/enmeshed/client/MessageSearchQuery.java b/src/main/java/eu/enmeshed/requests/messages/GetMessagesQuery.java similarity index 88% rename from src/main/java/eu/enmeshed/client/MessageSearchQuery.java rename to src/main/java/eu/enmeshed/requests/messages/GetMessagesQuery.java index c6b72ae..21bc9df 100644 --- a/src/main/java/eu/enmeshed/client/MessageSearchQuery.java +++ b/src/main/java/eu/enmeshed/requests/messages/GetMessagesQuery.java @@ -1,15 +1,12 @@ -package eu.enmeshed.client; +package eu.enmeshed.requests.messages; import feign.Param; import lombok.Builder; @Builder -public class MessageSearchQuery { - +public class GetMessagesQuery { private String createdBy; - private String createdByDevice; - private String createdAt; @Param("recipients.address") @@ -19,7 +16,6 @@ public class MessageSearchQuery { private String recipientsRelationshipId; private String participant; - private String attachments; @Param("content.@type") diff --git a/src/main/java/eu/enmeshed/requests/messages/SendMessageRequest.java b/src/main/java/eu/enmeshed/requests/messages/SendMessageRequest.java new file mode 100644 index 0000000..b4c277b --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/messages/SendMessageRequest.java @@ -0,0 +1,14 @@ +package eu.enmeshed.requests.messages; + +import eu.enmeshed.model.messages.MessageContent; +import java.util.List; +import lombok.Builder; + +@Builder +public class SendMessageRequest { + + private T content; + private List recipients; + private List attachments; +} + From 24641ff2dc37c0a7d27c3b0a67696a89197fe43f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Mon, 16 Sep 2024 16:52:10 +0200 Subject: [PATCH 03/58] refactor: reformat --- .editorconfig | 2 +- src/main/java/eu/enmeshed/ConnectorError.java | 1 + .../endpoints/AttributesEndpoint.java | 2 +- .../endpoints/MonitoringEndpoint.java | 1 + .../enmeshed/model/attributes/Attribute.java | 4 +- .../model/attributes/IdentityAttribute.java | 4 +- .../attributes/values/AttributeValue.java | 88 ++++++++++--------- .../values/RelationshipAttributeValue.java | 4 +- .../identity/AffiliationOrganization.java | 4 +- .../values/identity/AffiliationRole.java | 4 +- .../values/identity/AffiliationUnit.java | 4 +- .../attributes/values/identity/BirthCity.java | 4 +- .../values/identity/BirthCountry.java | 4 +- .../attributes/values/identity/BirthDay.java | 4 +- .../values/identity/BirthMonth.java | 4 +- .../attributes/values/identity/BirthName.java | 4 +- .../values/identity/BirthState.java | 4 +- .../attributes/values/identity/BirthYear.java | 4 +- .../values/identity/Citizenship.java | 4 +- .../attributes/values/identity/City.java | 4 +- .../identity/CommunicationLanguage.java | 4 +- .../attributes/values/identity/Country.java | 4 +- .../values/identity/DisplayName.java | 4 +- .../values/identity/EMailAddress.java | 4 +- .../attributes/values/identity/FaxNumber.java | 4 +- .../attributes/values/identity/GivenName.java | 4 +- .../values/identity/HonoricPrefix.java | 4 +- .../values/identity/HonoricSuffix.java | 4 +- .../values/identity/HouseNumber.java | 4 +- .../identity/IdentityFileReference.java | 4 +- .../attributes/values/identity/JobTitle.java | 4 +- .../values/identity/MiddleName.java | 4 +- .../values/identity/Nationality.java | 4 +- .../values/identity/PhoneNumber.java | 4 +- .../attributes/values/identity/Pseudonym.java | 4 +- .../model/attributes/values/identity/Sex.java | 4 +- .../attributes/values/identity/State.java | 4 +- .../attributes/values/identity/Street.java | 4 +- .../attributes/values/identity/Surname.java | 4 +- .../attributes/values/identity/Website.java | 4 +- .../attributes/values/identity/ZipCode.java | 4 +- .../java/eu/enmeshed/model/event/Webhook.java | 84 +++++++++--------- .../eu/enmeshed/model/event/WebhookData.java | 8 +- .../model/messages/MessageContent.java | 12 +-- .../model/monitoring/ConnectorHealth.java | 1 + .../monitoring/ConnectorRequestCount.java | 1 + .../ConnectorSupportInformation.java | 1 + .../monitoring/ConnectorVersionInfo.java | 1 + .../notificationItems/NotificationItem.java | 4 +- .../AuthenticationRequestItem.java | 4 +- .../request/requestItems/RequestItem.java | 4 +- .../requestItems/RequestItemDerivation.java | 14 +-- .../request/responseItems/ResponseItem.java | 4 +- .../responseItems/ResponseItemDerivation.java | 24 ++--- .../enmeshed/model/tokens/ConnectorToken.java | 1 + .../attributes/SucceedAttributeRequest.java | 2 +- .../requests/files/GetFilesQuery.java | 1 + .../requests/files/GetOwnFilesQuery.java | 1 + .../requests/files/GetPeerFilesQuery.java | 1 + .../requests/files/LoadPeerFileRequest.java | 1 + .../requests/messages/GetMessagesQuery.java | 1 + 61 files changed, 251 insertions(+), 157 deletions(-) diff --git a/.editorconfig b/.editorconfig index 7fa64d6..b1d86ba 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,7 +4,7 @@ end_of_line = lf indent_size = 2 indent_style = space insert_final_newline = false -max_line_length = 120 +max_line_length = 180 tab_width = 2 ij_continuation_indent_size = 4 ij_formatter_off_tag = @formatter:off diff --git a/src/main/java/eu/enmeshed/ConnectorError.java b/src/main/java/eu/enmeshed/ConnectorError.java index fd56790..fe76b2a 100644 --- a/src/main/java/eu/enmeshed/ConnectorError.java +++ b/src/main/java/eu/enmeshed/ConnectorError.java @@ -8,6 +8,7 @@ public record ConnectorError( String time, String details, String[] stackTrace) { + Exception toException() { return new Exception(message); } diff --git a/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java index ed6ee24..711d029 100644 --- a/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java @@ -1,8 +1,8 @@ package eu.enmeshed.endpoints; import eu.enmeshed.ConnectorResponse; -import eu.enmeshed.model.ContentWrapper; import eu.enmeshed.model.ConnectorAttribute; +import eu.enmeshed.model.ContentWrapper; import eu.enmeshed.model.attributes.Attribute; import eu.enmeshed.requests.attributes.SucceedAttributeRequest; import feign.Feign.Builder; diff --git a/src/main/java/eu/enmeshed/endpoints/MonitoringEndpoint.java b/src/main/java/eu/enmeshed/endpoints/MonitoringEndpoint.java index 0b00c07..8da1d52 100644 --- a/src/main/java/eu/enmeshed/endpoints/MonitoringEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/MonitoringEndpoint.java @@ -9,6 +9,7 @@ import feign.RequestLine; public interface MonitoringEndpoint { + static MonitoringEndpoint configure(String url, Builder builder) { return builder.target(MonitoringEndpoint.class, url); } diff --git a/src/main/java/eu/enmeshed/model/attributes/Attribute.java b/src/main/java/eu/enmeshed/model/attributes/Attribute.java index a98ce05..3c113cc 100644 --- a/src/main/java/eu/enmeshed/model/attributes/Attribute.java +++ b/src/main/java/eu/enmeshed/model/attributes/Attribute.java @@ -16,8 +16,8 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(IdentityAttribute.class), - @JsonSubTypes.Type(RelationshipAttribute.class) + @JsonSubTypes.Type(IdentityAttribute.class), + @JsonSubTypes.Type(RelationshipAttribute.class) }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java b/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java index c31c3a4..271226e 100644 --- a/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java +++ b/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java @@ -9,4 +9,6 @@ @Getter @Setter @SuperBuilder -public class IdentityAttribute extends Attribute {} +public class IdentityAttribute extends Attribute { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java b/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java index 9afeea9..c105738 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java @@ -51,51 +51,53 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(Affiliation.class), - @JsonSubTypes.Type(AffiliationOrganization.class), - @JsonSubTypes.Type(AffiliationRole.class), - @JsonSubTypes.Type(AffiliationUnit.class), - @JsonSubTypes.Type(BirthCity.class), - @JsonSubTypes.Type(BirthCountry.class), - @JsonSubTypes.Type(BirthDate.class), - @JsonSubTypes.Type(BirthDay.class), - @JsonSubTypes.Type(BirthMonth.class), - @JsonSubTypes.Type(BirthName.class), - @JsonSubTypes.Type(BirthPlace.class), - @JsonSubTypes.Type(BirthState.class), - @JsonSubTypes.Type(BirthYear.class), - @JsonSubTypes.Type(Citizenship.class), - @JsonSubTypes.Type(City.class), - @JsonSubTypes.Type(CommunicationLanguage.class), - @JsonSubTypes.Type(Country.class), - @JsonSubTypes.Type(DeliveryBoxAddress.class), - @JsonSubTypes.Type(DisplayName.class), - @JsonSubTypes.Type(EMailAddress.class), - @JsonSubTypes.Type(FaxNumber.class), - @JsonSubTypes.Type(GivenName.class), - @JsonSubTypes.Type(HonoricPrefix.class), - @JsonSubTypes.Type(HonoricSuffix.class), - @JsonSubTypes.Type(HouseNumber.class), - @JsonSubTypes.Type(IdentityFileReference.class), - @JsonSubTypes.Type(JobTitle.class), - @JsonSubTypes.Type(MiddleName.class), - @JsonSubTypes.Type(Nationality.class), - @JsonSubTypes.Type(PersonName.class), - @JsonSubTypes.Type(PhoneNumber.class), - @JsonSubTypes.Type(PostOfficeBoxAddress.class), - @JsonSubTypes.Type(ProprietaryBoolean.class), - @JsonSubTypes.Type(Pseudonym.class), - @JsonSubTypes.Type(SchematizedXML.class), - @JsonSubTypes.Type(Sex.class), - @JsonSubTypes.Type(State.class), - @JsonSubTypes.Type(Street.class), - @JsonSubTypes.Type(StreetAddress.class), - @JsonSubTypes.Type(Surname.class), - @JsonSubTypes.Type(Website.class), - @JsonSubTypes.Type(ZipCode.class), + @JsonSubTypes.Type(Affiliation.class), + @JsonSubTypes.Type(AffiliationOrganization.class), + @JsonSubTypes.Type(AffiliationRole.class), + @JsonSubTypes.Type(AffiliationUnit.class), + @JsonSubTypes.Type(BirthCity.class), + @JsonSubTypes.Type(BirthCountry.class), + @JsonSubTypes.Type(BirthDate.class), + @JsonSubTypes.Type(BirthDay.class), + @JsonSubTypes.Type(BirthMonth.class), + @JsonSubTypes.Type(BirthName.class), + @JsonSubTypes.Type(BirthPlace.class), + @JsonSubTypes.Type(BirthState.class), + @JsonSubTypes.Type(BirthYear.class), + @JsonSubTypes.Type(Citizenship.class), + @JsonSubTypes.Type(City.class), + @JsonSubTypes.Type(CommunicationLanguage.class), + @JsonSubTypes.Type(Country.class), + @JsonSubTypes.Type(DeliveryBoxAddress.class), + @JsonSubTypes.Type(DisplayName.class), + @JsonSubTypes.Type(EMailAddress.class), + @JsonSubTypes.Type(FaxNumber.class), + @JsonSubTypes.Type(GivenName.class), + @JsonSubTypes.Type(HonoricPrefix.class), + @JsonSubTypes.Type(HonoricSuffix.class), + @JsonSubTypes.Type(HouseNumber.class), + @JsonSubTypes.Type(IdentityFileReference.class), + @JsonSubTypes.Type(JobTitle.class), + @JsonSubTypes.Type(MiddleName.class), + @JsonSubTypes.Type(Nationality.class), + @JsonSubTypes.Type(PersonName.class), + @JsonSubTypes.Type(PhoneNumber.class), + @JsonSubTypes.Type(PostOfficeBoxAddress.class), + @JsonSubTypes.Type(ProprietaryBoolean.class), + @JsonSubTypes.Type(Pseudonym.class), + @JsonSubTypes.Type(SchematizedXML.class), + @JsonSubTypes.Type(Sex.class), + @JsonSubTypes.Type(State.class), + @JsonSubTypes.Type(Street.class), + @JsonSubTypes.Type(StreetAddress.class), + @JsonSubTypes.Type(Surname.class), + @JsonSubTypes.Type(Website.class), + @JsonSubTypes.Type(ZipCode.class), }) @NoArgsConstructor @Getter @Setter @SuperBuilder -public abstract class AttributeValue {} +public abstract class AttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java b/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java index 547c242..d32e297 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java @@ -9,4 +9,6 @@ @Getter @Setter @SuperBuilder -public abstract class RelationshipAttributeValue extends AttributeValue {} +public abstract class RelationshipAttributeValue extends AttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java index 447253f..17485de 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class AffiliationOrganization extends SimpleStringAttributeValue {} +public class AffiliationOrganization extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java index a90d643..eaa7072 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class AffiliationRole extends SimpleStringAttributeValue {} +public class AffiliationRole extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java index 313954a..3656d80 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class AffiliationUnit extends SimpleStringAttributeValue {} +public class AffiliationUnit extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java index e81411c..2fd6d4c 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class BirthCity extends SimpleStringAttributeValue {} +public class BirthCity extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java index 25562e5..442bd5c 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class BirthCountry extends SimpleStringAttributeValue {} +public class BirthCountry extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java index 6407cde..f24c533 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class BirthDay extends SimpleNumberAttributeValue {} +public class BirthDay extends SimpleNumberAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java index 180310a..eab1ae9 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class BirthMonth extends SimpleNumberAttributeValue {} +public class BirthMonth extends SimpleNumberAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java index 31f2173..321c4d4 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class BirthName extends SimpleStringAttributeValue {} +public class BirthName extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java index 6835b96..f1fc217 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class BirthState extends SimpleStringAttributeValue {} +public class BirthState extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java index 7b3b3c7..c719d66 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class BirthYear extends SimpleNumberAttributeValue {} +public class BirthYear extends SimpleNumberAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java index 7b775ed..a099e58 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class Citizenship extends SimpleStringAttributeValue {} +public class Citizenship extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java index cc95d4a..0586d76 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class City extends SimpleStringAttributeValue {} +public class City extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java index 256786d..2ef775e 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class CommunicationLanguage extends SimpleStringAttributeValue {} +public class CommunicationLanguage extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java index d6ea64c..fc92b64 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class Country extends SimpleStringAttributeValue {} +public class Country extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java index 7aa96d8..92877c3 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class DisplayName extends SimpleStringAttributeValue {} +public class DisplayName extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java index 6f2cc10..792d56f 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class EMailAddress extends SimpleStringAttributeValue {} +public class EMailAddress extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java index 66bf280..62ae907 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class FaxNumber extends SimpleStringAttributeValue {} +public class FaxNumber extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java index bbf6b1e..5d7cf47 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class GivenName extends SimpleStringAttributeValue {} +public class GivenName extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java index 068f2b2..3aae896 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class HonoricPrefix extends SimpleStringAttributeValue {} +public class HonoricPrefix extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java index 31fc56c..6bcfc6e 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class HonoricSuffix extends SimpleStringAttributeValue {} +public class HonoricSuffix extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java index 8fe58c9..808c330 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class HouseNumber extends SimpleStringAttributeValue {} +public class HouseNumber extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java index 23a28b8..ee6cf27 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class IdentityFileReference extends SimpleStringAttributeValue {} +public class IdentityFileReference extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java index 08d9aee..c10eb92 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class JobTitle extends SimpleStringAttributeValue {} +public class JobTitle extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java index 60a4410..dceb06e 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class MiddleName extends SimpleStringAttributeValue {} +public class MiddleName extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java index 230b816..d13579d 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class Nationality extends SimpleStringAttributeValue {} +public class Nationality extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java index 22d0381..24b7c6a 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class PhoneNumber extends SimpleStringAttributeValue {} +public class PhoneNumber extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java index 0ed3844..ef0456d 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class Pseudonym extends SimpleStringAttributeValue {} +public class Pseudonym extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java index f83fa91..29a0da5 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class Sex extends SimpleStringAttributeValue {} +public class Sex extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java index e7621d0..955282b 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class State extends SimpleStringAttributeValue {} +public class State extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java index 390ae3b..b12ff06 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class Street extends SimpleStringAttributeValue {} +public class Street extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java index dc0c0be..9420333 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class Surname extends SimpleStringAttributeValue {} +public class Surname extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java index 1581276..78d4d39 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class Website extends SimpleStringAttributeValue {} +public class Website extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java index 595eeaf..bb0e9e4 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java @@ -10,4 +10,6 @@ @Getter @Setter @SuperBuilder -public class ZipCode extends SimpleStringAttributeValue {} +public class ZipCode extends SimpleStringAttributeValue { + +} diff --git a/src/main/java/eu/enmeshed/model/event/Webhook.java b/src/main/java/eu/enmeshed/model/event/Webhook.java index d12a656..f5b2fac 100644 --- a/src/main/java/eu/enmeshed/model/event/Webhook.java +++ b/src/main/java/eu/enmeshed/model/event/Webhook.java @@ -21,48 +21,48 @@ public class Webhook { include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "trigger") @JsonSubTypes({ - @JsonSubTypes.Type( - value = ConnectorRequest.class, - names = { - WebhookTriggerNames.Consumption.INCOMING_REQUEST_RECEIVED, - WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED, - WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED_AND_COMPLETED, - WebhookTriggerNames.Consumption - .OUTGOING_REQUEST_FROM_RELATIONSHIP_CREATION_CREATED_AND_COMPLETED - }), - @JsonSubTypes.Type( - value = ConnectorAttribute.class, - names = { - WebhookTriggerNames.Consumption.ATTRIBUTE_CREATED, - WebhookTriggerNames.Consumption.ATTRIBUTE_DELETED, - WebhookTriggerNames.Consumption.ATTRIBUTE_SUCCEEDED, - WebhookTriggerNames.Consumption.ATTRIBUTE_UPDATED, - WebhookTriggerNames.Consumption.SHARED_ATTRIBUTE_COPY_CREATED - }), - @JsonSubTypes.Type( - value = RequestStatusChangedEventData.class, - names = { - WebhookTriggerNames.Consumption.INCOMING_REQUEST_STATUS_CHANGED, - WebhookTriggerNames.Consumption.OUTGOING_REQUEST_STATUS_CHANGED - }), - @JsonSubTypes.Type( - value = MessageProcessedEventData.class, - names = WebhookTriggerNames.Consumption.MESSAGE_PROCESSED), - @JsonSubTypes.Type( - value = RelationshipTemplateProcessedEventData.class, - names = WebhookTriggerNames.Consumption.RELATIONSHIP_TEMPLATE_PROCESSED), - @JsonSubTypes.Type( - value = Message.class, - names = { - WebhookTriggerNames.Transport.MESSAGE_RECEIVED, - WebhookTriggerNames.Transport.MESSAGE_SENT - }), - @JsonSubTypes.Type( - value = RelationshipTemplate.class, - names = WebhookTriggerNames.Transport.PEER_RELATIONSHIP_TEMPLATE_LOADED), - @JsonSubTypes.Type( - value = Relationship.class, - names = WebhookTriggerNames.Transport.RELATIONSHIP_CHANGED) + @JsonSubTypes.Type( + value = ConnectorRequest.class, + names = { + WebhookTriggerNames.Consumption.INCOMING_REQUEST_RECEIVED, + WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED, + WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED_AND_COMPLETED, + WebhookTriggerNames.Consumption + .OUTGOING_REQUEST_FROM_RELATIONSHIP_CREATION_CREATED_AND_COMPLETED + }), + @JsonSubTypes.Type( + value = ConnectorAttribute.class, + names = { + WebhookTriggerNames.Consumption.ATTRIBUTE_CREATED, + WebhookTriggerNames.Consumption.ATTRIBUTE_DELETED, + WebhookTriggerNames.Consumption.ATTRIBUTE_SUCCEEDED, + WebhookTriggerNames.Consumption.ATTRIBUTE_UPDATED, + WebhookTriggerNames.Consumption.SHARED_ATTRIBUTE_COPY_CREATED + }), + @JsonSubTypes.Type( + value = RequestStatusChangedEventData.class, + names = { + WebhookTriggerNames.Consumption.INCOMING_REQUEST_STATUS_CHANGED, + WebhookTriggerNames.Consumption.OUTGOING_REQUEST_STATUS_CHANGED + }), + @JsonSubTypes.Type( + value = MessageProcessedEventData.class, + names = WebhookTriggerNames.Consumption.MESSAGE_PROCESSED), + @JsonSubTypes.Type( + value = RelationshipTemplateProcessedEventData.class, + names = WebhookTriggerNames.Consumption.RELATIONSHIP_TEMPLATE_PROCESSED), + @JsonSubTypes.Type( + value = Message.class, + names = { + WebhookTriggerNames.Transport.MESSAGE_RECEIVED, + WebhookTriggerNames.Transport.MESSAGE_SENT + }), + @JsonSubTypes.Type( + value = RelationshipTemplate.class, + names = WebhookTriggerNames.Transport.PEER_RELATIONSHIP_TEMPLATE_LOADED), + @JsonSubTypes.Type( + value = Relationship.class, + names = WebhookTriggerNames.Transport.RELATIONSHIP_CHANGED) }) private T data; diff --git a/src/main/java/eu/enmeshed/model/event/WebhookData.java b/src/main/java/eu/enmeshed/model/event/WebhookData.java index 9910967..92072d3 100644 --- a/src/main/java/eu/enmeshed/model/event/WebhookData.java +++ b/src/main/java/eu/enmeshed/model/event/WebhookData.java @@ -1,4 +1,8 @@ package eu.enmeshed.model.event; -/** Interface helping to identify possible classes for Webhook Payload. */ -public interface WebhookData {} +/** + * Interface helping to identify possible classes for Webhook Payload. + */ +public interface WebhookData { + +} diff --git a/src/main/java/eu/enmeshed/model/messages/MessageContent.java b/src/main/java/eu/enmeshed/model/messages/MessageContent.java index a4a694e..826f977 100644 --- a/src/main/java/eu/enmeshed/model/messages/MessageContent.java +++ b/src/main/java/eu/enmeshed/model/messages/MessageContent.java @@ -12,13 +12,15 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(Mail.class), - @JsonSubTypes.Type(Request.class), - @JsonSubTypes.Type(ResponseWrapper.class), - @JsonSubTypes.Type(Notification.class) + @JsonSubTypes.Type(Mail.class), + @JsonSubTypes.Type(Request.class), + @JsonSubTypes.Type(ResponseWrapper.class), + @JsonSubTypes.Type(Notification.class) }) @NoArgsConstructor @Getter @Setter @SuperBuilder -public abstract class MessageContent {} +public abstract class MessageContent { + +} diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java index 8e67839..76ed8af 100644 --- a/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java @@ -13,6 +13,7 @@ @Setter @Builder public class ConnectorHealth { + private Boolean isHealthy; private Map services; } diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java index 3b57b02..d9045ae 100644 --- a/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java @@ -13,6 +13,7 @@ @Setter @Builder public class ConnectorRequestCount { + private String since; private int requestCount; private Map requestCountByStatus; diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java index 5f5769e..3160064 100644 --- a/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java @@ -14,6 +14,7 @@ @Setter @Builder public class ConnectorSupportInformation { + private ConnectorVersionInfo version; private ConnectorHealth health; private Map configuration; diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java index 8f36a96..48e6ec7 100644 --- a/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java @@ -12,6 +12,7 @@ @Setter @Builder public class ConnectorVersionInfo { + private String version; private String build; private String date; diff --git a/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java b/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java index 39f1044..f8f2729 100644 --- a/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java +++ b/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java @@ -13,4 +13,6 @@ @Getter @Setter @SuperBuilder -public abstract class NotificationItem {} +public abstract class NotificationItem { + +} diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java index 4043b63..77b84b3 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java @@ -9,4 +9,6 @@ @Getter @Setter @SuperBuilder -public class AuthenticationRequestItem extends RequestItemDerivation {} +public class AuthenticationRequestItem extends RequestItemDerivation { + +} diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java index cb2b6bc..654fb0b 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java @@ -15,8 +15,8 @@ @JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(RequestItemGroup.class), - @JsonSubTypes.Type(RequestItemDerivation.class), + @JsonSubTypes.Type(RequestItemGroup.class), + @JsonSubTypes.Type(RequestItemDerivation.class), }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java index 536e4ee..73885c6 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java @@ -16,13 +16,13 @@ @JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(ReadAttributeRequestItem.class), - @JsonSubTypes.Type(ShareAttributeRequestItem.class), - @JsonSubTypes.Type(AuthenticationRequestItem.class), - @JsonSubTypes.Type(ConsentRequestItem.class), - @JsonSubTypes.Type(CreateAttributeRequestItem.class), - @JsonSubTypes.Type(FreeTextRequestItem.class), - @JsonSubTypes.Type(ProposeAttributeRequestItem.class) + @JsonSubTypes.Type(ReadAttributeRequestItem.class), + @JsonSubTypes.Type(ShareAttributeRequestItem.class), + @JsonSubTypes.Type(AuthenticationRequestItem.class), + @JsonSubTypes.Type(ConsentRequestItem.class), + @JsonSubTypes.Type(CreateAttributeRequestItem.class), + @JsonSubTypes.Type(FreeTextRequestItem.class), + @JsonSubTypes.Type(ProposeAttributeRequestItem.class) }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java index 9bfd47a..1dcd118 100644 --- a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java +++ b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java @@ -10,8 +10,8 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(ResponseItemGroup.class), - @JsonSubTypes.Type(ResponseItemDerivation.class), + @JsonSubTypes.Type(ResponseItemGroup.class), + @JsonSubTypes.Type(ResponseItemDerivation.class), }) @AllArgsConstructor @Getter diff --git a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java index 7c0a294..f3f2504 100644 --- a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java +++ b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java @@ -10,20 +10,20 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - // Accept Items - @JsonSubTypes.Type(AcceptResponseItem.class), - @JsonSubTypes.Type(ReadAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(ShareAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(CreateAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(ProposeAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(FreeTextAcceptResponseItem.class), - @JsonSubTypes.Type(AttributeAlreadySharedAcceptResponseItem.class), + // Accept Items + @JsonSubTypes.Type(AcceptResponseItem.class), + @JsonSubTypes.Type(ReadAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(ShareAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(CreateAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(ProposeAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(FreeTextAcceptResponseItem.class), + @JsonSubTypes.Type(AttributeAlreadySharedAcceptResponseItem.class), - // Reject Items - @JsonSubTypes.Type(RejectResponseItem.class), + // Reject Items + @JsonSubTypes.Type(RejectResponseItem.class), - // Error Items - @JsonSubTypes.Type(ErrorResponseItem.class), + // Error Items + @JsonSubTypes.Type(ErrorResponseItem.class), }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java b/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java index 35d81a4..409534b 100644 --- a/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java +++ b/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java @@ -12,6 +12,7 @@ @Setter @Builder public class ConnectorToken { + private String id; private String createdBy; private String createdByDevice; diff --git a/src/main/java/eu/enmeshed/requests/attributes/SucceedAttributeRequest.java b/src/main/java/eu/enmeshed/requests/attributes/SucceedAttributeRequest.java index 82c7722..c5911fe 100644 --- a/src/main/java/eu/enmeshed/requests/attributes/SucceedAttributeRequest.java +++ b/src/main/java/eu/enmeshed/requests/attributes/SucceedAttributeRequest.java @@ -7,7 +7,6 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; @AllArgsConstructor @NoArgsConstructor @@ -22,6 +21,7 @@ public class SucceedAttributeRequest { @Getter @Builder static class SuccessorContent { + private AttributeValue value; private List tags; private ZonedDateTime validFrom; diff --git a/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java b/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java index 101e020..5c1c9af 100644 --- a/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java +++ b/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java @@ -4,6 +4,7 @@ @Builder public class GetFilesQuery { + private String createdAt; private String createdBy; private String createdByDevice; diff --git a/src/main/java/eu/enmeshed/requests/files/GetOwnFilesQuery.java b/src/main/java/eu/enmeshed/requests/files/GetOwnFilesQuery.java index 7408bca..6cd3063 100644 --- a/src/main/java/eu/enmeshed/requests/files/GetOwnFilesQuery.java +++ b/src/main/java/eu/enmeshed/requests/files/GetOwnFilesQuery.java @@ -4,6 +4,7 @@ @Builder public class GetOwnFilesQuery { + private String createdAt; private String createdByDevice; private String description; diff --git a/src/main/java/eu/enmeshed/requests/files/GetPeerFilesQuery.java b/src/main/java/eu/enmeshed/requests/files/GetPeerFilesQuery.java index 4a171b5..2add0a4 100644 --- a/src/main/java/eu/enmeshed/requests/files/GetPeerFilesQuery.java +++ b/src/main/java/eu/enmeshed/requests/files/GetPeerFilesQuery.java @@ -4,6 +4,7 @@ @Builder public class GetPeerFilesQuery { + private String createdAt; private String createdBy; private String description; diff --git a/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java b/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java index 94b3315..ee68df5 100644 --- a/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java +++ b/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java @@ -4,5 +4,6 @@ @Builder public class LoadPeerFileRequest { + private String reference; } diff --git a/src/main/java/eu/enmeshed/requests/messages/GetMessagesQuery.java b/src/main/java/eu/enmeshed/requests/messages/GetMessagesQuery.java index 21bc9df..bc1b7cf 100644 --- a/src/main/java/eu/enmeshed/requests/messages/GetMessagesQuery.java +++ b/src/main/java/eu/enmeshed/requests/messages/GetMessagesQuery.java @@ -5,6 +5,7 @@ @Builder public class GetMessagesQuery { + private String createdBy; private String createdByDevice; private String createdAt; From 58dd6bbac3e7954c51dcc7b66aa33e94b50792ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Mon, 16 Sep 2024 16:52:39 +0200 Subject: [PATCH 04/58] test: add AccountTest using testcontainers --- pom.xml | 13 ++++++ src/test/java/eu/enmeshed/AccountTest.java | 38 ++++++++++++++++ .../eu/enmeshed/utils/ConnectorContainer.java | 43 +++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 src/test/java/eu/enmeshed/AccountTest.java create mode 100644 src/test/java/eu/enmeshed/utils/ConnectorContainer.java diff --git a/pom.xml b/pom.xml index 2ec5b31..1f20208 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,7 @@ 5.8.0 5.10.1 2.0.10 + 1.20.1 2.23 @@ -107,6 +108,18 @@ ${slf4j.version} test + + org.testcontainers + testcontainers + ${testcontainers.version} + test + + + org.testcontainers + junit-jupiter + ${testcontainers.version} + test + diff --git a/src/test/java/eu/enmeshed/AccountTest.java b/src/test/java/eu/enmeshed/AccountTest.java new file mode 100644 index 0000000..cdd51f9 --- /dev/null +++ b/src/test/java/eu/enmeshed/AccountTest.java @@ -0,0 +1,38 @@ +package eu.enmeshed; + +import static org.hamcrest.MatcherAssert.assertThat; + +import eu.enmeshed.utils.ConnectorContainer; +import org.hamcrest.CoreMatchers; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +@Testcontainers +public class AccountTest { + + @Container + public ConnectorContainer connector1 = new ConnectorContainer(); + + private EnmeshedClient client1; + + @BeforeEach + public void setUp() { + client1 = EnmeshedClient.create(connector1.getConnectionString(), connector1.getApiKey()); + } + + @Test + public void getIdentityInfo() { + var identityInfoResult = client1.account.getIdentityInfo(); + + var identityInfo = identityInfoResult.getResult(); + + assertThat(identityInfo.getAddress(), CoreMatchers.startsWith("did:e:")); + } + + @Test + public void sync() { + client1.account.sync(); + } +} diff --git a/src/test/java/eu/enmeshed/utils/ConnectorContainer.java b/src/test/java/eu/enmeshed/utils/ConnectorContainer.java new file mode 100644 index 0000000..6225313 --- /dev/null +++ b/src/test/java/eu/enmeshed/utils/ConnectorContainer.java @@ -0,0 +1,43 @@ +package eu.enmeshed.utils; + +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; +import org.testcontainers.utility.DockerImageName; + +public class ConnectorContainer extends GenericContainer { + + public static final String API_KEY = "xxx"; + + public ConnectorContainer() { + this(DockerImageName.parse("ghcr.io/nmshd/connector:latest")); + } + + private ConnectorContainer(DockerImageName dockerImageName) { + super(dockerImageName); + + addExposedPort(80); + + withEnv("debug", "true"); + + var baseUrl = System.getenv("NMSHD_TEST_BASEURL"); + withEnv("transportLibrary:baseUrl", baseUrl); + var clientId = System.getenv("NMSHD_TEST_CLIENTID"); + withEnv("transportLibrary:platformClientId", clientId); + var clientSecret = System.getenv("NMSHD_TEST_CLIENTSECRET"); + withEnv("transportLibrary:platformClientSecret", clientSecret); + + withEnv("database:driver", "lokijs"); + withEnv("database:folder", "./"); + withEnv("infrastructure:httpServer:apiKey", API_KEY); + + waitingFor(new HttpWaitStrategy().forStatusCode(200).forPort(80).forPath("/health")); + } + + public String getConnectionString() { + return "http://" + getHost() + ":" + getMappedPort(80); + } + + public String getApiKey() { + return API_KEY; + } +} From 424ff095a46d096563c2655eb8dbfe8265af2e10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Mon, 16 Sep 2024 17:03:44 +0200 Subject: [PATCH 05/58] test: add more account routes --- .../enmeshed/endpoints/AccountEndpoint.java | 11 ++++++-- .../ConnectorIdentityInfo.java} | 7 ++--- .../model/account/ConnectorSyncInfo.java | 27 +++++++++++++++++++ src/test/java/eu/enmeshed/AccountTest.java | 19 ++++++++++--- 4 files changed, 53 insertions(+), 11 deletions(-) rename src/main/java/eu/enmeshed/model/{IdentityInfo.java => account/ConnectorIdentityInfo.java} (76%) create mode 100644 src/main/java/eu/enmeshed/model/account/ConnectorSyncInfo.java diff --git a/src/main/java/eu/enmeshed/endpoints/AccountEndpoint.java b/src/main/java/eu/enmeshed/endpoints/AccountEndpoint.java index 2bd3f22..5fd02f8 100644 --- a/src/main/java/eu/enmeshed/endpoints/AccountEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/AccountEndpoint.java @@ -1,8 +1,10 @@ package eu.enmeshed.endpoints; import eu.enmeshed.ConnectorResponse; -import eu.enmeshed.model.IdentityInfo; +import eu.enmeshed.model.account.ConnectorIdentityInfo; +import eu.enmeshed.model.account.ConnectorSyncInfo; import feign.Feign.Builder; +import feign.Headers; import feign.RequestLine; public interface AccountEndpoint { @@ -12,8 +14,13 @@ static AccountEndpoint configure(String url, Builder builder) { } @RequestLine("GET /api/v2/Account/IdentityInfo") - ConnectorResponse getIdentityInfo(); + @Headers("Accept: application/json") + ConnectorResponse getIdentityInfo(); @RequestLine("POST /api/v2/Account/Sync") void sync(); + + @RequestLine("GET /api/v2/Account/SyncInfo") + @Headers("Accept: application/json") + ConnectorResponse getSyncInfo(); } diff --git a/src/main/java/eu/enmeshed/model/IdentityInfo.java b/src/main/java/eu/enmeshed/model/account/ConnectorIdentityInfo.java similarity index 76% rename from src/main/java/eu/enmeshed/model/IdentityInfo.java rename to src/main/java/eu/enmeshed/model/account/ConnectorIdentityInfo.java index cd5814b..2334ec5 100644 --- a/src/main/java/eu/enmeshed/model/IdentityInfo.java +++ b/src/main/java/eu/enmeshed/model/account/ConnectorIdentityInfo.java @@ -1,4 +1,4 @@ -package eu.enmeshed.model; +package eu.enmeshed.model.account; import lombok.AllArgsConstructor; import lombok.Builder; @@ -11,11 +11,8 @@ @Getter @Setter @Builder -public class IdentityInfo { +public class ConnectorIdentityInfo { private String address; - private String publicKey; - - private String realm; } diff --git a/src/main/java/eu/enmeshed/model/account/ConnectorSyncInfo.java b/src/main/java/eu/enmeshed/model/account/ConnectorSyncInfo.java new file mode 100644 index 0000000..95dedeb --- /dev/null +++ b/src/main/java/eu/enmeshed/model/account/ConnectorSyncInfo.java @@ -0,0 +1,27 @@ +package eu.enmeshed.model.account; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.time.ZonedDateTime; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ConnectorSyncInfo { + private SyncRun lastSyncRun; + + @AllArgsConstructor + @NoArgsConstructor + @Getter + @Setter + @Builder + public static class SyncRun { + private ZonedDateTime completedAt; + } +} diff --git a/src/test/java/eu/enmeshed/AccountTest.java b/src/test/java/eu/enmeshed/AccountTest.java index cdd51f9..919656a 100644 --- a/src/test/java/eu/enmeshed/AccountTest.java +++ b/src/test/java/eu/enmeshed/AccountTest.java @@ -3,6 +3,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import eu.enmeshed.utils.ConnectorContainer; +import java.time.ZonedDateTime; import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -12,14 +13,13 @@ @Testcontainers public class AccountTest { - @Container - public ConnectorContainer connector1 = new ConnectorContainer(); + @Container public ConnectorContainer connector1 = new ConnectorContainer(); - private EnmeshedClient client1; + private ConnectorClient client1; @BeforeEach public void setUp() { - client1 = EnmeshedClient.create(connector1.getConnectionString(), connector1.getApiKey()); + client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); } @Test @@ -35,4 +35,15 @@ public void getIdentityInfo() { public void sync() { client1.account.sync(); } + + @Test + public void getSyncInfo() { + client1.account.sync(); + + var syncInfoResult = client1.account.getSyncInfo(); + + var syncInfo = syncInfoResult.getResult(); + + assert syncInfo.getLastSyncRun().getCompletedAt().isBefore(ZonedDateTime.now()); + } } From 6a3f25d566ea3dc7111a83bcca73e0686e6b3391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Mon, 16 Sep 2024 17:04:07 +0200 Subject: [PATCH 06/58] refactor: rename reorder --- ...meshedClient.java => ConnectorClient.java} | 12 +-- ...ecoder.java => ConnectorErrorDecoder.java} | 2 +- .../endpoints/AttributesEndpoint.java | 9 +- .../enmeshed/endpoints/MessagesEndpoint.java | 6 +- .../RelationshipTemplatesEndpoint.java | 6 +- .../endpoints/RelationshipsEndpoint.java | 3 +- .../enmeshed/model/attributes/Attribute.java | 4 +- .../model/attributes/IdentityAttribute.java | 4 +- .../attributes/values/AttributeValue.java | 88 +++++++++---------- .../values/RelationshipAttributeValue.java | 4 +- .../identity/AffiliationOrganization.java | 4 +- .../values/identity/AffiliationRole.java | 4 +- .../values/identity/AffiliationUnit.java | 4 +- .../attributes/values/identity/BirthCity.java | 4 +- .../values/identity/BirthCountry.java | 4 +- .../attributes/values/identity/BirthDay.java | 4 +- .../values/identity/BirthMonth.java | 4 +- .../attributes/values/identity/BirthName.java | 4 +- .../values/identity/BirthState.java | 4 +- .../attributes/values/identity/BirthYear.java | 4 +- .../values/identity/Citizenship.java | 4 +- .../attributes/values/identity/City.java | 4 +- .../identity/CommunicationLanguage.java | 4 +- .../attributes/values/identity/Country.java | 4 +- .../values/identity/DisplayName.java | 4 +- .../values/identity/EMailAddress.java | 4 +- .../attributes/values/identity/FaxNumber.java | 4 +- .../attributes/values/identity/GivenName.java | 4 +- .../values/identity/HonoricPrefix.java | 4 +- .../values/identity/HonoricSuffix.java | 4 +- .../values/identity/HouseNumber.java | 4 +- .../identity/IdentityFileReference.java | 4 +- .../attributes/values/identity/JobTitle.java | 4 +- .../values/identity/MiddleName.java | 4 +- .../values/identity/Nationality.java | 4 +- .../values/identity/PhoneNumber.java | 4 +- .../attributes/values/identity/Pseudonym.java | 4 +- .../model/attributes/values/identity/Sex.java | 4 +- .../attributes/values/identity/State.java | 4 +- .../attributes/values/identity/Street.java | 4 +- .../attributes/values/identity/Surname.java | 4 +- .../attributes/values/identity/Website.java | 4 +- .../attributes/values/identity/ZipCode.java | 4 +- .../java/eu/enmeshed/model/event/Webhook.java | 84 +++++++++--------- .../eu/enmeshed/model/event/WebhookData.java | 8 +- .../model/messages/MessageContent.java | 12 ++- .../monitoring/ConnectorRequestCount.java | 2 +- .../ConnectorSupportInformation.java | 6 +- .../monitoring/ConnectorVersionInfo.java | 2 +- .../notificationItems/NotificationItem.java | 4 +- .../model/relationships/Relationship.java | 4 +- .../AuthenticationRequestItem.java | 4 +- .../request/requestItems/RequestItem.java | 4 +- .../requestItems/RequestItemDerivation.java | 14 +-- .../request/responseItems/ResponseItem.java | 4 +- .../responseItems/ResponseItemDerivation.java | 24 ++--- .../requests/messages/SendMessageRequest.java | 1 - src/test/assets/file.txt | 1 + src/test/java/eu/enmeshed/FilesTest.java | 48 ++++++++++ 59 files changed, 233 insertions(+), 259 deletions(-) rename src/main/java/eu/enmeshed/{EnmeshedClient.java => ConnectorClient.java} (92%) rename src/main/java/eu/enmeshed/{EnmeshedErrorDecoder.java => ConnectorErrorDecoder.java} (93%) create mode 100644 src/test/assets/file.txt create mode 100644 src/test/java/eu/enmeshed/FilesTest.java diff --git a/src/main/java/eu/enmeshed/EnmeshedClient.java b/src/main/java/eu/enmeshed/ConnectorClient.java similarity index 92% rename from src/main/java/eu/enmeshed/EnmeshedClient.java rename to src/main/java/eu/enmeshed/ConnectorClient.java index a7994f5..fc92ba8 100644 --- a/src/main/java/eu/enmeshed/EnmeshedClient.java +++ b/src/main/java/eu/enmeshed/ConnectorClient.java @@ -20,7 +20,7 @@ import feign.jackson.JacksonDecoder; import feign.jackson.JacksonEncoder; -public class EnmeshedClient { +public class ConnectorClient { private static final ObjectMapper objectMapper = new ObjectMapper() @@ -39,7 +39,7 @@ public class EnmeshedClient { public final IncomingRequestsEndpoint incomingRequests; public final OutgoingRequestsEndpoint outgoingRequests; - public EnmeshedClient( + public ConnectorClient( AccountEndpoint account, AttributesEndpoint attributes, FilesEndpoint files, @@ -58,11 +58,11 @@ public EnmeshedClient( this.outgoingRequests = outgoingRequests; } - public static EnmeshedClient create(String url, String apiKey) { + public static ConnectorClient create(String url, String apiKey) { return create(url, apiKey, new Options(), Level.NONE); } - public static EnmeshedClient create( + public static ConnectorClient create( String url, String apiKey, Options options, Level loggerLevel) { var builder = Feign.builder() @@ -71,9 +71,9 @@ public static EnmeshedClient create( .requestInterceptor(request -> request.header("X-API-KEY", apiKey)) .logLevel(loggerLevel) .options(options) - .errorDecoder(new EnmeshedErrorDecoder()); + .errorDecoder(new ConnectorErrorDecoder()); - return new EnmeshedClient( + return new ConnectorClient( AccountEndpoint.configure(url, builder), AttributesEndpoint.configure(url, builder), FilesEndpoint.configure(url, builder), diff --git a/src/main/java/eu/enmeshed/EnmeshedErrorDecoder.java b/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java similarity index 93% rename from src/main/java/eu/enmeshed/EnmeshedErrorDecoder.java rename to src/main/java/eu/enmeshed/ConnectorErrorDecoder.java index 1f13fbc..896f491 100644 --- a/src/main/java/eu/enmeshed/EnmeshedErrorDecoder.java +++ b/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java @@ -7,7 +7,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j -public class EnmeshedErrorDecoder implements ErrorDecoder { +public class ConnectorErrorDecoder implements ErrorDecoder { @Override public Exception decode(String methodKey, Response response) { diff --git a/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java index 711d029..f851b7b 100644 --- a/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java @@ -19,14 +19,17 @@ static AttributesEndpoint configure(String url, Builder builder) { @RequestLine("POST /api/v2/Attributes") @Headers({"Content-Type: application/json"}) - ConnectorResponse createRepositoryAttribute(ContentWrapper attribute); + ConnectorResponse createRepositoryAttribute( + ContentWrapper attribute); @RequestLine("POST /api/v2/Attributes/{id}/Succeed") @Headers("Content-Type: application/json") - ConnectorResponse succeedAttribute(@Param("id") String predecessorId, SucceedAttributeRequest request); + ConnectorResponse succeedAttribute( + @Param("id") String predecessorId, SucceedAttributeRequest request); @RequestLine("GET /api/v2/Attributes?content.value.@type={type}") - ConnectorResponse> searchAttributes(@Param("type") String contentValueType); + ConnectorResponse> searchAttributes( + @Param("type") String contentValueType); @RequestLine("GET /api/v2/Attributes/{id}") @Headers("Content-Type: application/json") diff --git a/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java index fc4c18d..a5e7d4d 100644 --- a/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java @@ -33,9 +33,11 @@ static MessagesEndpoint configure(String url, Builder builder) { @RequestLine("GET /api/v2/Messages/{messageId}/Attachments/{attachmentId}") @Headers("Accept: application/json") - ConnectorResponse getAttachment(@Param("messageId") String messageId, @Param("attachmentId") String attachmentId); + ConnectorResponse getAttachment( + @Param("messageId") String messageId, @Param("attachmentId") String attachmentId); @RequestLine("GET /api/v2/Messages/{messageId}/Attachments/{attachmentId}/Download") @Headers("Accept: application/json") - feign.Response downloadAttachment(@Param("messageId") String messageId, @Param("attachmentId") String attachmentId); + feign.Response downloadAttachment( + @Param("messageId") String messageId, @Param("attachmentId") String attachmentId); } diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java index 925ec10..0169085 100644 --- a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java @@ -17,7 +17,8 @@ static RelationshipTemplatesEndpoint configure(String url, Builder builder) { @RequestLine("POST /api/v2/RelationshipTemplates/Own") @Headers("Content-Type: application/json") - ConnectorResponse createOwnRelationshipTemplate(RelationshipTemplateCreation relationshipTemplate); + ConnectorResponse createOwnRelationshipTemplate( + RelationshipTemplateCreation relationshipTemplate); @RequestLine("GET /api/v2/RelationshipTemplates/{0}") @Headers("Accept: image/png") @@ -25,5 +26,6 @@ static RelationshipTemplatesEndpoint configure(String url, Builder builder) { @RequestLine("GET /api/v2/RelationshipTemplates/{relationshipTemplateId}") @Headers("Accept: application/json") - ConnectorResponse createRelationshipQrCode(@Param("relationshipTemplateId") String relationshipTemplateId); + ConnectorResponse createRelationshipQrCode( + @Param("relationshipTemplateId") String relationshipTemplateId); } diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java index 2405c75..f900f02 100644 --- a/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java @@ -15,7 +15,8 @@ static RelationshipsEndpoint configure(String url, Builder builder) { } @RequestLine("GET /api/v2/Relationships?template.id={0}&peer={1}&status={2}") - ConnectorResponse> searchRelationships(@Param("0") String templateId, @Param("1") String peer, @Param("2") String status); + ConnectorResponse> searchRelationships( + @Param("0") String templateId, @Param("1") String peer, @Param("2") String status); @RequestLine("GET /api/v2/Relationships/{id}") ConnectorResponse getRelationshipById(@Param("id") String id); diff --git a/src/main/java/eu/enmeshed/model/attributes/Attribute.java b/src/main/java/eu/enmeshed/model/attributes/Attribute.java index 3c113cc..a98ce05 100644 --- a/src/main/java/eu/enmeshed/model/attributes/Attribute.java +++ b/src/main/java/eu/enmeshed/model/attributes/Attribute.java @@ -16,8 +16,8 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(IdentityAttribute.class), - @JsonSubTypes.Type(RelationshipAttribute.class) + @JsonSubTypes.Type(IdentityAttribute.class), + @JsonSubTypes.Type(RelationshipAttribute.class) }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java b/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java index 271226e..c31c3a4 100644 --- a/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java +++ b/src/main/java/eu/enmeshed/model/attributes/IdentityAttribute.java @@ -9,6 +9,4 @@ @Getter @Setter @SuperBuilder -public class IdentityAttribute extends Attribute { - -} +public class IdentityAttribute extends Attribute {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java b/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java index c105738..9afeea9 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/AttributeValue.java @@ -51,53 +51,51 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(Affiliation.class), - @JsonSubTypes.Type(AffiliationOrganization.class), - @JsonSubTypes.Type(AffiliationRole.class), - @JsonSubTypes.Type(AffiliationUnit.class), - @JsonSubTypes.Type(BirthCity.class), - @JsonSubTypes.Type(BirthCountry.class), - @JsonSubTypes.Type(BirthDate.class), - @JsonSubTypes.Type(BirthDay.class), - @JsonSubTypes.Type(BirthMonth.class), - @JsonSubTypes.Type(BirthName.class), - @JsonSubTypes.Type(BirthPlace.class), - @JsonSubTypes.Type(BirthState.class), - @JsonSubTypes.Type(BirthYear.class), - @JsonSubTypes.Type(Citizenship.class), - @JsonSubTypes.Type(City.class), - @JsonSubTypes.Type(CommunicationLanguage.class), - @JsonSubTypes.Type(Country.class), - @JsonSubTypes.Type(DeliveryBoxAddress.class), - @JsonSubTypes.Type(DisplayName.class), - @JsonSubTypes.Type(EMailAddress.class), - @JsonSubTypes.Type(FaxNumber.class), - @JsonSubTypes.Type(GivenName.class), - @JsonSubTypes.Type(HonoricPrefix.class), - @JsonSubTypes.Type(HonoricSuffix.class), - @JsonSubTypes.Type(HouseNumber.class), - @JsonSubTypes.Type(IdentityFileReference.class), - @JsonSubTypes.Type(JobTitle.class), - @JsonSubTypes.Type(MiddleName.class), - @JsonSubTypes.Type(Nationality.class), - @JsonSubTypes.Type(PersonName.class), - @JsonSubTypes.Type(PhoneNumber.class), - @JsonSubTypes.Type(PostOfficeBoxAddress.class), - @JsonSubTypes.Type(ProprietaryBoolean.class), - @JsonSubTypes.Type(Pseudonym.class), - @JsonSubTypes.Type(SchematizedXML.class), - @JsonSubTypes.Type(Sex.class), - @JsonSubTypes.Type(State.class), - @JsonSubTypes.Type(Street.class), - @JsonSubTypes.Type(StreetAddress.class), - @JsonSubTypes.Type(Surname.class), - @JsonSubTypes.Type(Website.class), - @JsonSubTypes.Type(ZipCode.class), + @JsonSubTypes.Type(Affiliation.class), + @JsonSubTypes.Type(AffiliationOrganization.class), + @JsonSubTypes.Type(AffiliationRole.class), + @JsonSubTypes.Type(AffiliationUnit.class), + @JsonSubTypes.Type(BirthCity.class), + @JsonSubTypes.Type(BirthCountry.class), + @JsonSubTypes.Type(BirthDate.class), + @JsonSubTypes.Type(BirthDay.class), + @JsonSubTypes.Type(BirthMonth.class), + @JsonSubTypes.Type(BirthName.class), + @JsonSubTypes.Type(BirthPlace.class), + @JsonSubTypes.Type(BirthState.class), + @JsonSubTypes.Type(BirthYear.class), + @JsonSubTypes.Type(Citizenship.class), + @JsonSubTypes.Type(City.class), + @JsonSubTypes.Type(CommunicationLanguage.class), + @JsonSubTypes.Type(Country.class), + @JsonSubTypes.Type(DeliveryBoxAddress.class), + @JsonSubTypes.Type(DisplayName.class), + @JsonSubTypes.Type(EMailAddress.class), + @JsonSubTypes.Type(FaxNumber.class), + @JsonSubTypes.Type(GivenName.class), + @JsonSubTypes.Type(HonoricPrefix.class), + @JsonSubTypes.Type(HonoricSuffix.class), + @JsonSubTypes.Type(HouseNumber.class), + @JsonSubTypes.Type(IdentityFileReference.class), + @JsonSubTypes.Type(JobTitle.class), + @JsonSubTypes.Type(MiddleName.class), + @JsonSubTypes.Type(Nationality.class), + @JsonSubTypes.Type(PersonName.class), + @JsonSubTypes.Type(PhoneNumber.class), + @JsonSubTypes.Type(PostOfficeBoxAddress.class), + @JsonSubTypes.Type(ProprietaryBoolean.class), + @JsonSubTypes.Type(Pseudonym.class), + @JsonSubTypes.Type(SchematizedXML.class), + @JsonSubTypes.Type(Sex.class), + @JsonSubTypes.Type(State.class), + @JsonSubTypes.Type(Street.class), + @JsonSubTypes.Type(StreetAddress.class), + @JsonSubTypes.Type(Surname.class), + @JsonSubTypes.Type(Website.class), + @JsonSubTypes.Type(ZipCode.class), }) @NoArgsConstructor @Getter @Setter @SuperBuilder -public abstract class AttributeValue { - -} +public abstract class AttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java b/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java index d32e297..547c242 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/RelationshipAttributeValue.java @@ -9,6 +9,4 @@ @Getter @Setter @SuperBuilder -public abstract class RelationshipAttributeValue extends AttributeValue { - -} +public abstract class RelationshipAttributeValue extends AttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java index 17485de..447253f 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationOrganization.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class AffiliationOrganization extends SimpleStringAttributeValue { - -} +public class AffiliationOrganization extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java index eaa7072..a90d643 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationRole.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class AffiliationRole extends SimpleStringAttributeValue { - -} +public class AffiliationRole extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java index 3656d80..313954a 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/AffiliationUnit.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class AffiliationUnit extends SimpleStringAttributeValue { - -} +public class AffiliationUnit extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java index 2fd6d4c..e81411c 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCity.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthCity extends SimpleStringAttributeValue { - -} +public class BirthCity extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java index 442bd5c..25562e5 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthCountry.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthCountry extends SimpleStringAttributeValue { - -} +public class BirthCountry extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java index f24c533..6407cde 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthDay.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthDay extends SimpleNumberAttributeValue { - -} +public class BirthDay extends SimpleNumberAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java index eab1ae9..180310a 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthMonth.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthMonth extends SimpleNumberAttributeValue { - -} +public class BirthMonth extends SimpleNumberAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java index 321c4d4..31f2173 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthName.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthName extends SimpleStringAttributeValue { - -} +public class BirthName extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java index f1fc217..6835b96 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthState.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthState extends SimpleStringAttributeValue { - -} +public class BirthState extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java index c719d66..7b3b3c7 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/BirthYear.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class BirthYear extends SimpleNumberAttributeValue { - -} +public class BirthYear extends SimpleNumberAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java index a099e58..7b775ed 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Citizenship.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Citizenship extends SimpleStringAttributeValue { - -} +public class Citizenship extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java index 0586d76..cc95d4a 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/City.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class City extends SimpleStringAttributeValue { - -} +public class City extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java index 2ef775e..256786d 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/CommunicationLanguage.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class CommunicationLanguage extends SimpleStringAttributeValue { - -} +public class CommunicationLanguage extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java index fc92b64..d6ea64c 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Country.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Country extends SimpleStringAttributeValue { - -} +public class Country extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java index 92877c3..7aa96d8 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/DisplayName.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class DisplayName extends SimpleStringAttributeValue { - -} +public class DisplayName extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java index 792d56f..6f2cc10 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/EMailAddress.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class EMailAddress extends SimpleStringAttributeValue { - -} +public class EMailAddress extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java index 62ae907..66bf280 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/FaxNumber.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class FaxNumber extends SimpleStringAttributeValue { - -} +public class FaxNumber extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java index 5d7cf47..bbf6b1e 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/GivenName.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class GivenName extends SimpleStringAttributeValue { - -} +public class GivenName extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java index 3aae896..068f2b2 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricPrefix.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class HonoricPrefix extends SimpleStringAttributeValue { - -} +public class HonoricPrefix extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java index 6bcfc6e..31fc56c 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/HonoricSuffix.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class HonoricSuffix extends SimpleStringAttributeValue { - -} +public class HonoricSuffix extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java index 808c330..8fe58c9 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/HouseNumber.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class HouseNumber extends SimpleStringAttributeValue { - -} +public class HouseNumber extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java index ee6cf27..23a28b8 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/IdentityFileReference.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class IdentityFileReference extends SimpleStringAttributeValue { - -} +public class IdentityFileReference extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java index c10eb92..08d9aee 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/JobTitle.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class JobTitle extends SimpleStringAttributeValue { - -} +public class JobTitle extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java index dceb06e..60a4410 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/MiddleName.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class MiddleName extends SimpleStringAttributeValue { - -} +public class MiddleName extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java index d13579d..230b816 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Nationality.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Nationality extends SimpleStringAttributeValue { - -} +public class Nationality extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java index 24b7c6a..22d0381 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/PhoneNumber.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class PhoneNumber extends SimpleStringAttributeValue { - -} +public class PhoneNumber extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java index ef0456d..0ed3844 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Pseudonym.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Pseudonym extends SimpleStringAttributeValue { - -} +public class Pseudonym extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java index 29a0da5..f83fa91 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Sex.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Sex extends SimpleStringAttributeValue { - -} +public class Sex extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java index 955282b..e7621d0 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/State.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class State extends SimpleStringAttributeValue { - -} +public class State extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java index b12ff06..390ae3b 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Street.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Street extends SimpleStringAttributeValue { - -} +public class Street extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java index 9420333..dc0c0be 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Surname.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Surname extends SimpleStringAttributeValue { - -} +public class Surname extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java index 78d4d39..1581276 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/Website.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class Website extends SimpleStringAttributeValue { - -} +public class Website extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java b/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java index bb0e9e4..595eeaf 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/identity/ZipCode.java @@ -10,6 +10,4 @@ @Getter @Setter @SuperBuilder -public class ZipCode extends SimpleStringAttributeValue { - -} +public class ZipCode extends SimpleStringAttributeValue {} diff --git a/src/main/java/eu/enmeshed/model/event/Webhook.java b/src/main/java/eu/enmeshed/model/event/Webhook.java index f5b2fac..d12a656 100644 --- a/src/main/java/eu/enmeshed/model/event/Webhook.java +++ b/src/main/java/eu/enmeshed/model/event/Webhook.java @@ -21,48 +21,48 @@ public class Webhook { include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "trigger") @JsonSubTypes({ - @JsonSubTypes.Type( - value = ConnectorRequest.class, - names = { - WebhookTriggerNames.Consumption.INCOMING_REQUEST_RECEIVED, - WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED, - WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED_AND_COMPLETED, - WebhookTriggerNames.Consumption - .OUTGOING_REQUEST_FROM_RELATIONSHIP_CREATION_CREATED_AND_COMPLETED - }), - @JsonSubTypes.Type( - value = ConnectorAttribute.class, - names = { - WebhookTriggerNames.Consumption.ATTRIBUTE_CREATED, - WebhookTriggerNames.Consumption.ATTRIBUTE_DELETED, - WebhookTriggerNames.Consumption.ATTRIBUTE_SUCCEEDED, - WebhookTriggerNames.Consumption.ATTRIBUTE_UPDATED, - WebhookTriggerNames.Consumption.SHARED_ATTRIBUTE_COPY_CREATED - }), - @JsonSubTypes.Type( - value = RequestStatusChangedEventData.class, - names = { - WebhookTriggerNames.Consumption.INCOMING_REQUEST_STATUS_CHANGED, - WebhookTriggerNames.Consumption.OUTGOING_REQUEST_STATUS_CHANGED - }), - @JsonSubTypes.Type( - value = MessageProcessedEventData.class, - names = WebhookTriggerNames.Consumption.MESSAGE_PROCESSED), - @JsonSubTypes.Type( - value = RelationshipTemplateProcessedEventData.class, - names = WebhookTriggerNames.Consumption.RELATIONSHIP_TEMPLATE_PROCESSED), - @JsonSubTypes.Type( - value = Message.class, - names = { - WebhookTriggerNames.Transport.MESSAGE_RECEIVED, - WebhookTriggerNames.Transport.MESSAGE_SENT - }), - @JsonSubTypes.Type( - value = RelationshipTemplate.class, - names = WebhookTriggerNames.Transport.PEER_RELATIONSHIP_TEMPLATE_LOADED), - @JsonSubTypes.Type( - value = Relationship.class, - names = WebhookTriggerNames.Transport.RELATIONSHIP_CHANGED) + @JsonSubTypes.Type( + value = ConnectorRequest.class, + names = { + WebhookTriggerNames.Consumption.INCOMING_REQUEST_RECEIVED, + WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED, + WebhookTriggerNames.Consumption.OUTGOING_REQUEST_CREATED_AND_COMPLETED, + WebhookTriggerNames.Consumption + .OUTGOING_REQUEST_FROM_RELATIONSHIP_CREATION_CREATED_AND_COMPLETED + }), + @JsonSubTypes.Type( + value = ConnectorAttribute.class, + names = { + WebhookTriggerNames.Consumption.ATTRIBUTE_CREATED, + WebhookTriggerNames.Consumption.ATTRIBUTE_DELETED, + WebhookTriggerNames.Consumption.ATTRIBUTE_SUCCEEDED, + WebhookTriggerNames.Consumption.ATTRIBUTE_UPDATED, + WebhookTriggerNames.Consumption.SHARED_ATTRIBUTE_COPY_CREATED + }), + @JsonSubTypes.Type( + value = RequestStatusChangedEventData.class, + names = { + WebhookTriggerNames.Consumption.INCOMING_REQUEST_STATUS_CHANGED, + WebhookTriggerNames.Consumption.OUTGOING_REQUEST_STATUS_CHANGED + }), + @JsonSubTypes.Type( + value = MessageProcessedEventData.class, + names = WebhookTriggerNames.Consumption.MESSAGE_PROCESSED), + @JsonSubTypes.Type( + value = RelationshipTemplateProcessedEventData.class, + names = WebhookTriggerNames.Consumption.RELATIONSHIP_TEMPLATE_PROCESSED), + @JsonSubTypes.Type( + value = Message.class, + names = { + WebhookTriggerNames.Transport.MESSAGE_RECEIVED, + WebhookTriggerNames.Transport.MESSAGE_SENT + }), + @JsonSubTypes.Type( + value = RelationshipTemplate.class, + names = WebhookTriggerNames.Transport.PEER_RELATIONSHIP_TEMPLATE_LOADED), + @JsonSubTypes.Type( + value = Relationship.class, + names = WebhookTriggerNames.Transport.RELATIONSHIP_CHANGED) }) private T data; diff --git a/src/main/java/eu/enmeshed/model/event/WebhookData.java b/src/main/java/eu/enmeshed/model/event/WebhookData.java index 92072d3..9910967 100644 --- a/src/main/java/eu/enmeshed/model/event/WebhookData.java +++ b/src/main/java/eu/enmeshed/model/event/WebhookData.java @@ -1,8 +1,4 @@ package eu.enmeshed.model.event; -/** - * Interface helping to identify possible classes for Webhook Payload. - */ -public interface WebhookData { - -} +/** Interface helping to identify possible classes for Webhook Payload. */ +public interface WebhookData {} diff --git a/src/main/java/eu/enmeshed/model/messages/MessageContent.java b/src/main/java/eu/enmeshed/model/messages/MessageContent.java index 826f977..a4a694e 100644 --- a/src/main/java/eu/enmeshed/model/messages/MessageContent.java +++ b/src/main/java/eu/enmeshed/model/messages/MessageContent.java @@ -12,15 +12,13 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(Mail.class), - @JsonSubTypes.Type(Request.class), - @JsonSubTypes.Type(ResponseWrapper.class), - @JsonSubTypes.Type(Notification.class) + @JsonSubTypes.Type(Mail.class), + @JsonSubTypes.Type(Request.class), + @JsonSubTypes.Type(ResponseWrapper.class), + @JsonSubTypes.Type(Notification.class) }) @NoArgsConstructor @Getter @Setter @SuperBuilder -public abstract class MessageContent { - -} +public abstract class MessageContent {} diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java index d9045ae..0d86597 100644 --- a/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorRequestCount.java @@ -17,4 +17,4 @@ public class ConnectorRequestCount { private String since; private int requestCount; private Map requestCountByStatus; -} \ No newline at end of file +} diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java index 3160064..1957768 100644 --- a/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorSupportInformation.java @@ -1,6 +1,6 @@ package eu.enmeshed.model.monitoring; -import eu.enmeshed.model.IdentityInfo; +import eu.enmeshed.model.account.ConnectorIdentityInfo; import java.util.Map; import lombok.AllArgsConstructor; import lombok.Builder; @@ -18,5 +18,5 @@ public class ConnectorSupportInformation { private ConnectorVersionInfo version; private ConnectorHealth health; private Map configuration; - private IdentityInfo identityInfo; -} \ No newline at end of file + private ConnectorIdentityInfo identityInfo; +} diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java index 48e6ec7..b54ecd6 100644 --- a/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorVersionInfo.java @@ -18,4 +18,4 @@ public class ConnectorVersionInfo { private String date; private String commit; private String runtimeVersion; -} \ No newline at end of file +} diff --git a/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java b/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java index f8f2729..39f1044 100644 --- a/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java +++ b/src/main/java/eu/enmeshed/model/notification/notificationItems/NotificationItem.java @@ -13,6 +13,4 @@ @Getter @Setter @SuperBuilder -public abstract class NotificationItem { - -} +public abstract class NotificationItem {} diff --git a/src/main/java/eu/enmeshed/model/relationships/Relationship.java b/src/main/java/eu/enmeshed/model/relationships/Relationship.java index 6c3c63a..806d2a8 100644 --- a/src/main/java/eu/enmeshed/model/relationships/Relationship.java +++ b/src/main/java/eu/enmeshed/model/relationships/Relationship.java @@ -1,7 +1,7 @@ package eu.enmeshed.model.relationships; import com.fasterxml.jackson.annotation.JsonProperty; -import eu.enmeshed.model.IdentityInfo; +import eu.enmeshed.model.account.ConnectorIdentityInfo; import eu.enmeshed.model.event.WebhookData; import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; import java.util.List; @@ -23,7 +23,7 @@ public class Relationship implements WebhookData { private RelationshipTemplate template; private RelationshipStatus status; private String peer; - private IdentityInfo peerIdentity; + private ConnectorIdentityInfo peerIdentity; private RelationshipCreationContent creationContent; private List auditLog; private PeerDeletionInfo peerDeletionInfo; diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java index 77b84b3..4043b63 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/AuthenticationRequestItem.java @@ -9,6 +9,4 @@ @Getter @Setter @SuperBuilder -public class AuthenticationRequestItem extends RequestItemDerivation { - -} +public class AuthenticationRequestItem extends RequestItemDerivation {} diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java index 654fb0b..cb2b6bc 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItem.java @@ -15,8 +15,8 @@ @JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(RequestItemGroup.class), - @JsonSubTypes.Type(RequestItemDerivation.class), + @JsonSubTypes.Type(RequestItemGroup.class), + @JsonSubTypes.Type(RequestItemDerivation.class), }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java index 73885c6..536e4ee 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java @@ -16,13 +16,13 @@ @JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(ReadAttributeRequestItem.class), - @JsonSubTypes.Type(ShareAttributeRequestItem.class), - @JsonSubTypes.Type(AuthenticationRequestItem.class), - @JsonSubTypes.Type(ConsentRequestItem.class), - @JsonSubTypes.Type(CreateAttributeRequestItem.class), - @JsonSubTypes.Type(FreeTextRequestItem.class), - @JsonSubTypes.Type(ProposeAttributeRequestItem.class) + @JsonSubTypes.Type(ReadAttributeRequestItem.class), + @JsonSubTypes.Type(ShareAttributeRequestItem.class), + @JsonSubTypes.Type(AuthenticationRequestItem.class), + @JsonSubTypes.Type(ConsentRequestItem.class), + @JsonSubTypes.Type(CreateAttributeRequestItem.class), + @JsonSubTypes.Type(FreeTextRequestItem.class), + @JsonSubTypes.Type(ProposeAttributeRequestItem.class) }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java index 1dcd118..9bfd47a 100644 --- a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java +++ b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItem.java @@ -10,8 +10,8 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(ResponseItemGroup.class), - @JsonSubTypes.Type(ResponseItemDerivation.class), + @JsonSubTypes.Type(ResponseItemGroup.class), + @JsonSubTypes.Type(ResponseItemDerivation.class), }) @AllArgsConstructor @Getter diff --git a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java index f3f2504..7c0a294 100644 --- a/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java +++ b/src/main/java/eu/enmeshed/model/request/responseItems/ResponseItemDerivation.java @@ -10,20 +10,20 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - // Accept Items - @JsonSubTypes.Type(AcceptResponseItem.class), - @JsonSubTypes.Type(ReadAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(ShareAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(CreateAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(ProposeAttributeAcceptResponseItem.class), - @JsonSubTypes.Type(FreeTextAcceptResponseItem.class), - @JsonSubTypes.Type(AttributeAlreadySharedAcceptResponseItem.class), + // Accept Items + @JsonSubTypes.Type(AcceptResponseItem.class), + @JsonSubTypes.Type(ReadAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(ShareAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(CreateAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(ProposeAttributeAcceptResponseItem.class), + @JsonSubTypes.Type(FreeTextAcceptResponseItem.class), + @JsonSubTypes.Type(AttributeAlreadySharedAcceptResponseItem.class), - // Reject Items - @JsonSubTypes.Type(RejectResponseItem.class), + // Reject Items + @JsonSubTypes.Type(RejectResponseItem.class), - // Error Items - @JsonSubTypes.Type(ErrorResponseItem.class), + // Error Items + @JsonSubTypes.Type(ErrorResponseItem.class), }) @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/eu/enmeshed/requests/messages/SendMessageRequest.java b/src/main/java/eu/enmeshed/requests/messages/SendMessageRequest.java index b4c277b..7f7214e 100644 --- a/src/main/java/eu/enmeshed/requests/messages/SendMessageRequest.java +++ b/src/main/java/eu/enmeshed/requests/messages/SendMessageRequest.java @@ -11,4 +11,3 @@ public class SendMessageRequest { private List recipients; private List attachments; } - diff --git a/src/test/assets/file.txt b/src/test/assets/file.txt new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/src/test/assets/file.txt @@ -0,0 +1 @@ +test diff --git a/src/test/java/eu/enmeshed/FilesTest.java b/src/test/java/eu/enmeshed/FilesTest.java new file mode 100644 index 0000000..2d7ead0 --- /dev/null +++ b/src/test/java/eu/enmeshed/FilesTest.java @@ -0,0 +1,48 @@ +package eu.enmeshed; + +import static org.hamcrest.MatcherAssert.assertThat; + +import eu.enmeshed.model.file.FileUploadRequest; +import eu.enmeshed.utils.ConnectorContainer; +import java.io.File; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import org.hamcrest.CoreMatchers; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +@Testcontainers +public class FilesTest { + + @Container public ConnectorContainer connector1 = new ConnectorContainer(); + + @Container public ConnectorContainer connector2 = new ConnectorContainer(); + + private ConnectorClient client1; + private ConnectorClient client2; + + @BeforeEach + public void setUp() { + client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); + client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); + } + + @Test + public void testSimplePutAndGet() { + var expiresAt = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(ZonedDateTime.now().plusDays(1)); + + var file = + client1.files.uploadOwnFile( + FileUploadRequest.builder() + .file(new File("src/test/assets/file.txt")) + .title("a Title") + .expiresAt(expiresAt) + .build()); + + var fileId = file.getResult().getId(); + + assertThat(fileId, CoreMatchers.startsWith("FIL")); + } +} From 36d7951a4c4b06d4d92550b2ab571507860d9425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 13:46:50 +0200 Subject: [PATCH 07/58] feat: implement challenges --- .../java/eu/enmeshed/ConnectorClient.java | 41 ++++----- .../endpoints/ChallengesEndpoint.java | 25 ++++++ .../model/challenges/ConnectorChallenge.java | 22 +++++ .../ConnectorChallengeValidationResult.java | 21 +++++ .../challenges/CreateChallengeRequest.java | 27 ++++++ .../challenges/ValidateChallengeRequest.java | 18 ++++ src/test/java/eu/enmeshed/ChallengesTest.java | 87 +++++++++++++++++++ .../java/eu/enmeshed/utils/TestUtils.java | 78 +++++++++++++++++ 8 files changed, 299 insertions(+), 20 deletions(-) create mode 100644 src/main/java/eu/enmeshed/endpoints/ChallengesEndpoint.java create mode 100644 src/main/java/eu/enmeshed/model/challenges/ConnectorChallenge.java create mode 100644 src/main/java/eu/enmeshed/model/challenges/ConnectorChallengeValidationResult.java create mode 100644 src/main/java/eu/enmeshed/requests/challenges/CreateChallengeRequest.java create mode 100644 src/main/java/eu/enmeshed/requests/challenges/ValidateChallengeRequest.java create mode 100644 src/test/java/eu/enmeshed/ChallengesTest.java create mode 100644 src/test/java/eu/enmeshed/utils/TestUtils.java diff --git a/src/main/java/eu/enmeshed/ConnectorClient.java b/src/main/java/eu/enmeshed/ConnectorClient.java index fc92ba8..c72a5d5 100644 --- a/src/main/java/eu/enmeshed/ConnectorClient.java +++ b/src/main/java/eu/enmeshed/ConnectorClient.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import eu.enmeshed.endpoints.AccountEndpoint; import eu.enmeshed.endpoints.AttributesEndpoint; +import eu.enmeshed.endpoints.ChallengesEndpoint; import eu.enmeshed.endpoints.FilesEndpoint; import eu.enmeshed.endpoints.IncomingRequestsEndpoint; import eu.enmeshed.endpoints.MessagesEndpoint; @@ -20,18 +21,15 @@ import feign.jackson.JacksonDecoder; import feign.jackson.JacksonEncoder; +@SuppressWarnings("ClassCanBeRecord") public class ConnectorClient { - private static final ObjectMapper objectMapper = - new ObjectMapper() - .registerModule(new JavaTimeModule()) - .setSerializationInclusion(Include.NON_ABSENT) - .disable(SerializationFeature.INDENT_OUTPUT) - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .setDateFormat(new StdDateFormat().withColonInTimeZone(true)); + private static final ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()).setSerializationInclusion(Include.NON_ABSENT) + .disable(SerializationFeature.INDENT_OUTPUT).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).setDateFormat(new StdDateFormat().withColonInTimeZone(true)); public final AccountEndpoint account; public final AttributesEndpoint attributes; + public final ChallengesEndpoint challenges; public final FilesEndpoint files; public final MessagesEndpoint messages; public final RelationshipTemplatesEndpoint relationshipTemplates; @@ -42,14 +40,17 @@ public class ConnectorClient { public ConnectorClient( AccountEndpoint account, AttributesEndpoint attributes, + ChallengesEndpoint challenges, FilesEndpoint files, MessagesEndpoint messages, RelationshipTemplatesEndpoint relationshipTemplates, RelationshipsEndpoint relationships, IncomingRequestsEndpoint incomingRequests, - OutgoingRequestsEndpoint outgoingRequests) { + OutgoingRequestsEndpoint outgoingRequests + ) { this.account = account; this.attributes = attributes; + this.challenges = challenges; this.files = files; this.messages = messages; this.relationshipTemplates = relationshipTemplates; @@ -59,28 +60,28 @@ public ConnectorClient( } public static ConnectorClient create(String url, String apiKey) { - return create(url, apiKey, new Options(), Level.NONE); + return create(url, apiKey, new Options(), Level.FULL); } - public static ConnectorClient create( - String url, String apiKey, Options options, Level loggerLevel) { - var builder = - Feign.builder() - .decoder(new JacksonDecoder(objectMapper)) - .encoder(new FormEncoder(new JacksonEncoder(objectMapper))) - .requestInterceptor(request -> request.header("X-API-KEY", apiKey)) - .logLevel(loggerLevel) - .options(options) - .errorDecoder(new ConnectorErrorDecoder()); + public static ConnectorClient create(String url, String apiKey, Options options, Level loggerLevel) { + var builder = Feign.builder() + .decoder(new JacksonDecoder(objectMapper)) + .encoder(new FormEncoder(new JacksonEncoder(objectMapper))) + .requestInterceptor(request -> request.header("X-API-KEY", apiKey)) + .logLevel(loggerLevel) + .options(options) + .errorDecoder(new ConnectorErrorDecoder()); return new ConnectorClient( AccountEndpoint.configure(url, builder), AttributesEndpoint.configure(url, builder), + ChallengesEndpoint.configure(url, builder), FilesEndpoint.configure(url, builder), MessagesEndpoint.configure(url, builder), RelationshipTemplatesEndpoint.configure(url, builder), RelationshipsEndpoint.configure(url, builder), IncomingRequestsEndpoint.configure(url, builder), - OutgoingRequestsEndpoint.configure(url, builder)); + OutgoingRequestsEndpoint.configure(url, builder) + ); } } diff --git a/src/main/java/eu/enmeshed/endpoints/ChallengesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/ChallengesEndpoint.java new file mode 100644 index 0000000..8cb1d6e --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/ChallengesEndpoint.java @@ -0,0 +1,25 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.challenges.ConnectorChallenge; +import eu.enmeshed.model.challenges.ConnectorChallengeValidationResult; +import eu.enmeshed.requests.challenges.CreateChallengeRequest; +import eu.enmeshed.requests.challenges.ValidateChallengeRequest; +import feign.Feign.Builder; +import feign.Headers; +import feign.RequestLine; + +public interface ChallengesEndpoint { + + static ChallengesEndpoint configure(String url, Builder builder) { + return builder.target(ChallengesEndpoint.class, url); + } + + @RequestLine("POST /api/v2/Challenges") + @Headers({"Accept: application/json", "Content-Type: application/json"}) + ConnectorResponse createChallenge(CreateChallengeRequest request); + + @RequestLine("POST /api/v2/Challenges/Validate") + @Headers({"Accept: application/json", "Content-Type: application/json"}) + ConnectorResponse validateChallenge(ValidateChallengeRequest request); +} diff --git a/src/main/java/eu/enmeshed/model/challenges/ConnectorChallenge.java b/src/main/java/eu/enmeshed/model/challenges/ConnectorChallenge.java new file mode 100644 index 0000000..06bb0fd --- /dev/null +++ b/src/main/java/eu/enmeshed/model/challenges/ConnectorChallenge.java @@ -0,0 +1,22 @@ +package eu.enmeshed.model.challenges; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ConnectorChallenge { + private String id; + private String expiresAt; + private String createdBy; + private String createdByDevice; + private String type; + private String signature; + private String challengeString; +} diff --git a/src/main/java/eu/enmeshed/model/challenges/ConnectorChallengeValidationResult.java b/src/main/java/eu/enmeshed/model/challenges/ConnectorChallengeValidationResult.java new file mode 100644 index 0000000..37b23f2 --- /dev/null +++ b/src/main/java/eu/enmeshed/model/challenges/ConnectorChallengeValidationResult.java @@ -0,0 +1,21 @@ +package eu.enmeshed.model.challenges; + +import com.fasterxml.jackson.annotation.JsonProperty; +import eu.enmeshed.model.relationships.ConnectorRelationship; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ConnectorChallengeValidationResult { + + @JsonProperty("isValid") + private boolean valid; + private ConnectorRelationship correspondingRelationship; +} diff --git a/src/main/java/eu/enmeshed/requests/challenges/CreateChallengeRequest.java b/src/main/java/eu/enmeshed/requests/challenges/CreateChallengeRequest.java new file mode 100644 index 0000000..3f60947 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/challenges/CreateChallengeRequest.java @@ -0,0 +1,27 @@ +package eu.enmeshed.requests.challenges; + +import lombok.Getter; + +@Getter +public class CreateChallengeRequest { + + private final String challengeType; + private final String relationship; + + private CreateChallengeRequest(String challengeType, String relationship) { + this.challengeType = challengeType; + this.relationship = relationship; + } + + public static CreateChallengeRequest relationship(String relationship) { + return new CreateChallengeRequest("Relationship", relationship); + } + + public static CreateChallengeRequest identity() { + return new CreateChallengeRequest("Identity", null); + } + + public static CreateChallengeRequest device() { + return new CreateChallengeRequest("Device", null); + } +} diff --git a/src/main/java/eu/enmeshed/requests/challenges/ValidateChallengeRequest.java b/src/main/java/eu/enmeshed/requests/challenges/ValidateChallengeRequest.java new file mode 100644 index 0000000..2666fd6 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/challenges/ValidateChallengeRequest.java @@ -0,0 +1,18 @@ +package eu.enmeshed.requests.challenges; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ValidateChallengeRequest { + + private String challengeString; + private String signature; +} diff --git a/src/test/java/eu/enmeshed/ChallengesTest.java b/src/test/java/eu/enmeshed/ChallengesTest.java new file mode 100644 index 0000000..ff07d4b --- /dev/null +++ b/src/test/java/eu/enmeshed/ChallengesTest.java @@ -0,0 +1,87 @@ +package eu.enmeshed; + +import static org.hamcrest.MatcherAssert.assertThat; + +import eu.enmeshed.model.relationships.ConnectorRelationship; +import eu.enmeshed.requests.challenges.CreateChallengeRequest; +import eu.enmeshed.requests.challenges.ValidateChallengeRequest; +import eu.enmeshed.utils.ConnectorContainer; +import eu.enmeshed.utils.TestUtils; +import org.hamcrest.CoreMatchers; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; + +public class ChallengesTest { + + @Container + public static ConnectorContainer connector1 = new ConnectorContainer(); + + @Container + public static ConnectorContainer connector2 = new ConnectorContainer(); + + private static ConnectorClient client1; + private static ConnectorClient client2; + private static ConnectorRelationship relationship; + + @BeforeAll + public static void setUp() { + connector1.start(); + connector2.start(); + + client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); + client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); + + relationship = TestUtils.establishRelationship(client1, client2); + } + + @Test + public void createIdentityChallenge() { + var challenge = client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); + + assertThat(challenge.getId(), CoreMatchers.startsWith("CHL")); + assertThat(challenge.getType(), CoreMatchers.equalTo("Identity")); + } + + @Test + public void createDeviceChallenge() { + var challenge = client1.challenges.createChallenge(CreateChallengeRequest.device()).getResult(); + + assertThat(challenge.getId(), CoreMatchers.startsWith("CHL")); + assertThat(challenge.getType(), CoreMatchers.equalTo("Device")); + } + + @Test + public void createRelationshipChallenge() { + var challenge = client1.challenges.createChallenge(CreateChallengeRequest.relationship(relationship.getId())).getResult(); + + assertThat(challenge.getId(), CoreMatchers.startsWith("CHL")); + assertThat(challenge.getType(), CoreMatchers.equalTo("Relationship")); + } + + @Test + public void validateIdentityChallenge() { + var challenge = client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); + + var validationResult = client2.challenges.validateChallenge( + ValidateChallengeRequest.builder().challengeString(challenge.getChallengeString()).signature(challenge.getSignature()).build() + ).getResult(); + + assertThat(validationResult.isValid(), CoreMatchers.equalTo(true)); + assertThat(validationResult.getCorrespondingRelationship(), CoreMatchers.notNullValue()); + assertThat(validationResult.getCorrespondingRelationship().getPeer(), CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); + } + + @Test + public void validateRelationshipChallenge() { + var challenge = client1.challenges.createChallenge(CreateChallengeRequest.relationship(relationship.getId())).getResult(); + + var validationResult = client2.challenges.validateChallenge( + ValidateChallengeRequest.builder().challengeString(challenge.getChallengeString()).signature(challenge.getSignature()).build() + ).getResult(); + + assertThat(validationResult.isValid(), CoreMatchers.equalTo(true)); + assertThat(validationResult.getCorrespondingRelationship(), CoreMatchers.notNullValue()); + assertThat(validationResult.getCorrespondingRelationship().getPeer(), CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); + } +} diff --git a/src/test/java/eu/enmeshed/utils/TestUtils.java b/src/test/java/eu/enmeshed/utils/TestUtils.java new file mode 100644 index 0000000..3aa0094 --- /dev/null +++ b/src/test/java/eu/enmeshed/utils/TestUtils.java @@ -0,0 +1,78 @@ +package eu.enmeshed.utils; + +import eu.enmeshed.ConnectorClient; +import eu.enmeshed.model.relationshipTemplates.ArbitraryRelationshipTemplateContent; +import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; +import eu.enmeshed.model.relationships.ArbitraryRelationshipCreationContent; +import eu.enmeshed.model.relationships.ConnectorRelationship; +import eu.enmeshed.model.relationships.RelationshipStatus; +import eu.enmeshed.requests.relationshipTemplates.CreateRelationshipTemplateRequest; +import eu.enmeshed.requests.relationshipTemplates.LoadPeerRelationshipTemplateRequest; +import eu.enmeshed.requests.relationships.CreateRelationshipRequest; +import java.time.ZonedDateTime; + +public class TestUtils { + + public static ConnectorRelationship establishRelationship(ConnectorClient client1, ConnectorClient client2) { + var template = exchangeTemplate(client1, client2); + + var creationContent = ArbitraryRelationshipCreationContent.builder().value("value").build(); + var createRelationshipResponse = client2.relationships.createRelationship( + CreateRelationshipRequest.builder().creationContent(creationContent).templateId(template.getId()).build()); + + var relationship = syncUntilHasRelationshipInStatus(client1, createRelationshipResponse.getResult().getId(), RelationshipStatus.PENDING); + + var acceptResponse = client1.relationships.acceptRelationship(relationship.getId()); + + return syncUntilHasRelationshipInStatus(client2, acceptResponse.getResult().getId(), RelationshipStatus.ACTIVE); + } + + private static ConnectorRelationship syncUntilHasRelationshipInStatus(ConnectorClient client, String id, RelationshipStatus relationshipStatus) { + for (int i = 0; i < 10; i++) { + client.account.sync(); + + var relationship = getRelationshipSafeById(client, id); + if (relationship == null) { + continue; + } + + if (relationship.getStatus() == relationshipStatus) { + return relationship; + } + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + throw new RuntimeException("Relationship " + id + " did not reach status " + relationshipStatus); + } + + private static ConnectorRelationship getRelationshipSafeById(ConnectorClient client, String id) { + try { + return client.relationships.getRelationshipById(id).getResult(); + } catch (Exception e) { + return null; + } + } + + public static RelationshipTemplate exchangeTemplate(ConnectorClient client1, ConnectorClient client2) { + var template = createTemplate(client1); + + var response = client2.relationshipTemplates.loadPeerRelationshipTemplate(new LoadPeerRelationshipTemplateRequest(template.getTruncatedReference())); + return response.getResult(); + } + + public static RelationshipTemplate createTemplate(ConnectorClient client) { + var template = client.relationshipTemplates.createOwnRelationshipTemplate( + CreateRelationshipTemplateRequest.builder() + .content(ArbitraryRelationshipTemplateContent.builder().value("value").build()) + .expiresAt(ZonedDateTime.now().plusDays(1)) + .build() + ); + + return template.getResult(); + } +} From f37b5bab443afc39d5ad2eb8adcc8fcb09b5b67b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 13:46:58 +0200 Subject: [PATCH 08/58] chore: update tests --- src/test/java/eu/enmeshed/AccountTest.java | 11 ++++++----- src/test/java/eu/enmeshed/FilesTest.java | 18 ++++++++++-------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/test/java/eu/enmeshed/AccountTest.java b/src/test/java/eu/enmeshed/AccountTest.java index 919656a..43af3ed 100644 --- a/src/test/java/eu/enmeshed/AccountTest.java +++ b/src/test/java/eu/enmeshed/AccountTest.java @@ -5,7 +5,7 @@ import eu.enmeshed.utils.ConnectorContainer; import java.time.ZonedDateTime; import org.hamcrest.CoreMatchers; -import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -13,12 +13,13 @@ @Testcontainers public class AccountTest { - @Container public ConnectorContainer connector1 = new ConnectorContainer(); + @Container + public static ConnectorContainer connector1 = new ConnectorContainer(); - private ConnectorClient client1; + private static ConnectorClient client1; - @BeforeEach - public void setUp() { + @BeforeAll + public static void setUp() { client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); } diff --git a/src/test/java/eu/enmeshed/FilesTest.java b/src/test/java/eu/enmeshed/FilesTest.java index 2d7ead0..ef117ca 100644 --- a/src/test/java/eu/enmeshed/FilesTest.java +++ b/src/test/java/eu/enmeshed/FilesTest.java @@ -8,7 +8,7 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import org.hamcrest.CoreMatchers; -import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -16,21 +16,23 @@ @Testcontainers public class FilesTest { - @Container public ConnectorContainer connector1 = new ConnectorContainer(); + @Container + public static ConnectorContainer connector1 = new ConnectorContainer(); - @Container public ConnectorContainer connector2 = new ConnectorContainer(); + @Container + public static ConnectorContainer connector2 = new ConnectorContainer(); - private ConnectorClient client1; - private ConnectorClient client2; + private static ConnectorClient client1; + private static ConnectorClient client2; - @BeforeEach - public void setUp() { + @BeforeAll + public static void setUp() { client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); } @Test - public void testSimplePutAndGet() { + public void shouldUploadAFile() { var expiresAt = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(ZonedDateTime.now().plusDays(1)); var file = From ddffb4daef1fc529ec8275f0d555dc979c593a65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 13:47:30 +0200 Subject: [PATCH 09/58] refactor: update error decoder --- src/main/java/eu/enmeshed/ConnectorError.java | 17 ++++++++++- .../eu/enmeshed/ConnectorErrorDecoder.java | 28 ++++++++++++++----- .../eu/enmeshed/ConnectorErrorWrapper.java | 4 +++ 3 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 src/main/java/eu/enmeshed/ConnectorErrorWrapper.java diff --git a/src/main/java/eu/enmeshed/ConnectorError.java b/src/main/java/eu/enmeshed/ConnectorError.java index fe76b2a..a6eb629 100644 --- a/src/main/java/eu/enmeshed/ConnectorError.java +++ b/src/main/java/eu/enmeshed/ConnectorError.java @@ -1,5 +1,7 @@ package eu.enmeshed; +import java.util.Arrays; + public record ConnectorError( String id, String code, @@ -7,9 +9,22 @@ public record ConnectorError( String docs, String time, String details, - String[] stackTrace) { + String[] stacktrace) { Exception toException() { return new Exception(message); } + + @Override + public String toString() { + return "ConnectorError{" + + "id='" + id + '\'' + + ", code='" + code + '\'' + + ", message='" + message + '\'' + + ", docs='" + docs + '\'' + + ", time='" + time + '\'' + + ", details='" + details + '\'' + + ", stackTrace=" + Arrays.toString(stacktrace) + + '}'; + } } diff --git a/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java b/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java index 896f491..3a86f69 100644 --- a/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java +++ b/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java @@ -1,14 +1,19 @@ package eu.enmeshed; +import com.fasterxml.jackson.databind.ObjectMapper; import feign.Request; import feign.Response; import feign.RetryableException; import feign.codec.ErrorDecoder; +import java.io.IOException; +import java.io.InputStream; import lombok.extern.slf4j.Slf4j; @Slf4j public class ConnectorErrorDecoder implements ErrorDecoder { + private final ObjectMapper objectMapper = new ObjectMapper(); + @Override public Exception decode(String methodKey, Response response) { log.info("Response error with status {} and reason {}", response.status(), response.reason()); @@ -20,12 +25,21 @@ public Exception decode(String methodKey, Response response) { responseStatus, responseReason); - return new RetryableException( - responseStatus, - responseReason, - Request.HttpMethod.valueOf(response.request().httpMethod().name()), - null, - 1000L, - response.request()); + try (InputStream bodyIs = response.body().asInputStream()) { + ConnectorErrorWrapper wrapper = objectMapper.readValue(bodyIs, ConnectorErrorWrapper.class); + var error = wrapper.error(); + log.info(error.toString()); + + return error.toException(); + } catch (IOException e) { + log.error("Failed to parse error response body", e); + return new RetryableException( + responseStatus, + responseReason, + Request.HttpMethod.valueOf(response.request().httpMethod().name()), + e, + 1000L, + response.request()); + } } } diff --git a/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java b/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java new file mode 100644 index 0000000..5f93a3f --- /dev/null +++ b/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java @@ -0,0 +1,4 @@ +package eu.enmeshed; + +public record ConnectorErrorWrapper(ConnectorError error) { +} From 48b5c9f5adaa718d2cb5f593e55e151dc746561c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 13:51:36 +0200 Subject: [PATCH 10/58] refactor: update models --- .../eu/enmeshed/model/ConnectorAttribute.java | 25 ------------------- .../model/account/ConnectorSyncInfo.java | 1 - .../model/attributes/ConnectorAttribute.java | 9 +++---- .../attributes/RelationshipAttribute.java | 3 ++- .../proprietary/ProprietaryBoolean.java | 3 +++ .../ConnectorChallengeValidationResult.java | 1 + .../java/eu/enmeshed/model/event/Webhook.java | 4 +-- .../eu/enmeshed/model/file/ConnectorFile.java | 6 ++++- .../eu/enmeshed/model/messages/Message.java | 4 ++- .../model/monitoring/ConnectorHealth.java | 5 +++- .../ArbitraryRelationshipTemplateContent.java | 22 ++++++++++++++++ .../RelationshipTemplate.java | 6 +++-- .../RelationshipTemplateContent.java | 6 ++--- ...RelationshipTemplateContentDerivation.java | 12 +++++++++ .../ArbitraryRelationshipCreationContent.java | 22 ++++++++++++++++ ...onship.java => ConnectorRelationship.java} | 4 +-- .../RelationshipCreationContent.java | 2 +- ...RelationshipCreationContentDerivation.java | 12 +++++++++ .../model/request/ConnectorRequest.java | 5 +++- .../CreateAttributeRequestItem.java | 19 ++++---------- .../requestItems/RequestItemDerivation.java | 8 ++++-- .../ShareAttributeRequestItem.java | 11 +++----- .../enmeshed/model/tokens/ConnectorToken.java | 5 +++- 23 files changed, 124 insertions(+), 71 deletions(-) delete mode 100644 src/main/java/eu/enmeshed/model/ConnectorAttribute.java create mode 100644 src/main/java/eu/enmeshed/model/relationshipTemplates/ArbitraryRelationshipTemplateContent.java create mode 100644 src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateContentDerivation.java create mode 100644 src/main/java/eu/enmeshed/model/relationships/ArbitraryRelationshipCreationContent.java rename src/main/java/eu/enmeshed/model/relationships/{Relationship.java => ConnectorRelationship.java} (88%) create mode 100644 src/main/java/eu/enmeshed/model/relationships/RelationshipCreationContentDerivation.java diff --git a/src/main/java/eu/enmeshed/model/ConnectorAttribute.java b/src/main/java/eu/enmeshed/model/ConnectorAttribute.java deleted file mode 100644 index d29163e..0000000 --- a/src/main/java/eu/enmeshed/model/ConnectorAttribute.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.enmeshed.model; - -import eu.enmeshed.model.attributes.Attribute; -import eu.enmeshed.model.attributes.AttributeShareInfo; -import java.time.ZonedDateTime; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.SuperBuilder; - -@AllArgsConstructor -@NoArgsConstructor -@Getter -@Setter -@SuperBuilder -public class ConnectorAttribute extends ContentWrapper { - - private String id; - private ZonedDateTime createdAt; - private AttributeShareInfo shareInfo; - private String succeededBy; - private String succeeds; - private Boolean isDefault; -} diff --git a/src/main/java/eu/enmeshed/model/account/ConnectorSyncInfo.java b/src/main/java/eu/enmeshed/model/account/ConnectorSyncInfo.java index 95dedeb..b79d748 100644 --- a/src/main/java/eu/enmeshed/model/account/ConnectorSyncInfo.java +++ b/src/main/java/eu/enmeshed/model/account/ConnectorSyncInfo.java @@ -1,6 +1,5 @@ package eu.enmeshed.model.account; -import com.fasterxml.jackson.annotation.JsonProperty; import java.time.ZonedDateTime; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/main/java/eu/enmeshed/model/attributes/ConnectorAttribute.java b/src/main/java/eu/enmeshed/model/attributes/ConnectorAttribute.java index ac36acb..3790302 100644 --- a/src/main/java/eu/enmeshed/model/attributes/ConnectorAttribute.java +++ b/src/main/java/eu/enmeshed/model/attributes/ConnectorAttribute.java @@ -1,5 +1,6 @@ package eu.enmeshed.model.attributes; +import com.fasterxml.jackson.annotation.JsonProperty; import eu.enmeshed.model.ContentWrapper; import eu.enmeshed.model.event.WebhookData; import java.time.ZonedDateTime; @@ -15,14 +16,12 @@ public class ConnectorAttribute extends ContentWrapper implements WebhookData { private String id; - private String parentId; - private ZonedDateTime createdAt; - private String succeeds; - private String succeededBy; - private ConnectorAttributeShareInfo shareInfo; + + @JsonProperty("isDefault") + private boolean isDefault; } diff --git a/src/main/java/eu/enmeshed/model/attributes/RelationshipAttribute.java b/src/main/java/eu/enmeshed/model/attributes/RelationshipAttribute.java index 9334501..f4e3132 100644 --- a/src/main/java/eu/enmeshed/model/attributes/RelationshipAttribute.java +++ b/src/main/java/eu/enmeshed/model/attributes/RelationshipAttribute.java @@ -16,7 +16,8 @@ public class RelationshipAttribute extends Attribute { private Confidentiality confidentiality; - private Boolean isTechnical; + @JsonProperty("isTechnical") + private boolean technical; private String key; diff --git a/src/main/java/eu/enmeshed/model/attributes/values/proprietary/ProprietaryBoolean.java b/src/main/java/eu/enmeshed/model/attributes/values/proprietary/ProprietaryBoolean.java index f8c22a5..beed0b8 100644 --- a/src/main/java/eu/enmeshed/model/attributes/values/proprietary/ProprietaryBoolean.java +++ b/src/main/java/eu/enmeshed/model/attributes/values/proprietary/ProprietaryBoolean.java @@ -1,5 +1,6 @@ package eu.enmeshed.model.attributes.values.proprietary; +import com.fasterxml.jackson.annotation.JsonProperty; import eu.enmeshed.model.attributes.values.RelationshipAttributeValue; import lombok.Getter; import lombok.NoArgsConstructor; @@ -14,5 +15,7 @@ public class ProprietaryBoolean extends RelationshipAttributeValue { private String title; private String description; + + @JsonProperty("value") private boolean value; } diff --git a/src/main/java/eu/enmeshed/model/challenges/ConnectorChallengeValidationResult.java b/src/main/java/eu/enmeshed/model/challenges/ConnectorChallengeValidationResult.java index 37b23f2..d26cb51 100644 --- a/src/main/java/eu/enmeshed/model/challenges/ConnectorChallengeValidationResult.java +++ b/src/main/java/eu/enmeshed/model/challenges/ConnectorChallengeValidationResult.java @@ -17,5 +17,6 @@ public class ConnectorChallengeValidationResult { @JsonProperty("isValid") private boolean valid; + private ConnectorRelationship correspondingRelationship; } diff --git a/src/main/java/eu/enmeshed/model/event/Webhook.java b/src/main/java/eu/enmeshed/model/event/Webhook.java index d12a656..ca1760d 100644 --- a/src/main/java/eu/enmeshed/model/event/Webhook.java +++ b/src/main/java/eu/enmeshed/model/event/Webhook.java @@ -5,7 +5,7 @@ import eu.enmeshed.model.attributes.ConnectorAttribute; import eu.enmeshed.model.messages.Message; import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; -import eu.enmeshed.model.relationships.Relationship; +import eu.enmeshed.model.relationships.ConnectorRelationship; import eu.enmeshed.model.request.ConnectorRequest; import lombok.AllArgsConstructor; import lombok.Getter; @@ -61,7 +61,7 @@ public class Webhook { value = RelationshipTemplate.class, names = WebhookTriggerNames.Transport.PEER_RELATIONSHIP_TEMPLATE_LOADED), @JsonSubTypes.Type( - value = Relationship.class, + value = ConnectorRelationship.class, names = WebhookTriggerNames.Transport.RELATIONSHIP_CHANGED) }) private T data; diff --git a/src/main/java/eu/enmeshed/model/file/ConnectorFile.java b/src/main/java/eu/enmeshed/model/file/ConnectorFile.java index 9af0298..7e687c9 100644 --- a/src/main/java/eu/enmeshed/model/file/ConnectorFile.java +++ b/src/main/java/eu/enmeshed/model/file/ConnectorFile.java @@ -1,5 +1,6 @@ package eu.enmeshed.model.file; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -23,7 +24,10 @@ public class ConnectorFile { private String createdByDevice; private String expiresAt; private String mimetype; - private Boolean isOwn; + + @JsonProperty("isOwn") + private boolean own; + private String truncatedReference; private String secretKey; } diff --git a/src/main/java/eu/enmeshed/model/messages/Message.java b/src/main/java/eu/enmeshed/model/messages/Message.java index f68a0f9..3e2377f 100644 --- a/src/main/java/eu/enmeshed/model/messages/Message.java +++ b/src/main/java/eu/enmeshed/model/messages/Message.java @@ -1,5 +1,6 @@ package eu.enmeshed.model.messages; +import com.fasterxml.jackson.annotation.JsonProperty; import eu.enmeshed.model.ContentWrapper; import eu.enmeshed.model.event.WebhookData; import java.time.ZonedDateTime; @@ -27,5 +28,6 @@ public class Message extends ContentWrapper implements WebhookDa private List attachments; - private Boolean isOwn; + @JsonProperty("isOwn") + private boolean own; } diff --git a/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java b/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java index 76ed8af..c59c438 100644 --- a/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java +++ b/src/main/java/eu/enmeshed/model/monitoring/ConnectorHealth.java @@ -1,5 +1,6 @@ package eu.enmeshed.model.monitoring; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Map; import lombok.AllArgsConstructor; import lombok.Builder; @@ -14,6 +15,8 @@ @Builder public class ConnectorHealth { - private Boolean isHealthy; + @JsonProperty("isHealthy") + private boolean healthy; + private Map services; } diff --git a/src/main/java/eu/enmeshed/model/relationshipTemplates/ArbitraryRelationshipTemplateContent.java b/src/main/java/eu/enmeshed/model/relationshipTemplates/ArbitraryRelationshipTemplateContent.java new file mode 100644 index 0000000..3758d42 --- /dev/null +++ b/src/main/java/eu/enmeshed/model/relationshipTemplates/ArbitraryRelationshipTemplateContent.java @@ -0,0 +1,22 @@ +package eu.enmeshed.model.relationshipTemplates; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public final class ArbitraryRelationshipTemplateContent + extends RelationshipTemplateContentDerivation { + + @JsonProperty("@type") + private final String type = ArbitraryRelationshipTemplateContent.class.getSimpleName(); + + private Object value; +} diff --git a/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplate.java b/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplate.java index 69d85b7..eca9491 100644 --- a/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplate.java +++ b/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplate.java @@ -1,5 +1,6 @@ package eu.enmeshed.model.relationshipTemplates; +import com.fasterxml.jackson.annotation.JsonProperty; import eu.enmeshed.model.ContentWrapper; import eu.enmeshed.model.event.WebhookData; import java.time.ZonedDateTime; @@ -14,14 +15,15 @@ @Getter @Setter @SuperBuilder -public class RelationshipTemplate extends ContentWrapper +public class RelationshipTemplate extends ContentWrapper implements WebhookData { private String id; private Integer maxNumberOfAllocations; - private Boolean isOwn; + @JsonProperty("isOwn") + private boolean own; private String createdBy; diff --git a/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateContent.java b/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateContent.java index 4d6e267..8663617 100644 --- a/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateContent.java +++ b/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateContent.java @@ -4,17 +4,17 @@ import eu.enmeshed.model.request.Request; import java.util.Map; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import lombok.experimental.SuperBuilder; @AllArgsConstructor @NoArgsConstructor @Getter @Setter -@SuperBuilder -public class RelationshipTemplateContent { +@Builder +public final class RelationshipTemplateContent extends RelationshipTemplateContentDerivation { @JsonProperty("@type") private final String type = RelationshipTemplateContent.class.getSimpleName(); diff --git a/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateContentDerivation.java b/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateContentDerivation.java new file mode 100644 index 0000000..d02499a --- /dev/null +++ b/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateContentDerivation.java @@ -0,0 +1,12 @@ +package eu.enmeshed.model.relationshipTemplates; + +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") +@JsonSubTypes({ + @JsonSubTypes.Type(ArbitraryRelationshipTemplateContent.class), + @JsonSubTypes.Type(RelationshipTemplateContent.class), +}) +public sealed class RelationshipTemplateContentDerivation + permits RelationshipTemplateContent, ArbitraryRelationshipTemplateContent {} diff --git a/src/main/java/eu/enmeshed/model/relationships/ArbitraryRelationshipCreationContent.java b/src/main/java/eu/enmeshed/model/relationships/ArbitraryRelationshipCreationContent.java new file mode 100644 index 0000000..579e4ce --- /dev/null +++ b/src/main/java/eu/enmeshed/model/relationships/ArbitraryRelationshipCreationContent.java @@ -0,0 +1,22 @@ +package eu.enmeshed.model.relationships; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public final class ArbitraryRelationshipCreationContent + extends RelationshipCreationContentDerivation { + + @JsonProperty("@type") + private final String type = ArbitraryRelationshipCreationContent.class.getSimpleName(); + + private Object value; +} diff --git a/src/main/java/eu/enmeshed/model/relationships/Relationship.java b/src/main/java/eu/enmeshed/model/relationships/ConnectorRelationship.java similarity index 88% rename from src/main/java/eu/enmeshed/model/relationships/Relationship.java rename to src/main/java/eu/enmeshed/model/relationships/ConnectorRelationship.java index 806d2a8..7d9cc59 100644 --- a/src/main/java/eu/enmeshed/model/relationships/Relationship.java +++ b/src/main/java/eu/enmeshed/model/relationships/ConnectorRelationship.java @@ -17,14 +17,14 @@ @Getter @Setter @Builder -public class Relationship implements WebhookData { +public class ConnectorRelationship implements WebhookData { private String id; private RelationshipTemplate template; private RelationshipStatus status; private String peer; private ConnectorIdentityInfo peerIdentity; - private RelationshipCreationContent creationContent; + private RelationshipCreationContentDerivation creationContent; private List auditLog; private PeerDeletionInfo peerDeletionInfo; diff --git a/src/main/java/eu/enmeshed/model/relationships/RelationshipCreationContent.java b/src/main/java/eu/enmeshed/model/relationships/RelationshipCreationContent.java index 754ae59..90fb0bc 100644 --- a/src/main/java/eu/enmeshed/model/relationships/RelationshipCreationContent.java +++ b/src/main/java/eu/enmeshed/model/relationships/RelationshipCreationContent.java @@ -16,7 +16,7 @@ @Setter @Builder @JsonTypeInfo(use = NAME, property = "@type") -public class RelationshipCreationContent { +public final class RelationshipCreationContent extends RelationshipCreationContentDerivation { private Response response; } diff --git a/src/main/java/eu/enmeshed/model/relationships/RelationshipCreationContentDerivation.java b/src/main/java/eu/enmeshed/model/relationships/RelationshipCreationContentDerivation.java new file mode 100644 index 0000000..d56d49e --- /dev/null +++ b/src/main/java/eu/enmeshed/model/relationships/RelationshipCreationContentDerivation.java @@ -0,0 +1,12 @@ +package eu.enmeshed.model.relationships; + +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") +@JsonSubTypes({ + @JsonSubTypes.Type(ArbitraryRelationshipCreationContent.class), + @JsonSubTypes.Type(RelationshipCreationContent.class), +}) +public sealed class RelationshipCreationContentDerivation + permits RelationshipCreationContent, ArbitraryRelationshipCreationContent {} diff --git a/src/main/java/eu/enmeshed/model/request/ConnectorRequest.java b/src/main/java/eu/enmeshed/model/request/ConnectorRequest.java index 0c54c7c..4c7fd2e 100644 --- a/src/main/java/eu/enmeshed/model/request/ConnectorRequest.java +++ b/src/main/java/eu/enmeshed/model/request/ConnectorRequest.java @@ -16,7 +16,10 @@ public class ConnectorRequest extends ContentWrapper implements WebhookData { private String id; - private Boolean isOwn; + + @JsonProperty("isOwn") + private boolean own; + private String peer; private ZonedDateTime createdAt; private Status status; diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java index 09c7655..647a778 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java @@ -1,7 +1,7 @@ package eu.enmeshed.model.request.requestItems; -import eu.enmeshed.model.ConnectorAttribute; import eu.enmeshed.model.attributes.Attribute; +import eu.enmeshed.model.attributes.ConnectorAttribute; import eu.enmeshed.model.attributes.RelationshipAttribute; import eu.enmeshed.model.attributes.values.proprietary.ProprietaryBoolean; import lombok.AllArgsConstructor; @@ -19,22 +19,13 @@ public class CreateAttributeRequestItem extends RequestItemDerivation { private Attribute attribute; - public static CreateAttributeRequestItem fromWrapper( - ConnectorAttribute wrapper, boolean mustBeAccepted) { - return CreateAttributeRequestItem.builder() - .attribute(relationshipAttribute(wrapper)) - .mustBeAccepted(mustBeAccepted) - .build(); + public static CreateAttributeRequestItem fromWrapper(ConnectorAttribute wrapper, boolean mustBeAccepted) { + return CreateAttributeRequestItem.builder().attribute(relationshipAttribute(wrapper)).mustBeAccepted(mustBeAccepted).build(); } private static RelationshipAttribute relationshipAttribute(ConnectorAttribute wrapper) { - return RelationshipAttribute.builder() - .type(RelationshipAttribute.class.getSimpleName()) - .owner(wrapper.getContent().getOwner()) - .key("AllowCertificateRequest") - .confidentiality(RelationshipAttribute.Confidentiality.PRIVATE) - .isTechnical(true) - .value(ProprietaryBoolean.builder().title("Zeugnisanfragen erlauben").value(true).build()) + return RelationshipAttribute.builder().type(RelationshipAttribute.class.getSimpleName()).owner(wrapper.getContent().getOwner()).key("AllowCertificateRequest") + .confidentiality(RelationshipAttribute.Confidentiality.PRIVATE).technical(true).value(ProprietaryBoolean.builder().title("Zeugnisanfragen erlauben").value(true).build()) .build(); } } diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java index 536e4ee..194ca32 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/RequestItemDerivation.java @@ -1,6 +1,7 @@ package eu.enmeshed.model.request.requestItems; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import lombok.AllArgsConstructor; @@ -31,6 +32,9 @@ @SuperBuilder public class RequestItemDerivation extends RequestItem { - private Boolean requireManualDecision; - private Boolean mustBeAccepted; + @JsonProperty("requireManualDecision") + private boolean requireManualDecision; + + @JsonProperty("mustBeAccepted") + private boolean mustBeAccepted; } diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java index da90a61..8a30a8b 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java @@ -1,7 +1,7 @@ package eu.enmeshed.model.request.requestItems; -import eu.enmeshed.model.ConnectorAttribute; import eu.enmeshed.model.attributes.Attribute; +import eu.enmeshed.model.attributes.ConnectorAttribute; import eu.enmeshed.model.attributes.IdentityAttribute; import lombok.AllArgsConstructor; import lombok.Getter; @@ -19,15 +19,10 @@ public class ShareAttributeRequestItem extends RequestItemDerivation { private Attribute attribute; private String sourceAttributeId; - public static ShareAttributeRequestItem fromWrapper( - ConnectorAttribute wrapper, boolean mustBeAccepted) { + public static ShareAttributeRequestItem fromWrapper(ConnectorAttribute wrapper, boolean mustBeAccepted) { Attribute content = wrapper.getContent(); content.setType(IdentityAttribute.class.getSimpleName()); - return ShareAttributeRequestItem.builder() - .mustBeAccepted(mustBeAccepted) - .attribute(content) - .sourceAttributeId(wrapper.getId()) - .build(); + return ShareAttributeRequestItem.builder().mustBeAccepted(mustBeAccepted).attribute(content).sourceAttributeId(wrapper.getId()).build(); } } diff --git a/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java b/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java index 409534b..ceb9fb3 100644 --- a/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java +++ b/src/main/java/eu/enmeshed/model/tokens/ConnectorToken.java @@ -1,5 +1,6 @@ package eu.enmeshed.model.tokens; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -21,5 +22,7 @@ public class ConnectorToken { private String expiresAt; private String secretKey; private String truncatedReference; - private boolean isEphemeral; + + @JsonProperty("isEphemeral") + private boolean ephemeral; } From 482adf459c416bae3c1094e1fa46011133a97315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 13:51:46 +0200 Subject: [PATCH 11/58] refactor: add reuests --- .../eu/enmeshed/requests/files/GetFilesQuery.java | 5 ++++- .../CreateRelationshipTemplateRequest.java} | 8 ++++---- .../LoadPeerRelationshipTemplateRequest.java | 11 +++++++++++ .../relationships/CreateRelationshipRequest.java | 13 +++++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) rename src/main/java/eu/enmeshed/{model/relationshipTemplates/RelationshipTemplateCreation.java => requests/relationshipTemplates/CreateRelationshipTemplateRequest.java} (56%) create mode 100644 src/main/java/eu/enmeshed/requests/relationshipTemplates/LoadPeerRelationshipTemplateRequest.java create mode 100644 src/main/java/eu/enmeshed/requests/relationships/CreateRelationshipRequest.java diff --git a/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java b/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java index 5c1c9af..b4779c2 100644 --- a/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java +++ b/src/main/java/eu/enmeshed/requests/files/GetFilesQuery.java @@ -1,5 +1,6 @@ package eu.enmeshed.requests.files; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Builder; @Builder @@ -14,5 +15,7 @@ public class GetFilesQuery { private String filesize; private String mimetype; private String title; - private Boolean isOwn; + + @JsonProperty("isOwn") + private boolean own; } diff --git a/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateCreation.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateRelationshipTemplateRequest.java similarity index 56% rename from src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateCreation.java rename to src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateRelationshipTemplateRequest.java index 0cfed37..28e1352 100644 --- a/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplateCreation.java +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateRelationshipTemplateRequest.java @@ -1,6 +1,6 @@ -package eu.enmeshed.model.relationshipTemplates; +package eu.enmeshed.requests.relationshipTemplates; -import eu.enmeshed.model.ContentWrapper; +import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateContentDerivation; import java.time.ZonedDateTime; import lombok.AllArgsConstructor; import lombok.Getter; @@ -13,9 +13,9 @@ @Getter @Setter @SuperBuilder -public class RelationshipTemplateCreation extends ContentWrapper { +public class CreateRelationshipTemplateRequest { + private T content; private Integer maxNumberOfAllocations; - private ZonedDateTime expiresAt; } diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/LoadPeerRelationshipTemplateRequest.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/LoadPeerRelationshipTemplateRequest.java new file mode 100644 index 0000000..6a04554 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/LoadPeerRelationshipTemplateRequest.java @@ -0,0 +1,11 @@ +package eu.enmeshed.requests.relationshipTemplates; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public class LoadPeerRelationshipTemplateRequest { + + private String reference; +} diff --git a/src/main/java/eu/enmeshed/requests/relationships/CreateRelationshipRequest.java b/src/main/java/eu/enmeshed/requests/relationships/CreateRelationshipRequest.java new file mode 100644 index 0000000..b886fab --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/relationships/CreateRelationshipRequest.java @@ -0,0 +1,13 @@ +package eu.enmeshed.requests.relationships; + +import eu.enmeshed.model.relationships.RelationshipCreationContentDerivation; +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class CreateRelationshipRequest { + + private String templateId; + private RelationshipCreationContentDerivation creationContent; +} From cb44f02addc19121972e57d2cb694e9f741ce590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 13:52:31 +0200 Subject: [PATCH 12/58] chore: formatting --- .../endpoints/AttributesEndpoint.java | 11 ++++------- .../RelationshipTemplatesEndpoint.java | 19 ++++++++++++------- .../endpoints/RelationshipsEndpoint.java | 15 ++++++++++----- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java index f851b7b..a29090e 100644 --- a/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java @@ -1,9 +1,9 @@ package eu.enmeshed.endpoints; import eu.enmeshed.ConnectorResponse; -import eu.enmeshed.model.ConnectorAttribute; import eu.enmeshed.model.ContentWrapper; import eu.enmeshed.model.attributes.Attribute; +import eu.enmeshed.model.attributes.ConnectorAttribute; import eu.enmeshed.requests.attributes.SucceedAttributeRequest; import feign.Feign.Builder; import feign.Headers; @@ -19,17 +19,14 @@ static AttributesEndpoint configure(String url, Builder builder) { @RequestLine("POST /api/v2/Attributes") @Headers({"Content-Type: application/json"}) - ConnectorResponse createRepositoryAttribute( - ContentWrapper attribute); + ConnectorResponse createRepositoryAttribute(ContentWrapper attribute); @RequestLine("POST /api/v2/Attributes/{id}/Succeed") @Headers("Content-Type: application/json") - ConnectorResponse succeedAttribute( - @Param("id") String predecessorId, SucceedAttributeRequest request); + ConnectorResponse succeedAttribute(@Param("id") String predecessorId, SucceedAttributeRequest request); @RequestLine("GET /api/v2/Attributes?content.value.@type={type}") - ConnectorResponse> searchAttributes( - @Param("type") String contentValueType); + ConnectorResponse> searchAttributes(@Param("type") String contentValueType); @RequestLine("GET /api/v2/Attributes/{id}") @Headers("Content-Type: application/json") diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java index 0169085..2001a66 100644 --- a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java @@ -3,7 +3,9 @@ import eu.enmeshed.ConnectorResponse; import eu.enmeshed.model.qr.QrCode; import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; -import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateCreation; +import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateContentDerivation; +import eu.enmeshed.requests.relationshipTemplates.CreateRelationshipTemplateRequest; +import eu.enmeshed.requests.relationshipTemplates.LoadPeerRelationshipTemplateRequest; import feign.Feign.Builder; import feign.Headers; import feign.Param; @@ -17,15 +19,18 @@ static RelationshipTemplatesEndpoint configure(String url, Builder builder) { @RequestLine("POST /api/v2/RelationshipTemplates/Own") @Headers("Content-Type: application/json") - ConnectorResponse createOwnRelationshipTemplate( - RelationshipTemplateCreation relationshipTemplate); + ConnectorResponse createOwnRelationshipTemplate( + CreateRelationshipTemplateRequest relationshipTemplate); - @RequestLine("GET /api/v2/RelationshipTemplates/{0}") + @RequestLine("GET /api/v2/RelationshipTemplates/{relationshipTemplateId}") @Headers("Accept: image/png") - feign.Response getQrCodeForRelationshipTemplate(@Param("0") String relationshipTemplateId); + feign.Response getQrCodeForRelationshipTemplate(@Param("relationshipTemplateId") String relationshipTemplateId); @RequestLine("GET /api/v2/RelationshipTemplates/{relationshipTemplateId}") @Headers("Accept: application/json") - ConnectorResponse createRelationshipQrCode( - @Param("relationshipTemplateId") String relationshipTemplateId); + ConnectorResponse createRelationshipQrCode(@Param("relationshipTemplateId") String relationshipTemplateId); + + @RequestLine("POST /api/v2/RelationshipTemplates/Peer") + @Headers({"Accept: application/json", "Content-Type: application/json"}) + ConnectorResponse loadPeerRelationshipTemplate(LoadPeerRelationshipTemplateRequest request); } diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java index f900f02..026d5c9 100644 --- a/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java @@ -1,7 +1,8 @@ package eu.enmeshed.endpoints; import eu.enmeshed.ConnectorResponse; -import eu.enmeshed.model.relationships.Relationship; +import eu.enmeshed.model.relationships.ConnectorRelationship; +import eu.enmeshed.requests.relationships.CreateRelationshipRequest; import feign.Feign.Builder; import feign.Headers; import feign.Param; @@ -15,17 +16,21 @@ static RelationshipsEndpoint configure(String url, Builder builder) { } @RequestLine("GET /api/v2/Relationships?template.id={0}&peer={1}&status={2}") - ConnectorResponse> searchRelationships( + ConnectorResponse> searchRelationships( @Param("0") String templateId, @Param("1") String peer, @Param("2") String status); @RequestLine("GET /api/v2/Relationships/{id}") - ConnectorResponse getRelationshipById(@Param("id") String id); + ConnectorResponse getRelationshipById(@Param("id") String id); @RequestLine("PUT /api/v2/Relationships/{id}/Accept") @Headers("Content-Type: application/json") - ConnectorResponse acceptRelationship(@Param("id") String id); + ConnectorResponse acceptRelationship(@Param("id") String id); @RequestLine("PUT /api/v2/Relationships/{0}/Reject") @Headers("Content-Type: application/json") - ConnectorResponse rejectRelationship(@Param("id") String id); + ConnectorResponse rejectRelationship(@Param("id") String id); + + @RequestLine("POST /api/v2/Relationships") + @Headers({"Accept: application/json", "Content-Type: application/json"}) + ConnectorResponse createRelationship(CreateRelationshipRequest request); } From 3d03d2e272de68d90d3aefeba6b49a6011818cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 13:53:26 +0200 Subject: [PATCH 13/58] chore: formatting --- .../java/eu/enmeshed/ConnectorClient.java | 27 +++++++++++-------- src/main/java/eu/enmeshed/ConnectorError.java | 9 +------ .../eu/enmeshed/ConnectorErrorWrapper.java | 1 + 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/eu/enmeshed/ConnectorClient.java b/src/main/java/eu/enmeshed/ConnectorClient.java index c72a5d5..ae14875 100644 --- a/src/main/java/eu/enmeshed/ConnectorClient.java +++ b/src/main/java/eu/enmeshed/ConnectorClient.java @@ -24,8 +24,13 @@ @SuppressWarnings("ClassCanBeRecord") public class ConnectorClient { - private static final ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()).setSerializationInclusion(Include.NON_ABSENT) - .disable(SerializationFeature.INDENT_OUTPUT).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).setDateFormat(new StdDateFormat().withColonInTimeZone(true)); + private static final ObjectMapper objectMapper = + new ObjectMapper() + .registerModule(new JavaTimeModule()) + .setSerializationInclusion(Include.NON_ABSENT) + .disable(SerializationFeature.INDENT_OUTPUT) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .setDateFormat(new StdDateFormat().withColonInTimeZone(true)); public final AccountEndpoint account; public final AttributesEndpoint attributes; @@ -64,13 +69,14 @@ public static ConnectorClient create(String url, String apiKey) { } public static ConnectorClient create(String url, String apiKey, Options options, Level loggerLevel) { - var builder = Feign.builder() - .decoder(new JacksonDecoder(objectMapper)) - .encoder(new FormEncoder(new JacksonEncoder(objectMapper))) - .requestInterceptor(request -> request.header("X-API-KEY", apiKey)) - .logLevel(loggerLevel) - .options(options) - .errorDecoder(new ConnectorErrorDecoder()); + var builder = + Feign.builder() + .decoder(new JacksonDecoder(objectMapper)) + .encoder(new FormEncoder(new JacksonEncoder(objectMapper))) + .requestInterceptor(request -> request.header("X-API-KEY", apiKey)) + .logLevel(loggerLevel) + .options(options) + .errorDecoder(new ConnectorErrorDecoder()); return new ConnectorClient( AccountEndpoint.configure(url, builder), @@ -81,7 +87,6 @@ public static ConnectorClient create(String url, String apiKey, Options options, RelationshipTemplatesEndpoint.configure(url, builder), RelationshipsEndpoint.configure(url, builder), IncomingRequestsEndpoint.configure(url, builder), - OutgoingRequestsEndpoint.configure(url, builder) - ); + OutgoingRequestsEndpoint.configure(url, builder)); } } diff --git a/src/main/java/eu/enmeshed/ConnectorError.java b/src/main/java/eu/enmeshed/ConnectorError.java index a6eb629..cc55b81 100644 --- a/src/main/java/eu/enmeshed/ConnectorError.java +++ b/src/main/java/eu/enmeshed/ConnectorError.java @@ -2,14 +2,7 @@ import java.util.Arrays; -public record ConnectorError( - String id, - String code, - String message, - String docs, - String time, - String details, - String[] stacktrace) { +public record ConnectorError(String id, String code, String message, String docs, String time, String details, String[] stacktrace) { Exception toException() { return new Exception(message); diff --git a/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java b/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java index 5f93a3f..728aa01 100644 --- a/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java +++ b/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java @@ -1,4 +1,5 @@ package eu.enmeshed; public record ConnectorErrorWrapper(ConnectorError error) { + } From 9b2dd6c90dad5b8f4b256849c3df2f0d83549928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 13:53:54 +0200 Subject: [PATCH 14/58] chore: formatting --- src/test/java/eu/enmeshed/ChallengesTest.java | 60 +++++++++++++------ src/test/java/eu/enmeshed/FilesTest.java | 8 +-- .../java/eu/enmeshed/utils/TestUtils.java | 7 +-- 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/src/test/java/eu/enmeshed/ChallengesTest.java b/src/test/java/eu/enmeshed/ChallengesTest.java index ff07d4b..e683223 100644 --- a/src/test/java/eu/enmeshed/ChallengesTest.java +++ b/src/test/java/eu/enmeshed/ChallengesTest.java @@ -14,11 +14,9 @@ public class ChallengesTest { - @Container - public static ConnectorContainer connector1 = new ConnectorContainer(); + @Container public static ConnectorContainer connector1 = new ConnectorContainer(); - @Container - public static ConnectorContainer connector2 = new ConnectorContainer(); + @Container public static ConnectorContainer connector2 = new ConnectorContainer(); private static ConnectorClient client1; private static ConnectorClient client2; @@ -37,7 +35,8 @@ public static void setUp() { @Test public void createIdentityChallenge() { - var challenge = client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); + var challenge = + client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); assertThat(challenge.getId(), CoreMatchers.startsWith("CHL")); assertThat(challenge.getType(), CoreMatchers.equalTo("Identity")); @@ -53,7 +52,11 @@ public void createDeviceChallenge() { @Test public void createRelationshipChallenge() { - var challenge = client1.challenges.createChallenge(CreateChallengeRequest.relationship(relationship.getId())).getResult(); + var challenge = + client1 + .challenges + .createChallenge(CreateChallengeRequest.relationship(relationship.getId())) + .getResult(); assertThat(challenge.getId(), CoreMatchers.startsWith("CHL")); assertThat(challenge.getType(), CoreMatchers.equalTo("Relationship")); @@ -61,27 +64,48 @@ public void createRelationshipChallenge() { @Test public void validateIdentityChallenge() { - var challenge = client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); - - var validationResult = client2.challenges.validateChallenge( - ValidateChallengeRequest.builder().challengeString(challenge.getChallengeString()).signature(challenge.getSignature()).build() - ).getResult(); + var challenge = + client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); + + var validationResult = + client2 + .challenges + .validateChallenge( + ValidateChallengeRequest.builder() + .challengeString(challenge.getChallengeString()) + .signature(challenge.getSignature()) + .build()) + .getResult(); assertThat(validationResult.isValid(), CoreMatchers.equalTo(true)); assertThat(validationResult.getCorrespondingRelationship(), CoreMatchers.notNullValue()); - assertThat(validationResult.getCorrespondingRelationship().getPeer(), CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); + assertThat( + validationResult.getCorrespondingRelationship().getPeer(), + CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); } @Test public void validateRelationshipChallenge() { - var challenge = client1.challenges.createChallenge(CreateChallengeRequest.relationship(relationship.getId())).getResult(); - - var validationResult = client2.challenges.validateChallenge( - ValidateChallengeRequest.builder().challengeString(challenge.getChallengeString()).signature(challenge.getSignature()).build() - ).getResult(); + var challenge = + client1 + .challenges + .createChallenge(CreateChallengeRequest.relationship(relationship.getId())) + .getResult(); + + var validationResult = + client2 + .challenges + .validateChallenge( + ValidateChallengeRequest.builder() + .challengeString(challenge.getChallengeString()) + .signature(challenge.getSignature()) + .build()) + .getResult(); assertThat(validationResult.isValid(), CoreMatchers.equalTo(true)); assertThat(validationResult.getCorrespondingRelationship(), CoreMatchers.notNullValue()); - assertThat(validationResult.getCorrespondingRelationship().getPeer(), CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); + assertThat( + validationResult.getCorrespondingRelationship().getPeer(), + CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); } } diff --git a/src/test/java/eu/enmeshed/FilesTest.java b/src/test/java/eu/enmeshed/FilesTest.java index ef117ca..85323ec 100644 --- a/src/test/java/eu/enmeshed/FilesTest.java +++ b/src/test/java/eu/enmeshed/FilesTest.java @@ -35,13 +35,7 @@ public static void setUp() { public void shouldUploadAFile() { var expiresAt = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(ZonedDateTime.now().plusDays(1)); - var file = - client1.files.uploadOwnFile( - FileUploadRequest.builder() - .file(new File("src/test/assets/file.txt")) - .title("a Title") - .expiresAt(expiresAt) - .build()); + var file = client1.files.uploadOwnFile(FileUploadRequest.builder().file(new File("src/test/assets/file.txt")).title("a Title").expiresAt(expiresAt).build()); var fileId = file.getResult().getId(); diff --git a/src/test/java/eu/enmeshed/utils/TestUtils.java b/src/test/java/eu/enmeshed/utils/TestUtils.java index 3aa0094..700cda2 100644 --- a/src/test/java/eu/enmeshed/utils/TestUtils.java +++ b/src/test/java/eu/enmeshed/utils/TestUtils.java @@ -67,11 +67,8 @@ public static RelationshipTemplate exchangeTemplate(ConnectorClient client1, Con public static RelationshipTemplate createTemplate(ConnectorClient client) { var template = client.relationshipTemplates.createOwnRelationshipTemplate( - CreateRelationshipTemplateRequest.builder() - .content(ArbitraryRelationshipTemplateContent.builder().value("value").build()) - .expiresAt(ZonedDateTime.now().plusDays(1)) - .build() - ); + CreateRelationshipTemplateRequest.builder().content(ArbitraryRelationshipTemplateContent.builder().value("value").build()).expiresAt(ZonedDateTime.now().plusDays(1)) + .build()); return template.getResult(); } From 5371126c39ffbc7141ff38b49c2529ca67c12547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 13:55:48 +0200 Subject: [PATCH 15/58] chore: formatting --- src/test/java/eu/enmeshed/ChallengesTest.java | 58 +++++-------------- 1 file changed, 16 insertions(+), 42 deletions(-) diff --git a/src/test/java/eu/enmeshed/ChallengesTest.java b/src/test/java/eu/enmeshed/ChallengesTest.java index e683223..93176cd 100644 --- a/src/test/java/eu/enmeshed/ChallengesTest.java +++ b/src/test/java/eu/enmeshed/ChallengesTest.java @@ -14,9 +14,11 @@ public class ChallengesTest { - @Container public static ConnectorContainer connector1 = new ConnectorContainer(); + @Container + public static ConnectorContainer connector1 = new ConnectorContainer(); - @Container public static ConnectorContainer connector2 = new ConnectorContainer(); + @Container + public static ConnectorContainer connector2 = new ConnectorContainer(); private static ConnectorClient client1; private static ConnectorClient client2; @@ -35,8 +37,7 @@ public static void setUp() { @Test public void createIdentityChallenge() { - var challenge = - client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); + var challenge = client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); assertThat(challenge.getId(), CoreMatchers.startsWith("CHL")); assertThat(challenge.getType(), CoreMatchers.equalTo("Identity")); @@ -52,11 +53,7 @@ public void createDeviceChallenge() { @Test public void createRelationshipChallenge() { - var challenge = - client1 - .challenges - .createChallenge(CreateChallengeRequest.relationship(relationship.getId())) - .getResult(); + var challenge = client1.challenges.createChallenge(CreateChallengeRequest.relationship(relationship.getId())).getResult(); assertThat(challenge.getId(), CoreMatchers.startsWith("CHL")); assertThat(challenge.getType(), CoreMatchers.equalTo("Relationship")); @@ -64,48 +61,25 @@ public void createRelationshipChallenge() { @Test public void validateIdentityChallenge() { - var challenge = - client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); - - var validationResult = - client2 - .challenges - .validateChallenge( - ValidateChallengeRequest.builder() - .challengeString(challenge.getChallengeString()) - .signature(challenge.getSignature()) - .build()) - .getResult(); + var challenge = client1.challenges.createChallenge(CreateChallengeRequest.identity()).getResult(); + + var validationResult = client2.challenges.validateChallenge( + ValidateChallengeRequest.builder().challengeString(challenge.getChallengeString()).signature(challenge.getSignature()).build()).getResult(); assertThat(validationResult.isValid(), CoreMatchers.equalTo(true)); assertThat(validationResult.getCorrespondingRelationship(), CoreMatchers.notNullValue()); - assertThat( - validationResult.getCorrespondingRelationship().getPeer(), - CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); + assertThat(validationResult.getCorrespondingRelationship().getPeer(), CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); } @Test public void validateRelationshipChallenge() { - var challenge = - client1 - .challenges - .createChallenge(CreateChallengeRequest.relationship(relationship.getId())) - .getResult(); - - var validationResult = - client2 - .challenges - .validateChallenge( - ValidateChallengeRequest.builder() - .challengeString(challenge.getChallengeString()) - .signature(challenge.getSignature()) - .build()) - .getResult(); + var challenge = client1.challenges.createChallenge(CreateChallengeRequest.relationship(relationship.getId())).getResult(); + + var validationResult = client2.challenges.validateChallenge( + ValidateChallengeRequest.builder().challengeString(challenge.getChallengeString()).signature(challenge.getSignature()).build()).getResult(); assertThat(validationResult.isValid(), CoreMatchers.equalTo(true)); assertThat(validationResult.getCorrespondingRelationship(), CoreMatchers.notNullValue()); - assertThat( - validationResult.getCorrespondingRelationship().getPeer(), - CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); + assertThat(validationResult.getCorrespondingRelationship().getPeer(), CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); } } From 4202834b7c63089f4b09389a02c95873489e77f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 14:56:55 +0200 Subject: [PATCH 16/58] feat: implement IncomingRequestsEndpoint --- .../endpoints/IncomingRequestsEndpoint.java | 29 ++++++++-- .../ConnectorRequestValidationResult.java | 21 +++++++ .../eu/enmeshed/model/request/Request.java | 5 +- .../incomingRequests/AcceptRequestItem.java | 21 +++++++ .../incomingRequests/DecideRequest.java | 18 ++++++ .../incomingRequests/DecideRequestItem.java | 6 ++ .../DecideRequestItemDerivation.java | 11 ++++ .../DecideRequestItemGroup.java | 18 ++++++ .../GetIncomingRequestsQuery.java | 58 +++++++++++++++++++ .../incomingRequests/RejectRequestItem.java | 19 ++++++ 10 files changed, 199 insertions(+), 7 deletions(-) create mode 100644 src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java create mode 100644 src/main/java/eu/enmeshed/requests/incomingRequests/AcceptRequestItem.java create mode 100644 src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequest.java create mode 100644 src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItem.java create mode 100644 src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItemDerivation.java create mode 100644 src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItemGroup.java create mode 100644 src/main/java/eu/enmeshed/requests/incomingRequests/GetIncomingRequestsQuery.java create mode 100644 src/main/java/eu/enmeshed/requests/incomingRequests/RejectRequestItem.java diff --git a/src/main/java/eu/enmeshed/endpoints/IncomingRequestsEndpoint.java b/src/main/java/eu/enmeshed/endpoints/IncomingRequestsEndpoint.java index 2b6a0e2..2184763 100644 --- a/src/main/java/eu/enmeshed/endpoints/IncomingRequestsEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/IncomingRequestsEndpoint.java @@ -2,11 +2,15 @@ import eu.enmeshed.ConnectorResponse; import eu.enmeshed.model.request.ConnectorRequest; -import eu.enmeshed.model.request.Request; +import eu.enmeshed.model.request.ConnectorRequestValidationResult; +import eu.enmeshed.requests.incomingRequests.DecideRequest; +import eu.enmeshed.requests.incomingRequests.GetIncomingRequestsQuery; import feign.Feign.Builder; import feign.Headers; import feign.Param; +import feign.QueryMap; import feign.RequestLine; +import java.util.List; public interface IncomingRequestsEndpoint { @@ -14,12 +18,27 @@ static IncomingRequestsEndpoint configure(String url, Builder builder) { return builder.target(IncomingRequestsEndpoint.class, url); } - @RequestLine("GET /api/v2/Requests/Incoming/{requestId}") + @RequestLine("PUT /api/v2/Requests/Incoming/{requestId}/CanAccept") @Headers("Content-Type: application/json") - ConnectorResponse getIncomingRequestById(@Param("requestId") String requestId); + ConnectorResponse canAccept(@Param("requestId") String requestId, DecideRequest request); @RequestLine("PUT /api/v2/Requests/Incoming/{requestId}/Accept") @Headers("Content-Type: application/json") - ConnectorResponse acceptIncomingRequestById( - @Param("requestId") String requestId, Request request); + ConnectorResponse accept(@Param("requestId") String requestId, DecideRequest request); + + @RequestLine("PUT /api/v2/Requests/Incoming/{requestId}/CanReject") + @Headers("Content-Type: application/json") + ConnectorResponse canReject(@Param("requestId") String requestId, DecideRequest request); + + @RequestLine("PUT /api/v2/Requests/Incoming/{requestId}/Reject") + @Headers("Content-Type: application/json") + ConnectorResponse reject(@Param("requestId") String requestId, DecideRequest request); + + @RequestLine("GET /api/v2/Requests/Incoming/{requestId}") + @Headers("Content-Type: application/json") + ConnectorResponse getRequest(@Param("requestId") String requestId); + + @RequestLine("GET /api/v2/Requests/Incoming") + @Headers("Content-Type: application/json") + ConnectorResponse> getRequests(@QueryMap GetIncomingRequestsQuery request); } diff --git a/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java b/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java new file mode 100644 index 0000000..f9ed106 --- /dev/null +++ b/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java @@ -0,0 +1,21 @@ +package eu.enmeshed.model.request; + +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ConnectorRequestValidationResult { + + private boolean isSuccess; + private String code; + private String message; + private List items; +} \ No newline at end of file diff --git a/src/main/java/eu/enmeshed/model/request/Request.java b/src/main/java/eu/enmeshed/model/request/Request.java index 74d1905..1255ccf 100644 --- a/src/main/java/eu/enmeshed/model/request/Request.java +++ b/src/main/java/eu/enmeshed/model/request/Request.java @@ -1,6 +1,6 @@ package eu.enmeshed.model.request; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import eu.enmeshed.model.messages.MessageContent; import eu.enmeshed.model.request.requestItems.RequestItem; import java.time.ZonedDateTime; @@ -14,9 +14,10 @@ @Getter @Setter @SuperBuilder -@JsonIgnoreProperties({"@type"}) public class Request extends MessageContent { + @JsonProperty("@type") + private String type = "Request"; private String id; private String title; private String description; diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/AcceptRequestItem.java b/src/main/java/eu/enmeshed/requests/incomingRequests/AcceptRequestItem.java new file mode 100644 index 0000000..444b725 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/AcceptRequestItem.java @@ -0,0 +1,21 @@ +package eu.enmeshed.requests.incomingRequests; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Map; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public final class AcceptRequestItem extends DecideRequestItemDerivation { + + @JsonProperty("accept") + private final boolean accept = true; + private Map additionalProperties; +} diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequest.java b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequest.java new file mode 100644 index 0000000..03021f7 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequest.java @@ -0,0 +1,18 @@ +package eu.enmeshed.requests.incomingRequests; + +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class DecideRequest { + + private List items; +} diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItem.java b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItem.java new file mode 100644 index 0000000..9b504cf --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItem.java @@ -0,0 +1,6 @@ +package eu.enmeshed.requests.incomingRequests; + +public sealed class DecideRequestItem permits DecideRequestItemGroup, DecideRequestItemDerivation { + +} + diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItemDerivation.java b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItemDerivation.java new file mode 100644 index 0000000..53c73d4 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItemDerivation.java @@ -0,0 +1,11 @@ +package eu.enmeshed.requests.incomingRequests; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; + +@Getter +public sealed class DecideRequestItemDerivation extends DecideRequestItem permits RejectRequestItem, AcceptRequestItem { + + @JsonProperty("accept") + private boolean accept; +} diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItemGroup.java b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItemGroup.java new file mode 100644 index 0000000..cb64cd3 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItemGroup.java @@ -0,0 +1,18 @@ +package eu.enmeshed.requests.incomingRequests; + +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public final class DecideRequestItemGroup extends DecideRequestItem { + + private List items; +} diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/GetIncomingRequestsQuery.java b/src/main/java/eu/enmeshed/requests/incomingRequests/GetIncomingRequestsQuery.java new file mode 100644 index 0000000..887c6b6 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/GetIncomingRequestsQuery.java @@ -0,0 +1,58 @@ +package eu.enmeshed.requests.incomingRequests; + +import feign.Param; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class GetIncomingRequestsQuery { + + @Param("id") + private String id; + + @Param("peer") + private String peer; + + @Param("createdAt") + private String createdAt; + + @Param("status") + private String status; + + @Param("content.expiresAt") + private String contentExpiresAt; + + @Param("content.items.@type") + private String contentItemsType; + + @Param("source.type") + private String sourceType; + + @Param("source.reference") + private String sourceReference; + + @Param("response.createdAt") + private String responseCreatedAt; + + @Param("response.source.type") + private String responseSourceType; + + @Param("response.source.reference") + private String responseSourceReference; + + @Param("response.content.result") + private String responseContentResult; + + @Param("response.content.items.@type") + private String responseContentItemsType; + + @Param("response.content.items.items.@type") + private String responseContentItemsItemsType; +} \ No newline at end of file diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/RejectRequestItem.java b/src/main/java/eu/enmeshed/requests/incomingRequests/RejectRequestItem.java new file mode 100644 index 0000000..cc066da --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/RejectRequestItem.java @@ -0,0 +1,19 @@ +package eu.enmeshed.requests.incomingRequests; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public final class RejectRequestItem extends DecideRequestItemDerivation { + + private final boolean accept = false; + private String code; + private String message; +} From 202f42d062bce0157c3b837631b4b3be4569728f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 14:57:07 +0200 Subject: [PATCH 17/58] feat: update MessagesEndpoint --- src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java index a5e7d4d..fc4c18d 100644 --- a/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/MessagesEndpoint.java @@ -33,11 +33,9 @@ static MessagesEndpoint configure(String url, Builder builder) { @RequestLine("GET /api/v2/Messages/{messageId}/Attachments/{attachmentId}") @Headers("Accept: application/json") - ConnectorResponse getAttachment( - @Param("messageId") String messageId, @Param("attachmentId") String attachmentId); + ConnectorResponse getAttachment(@Param("messageId") String messageId, @Param("attachmentId") String attachmentId); @RequestLine("GET /api/v2/Messages/{messageId}/Attachments/{attachmentId}/Download") @Headers("Accept: application/json") - feign.Response downloadAttachment( - @Param("messageId") String messageId, @Param("attachmentId") String attachmentId); + feign.Response downloadAttachment(@Param("messageId") String messageId, @Param("attachmentId") String attachmentId); } From 0d8d063ac46fc65141afcdc077f27d454204471c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 14:57:20 +0200 Subject: [PATCH 18/58] feat: implement OutgoingRequestsEndpoint --- .../endpoints/OutgoingRequestsEndpoint.java | 23 ++++++-- .../CanCreateOutgoingRequestRequest.java | 19 ++++++ .../CreateOutgoingRequestRequest.java | 19 ++++++ .../GetOutgoingRequestsQuery.java | 58 +++++++++++++++++++ 4 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 src/main/java/eu/enmeshed/requests/outgoingRequests/CanCreateOutgoingRequestRequest.java create mode 100644 src/main/java/eu/enmeshed/requests/outgoingRequests/CreateOutgoingRequestRequest.java create mode 100644 src/main/java/eu/enmeshed/requests/outgoingRequests/GetOutgoingRequestsQuery.java diff --git a/src/main/java/eu/enmeshed/endpoints/OutgoingRequestsEndpoint.java b/src/main/java/eu/enmeshed/endpoints/OutgoingRequestsEndpoint.java index f6708d5..28d47c4 100644 --- a/src/main/java/eu/enmeshed/endpoints/OutgoingRequestsEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/OutgoingRequestsEndpoint.java @@ -2,10 +2,16 @@ import eu.enmeshed.ConnectorResponse; import eu.enmeshed.model.request.ConnectorRequest; +import eu.enmeshed.model.request.ConnectorRequestValidationResult; +import eu.enmeshed.requests.outgoingRequests.CanCreateOutgoingRequestRequest; +import eu.enmeshed.requests.outgoingRequests.CreateOutgoingRequestRequest; +import eu.enmeshed.requests.outgoingRequests.GetOutgoingRequestsQuery; import feign.Feign.Builder; import feign.Headers; import feign.Param; +import feign.QueryMap; import feign.RequestLine; +import java.util.List; public interface OutgoingRequestsEndpoint { @@ -13,10 +19,19 @@ static OutgoingRequestsEndpoint configure(String url, Builder builder) { return builder.target(OutgoingRequestsEndpoint.class, url); } + @RequestLine("POST /api/v2/Requests/Outgoing/Validate") + @Headers("Content-Type: application/json") + ConnectorResponse canCreateRequest(CanCreateOutgoingRequestRequest request); + @RequestLine("POST /api/v2/Requests/Outgoing") - @Headers("Accept: application/json") - ConnectorResponse createOutgoingRequest(ConnectorRequest request); + @Headers("Content-Type: application/json") + ConnectorResponse createRequest(CreateOutgoingRequestRequest request); + + @RequestLine("GET /api/v2/Requests/Outgoing/{requestId}") + @Headers("Content-Type: application/json") + ConnectorResponse getRequest(@Param("requestId") String requestId); - @RequestLine("GET /api/v2/Requests/Outgoing/{0}") - ConnectorResponse getOutgoingRequest(@Param("0") String requestId); + @RequestLine("GET /api/v2/Requests/Outgoing") + @Headers("Content-Type: application/json") + ConnectorResponse> getRequests(@QueryMap GetOutgoingRequestsQuery request); } diff --git a/src/main/java/eu/enmeshed/requests/outgoingRequests/CanCreateOutgoingRequestRequest.java b/src/main/java/eu/enmeshed/requests/outgoingRequests/CanCreateOutgoingRequestRequest.java new file mode 100644 index 0000000..37b7102 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/outgoingRequests/CanCreateOutgoingRequestRequest.java @@ -0,0 +1,19 @@ +package eu.enmeshed.requests.outgoingRequests; + +import eu.enmeshed.model.request.Request; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class CanCreateOutgoingRequestRequest { + + private Request content; + private String peer; +} diff --git a/src/main/java/eu/enmeshed/requests/outgoingRequests/CreateOutgoingRequestRequest.java b/src/main/java/eu/enmeshed/requests/outgoingRequests/CreateOutgoingRequestRequest.java new file mode 100644 index 0000000..708a60e --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/outgoingRequests/CreateOutgoingRequestRequest.java @@ -0,0 +1,19 @@ +package eu.enmeshed.requests.outgoingRequests; + +import eu.enmeshed.model.request.Request; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class CreateOutgoingRequestRequest { + + private Request content; + private String peer; +} diff --git a/src/main/java/eu/enmeshed/requests/outgoingRequests/GetOutgoingRequestsQuery.java b/src/main/java/eu/enmeshed/requests/outgoingRequests/GetOutgoingRequestsQuery.java new file mode 100644 index 0000000..2e86569 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/outgoingRequests/GetOutgoingRequestsQuery.java @@ -0,0 +1,58 @@ +package eu.enmeshed.requests.outgoingRequests; + +import feign.Param; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class GetOutgoingRequestsQuery { + + @Param("id") + private String id; + + @Param("peer") + private String peer; + + @Param("createdAt") + private String createdAt; + + @Param("status") + private String status; + + @Param("content.expiresAt") + private String contentExpiresAt; + + @Param("content.items.@type") + private String contentItemsType; + + @Param("source.type") + private String sourceType; + + @Param("source.reference") + private String sourceReference; + + @Param("response.createdAt") + private String responseCreatedAt; + + @Param("response.source.type") + private String responseSourceType; + + @Param("response.source.reference") + private String responseSourceReference; + + @Param("response.content.result") + private String responseContentResult; + + @Param("response.content.items.@type") + private String responseContentItemsType; + + @Param("response.content.items.items.@type") + private String responseContentItemsItemsType; +} From eaf762c499a939104972f024a5ec8a7922df06bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 14:57:28 +0200 Subject: [PATCH 19/58] feat: implement RelationshipsEndpoint --- .../endpoints/RelationshipsEndpoint.java | 60 +++++++++++++++---- .../relationships/GetRelationshipsQuery.java | 19 ++++++ 2 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 src/main/java/eu/enmeshed/requests/relationships/GetRelationshipsQuery.java diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java index 026d5c9..fca4d9e 100644 --- a/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipsEndpoint.java @@ -1,11 +1,14 @@ package eu.enmeshed.endpoints; import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.attributes.ConnectorAttribute; import eu.enmeshed.model.relationships.ConnectorRelationship; import eu.enmeshed.requests.relationships.CreateRelationshipRequest; +import eu.enmeshed.requests.relationships.GetRelationshipsQuery; import feign.Feign.Builder; import feign.Headers; import feign.Param; +import feign.QueryMap; import feign.RequestLine; import java.util.List; @@ -15,22 +18,55 @@ static RelationshipsEndpoint configure(String url, Builder builder) { return builder.target(RelationshipsEndpoint.class, url); } - @RequestLine("GET /api/v2/Relationships?template.id={0}&peer={1}&status={2}") - ConnectorResponse> searchRelationships( - @Param("0") String templateId, @Param("1") String peer, @Param("2") String status); + @RequestLine("POST /api/v2/Relationships") + @Headers("Content-Type: application/json") + ConnectorResponse createRelationship(CreateRelationshipRequest request); - @RequestLine("GET /api/v2/Relationships/{id}") - ConnectorResponse getRelationshipById(@Param("id") String id); + @RequestLine("GET /api/v2/Relationships") + @Headers("Content-Type: application/json") + ConnectorResponse> getRelationships(@QueryMap GetRelationshipsQuery query); - @RequestLine("PUT /api/v2/Relationships/{id}/Accept") + @RequestLine("GET /api/v2/Relationships/{relationshipId}") @Headers("Content-Type: application/json") - ConnectorResponse acceptRelationship(@Param("id") String id); + ConnectorResponse getRelationship(@Param("relationshipId") String relationshipId); - @RequestLine("PUT /api/v2/Relationships/{0}/Reject") + @RequestLine("PUT /api/v2/Relationships/{relationshipId}/Accept") @Headers("Content-Type: application/json") - ConnectorResponse rejectRelationship(@Param("id") String id); + ConnectorResponse acceptRelationship(@Param("relationshipId") String relationshipId); - @RequestLine("POST /api/v2/Relationships") - @Headers({"Accept: application/json", "Content-Type: application/json"}) - ConnectorResponse createRelationship(CreateRelationshipRequest request); + @RequestLine("PUT /api/v2/Relationships/{relationshipId}/Reject") + @Headers("Content-Type: application/json") + ConnectorResponse rejectRelationship(@Param("relationshipId") String relationshipId); + + @RequestLine("PUT /api/v2/Relationships/{relationshipId}/Revoke") + @Headers("Content-Type: application/json") + ConnectorResponse revokeRelationship(@Param("relationshipId") String relationshipId); + + @RequestLine("GET /api/v2/Relationships/{relationshipId}/Attributes") + @Headers("Content-Type: application/json") + ConnectorResponse> getAttributesForRelationship(@Param("relationshipId") String relationshipId); + + @RequestLine("PUT /api/v2/Relationships/{relationshipId}/Terminate") + @Headers("Content-Type: application/json") + ConnectorResponse terminateRelationship(@Param("relationshipId") String relationshipId); + + @RequestLine("DELETE /api/v2/Relationships/{relationshipId}") + @Headers("Content-Type: application/json") + ConnectorResponse decomposeRelationship(@Param("relationshipId") String relationshipId); + + @RequestLine("PUT /api/v2/Relationships/{relationshipId}/Reactivate") + @Headers("Content-Type: application/json") + ConnectorResponse requestRelationshipReactivation(@Param("relationshipId") String relationshipId); + + @RequestLine("PUT /api/v2/Relationships/{relationshipId}/Reactivate/Accept") + @Headers("Content-Type: application/json") + ConnectorResponse acceptRelationshipReactivation(@Param("relationshipId") String relationshipId); + + @RequestLine("PUT /api/v2/Relationships/{relationshipId}/Reactivate/Reject") + @Headers("Content-Type: application/json") + ConnectorResponse rejectRelationshipReactivation(@Param("relationshipId") String relationshipId); + + @RequestLine("PUT /api/v2/Relationships/{relationshipId}/Reactivate/Revoke") + @Headers("Content-Type: application/json") + ConnectorResponse revokeRelationshipReactivation(@Param("relationshipId") String relationshipId); } diff --git a/src/main/java/eu/enmeshed/requests/relationships/GetRelationshipsQuery.java b/src/main/java/eu/enmeshed/requests/relationships/GetRelationshipsQuery.java new file mode 100644 index 0000000..9d26b53 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/relationships/GetRelationshipsQuery.java @@ -0,0 +1,19 @@ +package eu.enmeshed.requests.relationships; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class GetRelationshipsQuery { + + private String templateId; + private String peer; + private String status; +} From f88c75c74c4ddd3cdfd014289e99f14715bd7d8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 14:57:35 +0200 Subject: [PATCH 20/58] feat: implement RelationshipTemplatesEndpoint --- .../RelationshipTemplatesEndpoint.java | 49 ++++++++++++++----- ...CreateOwnRelationshipTemplateRequest.java} | 2 +- ...okenForOwnRelationshipTemplateRequest.java | 18 +++++++ ...CodeForOwnRelationshipTemplateRequest.java | 18 +++++++ .../GetOwnRelationshipTemplatesQuery.java | 20 ++++++++ .../GetPeerRelationshipTemplatesQuery.java | 20 ++++++++ .../GetRelationshipTemplatesQuery.java | 24 +++++++++ .../LoadPeerRelationshipTemplateRequest.java | 6 +++ 8 files changed, 145 insertions(+), 12 deletions(-) rename src/main/java/eu/enmeshed/requests/relationshipTemplates/{CreateRelationshipTemplateRequest.java => CreateOwnRelationshipTemplateRequest.java} (83%) create mode 100644 src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateTokenForOwnRelationshipTemplateRequest.java create mode 100644 src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateTokenQrCodeForOwnRelationshipTemplateRequest.java create mode 100644 src/main/java/eu/enmeshed/requests/relationshipTemplates/GetOwnRelationshipTemplatesQuery.java create mode 100644 src/main/java/eu/enmeshed/requests/relationshipTemplates/GetPeerRelationshipTemplatesQuery.java create mode 100644 src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java index 2001a66..3d91d0e 100644 --- a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java @@ -1,15 +1,23 @@ package eu.enmeshed.endpoints; import eu.enmeshed.ConnectorResponse; -import eu.enmeshed.model.qr.QrCode; import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateContentDerivation; -import eu.enmeshed.requests.relationshipTemplates.CreateRelationshipTemplateRequest; +import eu.enmeshed.model.tokens.ConnectorToken; +import eu.enmeshed.requests.relationshipTemplates.CreateOwnRelationshipTemplateRequest; +import eu.enmeshed.requests.relationshipTemplates.CreateTokenForOwnRelationshipTemplateRequest; +import eu.enmeshed.requests.relationshipTemplates.CreateTokenQrCodeForOwnRelationshipTemplateRequest; +import eu.enmeshed.requests.relationshipTemplates.GetOwnRelationshipTemplatesQuery; +import eu.enmeshed.requests.relationshipTemplates.GetPeerRelationshipTemplatesQuery; +import eu.enmeshed.requests.relationshipTemplates.GetRelationshipTemplatesQuery; import eu.enmeshed.requests.relationshipTemplates.LoadPeerRelationshipTemplateRequest; import feign.Feign.Builder; import feign.Headers; import feign.Param; +import feign.QueryMap; import feign.RequestLine; +import feign.Response; +import java.util.List; public interface RelationshipTemplatesEndpoint { @@ -17,20 +25,39 @@ static RelationshipTemplatesEndpoint configure(String url, Builder builder) { return builder.target(RelationshipTemplatesEndpoint.class, url); } + @RequestLine("GET /api/v2/RelationshipTemplates") + @Headers("Content-Type: application/json") + ConnectorResponse> getRelationshipTemplates(@QueryMap GetRelationshipTemplatesQuery request); + + @RequestLine("GET /api/v2/RelationshipTemplates/{id}") + @Headers("Content-Type: application/json") + ConnectorResponse getRelationshipTemplate(@Param("id") String id); + + @RequestLine("GET /api/v2/RelationshipTemplates/Own") + @Headers("Content-Type: application/json") + ConnectorResponse> getOwnRelationshipTemplates(@QueryMap GetOwnRelationshipTemplatesQuery request); + @RequestLine("POST /api/v2/RelationshipTemplates/Own") @Headers("Content-Type: application/json") - ConnectorResponse createOwnRelationshipTemplate( - CreateRelationshipTemplateRequest relationshipTemplate); + ConnectorResponse> createOwnRelationshipTemplate(CreateOwnRelationshipTemplateRequest request); - @RequestLine("GET /api/v2/RelationshipTemplates/{relationshipTemplateId}") + @RequestLine("GET /api/v2/RelationshipTemplates/{id}") @Headers("Accept: image/png") - feign.Response getQrCodeForRelationshipTemplate(@Param("relationshipTemplateId") String relationshipTemplateId); + Response getQrCodeForOwnRelationshipTemplate(@Param("id") String id); - @RequestLine("GET /api/v2/RelationshipTemplates/{relationshipTemplateId}") - @Headers("Accept: application/json") - ConnectorResponse createRelationshipQrCode(@Param("relationshipTemplateId") String relationshipTemplateId); + @RequestLine("POST /api/v2/RelationshipTemplates/Own/{id}/Token") + @Headers("Content-Type: application/json") + ConnectorResponse createTokenForOwnRelationshipTemplate(@Param("id") String id, CreateTokenForOwnRelationshipTemplateRequest request); + + @RequestLine("POST /api/v2/RelationshipTemplates/Own/{id}/Token") + @Headers("Accept: image/png") + Response createTokenQrCodeForOwnRelationshipTemplate(@Param("id") String id, CreateTokenQrCodeForOwnRelationshipTemplateRequest request); + + @RequestLine("GET /api/v2/RelationshipTemplates/Peer") + @Headers("Content-Type: application/json") + ConnectorResponse> getPeerRelationshipTemplates(@QueryMap GetPeerRelationshipTemplatesQuery request); @RequestLine("POST /api/v2/RelationshipTemplates/Peer") - @Headers({"Accept: application/json", "Content-Type: application/json"}) - ConnectorResponse loadPeerRelationshipTemplate(LoadPeerRelationshipTemplateRequest request); + @Headers("Content-Type: application/json") + ConnectorResponse> loadPeerRelationshipTemplate(LoadPeerRelationshipTemplateRequest request); } diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateRelationshipTemplateRequest.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateOwnRelationshipTemplateRequest.java similarity index 83% rename from src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateRelationshipTemplateRequest.java rename to src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateOwnRelationshipTemplateRequest.java index 28e1352..84e25fe 100644 --- a/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateRelationshipTemplateRequest.java +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateOwnRelationshipTemplateRequest.java @@ -13,7 +13,7 @@ @Getter @Setter @SuperBuilder -public class CreateRelationshipTemplateRequest { +public class CreateOwnRelationshipTemplateRequest { private T content; private Integer maxNumberOfAllocations; diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateTokenForOwnRelationshipTemplateRequest.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateTokenForOwnRelationshipTemplateRequest.java new file mode 100644 index 0000000..53627e4 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateTokenForOwnRelationshipTemplateRequest.java @@ -0,0 +1,18 @@ +package eu.enmeshed.requests.relationshipTemplates; + +import java.time.ZonedDateTime; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@SuperBuilder +public class CreateTokenForOwnRelationshipTemplateRequest { + + private ZonedDateTime expiresAt; +} diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateTokenQrCodeForOwnRelationshipTemplateRequest.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateTokenQrCodeForOwnRelationshipTemplateRequest.java new file mode 100644 index 0000000..857f6a4 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/CreateTokenQrCodeForOwnRelationshipTemplateRequest.java @@ -0,0 +1,18 @@ +package eu.enmeshed.requests.relationshipTemplates; + +import java.time.ZonedDateTime; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@SuperBuilder +public class CreateTokenQrCodeForOwnRelationshipTemplateRequest { + + private ZonedDateTime expiresAt; +} diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetOwnRelationshipTemplatesQuery.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetOwnRelationshipTemplatesQuery.java new file mode 100644 index 0000000..cd65584 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetOwnRelationshipTemplatesQuery.java @@ -0,0 +1,20 @@ +package eu.enmeshed.requests.relationshipTemplates; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@SuperBuilder +public class GetOwnRelationshipTemplatesQuery { + + private String createdAt; + private String expiresAt; + private String createdByDevice; + private int maxNumberOfAllocations; +} diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetPeerRelationshipTemplatesQuery.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetPeerRelationshipTemplatesQuery.java new file mode 100644 index 0000000..8f7b0a7 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetPeerRelationshipTemplatesQuery.java @@ -0,0 +1,20 @@ +package eu.enmeshed.requests.relationshipTemplates; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@SuperBuilder +public class GetPeerRelationshipTemplatesQuery { + + private String createdAt; + private String expiresAt; + private String createdBy; + private int maxNumberOfAllocations; +} diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java new file mode 100644 index 0000000..dc0b544 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java @@ -0,0 +1,24 @@ +package eu.enmeshed.requests.relationshipTemplates; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@SuperBuilder +public class GetRelationshipTemplatesQuery { + + private String createdAt; + private String expiresAt; + private String createdBy; + private String createdByDevice; + private int maxNumberOfAllocations; + @JsonProperty("isOwn") + private boolean own; +} diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/LoadPeerRelationshipTemplateRequest.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/LoadPeerRelationshipTemplateRequest.java index 6a04554..8d56bc0 100644 --- a/src/main/java/eu/enmeshed/requests/relationshipTemplates/LoadPeerRelationshipTemplateRequest.java +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/LoadPeerRelationshipTemplateRequest.java @@ -2,9 +2,15 @@ import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; @AllArgsConstructor +@NoArgsConstructor @Getter +@Setter +@SuperBuilder public class LoadPeerRelationshipTemplateRequest { private String reference; From b5de67e2830c2f9fcffdcab49908d920b711b8a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 14:58:57 +0200 Subject: [PATCH 21/58] fix: compiler issues --- .../enmeshed/endpoints/RelationshipTemplatesEndpoint.java | 4 ++-- src/test/java/eu/enmeshed/utils/TestUtils.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java index 3d91d0e..4211235 100644 --- a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java @@ -39,7 +39,7 @@ static RelationshipTemplatesEndpoint configure(String url, Builder builder) { @RequestLine("POST /api/v2/RelationshipTemplates/Own") @Headers("Content-Type: application/json") - ConnectorResponse> createOwnRelationshipTemplate(CreateOwnRelationshipTemplateRequest request); + ConnectorResponse createOwnRelationshipTemplate(CreateOwnRelationshipTemplateRequest request); @RequestLine("GET /api/v2/RelationshipTemplates/{id}") @Headers("Accept: image/png") @@ -59,5 +59,5 @@ static RelationshipTemplatesEndpoint configure(String url, Builder builder) { @RequestLine("POST /api/v2/RelationshipTemplates/Peer") @Headers("Content-Type: application/json") - ConnectorResponse> loadPeerRelationshipTemplate(LoadPeerRelationshipTemplateRequest request); + ConnectorResponse loadPeerRelationshipTemplate(LoadPeerRelationshipTemplateRequest request); } diff --git a/src/test/java/eu/enmeshed/utils/TestUtils.java b/src/test/java/eu/enmeshed/utils/TestUtils.java index 700cda2..ec9c254 100644 --- a/src/test/java/eu/enmeshed/utils/TestUtils.java +++ b/src/test/java/eu/enmeshed/utils/TestUtils.java @@ -6,7 +6,7 @@ import eu.enmeshed.model.relationships.ArbitraryRelationshipCreationContent; import eu.enmeshed.model.relationships.ConnectorRelationship; import eu.enmeshed.model.relationships.RelationshipStatus; -import eu.enmeshed.requests.relationshipTemplates.CreateRelationshipTemplateRequest; +import eu.enmeshed.requests.relationshipTemplates.CreateOwnRelationshipTemplateRequest; import eu.enmeshed.requests.relationshipTemplates.LoadPeerRelationshipTemplateRequest; import eu.enmeshed.requests.relationships.CreateRelationshipRequest; import java.time.ZonedDateTime; @@ -52,7 +52,7 @@ private static ConnectorRelationship syncUntilHasRelationshipInStatus(ConnectorC private static ConnectorRelationship getRelationshipSafeById(ConnectorClient client, String id) { try { - return client.relationships.getRelationshipById(id).getResult(); + return client.relationships.getRelationship(id).getResult(); } catch (Exception e) { return null; } @@ -67,7 +67,7 @@ public static RelationshipTemplate exchangeTemplate(ConnectorClient client1, Con public static RelationshipTemplate createTemplate(ConnectorClient client) { var template = client.relationshipTemplates.createOwnRelationshipTemplate( - CreateRelationshipTemplateRequest.builder().content(ArbitraryRelationshipTemplateContent.builder().value("value").build()).expiresAt(ZonedDateTime.now().plusDays(1)) + CreateOwnRelationshipTemplateRequest.builder().content(ArbitraryRelationshipTemplateContent.builder().value("value").build()).expiresAt(ZonedDateTime.now().plusDays(1)) .build()); return template.getResult(); From a079b0c84467a1f5f0293113a8b138d8234c6803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 15:01:44 +0200 Subject: [PATCH 22/58] fix: add ArbitraryMessageContent --- .../messages/ArbitraryMessageContent.java | 21 +++++++++++++++++++ .../model/messages/MessageContent.java | 13 +++++++----- .../ArbitraryRelationshipTemplateContent.java | 3 +-- 3 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 src/main/java/eu/enmeshed/model/messages/ArbitraryMessageContent.java diff --git a/src/main/java/eu/enmeshed/model/messages/ArbitraryMessageContent.java b/src/main/java/eu/enmeshed/model/messages/ArbitraryMessageContent.java new file mode 100644 index 0000000..c9e4023 --- /dev/null +++ b/src/main/java/eu/enmeshed/model/messages/ArbitraryMessageContent.java @@ -0,0 +1,21 @@ +package eu.enmeshed.model.messages; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ArbitraryMessageContent extends MessageContent { + + @JsonProperty("@type") + private final String type = ArbitraryMessageContent.class.getSimpleName(); + + private Object value; +} diff --git a/src/main/java/eu/enmeshed/model/messages/MessageContent.java b/src/main/java/eu/enmeshed/model/messages/MessageContent.java index a4a694e..ad4e5d5 100644 --- a/src/main/java/eu/enmeshed/model/messages/MessageContent.java +++ b/src/main/java/eu/enmeshed/model/messages/MessageContent.java @@ -12,13 +12,16 @@ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "@type") @JsonSubTypes({ - @JsonSubTypes.Type(Mail.class), - @JsonSubTypes.Type(Request.class), - @JsonSubTypes.Type(ResponseWrapper.class), - @JsonSubTypes.Type(Notification.class) + @JsonSubTypes.Type(Mail.class), + @JsonSubTypes.Type(Request.class), + @JsonSubTypes.Type(ResponseWrapper.class), + @JsonSubTypes.Type(Notification.class), + @JsonSubTypes.Type(ArbitraryMessageContent.class) }) @NoArgsConstructor @Getter @Setter @SuperBuilder -public abstract class MessageContent {} +public abstract class MessageContent { + +} diff --git a/src/main/java/eu/enmeshed/model/relationshipTemplates/ArbitraryRelationshipTemplateContent.java b/src/main/java/eu/enmeshed/model/relationshipTemplates/ArbitraryRelationshipTemplateContent.java index 3758d42..946e312 100644 --- a/src/main/java/eu/enmeshed/model/relationshipTemplates/ArbitraryRelationshipTemplateContent.java +++ b/src/main/java/eu/enmeshed/model/relationshipTemplates/ArbitraryRelationshipTemplateContent.java @@ -12,8 +12,7 @@ @Getter @Setter @Builder -public final class ArbitraryRelationshipTemplateContent - extends RelationshipTemplateContentDerivation { +public final class ArbitraryRelationshipTemplateContent extends RelationshipTemplateContentDerivation { @JsonProperty("@type") private final String type = ArbitraryRelationshipTemplateContent.class.getSimpleName(); From 0ee7ca7ccd72616513fe67b887bf992fc8c00775 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 15:14:20 +0200 Subject: [PATCH 23/58] feat: implement TokensEndpoint --- .../java/eu/enmeshed/ConnectorClient.java | 10 ++++- .../eu/enmeshed/endpoints/TokensEndpoint.java | 44 +++++++++++++++++++ .../tokens/CreateOwnTokenRequest.java | 23 ++++++++++ .../requests/tokens/GetOwnTokensQuery.java | 19 ++++++++ .../requests/tokens/GetPeerTokensQuery.java | 20 +++++++++ .../requests/tokens/LoadPeerTokenRequest.java | 20 +++++++++ 6 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java create mode 100644 src/main/java/eu/enmeshed/requests/tokens/CreateOwnTokenRequest.java create mode 100644 src/main/java/eu/enmeshed/requests/tokens/GetOwnTokensQuery.java create mode 100644 src/main/java/eu/enmeshed/requests/tokens/GetPeerTokensQuery.java create mode 100644 src/main/java/eu/enmeshed/requests/tokens/LoadPeerTokenRequest.java diff --git a/src/main/java/eu/enmeshed/ConnectorClient.java b/src/main/java/eu/enmeshed/ConnectorClient.java index ae14875..077d5b9 100644 --- a/src/main/java/eu/enmeshed/ConnectorClient.java +++ b/src/main/java/eu/enmeshed/ConnectorClient.java @@ -14,6 +14,7 @@ import eu.enmeshed.endpoints.OutgoingRequestsEndpoint; import eu.enmeshed.endpoints.RelationshipTemplatesEndpoint; import eu.enmeshed.endpoints.RelationshipsEndpoint; +import eu.enmeshed.endpoints.TokensEndpoint; import feign.Feign; import feign.Logger.Level; import feign.Request.Options; @@ -41,6 +42,7 @@ public class ConnectorClient { public final RelationshipsEndpoint relationships; public final IncomingRequestsEndpoint incomingRequests; public final OutgoingRequestsEndpoint outgoingRequests; + public final TokensEndpoint tokens; public ConnectorClient( AccountEndpoint account, @@ -51,7 +53,8 @@ public ConnectorClient( RelationshipTemplatesEndpoint relationshipTemplates, RelationshipsEndpoint relationships, IncomingRequestsEndpoint incomingRequests, - OutgoingRequestsEndpoint outgoingRequests + OutgoingRequestsEndpoint outgoingRequests, + TokensEndpoint tokens ) { this.account = account; this.attributes = attributes; @@ -62,6 +65,7 @@ public ConnectorClient( this.relationships = relationships; this.incomingRequests = incomingRequests; this.outgoingRequests = outgoingRequests; + this.tokens = tokens; } public static ConnectorClient create(String url, String apiKey) { @@ -87,6 +91,8 @@ public static ConnectorClient create(String url, String apiKey, Options options, RelationshipTemplatesEndpoint.configure(url, builder), RelationshipsEndpoint.configure(url, builder), IncomingRequestsEndpoint.configure(url, builder), - OutgoingRequestsEndpoint.configure(url, builder)); + OutgoingRequestsEndpoint.configure(url, builder), + TokensEndpoint.configure(url, builder) + ); } } diff --git a/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java b/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java new file mode 100644 index 0000000..c617155 --- /dev/null +++ b/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java @@ -0,0 +1,44 @@ +package eu.enmeshed.endpoints; + +import eu.enmeshed.ConnectorResponse; +import eu.enmeshed.model.tokens.ConnectorToken; +import eu.enmeshed.requests.tokens.*; +import feign.Feign.Builder; +import feign.Headers; +import feign.Param; +import feign.QueryMap; +import feign.RequestLine; + +import java.nio.ByteBuffer; +import java.util.List; + +public interface TokensEndpoint { + + static TokensEndpoint configure(String url, Builder builder) { + return builder.target(TokensEndpoint.class, url); + } + + @RequestLine("GET /api/v2/Tokens/{tokenId}") + @Headers("Content-Type: application/json") + ConnectorResponse getToken(@Param("tokenId") String tokenId); + + @RequestLine("GET /api/v2/Tokens/{tokenId}") + @Headers("Accept: image/png") + ConnectorResponse getQrCodeForToken(@Param("tokenId") String tokenId); + + @RequestLine("GET /api/v2/Tokens/Own") + @Headers("Content-Type: application/json") + ConnectorResponse> getOwnTokens(@QueryMap GetOwnTokensQuery query); + + @RequestLine("POST /api/v2/Tokens/Own") + @Headers("Content-Type: application/json") + ConnectorResponse createOwnToken(CreateOwnTokenRequest request); + + @RequestLine("GET /api/v2/Tokens/Peer") + @Headers("Content-Type: application/json") + ConnectorResponse> getPeerTokens(@QueryMap GetPeerTokensQuery query); + + @RequestLine("POST /api/v2/Tokens/Peer") + @Headers("Content-Type: application/json") + ConnectorResponse loadPeerToken(LoadPeerTokenRequest request); +} \ No newline at end of file diff --git a/src/main/java/eu/enmeshed/requests/tokens/CreateOwnTokenRequest.java b/src/main/java/eu/enmeshed/requests/tokens/CreateOwnTokenRequest.java new file mode 100644 index 0000000..5c53b5c --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/tokens/CreateOwnTokenRequest.java @@ -0,0 +1,23 @@ +package eu.enmeshed.requests.tokens; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.time.ZonedDateTime; +import java.util.Map; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class CreateOwnTokenRequest { + + private ZonedDateTime expiresAt; + private Map content; + @JsonProperty("ephemeral") + private boolean ephemeral; +} diff --git a/src/main/java/eu/enmeshed/requests/tokens/GetOwnTokensQuery.java b/src/main/java/eu/enmeshed/requests/tokens/GetOwnTokensQuery.java new file mode 100644 index 0000000..1e72930 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/tokens/GetOwnTokensQuery.java @@ -0,0 +1,19 @@ +package eu.enmeshed.requests.tokens; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class GetOwnTokensQuery { + + private String createdAt; + private String createdByDevice; + private String expiresAt; +} diff --git a/src/main/java/eu/enmeshed/requests/tokens/GetPeerTokensQuery.java b/src/main/java/eu/enmeshed/requests/tokens/GetPeerTokensQuery.java new file mode 100644 index 0000000..5a93aa1 --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/tokens/GetPeerTokensQuery.java @@ -0,0 +1,20 @@ +package eu.enmeshed.requests.tokens; + +import java.time.ZonedDateTime; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class GetPeerTokensQuery { + + private String createdAt; + private String createdBy; + private String expiresAt; +} diff --git a/src/main/java/eu/enmeshed/requests/tokens/LoadPeerTokenRequest.java b/src/main/java/eu/enmeshed/requests/tokens/LoadPeerTokenRequest.java new file mode 100644 index 0000000..497e3ca --- /dev/null +++ b/src/main/java/eu/enmeshed/requests/tokens/LoadPeerTokenRequest.java @@ -0,0 +1,20 @@ +package eu.enmeshed.requests.tokens; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class LoadPeerTokenRequest { + + private String reference; + @JsonProperty("ephemeral") + private boolean ephemeral; +} From d0b7c9f5b4edeca03309a9e733f150b6ba8f1330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 15:16:51 +0200 Subject: [PATCH 24/58] chore: remove import statement --- .../java/eu/enmeshed/requests/tokens/GetPeerTokensQuery.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/eu/enmeshed/requests/tokens/GetPeerTokensQuery.java b/src/main/java/eu/enmeshed/requests/tokens/GetPeerTokensQuery.java index 5a93aa1..0efde48 100644 --- a/src/main/java/eu/enmeshed/requests/tokens/GetPeerTokensQuery.java +++ b/src/main/java/eu/enmeshed/requests/tokens/GetPeerTokensQuery.java @@ -1,6 +1,5 @@ package eu.enmeshed.requests.tokens; -import java.time.ZonedDateTime; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; From 6d1a1c52f5406e634a56f63ccaae01c1e2c689c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 15:33:28 +0200 Subject: [PATCH 25/58] test: add tokens test --- pom.xml | 28 ------- .../eu/enmeshed/endpoints/TokensEndpoint.java | 12 +-- .../ConnectorRequestValidationResult.java | 2 +- .../incomingRequests/DecideRequestItem.java | 1 - .../GetIncomingRequestsQuery.java | 2 +- src/test/java/eu/enmeshed/TokensTest.java | 75 +++++++++++++++++++ .../java/eu/enmeshed/utils/TestUtils.java | 17 +++++ 7 files changed, 101 insertions(+), 36 deletions(-) create mode 100644 src/test/java/eu/enmeshed/TokensTest.java diff --git a/pom.xml b/pom.xml index 1f20208..df802fa 100644 --- a/pom.xml +++ b/pom.xml @@ -121,32 +121,4 @@ test - - - - - com.spotify.fmt - fmt-maven-plugin - ${fmt.maven.plugin.version} - - - format-code - process-sources - - format - - - src/main/java - src/test/java - false - .*\.java - false - false - - - - - - - diff --git a/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java b/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java index c617155..e91407e 100644 --- a/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java @@ -2,14 +2,16 @@ import eu.enmeshed.ConnectorResponse; import eu.enmeshed.model.tokens.ConnectorToken; -import eu.enmeshed.requests.tokens.*; +import eu.enmeshed.requests.tokens.CreateOwnTokenRequest; +import eu.enmeshed.requests.tokens.GetOwnTokensQuery; +import eu.enmeshed.requests.tokens.GetPeerTokensQuery; +import eu.enmeshed.requests.tokens.LoadPeerTokenRequest; import feign.Feign.Builder; import feign.Headers; import feign.Param; import feign.QueryMap; import feign.RequestLine; - -import java.nio.ByteBuffer; +import feign.Response; import java.util.List; public interface TokensEndpoint { @@ -24,7 +26,7 @@ static TokensEndpoint configure(String url, Builder builder) { @RequestLine("GET /api/v2/Tokens/{tokenId}") @Headers("Accept: image/png") - ConnectorResponse getQrCodeForToken(@Param("tokenId") String tokenId); + Response getQrCodeForToken(@Param("tokenId") String tokenId); @RequestLine("GET /api/v2/Tokens/Own") @Headers("Content-Type: application/json") @@ -41,4 +43,4 @@ static TokensEndpoint configure(String url, Builder builder) { @RequestLine("POST /api/v2/Tokens/Peer") @Headers("Content-Type: application/json") ConnectorResponse loadPeerToken(LoadPeerTokenRequest request); -} \ No newline at end of file +} diff --git a/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java b/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java index f9ed106..90077a6 100644 --- a/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java +++ b/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java @@ -18,4 +18,4 @@ public class ConnectorRequestValidationResult { private String code; private String message; private List items; -} \ No newline at end of file +} diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItem.java b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItem.java index 9b504cf..f5d5364 100644 --- a/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItem.java +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/DecideRequestItem.java @@ -3,4 +3,3 @@ public sealed class DecideRequestItem permits DecideRequestItemGroup, DecideRequestItemDerivation { } - diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/GetIncomingRequestsQuery.java b/src/main/java/eu/enmeshed/requests/incomingRequests/GetIncomingRequestsQuery.java index 887c6b6..096ea62 100644 --- a/src/main/java/eu/enmeshed/requests/incomingRequests/GetIncomingRequestsQuery.java +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/GetIncomingRequestsQuery.java @@ -55,4 +55,4 @@ public class GetIncomingRequestsQuery { @Param("response.content.items.items.@type") private String responseContentItemsItemsType; -} \ No newline at end of file +} diff --git a/src/test/java/eu/enmeshed/TokensTest.java b/src/test/java/eu/enmeshed/TokensTest.java new file mode 100644 index 0000000..d151b86 --- /dev/null +++ b/src/test/java/eu/enmeshed/TokensTest.java @@ -0,0 +1,75 @@ +package eu.enmeshed; + +import static org.hamcrest.MatcherAssert.assertThat; + +import eu.enmeshed.model.tokens.ConnectorToken; +import eu.enmeshed.requests.tokens.CreateOwnTokenRequest; +import eu.enmeshed.utils.ConnectorContainer; +import eu.enmeshed.utils.TestUtils; +import java.time.ZonedDateTime; +import java.util.HashMap; +import org.hamcrest.CoreMatchers; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; + +public class TokensTest { + + @Container + public static ConnectorContainer connector1 = new ConnectorContainer(); + + @Container + public static ConnectorContainer connector2 = new ConnectorContainer(); + + private static ConnectorClient client1; + private static ConnectorClient client2; + + @BeforeAll + public static void setUp() { + client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); + client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); + } + + @Test + public void shouldCreateToken() { + var token = client1.tokens.createOwnToken(CreateOwnTokenRequest.builder().content(new HashMap<>()).expiresAt(ZonedDateTime.now().plusDays(1)).build()); + var tokenId = token.getResult().getId(); + assertThat(tokenId, CoreMatchers.startsWith("TOK")); + } + + @Test + public void shouldGetToken() { + var token = client1.tokens.createOwnToken(CreateOwnTokenRequest.builder().content(new HashMap<>()).expiresAt(ZonedDateTime.now().plusDays(1)).build()); + var tokenId = token.getResult().getId(); + + var queriedToken = client1.tokens.getToken(tokenId); + assertThat(queriedToken.getResult().getId(), CoreMatchers.equalTo(tokenId)); + } + + @Test + public void shouldGetOwnTokens() { + var token = client1.tokens.createOwnToken(CreateOwnTokenRequest.builder().content(new HashMap<>()).expiresAt(ZonedDateTime.now().plusDays(1)).build()); + var tokenId = token.getResult().getId(); + + var tokens = client1.tokens.getOwnTokens(null); + assertThat(tokens.getResult().stream().map(ConnectorToken::getId).toList(), CoreMatchers.hasItem(tokenId)); + } + + @Test + public void shouldGetPeerTokens() { + var token = TestUtils.exchangeToken(client1, client2); + var tokenId = token.getId(); + + var tokens = client2.tokens.getPeerTokens(null); + assertThat(tokens.getResult().stream().map(ConnectorToken::getId).toList(), CoreMatchers.hasItem(tokenId)); + } + + @Test + public void shouldGetQrCodeForToken() { + var token = TestUtils.exchangeToken(client1, client2); + var tokenId = token.getId(); + + var response = client2.tokens.getQrCodeForToken(tokenId); + assert response.body().length() > 100; + } +} diff --git a/src/test/java/eu/enmeshed/utils/TestUtils.java b/src/test/java/eu/enmeshed/utils/TestUtils.java index ec9c254..92ba2f3 100644 --- a/src/test/java/eu/enmeshed/utils/TestUtils.java +++ b/src/test/java/eu/enmeshed/utils/TestUtils.java @@ -6,10 +6,14 @@ import eu.enmeshed.model.relationships.ArbitraryRelationshipCreationContent; import eu.enmeshed.model.relationships.ConnectorRelationship; import eu.enmeshed.model.relationships.RelationshipStatus; +import eu.enmeshed.model.tokens.ConnectorToken; import eu.enmeshed.requests.relationshipTemplates.CreateOwnRelationshipTemplateRequest; import eu.enmeshed.requests.relationshipTemplates.LoadPeerRelationshipTemplateRequest; import eu.enmeshed.requests.relationships.CreateRelationshipRequest; +import eu.enmeshed.requests.tokens.CreateOwnTokenRequest; +import eu.enmeshed.requests.tokens.LoadPeerTokenRequest; import java.time.ZonedDateTime; +import java.util.HashMap; public class TestUtils { @@ -72,4 +76,17 @@ public static RelationshipTemplate createTemplate(ConnectorClient client) { return template.getResult(); } + + public static ConnectorToken exchangeToken(ConnectorClient client1, ConnectorClient client2) { + var token = createToken(client1); + + var response = client2.tokens.loadPeerToken(LoadPeerTokenRequest.builder().reference(token.getTruncatedReference()).build()); + return response.getResult(); + } + + public static ConnectorToken createToken(ConnectorClient client) { + var token = client.tokens.createOwnToken(CreateOwnTokenRequest.builder().content(new HashMap<>()).expiresAt(ZonedDateTime.now().plusDays(1)).build()); + + return token.getResult(); + } } From 8697fc9afa3bcb1e02803e3508aed40abf8c48e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 15:36:03 +0200 Subject: [PATCH 26/58] fix: make test working --- src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java | 2 +- src/test/java/eu/enmeshed/TokensTest.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java b/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java index e91407e..3fd0411 100644 --- a/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/TokensEndpoint.java @@ -21,7 +21,7 @@ static TokensEndpoint configure(String url, Builder builder) { } @RequestLine("GET /api/v2/Tokens/{tokenId}") - @Headers("Content-Type: application/json") + @Headers("Accept: application/json") ConnectorResponse getToken(@Param("tokenId") String tokenId); @RequestLine("GET /api/v2/Tokens/{tokenId}") diff --git a/src/test/java/eu/enmeshed/TokensTest.java b/src/test/java/eu/enmeshed/TokensTest.java index d151b86..623e4bc 100644 --- a/src/test/java/eu/enmeshed/TokensTest.java +++ b/src/test/java/eu/enmeshed/TokensTest.java @@ -26,6 +26,9 @@ public class TokensTest { @BeforeAll public static void setUp() { + connector1.start(); + connector2.start(); + client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); } From 9d666b32060ff4122d5dfaaebdcb67c73f946325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 15:49:48 +0200 Subject: [PATCH 27/58] ci: add test pipeline --- .dev/appsettings.override.json | 136 ++++++++++++++++++ .dev/compose.backbone.env | 1 + .dev/compose.backbone.yml | 129 +++++++++++++++++ .github/workflows/test.yml | 11 ++ .../eu/enmeshed/utils/ConnectorContainer.java | 5 + 5 files changed, 282 insertions(+) create mode 100644 .dev/appsettings.override.json create mode 100644 .dev/compose.backbone.env create mode 100644 .dev/compose.backbone.yml diff --git a/.dev/appsettings.override.json b/.dev/appsettings.override.json new file mode 100644 index 0000000..e655dfa --- /dev/null +++ b/.dev/appsettings.override.json @@ -0,0 +1,136 @@ +{ + "Authentication": { + "JwtSigningCertificate": "MIIJ/wIBAzCCCbUGCSqGSIb3DQEHAaCCCaYEggmiMIIJnjCCBAoGCSqGSIb3DQEHBqCCA/swggP3AgEAMIID8AYJKoZIhvcNAQcBMF8GCSqGSIb3DQEFDTBSMDEGCSqGSIb3DQEFDDAkBBCPqAJskE1tYnX41O3DfagGAgIIADAMBggqhkiG9w0CCQUAMB0GCWCGSAFlAwQBKgQQV2BFkuXPtSrajdHwKU1KKoCCA4DMA/JkSD9Iph3Aiq8qxM1mCzZKab63aseb8hJvBUdnZCIobWCiGJOlV/QcwS9RoZOVOR8fiB60tsFz4HMS9QVl0kVkautmg+trSii0riXucVl5zyabLBiABmIdfo6UV7pcd9POewMrpJ2vPKTyHcBeENIqQMp9Il4sAQRgKIvqb/Z61VD9+qCbZYzBV3brHK0jdOir4Ye54zgmRMX3K4i4uPgO+QWt3Ot8P3dItdndNvB4rKJmjb7l/dBAJQv8Q/+wgZE7SzQSPT6iWmmQ2auoF0hIAK6dxKFsJ0LjbHS1364fKFX2SDJ8w3UgsfrWBXm/IsaKgbjDTfF180+ZcsesQf4IVyhEEYnWwuVIPHz6uQkYLtWRwGRnukpoxiR6X3qOSeP33O7HKvHuMTxUYvIKzHOCjPACibH0lR7zsXh8QNvhxfZ9fmDKXZwcv+vNlWQA+EN3q9g1Vm57Tnz1nxTuYbm574SrsiKVgpP03ZqvBQZQDxoNkIGfZO6Qwi2I/UNC/MSFp9t34X0jo6q55+GxsxAd6up0NE5zHRanMtN7d7RYrZgC0nySHdnvWYDWq9xzTjpIlZg4FkFJAiqpS9nXqBdx1tAe2SqxwAVwDw1a4rLSsC+dMwuusNkqGl/ZiwpBCE55Coeqj8+Yi1/mrNM/yicAfzN26zkfYn9sT7bcbEt3Ubyx9MQGoEnCowzI1ZfboL22kUOq0hEeA6UmOp2qUOFw/2P0b6HyLBIQ+6eFH4brU6AHftlRboPpPC3bMbCbdPnoIRN+4GouMDejZQuopSECFLHDmJTKvKgipUEO7JIOHHvKxpsUXzrWFq1B2P4DvKDCV5iQz3ItSqOAzU0LcLU0a1yWKUmj0ZbqhLJaidGMYb9CDFhlg+904i8La3qF9/GCeeGcm3LGROmHM/Mh+HyOrzd9E355DQ2Ux6WufEMYEbcT5z2rGE1V3I/3m5NU5zWYvmyTt8gBmDxfIQD2D0E8NdWSZTnDKTcTNHDqeWWylCVBopXv91EslyD3mVnUw5Wd+OnV8lyT2U28R0zi7SaMqx8+Xy7iRHnQ+LRtk5Rujp4+oT4bsQ1XK3OcoOEfTccFETCmNZGuNZKqa+l7tHK9w420kwH0m62uTTZeUcbqD+34Tt1QZLdqwj7r9io1PghXgOl30pQbVKdnjceHWLWAP0witDsH+gVSFyYF7zCCBYwGCSqGSIb3DQEHAaCCBX0EggV5MIIFdTCCBXEGCyqGSIb3DQEMCgECoIIFOTCCBTUwXwYJKoZIhvcNAQUNMFIwMQYJKoZIhvcNAQUMMCQEEJ4Z6WgEnoha9ZdujF6S8wwCAggAMAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDPrJbP/0P2G/aZMWoDohKkBIIE0HBTjLQOiCIEzOQU1lpM8HzkfW5a9li+ski1O3CPyM2bvbn2yHJfEZT1pDuDWHF+cReVgOl9ZX/9t+/RZnqHtwDMxMZJA1d/T6IwLailqmJjRIxwnItfx7V/lpbGpLWu3jfNxDJkxoMCDaOk//rwmkEUS4cgy0MZN07+E2eZCPbH1VR4BkQZfW/dtiRcZAI20xTfHaW29oDiwmBx/6Q+rFWpTJo+soPEaP2KYjtu0yKyVXVnDHRZOBm4tunEE6HDXd1QO18pxH59IkI0a5nofJNdmtURaqNf56knO9hLOOw0ul17A0JVCWErGs8WeUbyVKYyPfh0mz9bbFwvgspSyKYNfCQnic9zOYpzafmR8bFyWkbGBypo2qOvcePJzEdjkNllCdlo4OZmTXPD3Z83DnwLCzczkX4nftkoNytpUet31aJeZjElsrR2fzT/wiznBcEfhqTeh4CWQViOY/vSSsdCyo3GnUHMJcu5BsSxL2JBaVCmUl1cRehyql6Jxh6YmxNJ2qPIhX5StFTyi0tAc9lMLS5FrJbbjvo3ZkfkSD30LijTbydvC9Q/faF8TYshz9zdYBTvcU99nXDDHv0dQ7T9OxICdD8m9zj/BcSL0lg1EjCxHhc6vFo9ba/iSHXOXExam3BANkVjhe4HaEbHPhRdUWs8rpYvMLBWOTvPkN+Pi7t37PO3kBSoBHV7lZKBLaw8Mr9OCKGSYKCJLv7uiN4pfE9SmwUa/O5prh9z/Y3j8msXm/509gK4ttJmbbPvM/ncE92F2xAx59KaR8LLkF54yTdZRMIUac/5+V/geWVtWmvY18kl8/N+L4II34vimEdKeJVg1DvAJKssC9TMoqdpcK6whXPAP7ULl6nLgjyCOWTBhzBMj7PJ0FL52i9Fs1ZOKpjxpDUOqJx0AUZtLlCYZHjve769UGXeFedAbmJTy+9ZKOl8wTl6Pc7VCggvQ3h+evKzvOcFoltJgJBWC57dNyxNbI9efflYUPRPUQQXZY7vXW0nPZwyOWDtWMFWbA+LKaL4KnTAHSdsQo8p26fbAonJ08Utqwk0yWDI62ma6DWvq5bR9FEXNejWsa1Pt11RxlRPZR5mvIyoi2Q+X/AQlHRLe3Ft8AK702Q4dyfojx4MBAhmNdRSstqEXoQj2beRUQ5RxpjqTOo9S0/q1+PnM5j01AMcsLDIDwmJUzGrko4V6jTfaZgNSJY4yRnqBSFYZcjYhZBKFOGs2ZlqOQq9R3f+vSCitVSvfXJB/c+knuEaJRqjxt6B7pZ8T1MFcorahYh1kGyTu/JaklSq3ZgrrrAFxIG7v2247KaN1upg4FJaJiO3WZay8yVk1xRZLZkscR/MFY5LFPRhMrxfP5lyz8RgQKjPgSBW5xdfnBw55L72Ogorfo5I3/sGdnvxxoDh759hdiyyomsGxtKa/Vy7iTlJoy2gY/IatE/U5Jvb+y4WJhjZlzzNbyoTVHThaOxSmkf0qve/hb3/Emjn31i4E/UeRtgkPWQ9hNfGdZgwXyZmHft5TjuHavPUNKunOd7Up2si+lpEGOPesO0/eAb60FLZ/TEuEavEoVZW1WE2MKxdrdXvlyVauhcZ4MmpJvgEjK0BpTuxvNe9UQMGlltYq7zSB43e34zgyEfjEiHiMSUwIwYJKoZIhvcNAQkVMRYEFI9W3hOOq15cKT/TSo/TvKsXNL+GMEEwMTANBglghkgBZQMEAgEFAAQgTDQoVupf9X13ECnEqaEryflDawino/d9Xtc2JdR9dyEECJvTJ/AbI65mAgIIAA==" + }, + "Cors": { + "allowedOrigins": "nmshd://prod;http://localhost:3090;localhost:3090;nmshd://", + "exposedHeaders": "X-Request-Time;X-Response-Time;X-Response-Duration-ms;X-Trace-Id" + }, + "Infrastructure": { + "EventBus": { + "Vendor": "RabbitMQ", + "ConnectionInfo": "rabbitmq", + "RabbitMQUsername": "guest", + "RabbitMQPassword": "guest", + "ConnectionRetryCount": 5 + }, + "SqlDatabase": { + "Provider": "Postgres", + "ConnectionString": "User Id=adminUi;Password=Passw0rd;Server=postgres;Port=5432;Database=enmeshed;" + } + }, + "Modules": { + "Challenges": { + "Infrastructure": { + "SqlDatabase": { + "Provider": "Postgres", + "ConnectionString": "User ID=challenges;Password=Passw0rd;Server=postgres;Port=5432;Database=enmeshed;" + } + } + }, + "Quotas": { + "Infrastructure": { + "SqlDatabase": { + "Provider": "Postgres", + "ConnectionString": "User ID=quotas;Password=Passw0rd;Server=postgres;Port=5432;Database=enmeshed;" + } + } + }, + "Devices": { + "Infrastructure": { + "SqlDatabase": { + "Provider": "Postgres", + "ConnectionString": "User ID=devices;Password=Passw0rd;Server=postgres;Port=5432;Database=enmeshed;" + }, + "PushNotifications": { + "Providers": { + "Dummy": { + "Enabled": true + } + } + } + }, + "Application": { + "didDomainName": "localhost" + } + }, + "Files": { + "Infrastructure": { + "SqlDatabase": { + "Provider": "Postgres", + "ConnectionString": "User ID=files;Password=Passw0rd;Server=postgres;Port=5432;Database=enmeshed;" + }, + "BlobStorage": { + "CloudProvider": "Azure", + "ConnectionInfo": "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite:10000/devstoreaccount1;" + } + } + }, + "Messages": { + "Infrastructure": { + "SqlDatabase": { + "Provider": "Postgres", + "ConnectionString": "User ID=messages;Password=Passw0rd;Server=postgres;Port=5432;Database=enmeshed;" + } + }, + "Application": { + "didDomainName": "localhost" + } + }, + "Relationships": { + "Infrastructure": { + "SqlDatabase": { + "Provider": "Postgres", + "ConnectionString": "User ID=relationships;Password=Passw0rd;Server=postgres;Port=5432;Database=enmeshed;" + } + }, + "Application": { + "didDomainName": "localhost" + } + }, + "Synchronization": { + "Infrastructure": { + "SqlDatabase": { + "Provider": "Postgres", + "ConnectionString": "User ID=synchronization;Password=Passw0rd;Server=postgres;Port=5432;Database=enmeshed;" + } + } + }, + "Tokens": { + "Infrastructure": { + "SqlDatabase": { + "Provider": "Postgres", + "ConnectionString": "User ID=tokens;Password=Passw0rd;Server=postgres;Port=5432;Database=enmeshed;" + } + } + } + }, + "Serilog": { + "MinimumLevel": { + "Default": "Debug" + }, + "Enrich": ["FromLogContext", "WithProcessId", "WithThreadId"], + "WriteTo": [ + { + "Name": "Console", + "Args": { + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}|{Level} - CorrelationId:{CorrelationId} - RequestId:{RequestId} - RequestPath:{RequestPath}{NewLine} {SourceContext}{NewLine} {Message}{NewLine}{Exception}" + } + } + ] + }, + "SwaggerUi": { + "TokenUrl": "http://localhost:5000/connect/token", + "Enabled": true + }, + "Logging": { + "WriteTo": { + "Console": { + "Name": "Console", + "Args": { + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss}|{Level} => CorrelationID:{CorrelationID} => RequestId:{RequestId} => RequestPath:{RequestPath}{NewLine} {SourceContext}{NewLine} {Message}{NewLine}{Exception}" + } + } + } + } +} diff --git a/.dev/compose.backbone.env b/.dev/compose.backbone.env new file mode 100644 index 0000000..1d41727 --- /dev/null +++ b/.dev/compose.backbone.env @@ -0,0 +1 @@ +BACKBONE_VERSION=6.6.1 diff --git a/.dev/compose.backbone.yml b/.dev/compose.backbone.yml new file mode 100644 index 0000000..8428dee --- /dev/null +++ b/.dev/compose.backbone.yml @@ -0,0 +1,129 @@ +services: + consumer-api: + image: ghcr.io/nmshd/backbone-consumer-api:${BACKBONE_VERSION} + container_name: consumer-api + hostname: consumer-api + environment: + - ASPNETCORE_ENVIRONMENT=Development + ports: + - "8090:8080" + depends_on: + database: + condition: service_started + rabbitmq: + condition: service_started + seed-database: + condition: service_completed_successfully + azure-storage-emulator: + condition: service_started + database-migrator: + condition: service_completed_successfully + configs: + - source: Config + target: app/appsettings.override.json + + event-handler-service: + image: ghcr.io/nmshd/backbone-event-handler:${BACKBONE_VERSION} + container_name: event-handler-service + depends_on: + database: + condition: service_started + rabbitmq: + condition: service_started + database-migrator: + condition: service_completed_successfully + configs: + - source: Config + target: app/appsettings.override.json + + admin-ui: + image: ghcr.io/nmshd/backbone-admin-ui:${BACKBONE_VERSION} + container_name: admin-ui + hostname: admin-ui + ports: + - "8091:8080" + depends_on: + database: + condition: service_started + rabbitmq: + condition: service_started + consumer-api: + condition: service_healthy + database-migrator: + condition: service_completed_successfully + configs: + - source: Config + target: app/appsettings.override.json + + database-migrator: + container_name: database-migrator-test + image: ghcr.io/nmshd/backbone-database-migrator:${BACKBONE_VERSION} + depends_on: + seed-database: + condition: service_completed_successfully + environment: + Infrastructure__SqlDatabase__Provider: Postgres + Infrastructure__SqlDatabase__ConnectionString: "Server=postgres;Database=enmeshed;User Id=postgres;Password=Passw0rd;Port=5432" + ASPNETCORE_ENVIRONMENT: Development + configs: + - source: Config + target: app/appsettings.override.json + + ### infrastructure ### + + database: + container_name: bkb-postgres + hostname: postgres + image: postgres + environment: + - POSTGRES_PASSWORD=Passw0rd + - POSTGRES_DB=enmeshed + ports: + - 5432:5432 + healthcheck: + test: ["CMD", "pg_isready", "-U", "postgres"] + interval: 5s + timeout: 5s + retries: 5 + + azure-storage-emulator: + container_name: azure-storage-emulator + hostname: azurite + image: mcr.microsoft.com/azure-storage/azurite + command: azurite -d /data/debug.log -l /data --blobHost "0.0.0.0" --queueHost "0.0.0.0" + ports: + - "10000:10000" + + rabbitmq: + container_name: bkb-rabbitmq + hostname: rabbitmq + image: rabbitmq:3.12.10-management-alpine + ports: + - "5672:5672" + + ### seeds ### + + seed-database: + container_name: seed-database + image: postgres + environment: + - PGPASSWORD=Passw0rd + command: /bin/bash -c 'env && apt update -y && apt install -y wget && wget https://raw.githubusercontent.com/nmshd/backbone/${BACKBONE_VERSION}/scripts/sql/postgres/setup.sql -O /setup-postgres.sql && psql -h postgres -U postgres -d enmeshed -f /setup-postgres.sql' + depends_on: + database: + condition: service_healthy + + seed-client: + container_name: seed-client + image: ghcr.io/nmshd/backbone-admin-cli:${BACKBONE_VERSION} + depends_on: + consumer-api: + condition: service_healthy + command: backbone client create --clientId test --clientSecret test --defaultTier Basic + environment: + Database__Provider: Postgres + Database__ConnectionString: "Server=postgres;Database=enmeshed;User Id=devices;Password=Passw0rd;Port=5432" + +configs: + Config: + file: appsettings.override.json diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 160b16f..509fefa 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,3 +19,14 @@ jobs: distribution: "temurin" - name: Build Artifact run: mvn clean verify --batch-mode --file ./pom.xml + + - name: Start Backbone + run: docker compose -p test-backbone --env-file .dev/compose.backbone.env -f .dev/compose.backbone.yml up -d + + - name: Run Tests + run: mvn test + env: + NMSHD_TEST_BASEURL: http://host.docker.internal:8090 + NMSHD_TEST_CLIENTID: test + NMSHD_TEST_CLIENTSECRET: test + NMSHD_TEST_ADDRESS_GENERATION_HOSTNAME_OVERRIDE: localhost diff --git a/src/test/java/eu/enmeshed/utils/ConnectorContainer.java b/src/test/java/eu/enmeshed/utils/ConnectorContainer.java index 6225313..2bfe921 100644 --- a/src/test/java/eu/enmeshed/utils/ConnectorContainer.java +++ b/src/test/java/eu/enmeshed/utils/ConnectorContainer.java @@ -26,6 +26,11 @@ private ConnectorContainer(DockerImageName dockerImageName) { var clientSecret = System.getenv("NMSHD_TEST_CLIENTSECRET"); withEnv("transportLibrary:platformClientSecret", clientSecret); + var addressGenerationHostnameOverride = System.getenv("NMSHD_TEST_ADDRESS_GENERATION_HOSTNAME_OVERRIDE"); + if (addressGenerationHostnameOverride != null) { + withEnv("transportLibrary:addressGenerationHostnameOverride", addressGenerationHostnameOverride); + } + withEnv("database:driver", "lokijs"); withEnv("database:folder", "./"); withEnv("infrastructure:httpServer:apiKey", API_KEY); From 0c4028fc1bbf99bb5be02c798f5835a67236be6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 15:53:40 +0200 Subject: [PATCH 28/58] ci: simplify pipeline --- .github/workflows/test.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 509fefa..038fbf6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,7 +7,7 @@ on: - reopened jobs: - build: + test: runs-on: ubuntu-latest permissions: contents: read @@ -18,11 +18,9 @@ jobs: java-version: "17" distribution: "temurin" - name: Build Artifact - run: mvn clean verify --batch-mode --file ./pom.xml - + run: mvn clean verify - name: Start Backbone run: docker compose -p test-backbone --env-file .dev/compose.backbone.env -f .dev/compose.backbone.yml up -d - - name: Run Tests run: mvn test env: From 166951bbf644ae7eebe2f2ff0d835c844cb7b62a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 15:59:26 +0200 Subject: [PATCH 29/58] ci: actually run tests --- pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pom.xml b/pom.xml index df802fa..2f012f0 100644 --- a/pom.xml +++ b/pom.xml @@ -121,4 +121,17 @@ test + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + + ${basedir}\test\java\ + + + + From 41855f42c9a59dbdcdcce619fb1c6c646bfeae9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 16:00:47 +0200 Subject: [PATCH 30/58] ci: actually run tests --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2f012f0..f1f0608 100644 --- a/pom.xml +++ b/pom.xml @@ -129,7 +129,7 @@ maven-surefire-plugin 3.2.5 - ${basedir}\test\java\ + ${basedir}src\test\java\ From f25660604d190b46398d4efe015a4bc1066bc4d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 16:07:19 +0200 Subject: [PATCH 31/58] ci: actually run tests --- src/test/java/eu/enmeshed/utils/ConnectorContainer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/eu/enmeshed/utils/ConnectorContainer.java b/src/test/java/eu/enmeshed/utils/ConnectorContainer.java index 2bfe921..e69090f 100644 --- a/src/test/java/eu/enmeshed/utils/ConnectorContainer.java +++ b/src/test/java/eu/enmeshed/utils/ConnectorContainer.java @@ -35,6 +35,8 @@ private ConnectorContainer(DockerImageName dockerImageName) { withEnv("database:folder", "./"); withEnv("infrastructure:httpServer:apiKey", API_KEY); + withExtraHost("host.docker.internal", "host-gateway"); + waitingFor(new HttpWaitStrategy().forStatusCode(200).forPort(80).forPath("/health")); } From cb5911efd15ca399182486fcca9a37861edd84ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 16:17:37 +0200 Subject: [PATCH 32/58] ci: actually run tests --- .github/workflows/test.yml | 6 ++++-- src/test/java/eu/enmeshed/ChallengesTest.java | 5 ++--- src/test/java/eu/enmeshed/TokensTest.java | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 038fbf6..d35e905 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,11 +18,13 @@ jobs: java-version: "17" distribution: "temurin" - name: Build Artifact - run: mvn clean verify + run: mvn clean verify --batch-mode --file ./pom.xml + - name: Start Backbone run: docker compose -p test-backbone --env-file .dev/compose.backbone.env -f .dev/compose.backbone.yml up -d + - name: Run Tests - run: mvn test + run: mvn test --batch-mode --file ./pom.xml env: NMSHD_TEST_BASEURL: http://host.docker.internal:8090 NMSHD_TEST_CLIENTID: test diff --git a/src/test/java/eu/enmeshed/ChallengesTest.java b/src/test/java/eu/enmeshed/ChallengesTest.java index 93176cd..10778ec 100644 --- a/src/test/java/eu/enmeshed/ChallengesTest.java +++ b/src/test/java/eu/enmeshed/ChallengesTest.java @@ -11,7 +11,9 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +@Testcontainers public class ChallengesTest { @Container @@ -26,9 +28,6 @@ public class ChallengesTest { @BeforeAll public static void setUp() { - connector1.start(); - connector2.start(); - client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); diff --git a/src/test/java/eu/enmeshed/TokensTest.java b/src/test/java/eu/enmeshed/TokensTest.java index 623e4bc..38971a0 100644 --- a/src/test/java/eu/enmeshed/TokensTest.java +++ b/src/test/java/eu/enmeshed/TokensTest.java @@ -12,7 +12,9 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +@Testcontainers public class TokensTest { @Container @@ -26,8 +28,6 @@ public class TokensTest { @BeforeAll public static void setUp() { - connector1.start(); - connector2.start(); client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); From fab5c109e1884e5a726965b0b18febd306c721a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 16:18:45 +0200 Subject: [PATCH 33/58] ci: actually run tests --- .github/workflows/test.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d35e905..0115c03 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,12 +17,8 @@ jobs: with: java-version: "17" distribution: "temurin" - - name: Build Artifact - run: mvn clean verify --batch-mode --file ./pom.xml - - name: Start Backbone run: docker compose -p test-backbone --env-file .dev/compose.backbone.env -f .dev/compose.backbone.yml up -d - - name: Run Tests run: mvn test --batch-mode --file ./pom.xml env: From a27c7b6d9057ff2ca32a7a6391edc58a1a258aef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 16:27:48 +0200 Subject: [PATCH 34/58] ci: actually run tests --- .github/workflows/test.yml | 2 +- src/main/java/eu/enmeshed/ConnectorClient.java | 2 +- src/test/java/eu/enmeshed/utils/TestUtils.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0115c03..dfe1fa8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,7 +20,7 @@ jobs: - name: Start Backbone run: docker compose -p test-backbone --env-file .dev/compose.backbone.env -f .dev/compose.backbone.yml up -d - name: Run Tests - run: mvn test --batch-mode --file ./pom.xml + run: mvn test env: NMSHD_TEST_BASEURL: http://host.docker.internal:8090 NMSHD_TEST_CLIENTID: test diff --git a/src/main/java/eu/enmeshed/ConnectorClient.java b/src/main/java/eu/enmeshed/ConnectorClient.java index 077d5b9..5dc61ff 100644 --- a/src/main/java/eu/enmeshed/ConnectorClient.java +++ b/src/main/java/eu/enmeshed/ConnectorClient.java @@ -69,7 +69,7 @@ public ConnectorClient( } public static ConnectorClient create(String url, String apiKey) { - return create(url, apiKey, new Options(), Level.FULL); + return create(url, apiKey, new Options(), Level.NONE); } public static ConnectorClient create(String url, String apiKey, Options options, Level loggerLevel) { diff --git a/src/test/java/eu/enmeshed/utils/TestUtils.java b/src/test/java/eu/enmeshed/utils/TestUtils.java index 92ba2f3..ef87c2f 100644 --- a/src/test/java/eu/enmeshed/utils/TestUtils.java +++ b/src/test/java/eu/enmeshed/utils/TestUtils.java @@ -45,7 +45,7 @@ private static ConnectorRelationship syncUntilHasRelationshipInStatus(ConnectorC } try { - Thread.sleep(1000); + Thread.sleep(1000 + (i * 200)); } catch (InterruptedException e) { throw new RuntimeException(e); } From 125013ba50a849c7b65102d0215174b0afea140c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 17:10:05 +0200 Subject: [PATCH 35/58] ci: upload backbone logs on fail --- .github/workflows/test.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dfe1fa8..9665ed3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,3 +26,13 @@ jobs: NMSHD_TEST_CLIENTID: test NMSHD_TEST_CLIENTSECRET: test NMSHD_TEST_ADDRESS_GENERATION_HOSTNAME_OVERRIDE: localhost + - name: Get Backbone Logs When Tests Fail + if: failure() + run: docker compose -p test-backbone --env-file .dev/compose.backbone.env -f .dev/compose.backbone.yml logs consumer-api event-handler-service admin-ui database-migrator > backbone-logs.txt + + - name: Archive logs + if: failure() + uses: actions/upload-artifact@v4 + with: + name: backbone-docker-logs + path: backbone-logs.txt \ No newline at end of file From e17f5df445c5078ad56f02d4e6852edbbd266221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Tue, 17 Sep 2024 17:10:18 +0200 Subject: [PATCH 36/58] fix: add getters --- .../java/eu/enmeshed/requests/files/LoadPeerFileRequest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java b/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java index ee68df5..734d8c4 100644 --- a/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java +++ b/src/main/java/eu/enmeshed/requests/files/LoadPeerFileRequest.java @@ -1,8 +1,10 @@ package eu.enmeshed.requests.files; import lombok.Builder; +import lombok.Getter; @Builder +@Getter public class LoadPeerFileRequest { private String reference; From c2e7c43919ece6ac72ffcffaed060111056da300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Fri, 11 Oct 2024 12:24:31 +0200 Subject: [PATCH 37/58] chore: add testcontainers --- build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.gradle b/build.gradle index 4395eb0..66cad55 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ ext { mockitoVersion = "5.8.0" junitVersion = "5.10.1" slf4jVersion = "2.0.10" + testcontainersVersion = "1.20.2" } dependencies { @@ -43,6 +44,9 @@ dependencies { testImplementation "org.slf4j:slf4j-simple:2.0.16" testCompileOnly "org.projectlombok:lombok:${lombokVersion}" testAnnotationProcessor "org.projectlombok:lombok:${lombokVersion}" + + testImplementation "org.testcontainers:testcontainers:${testcontainersVersion}" + testImplementation "org.testcontainers:junit-jupiter:${testcontainersVersion}" } test { From 147c38746e6bfd4dda6fc216ebe55966ff60c732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Fri, 11 Oct 2024 12:27:59 +0200 Subject: [PATCH 38/58] chore: remove fromWrapper methods --- .../requestItems/CreateAttributeRequestItem.java | 10 ---------- .../requestItems/ShareAttributeRequestItem.java | 7 ------- 2 files changed, 17 deletions(-) diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java index 647a778..7a69993 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java @@ -18,14 +18,4 @@ public class CreateAttributeRequestItem extends RequestItemDerivation { private Attribute attribute; - - public static CreateAttributeRequestItem fromWrapper(ConnectorAttribute wrapper, boolean mustBeAccepted) { - return CreateAttributeRequestItem.builder().attribute(relationshipAttribute(wrapper)).mustBeAccepted(mustBeAccepted).build(); - } - - private static RelationshipAttribute relationshipAttribute(ConnectorAttribute wrapper) { - return RelationshipAttribute.builder().type(RelationshipAttribute.class.getSimpleName()).owner(wrapper.getContent().getOwner()).key("AllowCertificateRequest") - .confidentiality(RelationshipAttribute.Confidentiality.PRIVATE).technical(true).value(ProprietaryBoolean.builder().title("Zeugnisanfragen erlauben").value(true).build()) - .build(); - } } diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java index 8a30a8b..998695b 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java @@ -18,11 +18,4 @@ public class ShareAttributeRequestItem extends RequestItemDerivation { private Attribute attribute; private String sourceAttributeId; - - public static ShareAttributeRequestItem fromWrapper(ConnectorAttribute wrapper, boolean mustBeAccepted) { - Attribute content = wrapper.getContent(); - content.setType(IdentityAttribute.class.getSimpleName()); - - return ShareAttributeRequestItem.builder().mustBeAccepted(mustBeAccepted).attribute(content).sourceAttributeId(wrapper.getId()).build(); - } } From 3abea729b6d0c5d7d6c094bc08668eba96ac656f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Fri, 11 Oct 2024 12:30:34 +0200 Subject: [PATCH 39/58] fix: use Builder.Default --- src/main/java/eu/enmeshed/model/request/Request.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/eu/enmeshed/model/request/Request.java b/src/main/java/eu/enmeshed/model/request/Request.java index 1255ccf..0fc3e52 100644 --- a/src/main/java/eu/enmeshed/model/request/Request.java +++ b/src/main/java/eu/enmeshed/model/request/Request.java @@ -5,6 +5,7 @@ import eu.enmeshed.model.request.requestItems.RequestItem; import java.time.ZonedDateTime; import java.util.List; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -17,6 +18,7 @@ public class Request extends MessageContent { @JsonProperty("@type") + @Builder.Default private String type = "Request"; private String id; private String title; From 07ef2c08ee104dbe6b9f85621da58017158dea60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Fri, 11 Oct 2024 12:35:30 +0200 Subject: [PATCH 40/58] ci: only sign if CI env is set --- build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.gradle b/build.gradle index 66cad55..41da1bd 100644 --- a/build.gradle +++ b/build.gradle @@ -121,3 +121,7 @@ tasks.withType(JavaCompile).configureEach { tasks.withType(Javadoc).configureEach { options.encoding = 'UTF-8' } + +tasks.withType(Sign).configureEach { + onlyIf("CI env is set") { providers.environmentVariable("CI").isPresent() } +} \ No newline at end of file From 07a1fc3e530b80a7f2420d6ad7808794cf9e91de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Fri, 11 Oct 2024 15:36:16 +0200 Subject: [PATCH 41/58] fix: migrate gradle --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 41da1bd..4b32b70 100644 --- a/build.gradle +++ b/build.gradle @@ -37,8 +37,8 @@ dependencies { implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jacksonVersion}" implementation "org.slf4j:slf4j-api:${slf4jVersion}" - - testImplementation "org.junit.jupiter:junit-jupiter:5.11.2" + testImplementation 'org.junit.jupiter:junit-jupiter:5.11.2' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.2' testImplementation "org.mockito:mockito-junit-jupiter:5.14.1" testImplementation "org.slf4j:slf4j-simple:2.0.16" From b43426fce6e52594ccf7327e8020e6a01ca827f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Mon, 14 Oct 2024 16:52:41 +0200 Subject: [PATCH 42/58] chore: remove isX --- .../model/request/ConnectorRequestValidationResult.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java b/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java index 90077a6..038a868 100644 --- a/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java +++ b/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java @@ -1,6 +1,7 @@ package eu.enmeshed.model.request; import java.util.List; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -14,7 +15,8 @@ @Builder public class ConnectorRequestValidationResult { - private boolean isSuccess; + @JsonProperty("isSuccess") + private boolean success; private String code; private String message; private List items; From 59bc4b4862f7b12c71351f7b1d6a87925eb06e4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Vetni=C4=87?= Date: Mon, 21 Oct 2024 10:16:52 +0200 Subject: [PATCH 43/58] fix: update field name as the annotation did not function --- .../relationshipTemplates/GetRelationshipTemplatesQuery.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java index dc0b544..1171838 100644 --- a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java @@ -19,6 +19,5 @@ public class GetRelationshipTemplatesQuery { private String createdBy; private String createdByDevice; private int maxNumberOfAllocations; - @JsonProperty("isOwn") - private boolean own; + private boolean isOwn; } From b1fec4c1da52e6f7744041ecaab189dc308d5330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Vetni=C4=87?= Date: Mon, 21 Oct 2024 10:17:09 +0200 Subject: [PATCH 44/58] feat: update header --- .../eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java index 4211235..21ff455 100644 --- a/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/RelationshipTemplatesEndpoint.java @@ -30,7 +30,7 @@ static RelationshipTemplatesEndpoint configure(String url, Builder builder) { ConnectorResponse> getRelationshipTemplates(@QueryMap GetRelationshipTemplatesQuery request); @RequestLine("GET /api/v2/RelationshipTemplates/{id}") - @Headers("Content-Type: application/json") + @Headers("Accept: application/json") ConnectorResponse getRelationshipTemplate(@Param("id") String id); @RequestLine("GET /api/v2/RelationshipTemplates/Own") From cff14af42526bd39342832dae4d365b78fa0c2ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Vetni=C4=87?= Date: Mon, 21 Oct 2024 10:17:27 +0200 Subject: [PATCH 45/58] feat: add relationship template tests --- .../eu/enmeshed/RelationshipTemplateTest.java | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 src/test/java/eu/enmeshed/RelationshipTemplateTest.java diff --git a/src/test/java/eu/enmeshed/RelationshipTemplateTest.java b/src/test/java/eu/enmeshed/RelationshipTemplateTest.java new file mode 100644 index 0000000..74a2759 --- /dev/null +++ b/src/test/java/eu/enmeshed/RelationshipTemplateTest.java @@ -0,0 +1,175 @@ +package eu.enmeshed; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import eu.enmeshed.model.relationshipTemplates.ArbitraryRelationshipTemplateContent; +import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; +import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateContentDerivation; +import eu.enmeshed.requests.relationshipTemplates.CreateOwnRelationshipTemplateRequest; +import eu.enmeshed.requests.relationshipTemplates.CreateTokenForOwnRelationshipTemplateRequest; +import eu.enmeshed.requests.relationshipTemplates.GetOwnRelationshipTemplatesQuery; +import eu.enmeshed.requests.relationshipTemplates.GetRelationshipTemplatesQuery; +import eu.enmeshed.requests.relationshipTemplates.LoadPeerRelationshipTemplateRequest; +import eu.enmeshed.utils.ConnectorContainer; +import java.time.ZonedDateTime; +import org.hamcrest.CoreMatchers; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +@Testcontainers +public class RelationshipTemplateTest { + + @Container + public static ConnectorContainer connector1 = new ConnectorContainer(); + @Container + public static ConnectorContainer connector2 = new ConnectorContainer(); + + private static ConnectorClient client1; + private static ConnectorClient client2; + + @BeforeAll + public static void setUp() { + client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); + client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); + } + + @Test + public void createTemplate() { + + var template = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + + assertThat(template.getId(), CoreMatchers.startsWith("RLT")); + assertThat(template.getCreatedBy(), CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); + } + + @Test + public void createTemplateWithUndefinedMaxNumberOfAllocations() { + + var template = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequestWithUndefinedMaxNumberOfAllocations()).getResult(); + + assertThat(template.getId(), CoreMatchers.startsWith("RLT")); + assertThat(template.getMaxNumberOfAllocations(), CoreMatchers.nullValue()); + } + + @Test + public void readTemplateWithUndefinedMaxNumberOfAllocations() { + + var createdTemplate = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequestWithUndefinedMaxNumberOfAllocations()).getResult(); + var createdTemplateId = createdTemplate.getId(); + + var response = client1.relationshipTemplates.getRelationshipTemplate(createdTemplateId).getResult(); + + assertThat(response.getId(), CoreMatchers.startsWith("RLT")); + assertThat(response.getMaxNumberOfAllocations(), CoreMatchers.nullValue()); + } + + @Test + public void seeIfTemplateExistsInOwnTemplates() { + + var createdTemplate = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + + var ownTemplates = client1.relationshipTemplates.getOwnRelationshipTemplates(GetOwnRelationshipTemplatesQuery.builder().maxNumberOfAllocations(1).build()).getResult(); + var ownTemplateIds = ownTemplates.stream().map(t -> createdTemplate.getId()).toList(); + + assertThat(ownTemplateIds, CoreMatchers.hasItem(createdTemplate.getId())); + } + + @Test + public void seeIfTemplateExistsWhenFetchingWithId() { + + var createdTemplate = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + + var fetchedTemplate = client1.relationshipTemplates.getRelationshipTemplate(createdTemplate.getId()).getResult(); + + assertThat(fetchedTemplate.getId(), CoreMatchers.startsWith("RLT")); + assertThat(fetchedTemplate.getCreatedBy(), CoreMatchers.equalTo(client1.account.getIdentityInfo().getResult().getAddress())); + } + + @Test + public void expectValidationErrorForSendingMaxNumberOfAllocationsIsZero() { + + var exception = assertThrows( + Exception.class, + () -> client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(0)).getResult()); + + assertThat(exception.getCause().getMessage(), CoreMatchers.equalTo("maxNumberOfAllocations must be >= 1")); + } + + @Test + public void queryTemplates() { + var template1 = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + var template2 = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + var template3 = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + + var templates = client1.relationshipTemplates.getRelationshipTemplates(GetRelationshipTemplatesQuery.builder() + .maxNumberOfAllocations(1) + .isOwn(true) + .build()).getResult(); + + assertThat(templates.stream().map(RelationshipTemplate::getId).toList(), CoreMatchers.hasItems(template1.getId(), template2.getId(), template3.getId())); + } + + @Test + public void queryOwnTemplates() { + var template1 = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + var template2 = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + var template3 = client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + + var templates = client1.relationshipTemplates.getOwnRelationshipTemplates(GetOwnRelationshipTemplatesQuery.builder() + .maxNumberOfAllocations(1) + .build()).getResult(); + + assertThat(templates.stream().map(RelationshipTemplate::getId).toList(), CoreMatchers.hasItems(template1.getId(), template2.getId(), template3.getId())); + } + + @Test + public void queryPeerTemplates() { + var templateId1 = exchangeTemplate(client1, client2); + var templateId2 = exchangeTemplate(client1, client2); + var templateId3 = exchangeTemplate(client1, client2); + + var templates = client2.relationshipTemplates.getRelationshipTemplates(GetRelationshipTemplatesQuery.builder() + .maxNumberOfAllocations(1) + .isOwn(false) + .build()).getResult(); + + assertThat(templates.stream().map(RelationshipTemplate::getId).toList(), CoreMatchers.hasItems(templateId1, templateId2, templateId3)); + } + + private CreateOwnRelationshipTemplateRequest getCreateOwnTemplateRequest(int maxNumberOfAllocations) { + return + CreateOwnRelationshipTemplateRequest.builder() + .maxNumberOfAllocations(maxNumberOfAllocations) + .content(ArbitraryRelationshipTemplateContent.builder().value("value").build()) + .expiresAt(ZonedDateTime.now().plusDays(1)).build(); + } + + private CreateOwnRelationshipTemplateRequest getCreateOwnTemplateRequestWithUndefinedMaxNumberOfAllocations() { + return CreateOwnRelationshipTemplateRequest.builder() + .content(ArbitraryRelationshipTemplateContent.builder().value("value").build()) + .expiresAt(ZonedDateTime.now().plusDays(1)).build(); + } + + private String exchangeTemplate(ConnectorClient clientCreator, ConnectorClient clientRecipient) { + + var template = clientCreator.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(1)).getResult(); + + var templateToken = clientCreator.relationshipTemplates.createTokenForOwnRelationshipTemplate( + template.getId(), + CreateTokenForOwnRelationshipTemplateRequest.builder() + .expiresAt(ZonedDateTime.now().plusDays(1)) + .build()) + .getResult(); + + var response = clientRecipient.relationshipTemplates.loadPeerRelationshipTemplate( + LoadPeerRelationshipTemplateRequest.builder() + .reference(templateToken.getTruncatedReference()) + .build()) + .getResult(); + + return template.getId(); + } +} From a5c82683c42db7118360223bab202c6f61fabdc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Vetni=C4=87?= Date: Mon, 21 Oct 2024 15:53:35 +0200 Subject: [PATCH 46/58] feat: add relationship and relationship template methods --- .../java/eu/enmeshed/utils/TestUtils.java | 165 +++++++++++++----- 1 file changed, 126 insertions(+), 39 deletions(-) diff --git a/src/test/java/eu/enmeshed/utils/TestUtils.java b/src/test/java/eu/enmeshed/utils/TestUtils.java index ef87c2f..1eff16a 100644 --- a/src/test/java/eu/enmeshed/utils/TestUtils.java +++ b/src/test/java/eu/enmeshed/utils/TestUtils.java @@ -8,6 +8,7 @@ import eu.enmeshed.model.relationships.RelationshipStatus; import eu.enmeshed.model.tokens.ConnectorToken; import eu.enmeshed.requests.relationshipTemplates.CreateOwnRelationshipTemplateRequest; +import eu.enmeshed.requests.relationshipTemplates.CreateTokenForOwnRelationshipTemplateRequest; import eu.enmeshed.requests.relationshipTemplates.LoadPeerRelationshipTemplateRequest; import eu.enmeshed.requests.relationships.CreateRelationshipRequest; import eu.enmeshed.requests.tokens.CreateOwnTokenRequest; @@ -17,64 +18,150 @@ public class TestUtils { - public static ConnectorRelationship establishRelationship(ConnectorClient client1, ConnectorClient client2) { - var template = exchangeTemplate(client1, client2); + public static class Relationships { - var creationContent = ArbitraryRelationshipCreationContent.builder().value("value").build(); - var createRelationshipResponse = client2.relationships.createRelationship( - CreateRelationshipRequest.builder().creationContent(creationContent).templateId(template.getId()).build()); + private static ConnectorRelationship createPendingRelationship(ConnectorClient client1, ConnectorClient client2) { - var relationship = syncUntilHasRelationshipInStatus(client1, createRelationshipResponse.getResult().getId(), RelationshipStatus.PENDING); + var template = RelationshipTemplates.exchangeTemplate(client1, client2); - var acceptResponse = client1.relationships.acceptRelationship(relationship.getId()); + var creationContent = ArbitraryRelationshipCreationContent.builder().value("value").build(); + var createRelationshipResponse = client2.relationships.createRelationship( + CreateRelationshipRequest.builder().creationContent(creationContent).templateId(template.getId()).build()); - return syncUntilHasRelationshipInStatus(client2, acceptResponse.getResult().getId(), RelationshipStatus.ACTIVE); - } + return syncUntilHasRelationshipInStatus(client1, createRelationshipResponse.getResult().getId(), RelationshipStatus.PENDING); + } - private static ConnectorRelationship syncUntilHasRelationshipInStatus(ConnectorClient client, String id, RelationshipStatus relationshipStatus) { - for (int i = 0; i < 10; i++) { - client.account.sync(); + public static ConnectorRelationship establishRelationship(ConnectorClient client1, ConnectorClient client2) { - var relationship = getRelationshipSafeById(client, id); - if (relationship == null) { - continue; - } + var relationship = createPendingRelationship(client1, client2); + var acceptResponse = client1.relationships.acceptRelationship(relationship.getId()); + + return syncUntilHasRelationshipInStatus(client2, acceptResponse.getResult().getId(), RelationshipStatus.ACTIVE); + } + + public static ConnectorRelationship rejectRelationship(ConnectorClient client1, ConnectorClient client2) { + + var relationship = Relationships.createPendingRelationship(client1, client2); + var rejectResponse = client1.relationships.rejectRelationship(relationship.getId()); + + return syncUntilHasRelationshipInStatus(client2, rejectResponse.getResult().getId(), RelationshipStatus.REJECTED); + } + + public static ConnectorRelationship revokeRelationship(ConnectorClient client1, ConnectorClient client2) { + + var relationship = Relationships.createPendingRelationship(client1, client2); + var revokeResponse = client2.relationships.revokeRelationship(relationship.getId()); + + return syncUntilHasRelationshipInStatus(client1, revokeResponse.getResult().getId(), RelationshipStatus.REVOKED); + } + + public static ConnectorRelationship establishAndTerminateRelationship(ConnectorClient client1, ConnectorClient client2) { + + var relationship = Relationships.establishRelationship(client1, client2); + client1.relationships.terminateRelationship(relationship.getId()); + + syncUntilHasRelationshipInStatus(client1, relationship.getId(), RelationshipStatus.TERMINATED); + syncUntilHasRelationshipInStatus(client2, relationship.getId(), RelationshipStatus.TERMINATED); + + return relationship; + } + + public static void reactivateRelationship(ConnectorClient client1, ConnectorClient client2, String relationshipId) { + + client1.relationships.requestRelationshipReactivation(relationshipId).getResult(); + + syncUntilHasRelationshipInStatus(client1, relationshipId, RelationshipStatus.TERMINATED); + syncUntilHasRelationshipInStatus(client2, relationshipId, RelationshipStatus.TERMINATED); + } + + public static void rejectReactivationOfRelationship(ConnectorClient rejectingClient, ConnectorClient peerClient, String relationshipId) { + rejectingClient.relationships.rejectRelationshipReactivation(relationshipId).getResult(); - if (relationship.getStatus() == relationshipStatus) { - return relationship; + syncUntilHasRelationshipInStatus(rejectingClient, relationshipId, RelationshipStatus.TERMINATED); + syncUntilHasRelationshipInStatus(peerClient, relationshipId, RelationshipStatus.TERMINATED); + } + + public static void revokeReactivationOfRelationship(ConnectorClient revokingClient, ConnectorClient peerClient, String relationshipId) { + revokingClient.relationships.revokeRelationshipReactivation(relationshipId).getResult(); + + syncUntilHasRelationshipInStatus(revokingClient, relationshipId, RelationshipStatus.TERMINATED); + syncUntilHasRelationshipInStatus(peerClient, relationshipId, RelationshipStatus.TERMINATED); + } + + public static void acceptReactivationOfRelationship(ConnectorClient acceptingClient, ConnectorClient peerClient, String relationshipId) { + acceptingClient.relationships.acceptRelationshipReactivation(relationshipId).getResult(); + + syncUntilHasRelationshipInStatus(acceptingClient, relationshipId, RelationshipStatus.ACTIVE); + syncUntilHasRelationshipInStatus(peerClient, relationshipId, RelationshipStatus.ACTIVE); + } + + private static ConnectorRelationship syncUntilHasRelationshipInStatus(ConnectorClient client, String id, RelationshipStatus relationshipStatus) { + for (int i = 0; i < 10; i++) { + client.account.sync(); + + var relationship = getRelationshipSafeById(client, id); + if (relationship == null) { + continue; + } + + if (relationship.getStatus() == relationshipStatus) { + return relationship; + } + + try { + Thread.sleep(1000 + (i * 200)); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } } + throw new RuntimeException("Relationship " + id + " did not reach status " + relationshipStatus); + } + + private static ConnectorRelationship getRelationshipSafeById(ConnectorClient client, String id) { try { - Thread.sleep(1000 + (i * 200)); - } catch (InterruptedException e) { - throw new RuntimeException(e); + return client.relationships.getRelationship(id).getResult(); + } catch (Exception e) { + return null; } } - - throw new RuntimeException("Relationship " + id + " did not reach status " + relationshipStatus); } - private static ConnectorRelationship getRelationshipSafeById(ConnectorClient client, String id) { - try { - return client.relationships.getRelationship(id).getResult(); - } catch (Exception e) { - return null; + public static class RelationshipTemplates { + + public static RelationshipTemplate createTemplate(ConnectorClient client) { + return client.relationshipTemplates.createOwnRelationshipTemplate( + CreateOwnRelationshipTemplateRequest.builder() + .content(ArbitraryRelationshipTemplateContent.builder().value("value").build()) + .maxNumberOfAllocations(1) + .expiresAt(ZonedDateTime.now().plusDays(1)).build()).getResult(); } - } - public static RelationshipTemplate exchangeTemplate(ConnectorClient client1, ConnectorClient client2) { - var template = createTemplate(client1); + private static ConnectorToken createTemplateToken(ConnectorClient client, String templateId) { + return client.relationshipTemplates.createTokenForOwnRelationshipTemplate( + templateId, + CreateTokenForOwnRelationshipTemplateRequest.builder() + .expiresAt(ZonedDateTime.now().plusDays(1)) + .build()) + .getResult(); + } - var response = client2.relationshipTemplates.loadPeerRelationshipTemplate(new LoadPeerRelationshipTemplateRequest(template.getTruncatedReference())); - return response.getResult(); - } + private static void loadPeerRelationshipTemplate(ConnectorClient client, ConnectorToken token) { + client.relationshipTemplates.loadPeerRelationshipTemplate( + LoadPeerRelationshipTemplateRequest.builder() + .reference(token.getTruncatedReference()) + .build()) + .getResult(); + } - public static RelationshipTemplate createTemplate(ConnectorClient client) { - var template = client.relationshipTemplates.createOwnRelationshipTemplate( - CreateOwnRelationshipTemplateRequest.builder().content(ArbitraryRelationshipTemplateContent.builder().value("value").build()).expiresAt(ZonedDateTime.now().plusDays(1)) - .build()); + public static RelationshipTemplate exchangeTemplate(ConnectorClient clientCreator, ConnectorClient clientRecipient) { - return template.getResult(); + var template = createTemplate(clientCreator); + var templateToken = createTemplateToken(clientCreator, template.getId()); + loadPeerRelationshipTemplate(clientRecipient, templateToken); + + return template; + } } public static ConnectorToken exchangeToken(ConnectorClient client1, ConnectorClient client2) { From 915f5eeb49dd669f4c001311fb5d6db113f2a4cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Vetni=C4=87?= Date: Mon, 21 Oct 2024 15:53:44 +0200 Subject: [PATCH 47/58] chore: update reference --- src/test/java/eu/enmeshed/ChallengesTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/eu/enmeshed/ChallengesTest.java b/src/test/java/eu/enmeshed/ChallengesTest.java index 10778ec..94758f7 100644 --- a/src/test/java/eu/enmeshed/ChallengesTest.java +++ b/src/test/java/eu/enmeshed/ChallengesTest.java @@ -31,7 +31,7 @@ public static void setUp() { client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); - relationship = TestUtils.establishRelationship(client1, client2); + relationship = TestUtils.Relationships.establishRelationship(client1, client2); } @Test From fa9e2bd73207909922039ba4e953ab872c0a1c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Vetni=C4=87?= Date: Mon, 21 Oct 2024 15:54:18 +0200 Subject: [PATCH 48/58] refactor: use TestUtils method --- .../eu/enmeshed/RelationshipTemplateTest.java | 27 +++---------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/src/test/java/eu/enmeshed/RelationshipTemplateTest.java b/src/test/java/eu/enmeshed/RelationshipTemplateTest.java index 74a2759..ceb4615 100644 --- a/src/test/java/eu/enmeshed/RelationshipTemplateTest.java +++ b/src/test/java/eu/enmeshed/RelationshipTemplateTest.java @@ -13,6 +13,7 @@ import eu.enmeshed.requests.relationshipTemplates.LoadPeerRelationshipTemplateRequest; import eu.enmeshed.utils.ConnectorContainer; import java.time.ZonedDateTime; +import eu.enmeshed.utils.TestUtils; import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -127,9 +128,9 @@ public void queryOwnTemplates() { @Test public void queryPeerTemplates() { - var templateId1 = exchangeTemplate(client1, client2); - var templateId2 = exchangeTemplate(client1, client2); - var templateId3 = exchangeTemplate(client1, client2); + var templateId1 = TestUtils.RelationshipTemplates.exchangeTemplate(client1, client2).getId(); + var templateId2 = TestUtils.RelationshipTemplates.exchangeTemplate(client1, client2).getId(); + var templateId3 = TestUtils.RelationshipTemplates.exchangeTemplate(client1, client2).getId(); var templates = client2.relationshipTemplates.getRelationshipTemplates(GetRelationshipTemplatesQuery.builder() .maxNumberOfAllocations(1) @@ -152,24 +153,4 @@ private CreateOwnRelationshipTemplateRequest Date: Mon, 21 Oct 2024 15:54:36 +0200 Subject: [PATCH 49/58] feat: add relationship tests without decomposition --- .../java/eu/enmeshed/RelationshipTest.java | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/test/java/eu/enmeshed/RelationshipTest.java diff --git a/src/test/java/eu/enmeshed/RelationshipTest.java b/src/test/java/eu/enmeshed/RelationshipTest.java new file mode 100644 index 0000000..f9836e1 --- /dev/null +++ b/src/test/java/eu/enmeshed/RelationshipTest.java @@ -0,0 +1,99 @@ +package eu.enmeshed; + +import static org.hamcrest.MatcherAssert.assertThat; + +import eu.enmeshed.model.relationships.RelationshipAuditLogEntry.Reason; +import eu.enmeshed.model.relationships.RelationshipStatus; +import eu.enmeshed.utils.ConnectorContainer; +import eu.enmeshed.utils.TestUtils; +import org.hamcrest.CoreMatchers; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Testcontainers; + +@Testcontainers +public class RelationshipTest { + + private ConnectorClient client1; + private ConnectorClient client2; + + @BeforeEach + public void setUp() { + // recreate containers before each test case due to relationships created in different tests interfered with each other + ConnectorContainer connector1 = new ConnectorContainer(); + ConnectorContainer connector2 = new ConnectorContainer(); + + connector1.start(); + connector2.start(); + + client1 = ConnectorClient.create(connector1.getConnectionString(), connector1.getApiKey()); + client2 = ConnectorClient.create(connector2.getConnectionString(), connector2.getApiKey()); + } + + @Test + public void shouldCreateRelationship() { + + var relationshipId = TestUtils.Relationships.establishRelationship(client1, client2).getId(); + + expectRelationshipToHaveStatus(client1, relationshipId, RelationshipStatus.ACTIVE); + expectRelationshipToHaveStatus(client2, relationshipId, RelationshipStatus.ACTIVE); + } + + @Test + public void rejectRelationship() { + + var relationshipId = TestUtils.Relationships.rejectRelationship(client1, client2).getId(); + + expectRelationshipToHaveStatus(client1, relationshipId, RelationshipStatus.REJECTED); + expectRelationshipToHaveStatus(client2, relationshipId, RelationshipStatus.REJECTED); + } + + @Test + public void revokeRelationship() { + + var relationshipId = TestUtils.Relationships.revokeRelationship(client1, client2).getId(); + + expectRelationshipToHaveStatus(client1, relationshipId, RelationshipStatus.REVOKED); + expectRelationshipToHaveStatus(client2, relationshipId, RelationshipStatus.REVOKED); + } + + @Test + public void terminateAndReactivateRelationship() { + + var relationshipId = TestUtils.Relationships.establishAndTerminateRelationship(client1, client2).getId(); + + expectRelationshipToHaveStatus(client1, relationshipId, RelationshipStatus.TERMINATED); + expectRelationshipToHaveStatus(client2, relationshipId, RelationshipStatus.TERMINATED); + + TestUtils.Relationships.reactivateRelationship(client1, client2, relationshipId); + expectRelationshipToHaveStatusAndReason(client1, relationshipId, RelationshipStatus.TERMINATED, Reason.REACTIVATION_REQUESTED); + expectRelationshipToHaveStatusAndReason(client2, relationshipId, RelationshipStatus.TERMINATED, Reason.REACTIVATION_REQUESTED); + + TestUtils.Relationships.rejectReactivationOfRelationship(client2, client1, relationshipId); + expectRelationshipToHaveStatusAndReason(client1, relationshipId, RelationshipStatus.TERMINATED, Reason.REJECTION_OF_REACTIVATION); + expectRelationshipToHaveStatusAndReason(client2, relationshipId, RelationshipStatus.TERMINATED, Reason.REJECTION_OF_REACTIVATION); + + TestUtils.Relationships.reactivateRelationship(client1, client2, relationshipId); + TestUtils.Relationships.revokeReactivationOfRelationship(client1, client2, relationshipId); + expectRelationshipToHaveStatusAndReason(client1, relationshipId, RelationshipStatus.TERMINATED, Reason.REVOCATION_OF_REACTIVATION); + expectRelationshipToHaveStatusAndReason(client2, relationshipId, RelationshipStatus.TERMINATED, Reason.REVOCATION_OF_REACTIVATION); + + TestUtils.Relationships.reactivateRelationship(client1, client2, relationshipId); + TestUtils.Relationships.acceptReactivationOfRelationship(client2, client1, relationshipId); + expectRelationshipToHaveStatusAndReason(client1, relationshipId, RelationshipStatus.ACTIVE, Reason.ACCEPTANCE_OF_REACTIVATION); + expectRelationshipToHaveStatusAndReason(client2, relationshipId, RelationshipStatus.ACTIVE, Reason.ACCEPTANCE_OF_REACTIVATION); + } + + private void expectRelationshipToHaveStatus(ConnectorClient client, String relationshipId, RelationshipStatus status) + { + var response = client.relationships.getRelationship(relationshipId).getResult(); + assertThat(response.getStatus(), CoreMatchers.equalTo(status)); + } + + private void expectRelationshipToHaveStatusAndReason(ConnectorClient client, String relationshipId, RelationshipStatus status, Reason reason) + { + var response = client.relationships.getRelationship(relationshipId).getResult(); + assertThat(response.getStatus(), CoreMatchers.equalTo(status)); + assertThat(response.getAuditLog().get(response.getAuditLog().size() - 1).getReason(), CoreMatchers.equalTo(reason)); + } +} From 0a1d590cc6172980b252571cd2089b06ddeb86d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 15 May 2025 12:33:14 +0200 Subject: [PATCH 50/58] chore: optimize imports --- src/main/java/eu/enmeshed/ConnectorClient.java | 5 ----- src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java | 3 --- .../model/request/ConnectorRequestValidationResult.java | 2 +- src/main/java/eu/enmeshed/model/request/Request.java | 2 -- .../request/requestItems/CreateAttributeRequestItem.java | 3 --- .../request/requestItems/ShareAttributeRequestItem.java | 2 -- .../requests/incomingRequests/AcceptFreeTextRequestItem.java | 1 - .../relationshipTemplates/GetRelationshipTemplatesQuery.java | 1 - src/test/java/eu/enmeshed/RelationshipTemplateTest.java | 4 +--- 9 files changed, 2 insertions(+), 21 deletions(-) diff --git a/src/main/java/eu/enmeshed/ConnectorClient.java b/src/main/java/eu/enmeshed/ConnectorClient.java index 27c53ab..6db8c98 100644 --- a/src/main/java/eu/enmeshed/ConnectorClient.java +++ b/src/main/java/eu/enmeshed/ConnectorClient.java @@ -1,10 +1,5 @@ package eu.enmeshed; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.util.StdDateFormat; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.databind.ObjectMapper; import eu.enmeshed.endpoints.AccountEndpoint; import eu.enmeshed.endpoints.AttributesEndpoint; diff --git a/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java index 4cb8d7f..e13b4f8 100644 --- a/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java +++ b/src/main/java/eu/enmeshed/endpoints/AttributesEndpoint.java @@ -1,9 +1,6 @@ package eu.enmeshed.endpoints; import eu.enmeshed.ConnectorResponse; -import eu.enmeshed.model.ContentWrapper; -import eu.enmeshed.model.attributes.Attribute; -import eu.enmeshed.model.attributes.ConnectorAttribute; import eu.enmeshed.model.attributes.ConnectorAttribute; import eu.enmeshed.requests.attributes.CreateRepositoryAttributeRequest; import eu.enmeshed.requests.attributes.SucceedAttributeRequest; diff --git a/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java b/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java index 038a868..a7d203c 100644 --- a/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java +++ b/src/main/java/eu/enmeshed/model/request/ConnectorRequestValidationResult.java @@ -1,7 +1,7 @@ package eu.enmeshed.model.request; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/eu/enmeshed/model/request/Request.java b/src/main/java/eu/enmeshed/model/request/Request.java index 04522b7..8e0e558 100644 --- a/src/main/java/eu/enmeshed/model/request/Request.java +++ b/src/main/java/eu/enmeshed/model/request/Request.java @@ -2,12 +2,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; - import eu.enmeshed.model.messages.MessageContent; import eu.enmeshed.model.request.requestItems.RequestItem; import java.time.ZonedDateTime; import java.util.List; - import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java index 7a69993..6d8a2bd 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/CreateAttributeRequestItem.java @@ -1,9 +1,6 @@ package eu.enmeshed.model.request.requestItems; import eu.enmeshed.model.attributes.Attribute; -import eu.enmeshed.model.attributes.ConnectorAttribute; -import eu.enmeshed.model.attributes.RelationshipAttribute; -import eu.enmeshed.model.attributes.values.proprietary.ProprietaryBoolean; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java b/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java index 998695b..b844642 100644 --- a/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java +++ b/src/main/java/eu/enmeshed/model/request/requestItems/ShareAttributeRequestItem.java @@ -1,8 +1,6 @@ package eu.enmeshed.model.request.requestItems; import eu.enmeshed.model.attributes.Attribute; -import eu.enmeshed.model.attributes.ConnectorAttribute; -import eu.enmeshed.model.attributes.IdentityAttribute; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/eu/enmeshed/requests/incomingRequests/AcceptFreeTextRequestItem.java b/src/main/java/eu/enmeshed/requests/incomingRequests/AcceptFreeTextRequestItem.java index c19bdce..a2fdb1a 100644 --- a/src/main/java/eu/enmeshed/requests/incomingRequests/AcceptFreeTextRequestItem.java +++ b/src/main/java/eu/enmeshed/requests/incomingRequests/AcceptFreeTextRequestItem.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java index 1171838..5ee3e66 100644 --- a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java @@ -1,6 +1,5 @@ package eu.enmeshed.requests.relationshipTemplates; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/test/java/eu/enmeshed/RelationshipTemplateTest.java b/src/test/java/eu/enmeshed/RelationshipTemplateTest.java index ceb4615..d1d1807 100644 --- a/src/test/java/eu/enmeshed/RelationshipTemplateTest.java +++ b/src/test/java/eu/enmeshed/RelationshipTemplateTest.java @@ -7,13 +7,11 @@ import eu.enmeshed.model.relationshipTemplates.RelationshipTemplate; import eu.enmeshed.model.relationshipTemplates.RelationshipTemplateContentDerivation; import eu.enmeshed.requests.relationshipTemplates.CreateOwnRelationshipTemplateRequest; -import eu.enmeshed.requests.relationshipTemplates.CreateTokenForOwnRelationshipTemplateRequest; import eu.enmeshed.requests.relationshipTemplates.GetOwnRelationshipTemplatesQuery; import eu.enmeshed.requests.relationshipTemplates.GetRelationshipTemplatesQuery; -import eu.enmeshed.requests.relationshipTemplates.LoadPeerRelationshipTemplateRequest; import eu.enmeshed.utils.ConnectorContainer; -import java.time.ZonedDateTime; import eu.enmeshed.utils.TestUtils; +import java.time.ZonedDateTime; import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; From 79f1131507d63d1b85581f0ec5a998c89f9653e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 15 May 2025 12:35:51 +0200 Subject: [PATCH 51/58] chore: undo --- .../relationshipTemplates/GetRelationshipTemplatesQuery.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java index 5ee3e66..decbe56 100644 --- a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java @@ -18,5 +18,6 @@ public class GetRelationshipTemplatesQuery { private String createdBy; private String createdByDevice; private int maxNumberOfAllocations; - private boolean isOwn; + @JsonProperty("isOwn") + private boolean own; } From 6475fd4ee4fc1842db742989395e6c8281a5c91b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 15 May 2025 12:37:10 +0200 Subject: [PATCH 52/58] chore: add import --- .../relationshipTemplates/GetRelationshipTemplatesQuery.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java index decbe56..dc0b544 100644 --- a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java @@ -1,5 +1,6 @@ package eu.enmeshed.requests.relationshipTemplates; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; From 1a1ba58c81156b444e68d5e000d2079a8d7a5cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 15 May 2025 13:18:58 +0200 Subject: [PATCH 53/58] fix: correct exception place --- src/test/java/eu/enmeshed/RelationshipTemplateTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/eu/enmeshed/RelationshipTemplateTest.java b/src/test/java/eu/enmeshed/RelationshipTemplateTest.java index d1d1807..4cb6339 100644 --- a/src/test/java/eu/enmeshed/RelationshipTemplateTest.java +++ b/src/test/java/eu/enmeshed/RelationshipTemplateTest.java @@ -94,7 +94,7 @@ public void expectValidationErrorForSendingMaxNumberOfAllocationsIsZero() { Exception.class, () -> client1.relationshipTemplates.createOwnRelationshipTemplate(getCreateOwnTemplateRequest(0)).getResult()); - assertThat(exception.getCause().getMessage(), CoreMatchers.equalTo("maxNumberOfAllocations must be >= 1")); + assertThat(exception.getMessage(), CoreMatchers.equalTo("maxNumberOfAllocations must be >= 1")); } @Test From 692ad6662148f39c453c08cd1b99bd25236d5c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 15 May 2025 14:04:32 +0200 Subject: [PATCH 54/58] chore: change isOwn --- .../relationshipTemplates/GetRelationshipTemplatesQuery.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java index dc0b544..1171838 100644 --- a/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java +++ b/src/main/java/eu/enmeshed/requests/relationshipTemplates/GetRelationshipTemplatesQuery.java @@ -19,6 +19,5 @@ public class GetRelationshipTemplatesQuery { private String createdBy; private String createdByDevice; private int maxNumberOfAllocations; - @JsonProperty("isOwn") - private boolean own; + private boolean isOwn; } From 97a21016b7816ee053018e798d457610bd871284 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 15 May 2025 14:36:31 +0200 Subject: [PATCH 55/58] chore: remove unused file --- src/main/java/eu/enmeshed/ConnectorErrorWrapper.java | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 src/main/java/eu/enmeshed/ConnectorErrorWrapper.java diff --git a/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java b/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java deleted file mode 100644 index 728aa01..0000000 --- a/src/main/java/eu/enmeshed/ConnectorErrorWrapper.java +++ /dev/null @@ -1,5 +0,0 @@ -package eu.enmeshed; - -public record ConnectorErrorWrapper(ConnectorError error) { - -} From 07a1902b2a33e4a7311a923d49d8cbb8bc445970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Fri, 16 May 2025 09:47:46 +0200 Subject: [PATCH 56/58] chore: exclude challenges test --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 4b32b70..14e7bf6 100644 --- a/build.gradle +++ b/build.gradle @@ -51,6 +51,7 @@ dependencies { test { useJUnitPlatform() + exclude '**/ChallengesTest' } // Generating Source & Javadoc JARs for publication From c8c9cd9496f0d6039921ea4ab90e538cb9cb3c22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Fri, 16 May 2025 09:53:40 +0200 Subject: [PATCH 57/58] chore: .class --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 14e7bf6..fd6a477 100644 --- a/build.gradle +++ b/build.gradle @@ -51,7 +51,7 @@ dependencies { test { useJUnitPlatform() - exclude '**/ChallengesTest' + exclude '**/ChallengesTest.class' } // Generating Source & Javadoc JARs for publication From 569f8b5875ff9bc3096a65ad08a53d4a2d736199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Fri, 16 May 2025 09:58:08 +0200 Subject: [PATCH 58/58] chore: remove exclude again --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index fd6a477..4b32b70 100644 --- a/build.gradle +++ b/build.gradle @@ -51,7 +51,6 @@ dependencies { test { useJUnitPlatform() - exclude '**/ChallengesTest.class' } // Generating Source & Javadoc JARs for publication