diff --git a/src/main/java/com/hithomelabs/CFTunnels/Config/CustomOidcUserConfiguration.java b/src/main/java/com/hithomelabs/CFTunnels/Config/CustomOidcUserConfiguration.java index 1d06c78..ef077b9 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Config/CustomOidcUserConfiguration.java +++ b/src/main/java/com/hithomelabs/CFTunnels/Config/CustomOidcUserConfiguration.java @@ -20,9 +20,6 @@ public class CustomOidcUserConfiguration extends OidcUserService { @Autowired AuthoritiesToGroupMapping authoritiesToGroupMapping; - @Autowired - UserRepository userRepository; - @Override public OidcUser loadUser(OidcUserRequest userRequest) { // * * Delegate to the default implementation for loading user and claims @@ -39,16 +36,6 @@ public class CustomOidcUserConfiguration extends OidcUserService { ); } - String email = oidcUser.getEmail(); - String name = oidcUser.getNickName(); - - userRepository.findByEmail(email).orElseGet(() -> { - User user = new User(); - user.setEmail(email); - user.setName(name); - return userRepository.save(user); - }); - // * * Return a new DefaultOidcUser with merged authorities return new DefaultOidcUser( mappedAuthorities, diff --git a/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java b/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java index 8956177..c36fd5b 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java +++ b/src/main/java/com/hithomelabs/CFTunnels/Controllers/TunnelController.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.hithomelabs.CFTunnels.Config.AuthoritiesToGroupMapping; import com.hithomelabs.CFTunnels.Config.CloudflareConfig; import com.hithomelabs.CFTunnels.Config.RestTemplateConfig; +import com.hithomelabs.CFTunnels.Entity.Request; import com.hithomelabs.CFTunnels.Entity.User; import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader; import com.hithomelabs.CFTunnels.Models.Config; @@ -141,13 +142,13 @@ public class TunnelController implements ErrorController { return ResponseEntity.ok(jsonResponse); } - @PreAuthorize("hasAnyRole('DEVELOPER')") +// @PreAuthorize("hasAnyRole('DEVELOPER')") @PutMapping("/tunnel/{tunnelId}/request") - public ResponseEntity createTunnelMappingRequest(@PathVariable UUID tunnelId, @AuthenticationPrincipal OidcUser oidcUser, @RequestBody Ingress ingess){ - String email = oidcUser.getEmail(); - User user = userRepository.findByEmail(email).orElseThrow(() -> new RuntimeException("User Not Found: " + email)); - mappingRequestService.createMappingRequest(tunnelId, ingess, user); - return ResponseEntity.ok(ingess); + public ResponseEntity createTunnelMappingRequest(@PathVariable String tunnelId, @AuthenticationPrincipal OidcUser oidcUser, @RequestBody Ingress ingess){ + Request request = mappingRequestService.createMappingRequest(tunnelId, ingess, oidcUser); + if(request.getId() != null) + return ResponseEntity.status(HttpStatus.CREATED).body(request); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); } } diff --git a/src/main/java/com/hithomelabs/CFTunnels/Models/Ingress.java b/src/main/java/com/hithomelabs/CFTunnels/Models/Ingress.java index 11bfc88..0cf84bb 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Models/Ingress.java +++ b/src/main/java/com/hithomelabs/CFTunnels/Models/Ingress.java @@ -47,13 +47,4 @@ public class Ingress { public void setOriginRequest(Map originRequest) { this.originRequest = originRequest; } - - public int getPort(){ - URI url = URI.create(this.service); - return url.getPort(); - } - - public String getSubdomain(){ - return this.hostname.split("//")[0]; - } } diff --git a/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java b/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java index 65893c1..d026f65 100644 --- a/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java +++ b/src/main/java/com/hithomelabs/CFTunnels/Services/MappingRequestService.java @@ -10,8 +10,10 @@ 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.security.oauth2.core.oidc.user.OidcUser; import org.springframework.stereotype.Service; +import java.util.Map; import java.util.UUID; @Service @@ -31,10 +33,7 @@ public class MappingRequestService { public Mapping createMapping(UUID tunnelId, Ingress ingress){ Tunnel tunnel = tunnelRepository.findByCfTunnelId(tunnelId).orElseThrow(() -> new RuntimeException("Tunnel not found")); - Mapping mapping = new Mapping(); - mapping.setTunnel(tunnel); - mapping.setPort(ingress.getPort()); - mapping.setSubdomain(ingress.getSubdomain()); + Mapping mapping = createMappingFromTunnelIngress(tunnel, ingress); return mappingRepository.save(mapping); } @@ -46,8 +45,27 @@ public class MappingRequestService { return requestRepository.save(request); } - public Request createMappingRequest(UUID tunnelId, Ingress ingress, User user){ - Mapping mapping = createMapping(tunnelId, ingress); + public Request createMappingRequest(String tunnelId, Ingress ingress, OidcUser oidcUser){ + User user = userRepository.findByEmail(oidcUser.getEmail()).orElseGet(()-> mapUser(oidcUser)); + Mapping mapping = createMapping(UUID.fromString(tunnelId), ingress); return createRequest(mapping, user); } + + public User mapUser(OidcUser oidcUser){ + String email = oidcUser.getEmail(); + String name = oidcUser.getNickName(); + User user = new User(); + user.setEmail(email); + user.setName(name); + userRepository.save(user); + return user; + } + + public Mapping createMappingFromTunnelIngress(Tunnel tunnel, Ingress ingress){ + Mapping mapping = new Mapping(); + mapping.setTunnel(tunnel); + mapping.setPort(Integer.parseInt(ingress.getService().split(":")[2])); + mapping.setSubdomain(ingress.getHostname().split("\\.")[0]); + return mapping; + } }