From 36fcb58caa5de69fd4a0ec00d30468404ff523dc Mon Sep 17 00:00:00 2001
From: Nanne Baars <nanne.baars@owasp.org>
Date: Thu, 16 Nov 2017 04:43:14 +0100
Subject: [PATCH] Endpoints async for posting mail and landingpage

---
 .../webwolf/mailbox/MailboxController.java    | 24 ++++++++++++-------
 .../owasp/webwolf/requests/LandingPage.java   | 14 ++++++-----
 2 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/webwolf/src/main/java/org/owasp/webwolf/mailbox/MailboxController.java b/webwolf/src/main/java/org/owasp/webwolf/mailbox/MailboxController.java
index 09c344b75..52ec55959 100644
--- a/webwolf/src/main/java/org/owasp/webwolf/mailbox/MailboxController.java
+++ b/webwolf/src/main/java/org/owasp/webwolf/mailbox/MailboxController.java
@@ -5,11 +5,16 @@ import lombok.extern.slf4j.Slf4j;
 import org.owasp.webwolf.user.UserRepository;
 import org.owasp.webwolf.user.WebGoatUser;
 import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.servlet.ModelAndView;
 
 import java.util.List;
+import java.util.concurrent.Callable;
 
 /**
  * @author nbaars
@@ -37,13 +42,16 @@ public class MailboxController {
     }
 
     @PostMapping(value = "/mail")
-    @ResponseStatus(HttpStatus.CREATED)
-    public void sendEmail(@RequestBody Email email) {
-        if (userRepository.findByUsername(email.getRecipient()) != null) {
-            mailboxRepository.save(email);
-        } else {
-            log.trace("Mail received for unknown user: {}", email.getRecipient());
-        }
+    public Callable<ResponseEntity<?>> sendEmail(@RequestBody Email email) {
+        return () -> {
+            if (userRepository.findByUsername(email.getRecipient()) != null) {
+                mailboxRepository.save(email);
+                return ResponseEntity.status(HttpStatus.CREATED).build();
+            } else {
+                log.trace("Mail received for unknown user: {}", email.getRecipient());
+                return ResponseEntity.notFound().build();
+            }
+        };
     }
 
 }
diff --git a/webwolf/src/main/java/org/owasp/webwolf/requests/LandingPage.java b/webwolf/src/main/java/org/owasp/webwolf/requests/LandingPage.java
index e24fb40c9..06945e488 100644
--- a/webwolf/src/main/java/org/owasp/webwolf/requests/LandingPage.java
+++ b/webwolf/src/main/java/org/owasp/webwolf/requests/LandingPage.java
@@ -2,23 +2,25 @@ package org.owasp.webwolf.requests;
 
 
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseStatus;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.concurrent.Callable;
 
 @Controller
 @Slf4j
 @RequestMapping("/landing/**")
 public class LandingPage {
 
-    @RequestMapping(method = { RequestMethod.POST, RequestMethod.GET, RequestMethod.DELETE, RequestMethod.PATCH, RequestMethod.PUT})
-    @ResponseStatus(HttpStatus.OK)
-    public void ok(HttpServletRequest request) {
-      log.trace("Incoming request for: {}", request.getRequestURL());
+    @RequestMapping(method = {RequestMethod.POST, RequestMethod.GET, RequestMethod.DELETE, RequestMethod.PATCH, RequestMethod.PUT})
+    public Callable<ResponseEntity<?>> ok(HttpServletRequest request) {
+        return () -> {
+            log.trace("Incoming request for: {}", request.getRequestURL());
+            return ResponseEntity.ok().build();
+        };
     }
 
 }