diff --git a/CFTunnels/Get tunnels.bru b/CFTunnels/Get tunnels.bru deleted file mode 100644 index 231ee08..0000000 --- a/CFTunnels/Get tunnels.bru +++ /dev/null @@ -1,11 +0,0 @@ -meta { - name: Get tunnels - type: http - seq: 4 -} - -get { - url: {{base_url}}/cloudflare/tunnels - body: none - auth: none -} diff --git a/CFTunnels/Tunnel.bru b/CFTunnels/Tunnel.bru deleted file mode 100644 index 826b583..0000000 --- a/CFTunnels/Tunnel.bru +++ /dev/null @@ -1,11 +0,0 @@ -meta { - name: Tunnel - type: http - seq: 5 -} - -get { - url: {{base_url}}/cloudflare/tunnel/{{tunnel_id}} - body: none - auth: none -} diff --git a/CFTunnels/Write ingress.bru b/CFTunnels/Write ingress.bru deleted file mode 100644 index 9930a0b..0000000 --- a/CFTunnels/Write ingress.bru +++ /dev/null @@ -1,19 +0,0 @@ -meta { - name: Write ingress - type: http - seq: 2 -} - -put { - url: {{base_url}}/cloudflare/tunnel/{{tunnel_id}}/add - body: json - auth: none -} - -body:json { - { - "service": "http://192.168.0.100:3457", - "hostname": "random.hithomelabs.com", - "originRequest": {} - } -} diff --git a/CFTunnels/bruno.json b/CFTunnels/bruno.json deleted file mode 100644 index 16b8d6b..0000000 --- a/CFTunnels/bruno.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": "1", - "name": "CFTunnels", - "type": "collection", - "ignore": [ - "node_modules", - ".git" - ] -} \ No newline at end of file diff --git a/CFTunnels/delete mapping.bru b/CFTunnels/delete mapping.bru deleted file mode 100644 index c9e3dbb..0000000 --- a/CFTunnels/delete mapping.bru +++ /dev/null @@ -1,19 +0,0 @@ -meta { - name: delete mapping - type: http - seq: 3 -} - -put { - url: {{base_url}}/cloudflare/tunnel/{{tunnel_id}}/delete - body: json - auth: none -} - -body:json { - { - "service": "http://192.168.0.100:6000", - "hostname": "random.hithomelabs.com", - "originRequest": {} - } -} diff --git a/CFTunnels/environments/CFTunnels Local.bru b/CFTunnels/environments/CFTunnels Local.bru deleted file mode 100644 index 6d2b6b0..0000000 --- a/CFTunnels/environments/CFTunnels Local.bru +++ /dev/null @@ -1,4 +0,0 @@ -vars { - tunnel_id: 50df9101-f625-4618-b7c5-100338a57124 - base_url: http://localhost:8080 -} diff --git a/CFTunnels/environments/CFTunnels.bru b/CFTunnels/environments/CFTunnels.bru deleted file mode 100644 index d8219ab..0000000 --- a/CFTunnels/environments/CFTunnels.bru +++ /dev/null @@ -1,4 +0,0 @@ -vars { - tunnel_id: 50df9101-f625-4618-b7c5-100338a57124 - base_url: https://testcf.hithomelabs.com -} diff --git a/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java b/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java index a805b96..33c4d07 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java +++ b/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java @@ -10,7 +10,6 @@ import com.hithomelabs.CFTunnels.Entity.User; import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader; import com.hithomelabs.CFTunnels.Models.Config; import com.hithomelabs.CFTunnels.Models.Ingress; -import com.hithomelabs.CFTunnels.Models.PaginationRequest; import com.hithomelabs.CFTunnels.Models.TunnelResponse; import com.hithomelabs.CFTunnels.Models.TunnelsResponse; import com.hithomelabs.CFTunnels.Repositories.UserRepository; @@ -22,10 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.dao.DataAccessException; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; +import org.springframework.http.*; import org.springframework.http.*; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.GrantedAuthority; @@ -112,21 +108,12 @@ public class TunnelController implements ErrorController { @PreAuthorize("hasAnyRole('USER')") @GetMapping("/requests") - public ResponseEntity> getAllRequests( - @RequestParam(required = false) Request.RequestStatus status, - @ModelAttribute PaginationRequest paginationRequest) { + public ResponseEntity> getAllRequests() { try { - Sort sort = paginationRequest.getSort() != null && paginationRequest.getSort().length > 0 - ? Sort.by(paginationRequest.getSort()) - : Sort.by("id"); - Pageable pageable = PageRequest.of(paginationRequest.getPage(), paginationRequest.getSize(), sort); - Page requests = mappingRequestService.getAllRequests(status, pageable); + List requests = mappingRequestService.getAllRequests(); Map jsonResponse = new HashMap<>(); jsonResponse.put("status", "success"); - jsonResponse.put("data", requests.getContent()); - jsonResponse.put("currentPage", requests.getNumber()); - jsonResponse.put("totalItems", requests.getTotalElements()); - jsonResponse.put("totalPages", requests.getTotalPages()); + jsonResponse.put("data", requests); return ResponseEntity.ok(jsonResponse); } catch (DataAccessException e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/PaginationRequest.java b/src/main/java/com/hithomelabs/CFTunnels/Models/PaginationRequest.java deleted file mode 100644 index da16aa2..0000000 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/PaginationRequest.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.hithomelabs.CFTunnels.Models; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class PaginationRequest { - private int page = 0; - private int size = 10; - private String[] sort = {"id"}; -} diff --git a/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java b/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java index 2c27bc1..f66b1d0 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java +++ b/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java @@ -11,8 +11,6 @@ import com.hithomelabs.CFTunnels.Repositories.RequestRepository; import com.hithomelabs.CFTunnels.Repositories.TunnelRepository; import com.hithomelabs.CFTunnels.Repositories.UserRepository; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.security.oauth2.core.oidc.user.OidcUser; import org.springframework.stereotype.Service; @@ -61,11 +59,8 @@ public class MappingRequestService { return createRequest(mapping, user); } - public Page getAllRequests(Request.RequestStatus status, Pageable pageable) { - if (status != null) { - return requestRepository.findByStatus(status, pageable); - } - return requestRepository.findAll(pageable); + public List getAllRequests() { + return requestRepository.findAll(); } public User mapUser(OidcUser oidcUser){ diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index febde77..4f27f96 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -7,4 +7,6 @@ management.endpoint.health.show-details=always logging.level.org.hibernate.SQL=DEBUG debug=true +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.show-sql=true spring.datasource.url=jdbc:postgresql://localhost:5432/cftunnel diff --git a/src/test/java/com/hithomelabs/CFTunnels/Controllers/TunnelControllerTest.java b/src/test/java/com/hithomelabs/CFTunnels/Controllers/TunnelControllerTest.java index dd384ab..e2ad575 100644 --- a/src/test/java/com/hithomelabs/CFTunnels/Controllers/TunnelControllerTest.java +++ b/src/test/java/com/hithomelabs/CFTunnels/Controllers/TunnelControllerTest.java @@ -5,6 +5,7 @@ import com.hithomelabs.CFTunnels.Config.AuthoritiesToGroupMapping; import com.hithomelabs.CFTunnels.Config.CloudflareConfig; import com.hithomelabs.CFTunnels.Config.RestTemplateConfig; import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader; +import com.hithomelabs.CFTunnels.Entity.Request; import com.hithomelabs.CFTunnels.Entity.Tunnel; import com.hithomelabs.CFTunnels.Models.Authorities; import com.hithomelabs.CFTunnels.Models.Config; @@ -204,44 +205,22 @@ class TunnelControllerTest { } @Test - @DisplayName("should return list of requests with pagination") + @DisplayName("should return list of requests") void getAllRequests_Success() throws Exception { List requests = Arrays.asList( createTestRequest(UUID.randomUUID(), com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.PENDING), createTestRequest(UUID.randomUUID(), com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.APPROVED) ); - Page page = new PageImpl<>(requests, PageRequest.of(0, 10), 2); - when(mappingRequestService.getAllRequests(any(), any(PageRequest.class))).thenReturn(page); + when(mappingRequestService.getAllRequests()).thenReturn(requests); mockMvc.perform(get("/cloudflare/requests") - .with(oauth2Login().oauth2User(buildOidcUser("username", Groups.GITEA_USER))) - .param("page", "0") - .param("size", "10")) + .with(oauth2Login().oauth2User(buildOidcUser("username", Groups.GITEA_USER)))) .andExpect(status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.status").value("success")) .andExpect(jsonPath("$.data").isArray()) - .andExpect(jsonPath("$.totalItems").value(2)) - .andExpect(jsonPath("$.totalPages").value(1)); - } - - @Test - @DisplayName("should filter requests by status") - void getAllRequests_WithStatusFilter() throws Exception { - List requests = List.of( - createTestRequest(UUID.randomUUID(), com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.PENDING) - ); - Page page = new PageImpl<>(requests, PageRequest.of(0, 10), 1); - - when(mappingRequestService.getAllRequests(eq(com.hithomelabs.CFTunnels.Entity.Request.RequestStatus.PENDING), any(PageRequest.class))).thenReturn(page); - - mockMvc.perform(get("/cloudflare/requests") - .with(oauth2Login().oauth2User(buildOidcUser("username", Groups.GITEA_USER))) - .param("status", "PENDING")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("success")) - .andExpect(jsonPath("$.data[0].status").value("PENDING")); + .andExpect(jsonPath("$.data.length()").value(2)); } @Test @@ -264,13 +243,6 @@ class TunnelControllerTest { .andExpect(jsonPath("$.status").value("PENDING")); } - private com.hithomelabs.CFTunnels.Entity.Request createTestRequest(UUID id, com.hithomelabs.CFTunnels.Entity.Request.RequestStatus status) { - com.hithomelabs.CFTunnels.Entity.Request request = new com.hithomelabs.CFTunnels.Entity.Request(); - request.setId(id); - request.setStatus(status); - return request; - } - @Test @DisplayName("should approve mapping request successfully") void approveMappingRequest_Success() throws Exception { @@ -437,6 +409,13 @@ class TunnelControllerTest { .andExpect(jsonPath("$.data.result.config.ingress[*].hostname", hasItem("random.hithomelabs.com"))); } + private Request createTestRequest(UUID id, Request.RequestStatus status) { + Request request = new Request(); + request.setId(id); + request.setStatus(status); + return request; + } + @Test void deleteTunnelConfiguration() throws Exception {