forked from Hithomelabs/CFTunnels
Compare commits
91 Commits
ccfe79f7f1
...
0cd1a827ab
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0cd1a827ab | ||
| 4075eb78c8 | |||
| 68792e2cbf | |||
| 316dd6b01e | |||
| a1275ec06c | |||
| 6794e56748 | |||
| 25ef5660fa | |||
| 0d576eb9a7 | |||
| f99ed01a54 | |||
| 18e3535a57 | |||
| 4d63eb2e2c | |||
| e9e6bd69f9 | |||
| c8e8817e25 | |||
| 057d0120b7 | |||
| b804cc978f | |||
| 729d0ddcfc | |||
| bbadd41ec4 | |||
| c567cf766d | |||
| fb4ff60729 | |||
| 6b6ef23108 | |||
| 0f04461a92 | |||
| b98dad9c4b | |||
| 831aaa41eb | |||
| c8ba9ef6a9 | |||
| 4016854514 | |||
| 77a43bfde8 | |||
| 84b2b5aead | |||
| b3b3d4a441 | |||
| 30ec013002 | |||
| e04ac4b73d | |||
| e46974870a | |||
| 37a57279fd | |||
| f1ec120715 | |||
| 674d541d78 | |||
| 640ac72b8b | |||
| e960c5cfa5 | |||
| 5fe2d96f42 | |||
| 33682a4425 | |||
| 5b8735bf58 | |||
| fe591b8af0 | |||
| b7c6149fb7 | |||
| bdb4c77ac3 | |||
| 5307ba0307 | |||
| 6262c84535 | |||
| 8720810c46 | |||
| 66fbfc5d69 | |||
| cd4b2ae2d8 | |||
| 1980b49272 | |||
| 38753791d7 | |||
| 40a536ddcf | |||
| 2b0e0eb9c4 | |||
| d7cda65f21 | |||
| 5760f9e714 | |||
| 05214000af | |||
| c24abc76be | |||
| 856748edb7 | |||
| 7203877b27 | |||
| 27576d6023 | |||
| c045dae894 | |||
| 4afeb9f6b2 | |||
| 0bc90d5d77 | |||
| 80b55fd993 | |||
| 61df434e0d | |||
| cc64b7c748 | |||
| df2a50d356 | |||
| c6ded4a74d | |||
| 36050aec95 | |||
| ccc65aef8d | |||
| 3742fb53af | |||
| 3bf981ac05 | |||
| 005863c998 | |||
| 1cd63d6d3d | |||
| f6bd7573a6 | |||
| b66ba60028 | |||
| 8f1f6e4f99 | |||
| 5fb59032cb | |||
| 196cf74a72 | |||
| ebd65ccbbe | |||
| c5d01ece01 | |||
| ec7d3299df | |||
| 6cd3524ca0 | |||
| 8bc84a3202 | |||
| 87f779450d | |||
| 620b9f2788 | |||
| 4483bf5a1b | |||
| 882b127818 | |||
| 585dd26a7b | |||
| d3f0797e33 | |||
| c3726d8e3e | |||
| 8fe909196a | |||
| a5df219e50 |
@ -20,6 +20,9 @@ public class CustomOidcUserConfiguration extends OidcUserService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
AuthoritiesToGroupMapping authoritiesToGroupMapping;
|
AuthoritiesToGroupMapping authoritiesToGroupMapping;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
UserRepository userRepository;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OidcUser loadUser(OidcUserRequest userRequest) {
|
public OidcUser loadUser(OidcUserRequest userRequest) {
|
||||||
// * * Delegate to the default implementation for loading user and claims
|
// * * Delegate to the default implementation for loading user and claims
|
||||||
@ -36,6 +39,16 @@ 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 a new DefaultOidcUser with merged authorities
|
||||||
return new DefaultOidcUser(
|
return new DefaultOidcUser(
|
||||||
mappedAuthorities,
|
mappedAuthorities,
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
|
|||||||
import com.hithomelabs.CFTunnels.Config.AuthoritiesToGroupMapping;
|
import com.hithomelabs.CFTunnels.Config.AuthoritiesToGroupMapping;
|
||||||
import com.hithomelabs.CFTunnels.Config.CloudflareConfig;
|
import com.hithomelabs.CFTunnels.Config.CloudflareConfig;
|
||||||
import com.hithomelabs.CFTunnels.Config.RestTemplateConfig;
|
import com.hithomelabs.CFTunnels.Config.RestTemplateConfig;
|
||||||
import com.hithomelabs.CFTunnels.Entity.Request;
|
|
||||||
import com.hithomelabs.CFTunnels.Entity.User;
|
import com.hithomelabs.CFTunnels.Entity.User;
|
||||||
import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader;
|
import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader;
|
||||||
import com.hithomelabs.CFTunnels.Models.Config;
|
import com.hithomelabs.CFTunnels.Models.Config;
|
||||||
@ -142,13 +141,13 @@ public class TunnelController implements ErrorController {
|
|||||||
return ResponseEntity.ok(jsonResponse);
|
return ResponseEntity.ok(jsonResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @PreAuthorize("hasAnyRole('DEVELOPER')")
|
@PreAuthorize("hasAnyRole('DEVELOPER')")
|
||||||
@PutMapping("/tunnel/{tunnelId}/request")
|
@PutMapping("/tunnel/{tunnelId}/request")
|
||||||
public ResponseEntity<Request> createTunnelMappingRequest(@PathVariable String tunnelId, @AuthenticationPrincipal OidcUser oidcUser, @RequestBody Ingress ingess){
|
public ResponseEntity<Ingress> createTunnelMappingRequest(@PathVariable UUID tunnelId, @AuthenticationPrincipal OidcUser oidcUser, @RequestBody Ingress ingess){
|
||||||
Request request = mappingRequestService.createMappingRequest(tunnelId, ingess, oidcUser);
|
String email = oidcUser.getEmail();
|
||||||
if(request.getId() != null)
|
User user = userRepository.findByEmail(email).orElseThrow(() -> new RuntimeException("User Not Found: " + email));
|
||||||
return ResponseEntity.status(HttpStatus.CREATED).body(request);
|
mappingRequestService.createMappingRequest(tunnelId, ingess, user);
|
||||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
|
return ResponseEntity.ok(ingess);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,4 +47,13 @@ public class Ingress {
|
|||||||
public void setOriginRequest(Map<String, Object> originRequest) {
|
public void setOriginRequest(Map<String, Object> originRequest) {
|
||||||
this.originRequest = originRequest;
|
this.originRequest = originRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getPort(){
|
||||||
|
URI url = URI.create(this.service);
|
||||||
|
return url.getPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSubdomain(){
|
||||||
|
return this.hostname.split("//")[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,10 +10,8 @@ import com.hithomelabs.CFTunnels.Repositories.RequestRepository;
|
|||||||
import com.hithomelabs.CFTunnels.Repositories.TunnelRepository;
|
import com.hithomelabs.CFTunnels.Repositories.TunnelRepository;
|
||||||
import com.hithomelabs.CFTunnels.Repositories.UserRepository;
|
import com.hithomelabs.CFTunnels.Repositories.UserRepository;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@ -33,7 +31,10 @@ public class MappingRequestService {
|
|||||||
|
|
||||||
public Mapping createMapping(UUID tunnelId, Ingress ingress){
|
public Mapping createMapping(UUID tunnelId, Ingress ingress){
|
||||||
Tunnel tunnel = tunnelRepository.findByCfTunnelId(tunnelId).orElseThrow(() -> new RuntimeException("Tunnel not found"));
|
Tunnel tunnel = tunnelRepository.findByCfTunnelId(tunnelId).orElseThrow(() -> new RuntimeException("Tunnel not found"));
|
||||||
Mapping mapping = createMappingFromTunnelIngress(tunnel, ingress);
|
Mapping mapping = new Mapping();
|
||||||
|
mapping.setTunnel(tunnel);
|
||||||
|
mapping.setPort(ingress.getPort());
|
||||||
|
mapping.setSubdomain(ingress.getSubdomain());
|
||||||
return mappingRepository.save(mapping);
|
return mappingRepository.save(mapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,27 +46,8 @@ public class MappingRequestService {
|
|||||||
return requestRepository.save(request);
|
return requestRepository.save(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Request createMappingRequest(String tunnelId, Ingress ingress, OidcUser oidcUser){
|
public Request createMappingRequest(UUID tunnelId, Ingress ingress, User user){
|
||||||
User user = userRepository.findByEmail(oidcUser.getEmail()).orElseGet(()-> mapUser(oidcUser));
|
Mapping mapping = createMapping(tunnelId, ingress);
|
||||||
Mapping mapping = createMapping(UUID.fromString(tunnelId), ingress);
|
|
||||||
return createRequest(mapping, user);
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user