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.java52
1 files changed, 44 insertions, 8 deletions
diff --git a/src/main/java/net/libertacasa/pubsh/web/WebApplication.java b/src/main/java/net/libertacasa/pubsh/web/WebApplication.java
index e7b3cd2..bfdeb59 100644
--- a/src/main/java/net/libertacasa/pubsh/web/WebApplication.java
+++ b/src/main/java/net/libertacasa/pubsh/web/WebApplication.java
@@ -21,6 +21,7 @@ import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.MultiValueMap;
+import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.DeleteMapping;
//import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@@ -36,7 +37,6 @@ import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.Image;
import java.util.Random;
-//@SessionAttributes("osChoice")
@SpringBootApplication
@Controller
public class WebApplication {
@@ -87,7 +87,7 @@ public class WebApplication {
//System.out.println(images);
List<Container> containers = Docker.getContainers();
//System.out.println(containers);
-
+
model.addAttribute("docker_images", images);
model.addAttribute("docker_containers", containers);
@@ -113,30 +113,66 @@ public class WebApplication {
username = String.valueOf(customClaims.get("username"));
// [End]
- System.out.printf("Deletion triggered for ID %s by %s (%s)", id, userid, username);
+ System.out.printf("\nDeletion triggered for ID %s by %s (%s)", id, userid, username);
Docker.deleteContainer(id);
return("redirect:/portal");
}
- @PostMapping(path="/frontend/container/add",consumes=MediaType.APPLICATION_FORM_URLENCODED_VALUE)
- public static String addContainer(@RequestBody MultiValueMap<String, String> body, HttpServletRequest request) {
+ @DeleteMapping("/frontend/image/delete/{id}")
+ public static String deleteImage(@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.
KeycloakAuthenticationToken principal = (KeycloakAuthenticationToken) request.getUserPrincipal();
String username= null;
String userid = principal.getName();
IDToken token = principal.getAccount().getKeycloakSecurityContext().getIdToken();
Map<String, Object> customClaims = token.getOtherClaims();
username = String.valueOf(customClaims.get("username"));
- String osChoice = (String) body.getFirst("osChoice");
+ // [End]
+
+ System.out.printf("\nImage deletion triggered for ID %s by %s (%s)", id, userid, username);
+
+ try {
+ Docker.deleteImage(username, id);
+ String returnmessage = "Success - removed image with ID " + id + "!";
+ redirectAttributes.addFlashAttribute("message", returnmessage);
+ } catch (com.github.dockerjava.api.exception.ConflictException exception) {
+ String returnmessage = "Error - Image is still being used by a container.";
+ redirectAttributes.addFlashAttribute("message", returnmessage);
+ }
+
+ return("redirect:/portal");
+ }
+
+ @PostMapping(path="/frontend/container/add",consumes=MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+ public static String addContainer(@RequestBody MultiValueMap<String, String> body, HttpServletRequest request, RedirectAttributes redirectAttributes) {
+ KeycloakAuthenticationToken principal = (KeycloakAuthenticationToken) request.getUserPrincipal();
+ String username = null;
+ String userid = principal.getName();
+ IDToken token = principal.getAccount().getKeycloakSecurityContext().getIdToken();
+ Map<String, Object> customClaims = token.getOtherClaims();
+ username = String.valueOf(customClaims.get("username"));
+ String os = (String) body.getFirst("osChoice");
- System.out.printf("New container with OS %s requested by %s (%s)", osChoice, userid, username);
+ System.out.printf("\nNew container with OS %s requested by %s (%s)\n", os, userid, username);
Random rand = new Random();
Integer randomInt = rand.nextInt(9999999-1111);
Integer count = randomInt;
- //Docker.buildImage(username, osChoice, count);
+ try {
+ String imageid = Docker.buildImage(username, os, count);
+ String returnmessage = "Success - built image with ID " + imageid + " and tag sh" + count + "!";
+ redirectAttributes.addFlashAttribute("message", returnmessage);
+ } catch (Exception exception) {
+ redirectAttributes.addFlashAttribute("message", "Success!");
+ String returnmessage = "Error - failed to build image :-(";
+ redirectAttributes.addFlashAttribute("message", returnmessage);
+ System.out.println(exception);
+ }
+
+ //Docker.createContainer(imageid);
return("redirect:/portal");
}