From beb2e03b148bb9c5e60759b0ce9b406be4929e92 Mon Sep 17 00:00:00 2001 From: macacia Date: Tue, 22 Oct 2024 18:18:49 +0200 Subject: [PATCH 1/5] P4ADEV-1102 added api skeleton --- openapi/p4pa-auth.openapi.yaml | 28 +++++++++++++++++++ .../auth/controller/AuthzControllerImpl.java | 9 ++++++ .../payhub/auth/service/AuthzService.java | 1 + .../payhub/auth/service/AuthzServiceImpl.java | 5 ++++ 4 files changed, 43 insertions(+) diff --git a/openapi/p4pa-auth.openapi.yaml b/openapi/p4pa-auth.openapi.yaml index f36b2dfa..b8da9252 100644 --- a/openapi/p4pa-auth.openapi.yaml +++ b/openapi/p4pa-auth.openapi.yaml @@ -215,6 +215,34 @@ paths: '429': description: Too Many Requests /auth/clients/{organizationIpaCode}/{clientId}: + delete: + tags: + - authz + operationId: revokeClient + parameters: + - name: organizationIpaCode + in: path + required: true + schema: + type: string + - name: clientId + in: path + required: true + schema: + type: string + responses: + '204': + description: OK + '400': + description: Invalid request + '401': + description: Unauthorized + '403': + description: Forbidden + '412': + description: ToS acceptance missing + '429': + description: Too Many Requests get: tags: - authz diff --git a/src/main/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerImpl.java b/src/main/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerImpl.java index 8022169c..d550a532 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerImpl.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerImpl.java @@ -122,4 +122,13 @@ public ResponseEntity> getClients(String organizationIpa } return ResponseEntity.ok(authzService.getClients(organizationIpaCode)); } + + @Override + public ResponseEntity revokeClient(String organizationIpaCode, String clientId) { + if(!SecurityUtils.isPrincipalAdmin(organizationIpaCode)){ + throw new UserUnauthorizedException("User not allowed to delete operator with clientId " + clientId); + } + authzService.revokeClient(organizationIpaCode, clientId); + return ResponseEntity.ok(null); + } } diff --git a/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzService.java b/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzService.java index a4b670b0..b7c29e44 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzService.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzService.java @@ -18,4 +18,5 @@ public interface AuthzService { ClientDTO registerClient(String organizationIpaCode, CreateClientRequest createClientRequest); String getClientSecret(String organizationIpaCode, String clientId); List getClients(String organizationIpaCode); + void revokeClient(String organizationIpaCode, String clientId); } diff --git a/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzServiceImpl.java b/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzServiceImpl.java index 1264e94f..454bcae6 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzServiceImpl.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzServiceImpl.java @@ -117,4 +117,9 @@ public String getClientSecret(String organizationIpaCode, String clientId) { public List getClients(String organizationIpaCode) { return clientService.getClients(organizationIpaCode); } + + @Override + public void revokeClient(String organizationIpaCode, String clientId) { + //TODO implement revoke + } } From 0f69b8f2dd47f4027234f877ac842bc8dbed508c Mon Sep 17 00:00:00 2001 From: macacia Date: Thu, 24 Oct 2024 10:28:24 +0200 Subject: [PATCH 2/5] P4ADEV-1102 added removal impl --- .../auth/repository/ClientRepository.java | 3 +-- .../auth/repository/ClientRepositoryExt.java | 5 ++++ .../repository/ClientRepositoryExtImpl.java | 27 +++++++++++++++++++ .../payhub/auth/service/AuthzServiceImpl.java | 2 +- .../auth/service/a2a/ClientService.java | 1 + .../auth/service/a2a/ClientServiceImpl.java | 12 +++++++-- .../a2a/revoke/ClientRemovalService.java | 22 +++++++++++++++ .../auth/service/a2a/ClientServiceTest.java | 7 ++++- 8 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExt.java create mode 100644 src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImpl.java create mode 100644 src/main/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalService.java diff --git a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepository.java b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepository.java index fa439597..37b12387 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepository.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepository.java @@ -5,7 +5,6 @@ import java.util.List; -public interface ClientRepository extends MongoRepository { - +public interface ClientRepository extends ClientRepositoryExt, MongoRepository { List findAllByOrganizationIpaCode(String organizationIpaCode); } diff --git a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExt.java b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExt.java new file mode 100644 index 00000000..068947ad --- /dev/null +++ b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExt.java @@ -0,0 +1,5 @@ +package it.gov.pagopa.payhub.auth.repository; + +public interface ClientRepositoryExt { + void deleteClient(String organizationIpaCode, String clientId); +} diff --git a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImpl.java b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImpl.java new file mode 100644 index 00000000..5a2a7ac2 --- /dev/null +++ b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImpl.java @@ -0,0 +1,27 @@ +package it.gov.pagopa.payhub.auth.repository; + +import it.gov.pagopa.payhub.auth.model.Client; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +public class ClientRepositoryExtImpl implements ClientRepositoryExt { + private final MongoTemplate mongoTemplate; + + public ClientRepositoryExtImpl(MongoTemplate mongoTemplate) { + this.mongoTemplate = mongoTemplate; + } + + @Override + public void deleteClient(String organizationIpaCode, String clientId) { + //find User with clientId + Client client = mongoTemplate.findOne(Query.query(Criteria.where(Client.Fields.clientId).is(clientId)), Client.class); + //If exists delete Client + if(client != null) + mongoTemplate.remove( + Query.query(Criteria + .where(Client.Fields.organizationIpaCode).is(organizationIpaCode) + .and(Client.Fields.clientId).is(client.getClientId())), Client.class); + } + +} diff --git a/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzServiceImpl.java b/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzServiceImpl.java index 454bcae6..c484633f 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzServiceImpl.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/service/AuthzServiceImpl.java @@ -120,6 +120,6 @@ public List getClients(String organizationIpaCode) { @Override public void revokeClient(String organizationIpaCode, String clientId) { - //TODO implement revoke + clientService.revokeClient(organizationIpaCode, clientId); } } diff --git a/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/ClientService.java b/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/ClientService.java index 1abb977a..b73def3d 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/ClientService.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/ClientService.java @@ -13,4 +13,5 @@ public interface ClientService { String getClientSecret(String organizationIpaCode, String clientId); List getClients(String organizationIpaCode); Optional getClientByClientId(String clientId); + void revokeClient(String organizationIpaCode, String clientId); } diff --git a/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceImpl.java b/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceImpl.java index d4ba9be7..6a4a05d3 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceImpl.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceImpl.java @@ -4,8 +4,10 @@ import it.gov.pagopa.payhub.auth.model.Client; import it.gov.pagopa.payhub.auth.service.a2a.registration.ClientRegistrationService; import it.gov.pagopa.payhub.auth.service.a2a.retrieve.ClientRetrieverService; +import it.gov.pagopa.payhub.auth.service.a2a.revoke.ClientRemovalService; import it.gov.pagopa.payhub.model.generated.ClientDTO; import it.gov.pagopa.payhub.model.generated.ClientNoSecretDTO; +import jakarta.transaction.Transactional; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,12 +17,13 @@ @Service @Slf4j public class ClientServiceImpl implements ClientService { - + private final ClientRemovalService clientRemovalService; private final ClientRegistrationService clientRegistrationService; private final ClientRetrieverService clientRetrieverService; private final ClientMapper clientMapper; - public ClientServiceImpl(ClientRegistrationService clientRegistrationService, ClientRetrieverService clientRetrieverService, ClientMapper clientMapper) { + public ClientServiceImpl(ClientRemovalService clientRemovalService, ClientRegistrationService clientRegistrationService, ClientRetrieverService clientRetrieverService, ClientMapper clientMapper) { + this.clientRemovalService = clientRemovalService; this.clientRegistrationService = clientRegistrationService; this.clientRetrieverService = clientRetrieverService; this.clientMapper = clientMapper; @@ -49,4 +52,9 @@ public Optional getClientByClientId(String clientId) { return clientRetrieverService.getClientByClientId(clientId); } + @Override + public void revokeClient(String organizationIpaCode, String clientId) { + clientRemovalService.revokeClient(organizationIpaCode, clientId); + } + } diff --git a/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalService.java b/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalService.java new file mode 100644 index 00000000..47caa95e --- /dev/null +++ b/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalService.java @@ -0,0 +1,22 @@ +package it.gov.pagopa.payhub.auth.service.a2a.revoke; + +import it.gov.pagopa.payhub.auth.repository.ClientRepository; +import jakarta.transaction.Transactional; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class ClientRemovalService { + + private final ClientRepository clientRepository; + + public ClientRemovalService(ClientRepository clientRepository) { + this.clientRepository = clientRepository; + } + + @Transactional + public void revokeClient(String organizationIpaCode, String clientId) { + clientRepository.deleteClient(organizationIpaCode, clientId); + } +} diff --git a/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceTest.java b/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceTest.java index 4020d07e..286f78a8 100644 --- a/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceTest.java +++ b/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceTest.java @@ -4,6 +4,7 @@ import it.gov.pagopa.payhub.auth.model.Client; import it.gov.pagopa.payhub.auth.service.a2a.registration.ClientRegistrationService; import it.gov.pagopa.payhub.auth.service.a2a.retrieve.ClientRetrieverService; +import it.gov.pagopa.payhub.auth.service.a2a.revoke.ClientRemovalService; import it.gov.pagopa.payhub.model.generated.ClientDTO; import it.gov.pagopa.payhub.model.generated.ClientNoSecretDTO; import org.junit.jupiter.api.AfterEach; @@ -22,6 +23,9 @@ @ExtendWith(MockitoExtension.class) class ClientServiceTest { + @Mock + private ClientRemovalService clientRemovalServiceMock; + @Mock private ClientRegistrationService clientRegistrationServiceMock; @@ -35,12 +39,13 @@ class ClientServiceTest { @BeforeEach void init(){ - service = new ClientServiceImpl(clientRegistrationServiceMock, clientRetrieverServiceMock, clientMapperMock); + service = new ClientServiceImpl(clientRemovalServiceMock, clientRegistrationServiceMock, clientRetrieverServiceMock, clientMapperMock); } @AfterEach void verifyNotMoreInteractions(){ Mockito.verifyNoMoreInteractions( + clientRemovalServiceMock, clientRegistrationServiceMock, clientRetrieverServiceMock, clientMapperMock From 583acf7b8f7cd07370692b82271e96739b831d05 Mon Sep 17 00:00:00 2001 From: macacia Date: Thu, 24 Oct 2024 12:19:52 +0200 Subject: [PATCH 3/5] P4ADEV-1102 added unit tests --- .../auth/controller/AuthzControllerImpl.java | 2 +- .../auth/controller/AuthzControllerTest.java | 56 +++++++++++++++++- .../ClientRepositoryExtImplTest.java | 58 +++++++++++++++++++ .../payhub/auth/service/AuthzServiceTest.java | 10 ++++ .../auth/service/a2a/ClientServiceTest.java | 10 ++++ .../a2a/revoke/ClientRemovalServiceTest.java | 29 ++++++++++ 6 files changed, 162 insertions(+), 3 deletions(-) create mode 100644 src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java create mode 100644 src/test/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalServiceTest.java diff --git a/src/main/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerImpl.java b/src/main/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerImpl.java index d550a532..00292f45 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerImpl.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerImpl.java @@ -126,7 +126,7 @@ public ResponseEntity> getClients(String organizationIpa @Override public ResponseEntity revokeClient(String organizationIpaCode, String clientId) { if(!SecurityUtils.isPrincipalAdmin(organizationIpaCode)){ - throw new UserUnauthorizedException("User not allowed to delete operator with clientId " + clientId); + throw new UserUnauthorizedException("User not allowed to delete client with clientId " + clientId); } authzService.revokeClient(organizationIpaCode, clientId); return ResponseEntity.ok(null); diff --git a/src/test/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerTest.java b/src/test/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerTest.java index 6b7a2c8e..83d2c62f 100644 --- a/src/test/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerTest.java +++ b/src/test/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerTest.java @@ -33,9 +33,11 @@ import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.BDDMockito.willDoNothing; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -467,5 +469,55 @@ void givenAlreadyExistentClientWhenRegisterClientThenConflict() throws Exception .content(objectMapper.writeValueAsString(createClientRequest)) ).andExpect(status().isConflict()); } +//end region + +//region revokeClient tests + @Test + void givenAuthorizedUserWhenRevokeClientThenOk() throws Exception { + String organizationIpaCode = "IPA_TEST_2"; + String clientId = "CLIENTID"; + + UserInfo expectedUser = UserInfo.builder() + .userId("USERID") + .organizationAccess(organizationIpaCode) + .organizations(List.of(UserOrganizationRoles.builder() + .organizationIpaCode(organizationIpaCode) + .roles(List.of(Constants.ROLE_ADMIN)) + .build())) + .build(); + + Mockito.when(authnServiceMock.getUserInfo("accessToken")) + .thenReturn(expectedUser); + willDoNothing().given(authzServiceMock).revokeClient(organizationIpaCode, clientId); + + mockMvc.perform( + delete("/payhub/auth/clients/{organizationIpaCode}/{clientId}", organizationIpaCode, clientId) + .header(HttpHeaders.AUTHORIZATION, "Bearer accessToken") + ).andExpect(status().isOk()) + .andDo(print()); + } + + @Test + void givenUnauthorizedUserWhenRevokeClientThenException() throws Exception { + //Given + String organizationIpaCode = "IPA_TEST_2"; + String clientId = "CLIENTID"; + + //When + Mockito.when(authnServiceMock.getUserInfo("accessToken")) + .thenReturn(UserInfo.builder() + .organizations(List.of(UserOrganizationRoles.builder() + .organizationIpaCode("ORG") + .roles(List.of(Constants.ROLE_OPER)) + .build())) + .build()); + + //Then + mockMvc.perform( + delete("/payhub/auth/clients/{organizationIpaCode}/{clientId}", organizationIpaCode, clientId) + .header(HttpHeaders.AUTHORIZATION, "Bearer accessToken") + ).andExpect(status().isUnauthorized()); + } + //end region } diff --git a/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java b/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java new file mode 100644 index 00000000..caa06ab1 --- /dev/null +++ b/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java @@ -0,0 +1,58 @@ +package it.gov.pagopa.payhub.auth.repository; + +import it.gov.pagopa.payhub.auth.model.Client; +import it.gov.pagopa.payhub.auth.model.Operator; +import it.gov.pagopa.payhub.auth.model.User; +import org.junit.jupiter.api.AfterEach; +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.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +@ExtendWith(MockitoExtension.class) +public class ClientRepositoryExtImplTest { + + @Mock + private MongoTemplate mongoTemplateMock; + + private ClientRepositoryExt repository; + + @BeforeEach + void init() { + repository = new ClientRepositoryExtImpl(mongoTemplateMock); + } + + @AfterEach + void verifyNotMoreInvocation() { + Mockito.verifyNoMoreInteractions(mongoTemplateMock); + } + + @Test + void whenDeleteClientThenOk() { + // Given + String organizationIpaCode = "IPA_CODE"; + String clientId = "IPA_CODEclientId"; + Client client = Client.builder() + .clientId(clientId) + .organizationIpaCode(organizationIpaCode) + .build(); + + Mockito.when(mongoTemplateMock.findOne( + Query.query(Criteria.where(Client.Fields.clientId).is(clientId)), + Client.class)).thenReturn(client); + + // When + repository.deleteClient(organizationIpaCode, clientId); + // Then + Mockito.verify(mongoTemplateMock).remove( + Query.query(Criteria + .where(Client.Fields.organizationIpaCode).is(client.getOrganizationIpaCode()) + .and(Client.Fields.clientId).is(client.getClientId())), + Client.class); + } +} diff --git a/src/test/java/it/gov/pagopa/payhub/auth/service/AuthzServiceTest.java b/src/test/java/it/gov/pagopa/payhub/auth/service/AuthzServiceTest.java index db777dc9..dd8c3c38 100644 --- a/src/test/java/it/gov/pagopa/payhub/auth/service/AuthzServiceTest.java +++ b/src/test/java/it/gov/pagopa/payhub/auth/service/AuthzServiceTest.java @@ -299,4 +299,14 @@ void givenOrganizationIpaCodeWhenGetClientsThenInvokeClientService() { Assertions.assertEquals(expectedDTOList, result); } + @Test + void givenClientIdWhenRevokeClientThenVerifyRevoke() { + //Given + String organizationIpaCode = "organizationIpaCode"; + String clientId = "clientId"; + //When + service.revokeClient(organizationIpaCode, clientId); + //Then + Mockito.verify(clientServiceMock).revokeClient(organizationIpaCode, clientId); + } } diff --git a/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceTest.java b/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceTest.java index 286f78a8..fe2946bc 100644 --- a/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceTest.java +++ b/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/ClientServiceTest.java @@ -122,4 +122,14 @@ void givenClientIdWhenGetClientByClientIdThenInvokeClientService() { Assertions.assertEquals(Optional.of(expectedClient), result); } + @Test + void givenClientIdWhenRevokeClientThenVerifyRevoke() { + // Given + String organizationIpaCode = "organizationIpaCode"; + String clientId = "clientId"; + //When + service.revokeClient(organizationIpaCode, clientId); + //Then + Mockito.verify(clientRemovalServiceMock).revokeClient(organizationIpaCode, clientId); + } } diff --git a/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalServiceTest.java b/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalServiceTest.java new file mode 100644 index 00000000..79e36b7e --- /dev/null +++ b/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalServiceTest.java @@ -0,0 +1,29 @@ +package it.gov.pagopa.payhub.auth.service.a2a.revoke; + +import it.gov.pagopa.payhub.auth.repository.ClientRepository; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class ClientRemovalServiceTest { + + @Mock + private ClientRepository clientRepository; + @InjectMocks + private ClientRemovalService service; + + @Test + void givenClientIdWhenRevokeClientThenVerifyRevoke() { + // Given + String organizationIpaCode = "organizationIpaCode"; + String clientId = "clientId"; + //When + service.revokeClient(organizationIpaCode, clientId); + //Then + Mockito.verify(clientRepository).deleteClient(organizationIpaCode, clientId); + } +} From 790b735ccabb97b7448b551e85c9e067abb2753b Mon Sep 17 00:00:00 2001 From: macacia Date: Thu, 24 Oct 2024 12:28:29 +0200 Subject: [PATCH 4/5] P4ADEV-1102 resolved sonarcloud issue --- .../pagopa/payhub/auth/controller/AuthzControllerTest.java | 1 - .../payhub/auth/repository/ClientRepositoryExtImplTest.java | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/test/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerTest.java b/src/test/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerTest.java index 83d2c62f..e87c8226 100644 --- a/src/test/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerTest.java +++ b/src/test/java/it/gov/pagopa/payhub/auth/controller/AuthzControllerTest.java @@ -34,7 +34,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.willDoNothing; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; diff --git a/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java b/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java index caa06ab1..7eb47f70 100644 --- a/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java +++ b/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java @@ -1,8 +1,6 @@ package it.gov.pagopa.payhub.auth.repository; import it.gov.pagopa.payhub.auth.model.Client; -import it.gov.pagopa.payhub.auth.model.Operator; -import it.gov.pagopa.payhub.auth.model.User; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -15,7 +13,7 @@ import org.springframework.data.mongodb.core.query.Query; @ExtendWith(MockitoExtension.class) -public class ClientRepositoryExtImplTest { +class ClientRepositoryExtImplTest { @Mock private MongoTemplate mongoTemplateMock; From d4b3de511afc93d9c153f07a2dbc2293a8e1402a Mon Sep 17 00:00:00 2001 From: macacia Date: Fri, 25 Oct 2024 12:41:56 +0200 Subject: [PATCH 5/5] P4ADEV-1102 resolved change request --- postman/p4pa-auth-E2E.postman_collection.json | 56 +++++++++++++++++++ .../auth/repository/ClientRepository.java | 3 +- .../auth/repository/ClientRepositoryExt.java | 5 -- .../repository/ClientRepositoryExtImpl.java | 27 --------- .../a2a/revoke/ClientRemovalService.java | 4 +- .../ClientRepositoryExtImplTest.java | 56 ------------------- .../a2a/revoke/ClientRemovalServiceTest.java | 2 +- 7 files changed, 60 insertions(+), 93 deletions(-) delete mode 100644 src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExt.java delete mode 100644 src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImpl.java delete mode 100644 src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java diff --git a/postman/p4pa-auth-E2E.postman_collection.json b/postman/p4pa-auth-E2E.postman_collection.json index 3fbe93b8..318e29a3 100644 --- a/postman/p4pa-auth-E2E.postman_collection.json +++ b/postman/p4pa-auth-E2E.postman_collection.json @@ -1129,6 +1129,62 @@ } }, "response": [] + }, + { + "name": "revokeClient", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Auth - revokeClient - Responses with 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + " pm.environment.get(\"clientId\")\r", + " pm.environment.get(\"organizationIpaCode\")" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{accessToken}}", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [], + "url": { + "raw": "{{p4paAuthBaseUrl}}/payhub/auth/clients/{{organizationIpaCode}}/{{clientId}}", + "host": [ + "{{p4paAuthBaseUrl}}" + ], + "path": [ + "payhub", + "auth", + "clients", + "{{organizationIpaCode}}", + "{{clientId}}" + ] + } + }, + "response": [] } ], "event": [ diff --git a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepository.java b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepository.java index 37b12387..3f00d49a 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepository.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepository.java @@ -5,6 +5,7 @@ import java.util.List; -public interface ClientRepository extends ClientRepositoryExt, MongoRepository { +public interface ClientRepository extends MongoRepository { List findAllByOrganizationIpaCode(String organizationIpaCode); + long deleteByClientIdAndOrganizationIpaCode(String clientId, String organizationIpaCode); } diff --git a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExt.java b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExt.java deleted file mode 100644 index 068947ad..00000000 --- a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExt.java +++ /dev/null @@ -1,5 +0,0 @@ -package it.gov.pagopa.payhub.auth.repository; - -public interface ClientRepositoryExt { - void deleteClient(String organizationIpaCode, String clientId); -} diff --git a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImpl.java b/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImpl.java deleted file mode 100644 index 5a2a7ac2..00000000 --- a/src/main/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.gov.pagopa.payhub.auth.repository; - -import it.gov.pagopa.payhub.auth.model.Client; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; - -public class ClientRepositoryExtImpl implements ClientRepositoryExt { - private final MongoTemplate mongoTemplate; - - public ClientRepositoryExtImpl(MongoTemplate mongoTemplate) { - this.mongoTemplate = mongoTemplate; - } - - @Override - public void deleteClient(String organizationIpaCode, String clientId) { - //find User with clientId - Client client = mongoTemplate.findOne(Query.query(Criteria.where(Client.Fields.clientId).is(clientId)), Client.class); - //If exists delete Client - if(client != null) - mongoTemplate.remove( - Query.query(Criteria - .where(Client.Fields.organizationIpaCode).is(organizationIpaCode) - .and(Client.Fields.clientId).is(client.getClientId())), Client.class); - } - -} diff --git a/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalService.java b/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalService.java index 47caa95e..6ec8c952 100644 --- a/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalService.java +++ b/src/main/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalService.java @@ -1,7 +1,6 @@ package it.gov.pagopa.payhub.auth.service.a2a.revoke; import it.gov.pagopa.payhub.auth.repository.ClientRepository; -import jakarta.transaction.Transactional; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,8 +14,7 @@ public ClientRemovalService(ClientRepository clientRepository) { this.clientRepository = clientRepository; } - @Transactional public void revokeClient(String organizationIpaCode, String clientId) { - clientRepository.deleteClient(organizationIpaCode, clientId); + clientRepository.deleteByClientIdAndOrganizationIpaCode(clientId, organizationIpaCode); } } diff --git a/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java b/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java deleted file mode 100644 index 7eb47f70..00000000 --- a/src/test/java/it/gov/pagopa/payhub/auth/repository/ClientRepositoryExtImplTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package it.gov.pagopa.payhub.auth.repository; - -import it.gov.pagopa.payhub.auth.model.Client; -import org.junit.jupiter.api.AfterEach; -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.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; - -@ExtendWith(MockitoExtension.class) -class ClientRepositoryExtImplTest { - - @Mock - private MongoTemplate mongoTemplateMock; - - private ClientRepositoryExt repository; - - @BeforeEach - void init() { - repository = new ClientRepositoryExtImpl(mongoTemplateMock); - } - - @AfterEach - void verifyNotMoreInvocation() { - Mockito.verifyNoMoreInteractions(mongoTemplateMock); - } - - @Test - void whenDeleteClientThenOk() { - // Given - String organizationIpaCode = "IPA_CODE"; - String clientId = "IPA_CODEclientId"; - Client client = Client.builder() - .clientId(clientId) - .organizationIpaCode(organizationIpaCode) - .build(); - - Mockito.when(mongoTemplateMock.findOne( - Query.query(Criteria.where(Client.Fields.clientId).is(clientId)), - Client.class)).thenReturn(client); - - // When - repository.deleteClient(organizationIpaCode, clientId); - // Then - Mockito.verify(mongoTemplateMock).remove( - Query.query(Criteria - .where(Client.Fields.organizationIpaCode).is(client.getOrganizationIpaCode()) - .and(Client.Fields.clientId).is(client.getClientId())), - Client.class); - } -} diff --git a/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalServiceTest.java b/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalServiceTest.java index 79e36b7e..9955fced 100644 --- a/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalServiceTest.java +++ b/src/test/java/it/gov/pagopa/payhub/auth/service/a2a/revoke/ClientRemovalServiceTest.java @@ -24,6 +24,6 @@ void givenClientIdWhenRevokeClientThenVerifyRevoke() { //When service.revokeClient(organizationIpaCode, clientId); //Then - Mockito.verify(clientRepository).deleteClient(organizationIpaCode, clientId); + Mockito.verify(clientRepository).deleteByClientIdAndOrganizationIpaCode(clientId, organizationIpaCode); } }