Probe: add probe token to New and Challenge

Change-Id: Iae8b009bb2e78f03910e53fb49e750ebc8a6e6ae
diff --git a/src/challenge-module/challenge-email.cpp b/src/challenge-module/challenge-email.cpp
index 8c49726..793eed7 100644
--- a/src/challenge-module/challenge-email.cpp
+++ b/src/challenge-module/challenge-email.cpp
@@ -19,6 +19,7 @@
  */
 
 #include "challenge-email.hpp"
+#include "../ca-module.hpp"
 #include "../logging.hpp"
 #include <regex>
 
@@ -57,6 +58,16 @@
       request.m_challengeStatus = FAILURE_INVALID_EMAIL;
       return;
     }
+    // check whether this email is the same as the one used in PROBE
+    if (request.m_probeToken != nullptr) {
+      const auto& content = request.m_probeToken->getContent();
+      const auto& json = CaModule::jsonFromBlock(content);
+      const auto& expectedEmail = json.get("email", "");
+      Name expectedPrefix(json.get(JSON_CA_NAME, ""));
+      if (expectedEmail != emailAddress || !expectedPrefix.isPrefixOf(request.m_cert.getName())) {
+        return;
+      }
+    }
     request.m_status = STATUS_CHALLENGE;
     request.m_challengeStatus = NEED_CODE;
     request.m_challengeType = CHALLENGE_TYPE;