aboutsummaryrefslogtreecommitdiff
path: root/bbot
diff options
context:
space:
mode:
Diffstat (limited to 'bbot')
-rw-r--r--bbot/manifest11
-rw-r--r--bbot/manifest.cxx27
2 files changed, 19 insertions, 19 deletions
diff --git a/bbot/manifest b/bbot/manifest
index 7e14b7d..3022535 100644
--- a/bbot/manifest
+++ b/bbot/manifest
@@ -60,12 +60,12 @@ namespace bbot
//
// $ cat key.pub | openssl sha256
//
- std::string fingerprint;
+ butl::optional<std::string> fingerprint;
machine_header_manifests machines;
task_request_manifest (std::string a,
- std::string f,
+ butl::optional<std::string> f,
machine_header_manifests m)
: agent (std::move (a)),
fingerprint (std::move (f)),
@@ -260,12 +260,15 @@ namespace bbot
{
public:
std::string session; // The task response session.
- std::string challenge; // The answer to challenge in the task response.
+
+ // The answer to challenge in the task response.
+ //
+ butl::optional<std::string> challenge;
result_manifest result;
result_request_manifest (std::string s,
- std::string c,
+ butl::optional<std::string> c,
result_manifest r)
: session (std::move (s)),
challenge (std::move (c)),
diff --git a/bbot/manifest.cxx b/bbot/manifest.cxx
index 9aedcea..0f7a053 100644
--- a/bbot/manifest.cxx
+++ b/bbot/manifest.cxx
@@ -244,7 +244,7 @@ namespace bbot
}
else if (n == "fingerprint")
{
- if (!fingerprint.empty ())
+ if (fingerprint)
bad_name ("task request fingerprint redefinition");
if (!valid_sha256 (v))
@@ -261,9 +261,6 @@ namespace bbot
if (agent.empty ())
bad_value ("no task request agent specified");
- if (fingerprint.empty ())
- bad_value ("no task request fingerprint specified");
-
// Parse machine header manifests.
//
for (nv = p.next (); !nv.empty (); nv = p.next ())
@@ -281,7 +278,10 @@ namespace bbot
//
s.next ("", "1"); // Start of manifest.
s.next ("agent", agent);
- s.next ("fingerprint", fingerprint);
+
+ if (fingerprint)
+ s.next ("fingerprint", *fingerprint);
+
s.next ("", ""); // End of manifest.
for (const machine_header_manifest& m: machines)
@@ -594,14 +594,11 @@ namespace bbot
session = move (*sess);
- // If session is not empty then the challenge and the result url must
- // present, otherwise they shouldn't.
+ // If session is not empty then the challenge may, and the result url
+ // must, be present, otherwise they shouldn't.
//
if (!session.empty ())
{
- if (!challenge)
- bad_value ("no task response challenge specified");
-
if (!result_url)
bad_value ("no task response result url specified");
}
@@ -908,7 +905,7 @@ namespace bbot
}
else if (n == "challenge")
{
- if (!challenge.empty ())
+ if (challenge)
bad_name ("result request challenge redefinition");
if (v.empty ())
@@ -925,9 +922,6 @@ namespace bbot
if (session.empty ())
bad_value ("no result request session specified");
- if (challenge.empty ())
- bad_value ("no result request challenge specified");
-
nv = p.next ();
if (nv.empty ())
bad_value ("result manifest expected");
@@ -950,7 +944,10 @@ namespace bbot
//
s.next ("", "1"); // Start of manifest.
s.next ("session", session);
- s.next ("challenge", challenge);
+
+ if (challenge)
+ s.next ("challenge", *challenge);
+
s.next ("", ""); // End of manifest.
result.serialize (s);