summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/libertacasa/pubsh/web/WebApplication.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/libertacasa/pubsh/web/WebApplication.java')
-rw-r--r--src/main/java/net/libertacasa/pubsh/web/WebApplication.java78
1 files changed, 72 insertions, 6 deletions
diff --git a/src/main/java/net/libertacasa/pubsh/web/WebApplication.java b/src/main/java/net/libertacasa/pubsh/web/WebApplication.java
index ec3fbc8..d4094f6 100644
--- a/src/main/java/net/libertacasa/pubsh/web/WebApplication.java
+++ b/src/main/java/net/libertacasa/pubsh/web/WebApplication.java
@@ -33,6 +33,8 @@ import com.github.dockerjava.api.model.Image;
@Controller
public class WebApplication {
+ static ArrayList<String> availableOs = new ArrayList<String>();
+
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
@@ -44,7 +46,7 @@ public class WebApplication {
}
@GetMapping("/portal")
- public String portal(Model model) {
+ public String portal(Model model) throws pubshError {
KeycloakAuthenticationToken authentication = (KeycloakAuthenticationToken)
SecurityContextHolder.getContext().getAuthentication();
@@ -52,14 +54,21 @@ public class WebApplication {
String username="";
String email="";
String attribute01="";
-
+
+ if (! (principal instanceof KeycloakPrincipal)) {
+ System.out.println("Fatal: received logon without Keycloak principal.");
+ throw new pubshError("Invalid request.");
+ }
if (principal instanceof KeycloakPrincipal) {
KeycloakPrincipal<?> kPrincipal = (KeycloakPrincipal<?>) principal;
IDToken token = kPrincipal.getKeycloakSecurityContext().getIdToken();
//System.out.println("Token: " + token);
Map<String, Object> customClaims = token.getOtherClaims();
-
+ if (! customClaims.containsKey("username")) {
+ System.out.println("Fatal: received logon without username.");
+ throw new pubshError("Invalid request.");
+ }
if (customClaims.containsKey("email")) {
email = String.valueOf(customClaims.get("email"));
}
@@ -75,9 +84,10 @@ public class WebApplication {
model.addAttribute("attribute01", attribute01);
}
- List<Image> images = Docker.getImages();
+ List<Image> images = Docker.getImages(null);
+
//System.out.println(images);
- List<Container> containers = Docker.getContainers();
+ List<Container> containers = Docker.getContainers(null);
//System.out.println(containers);
model.addAttribute("docker_images", images);
@@ -94,6 +104,51 @@ public class WebApplication {
return("portal");
}
+ @GetMapping("/user")
+ public String user(Model model) throws pubshError {
+ KeycloakAuthenticationToken authentication = (KeycloakAuthenticationToken)
+ SecurityContextHolder.getContext().getAuthentication();
+ Principal principal = (Principal) authentication.getPrincipal();
+ String username="";
+ String email="";
+ String attribute01="";
+ if (! (principal instanceof KeycloakPrincipal)) {
+ System.out.println("Fatal: received logon without Keycloak principal.");
+ throw new pubshError("Invalid request.");
+ }
+ if (principal instanceof KeycloakPrincipal) {
+ KeycloakPrincipal<?> kPrincipal = (KeycloakPrincipal<?>) principal;
+ IDToken token = kPrincipal.getKeycloakSecurityContext().getIdToken();
+ Map<String, Object> customClaims = token.getOtherClaims();
+ if (! customClaims.containsKey("username")) {
+ System.out.println("Fatal: received logon without username.");
+ throw new pubshError("Invalid request.");
+ }
+ if (customClaims.containsKey("email")) {
+ email = String.valueOf(customClaims.get("email"));
+ }
+ if (customClaims.containsKey("username")) {
+ username = String.valueOf(customClaims.get("username"));
+ }
+ if (customClaims.containsKey("attribute01")) {
+ attribute01 = String.valueOf(customClaims.get("attribute01"));
+ }
+ model.addAttribute("username", username);
+ model.addAttribute("principalid", principal.getName());
+ model.addAttribute("email", email);
+ model.addAttribute("attribute01", attribute01);
+ }
+
+ List<Image> images = Docker.getImages(username);
+ List<Container> containers = Docker.getContainers(username);
+
+ model.addAttribute("docker_images", images);
+ model.addAttribute("docker_containers", containers);
+ model.addAttribute("availableOs", availableOs);
+
+ return("user");
+ }
+
@DeleteMapping("/frontend/container/delete/{id}")
public static String deleteContainer(@PathVariable String id, HttpServletRequest request, RedirectAttributes redirectAttributes) {
// [Start] This block should move to a logging method. It's only job is to print user details to the console.
@@ -184,5 +239,16 @@ public class WebApplication {
private RefreshableKeycloakSecurityContext getKeycloakSecurityContext(HttpServletRequest request){
return (RefreshableKeycloakSecurityContext) request.getAttribute(KeycloakSecurityContext.class.getName());
- }
+ }
+
+ public class pubshError extends Exception
+ {
+ private static final long serialVersionUID = 1L;
+
+ public pubshError(String message)
+ {
+ super(message);
+ }
+ }
+
}