diff options
Diffstat (limited to 'src/main/java/net/libertacasa/pubsh/web/WebApplication.java')
| -rw-r--r-- | src/main/java/net/libertacasa/pubsh/web/WebApplication.java | 52 | 
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");  	} | 
