From 2ca4687c66621d2436ee69debb0db074d09a5834 Mon Sep 17 00:00:00 2001 From: "dyre.meen" Date: Mon, 18 Jun 2018 16:18:12 +0200 Subject: [PATCH] Fixed small issue where ClaimValidatorFactory created a non-conforming audience validator --- src/validators/claims/claimvalidatorfactory.cpp | 6 +++--- test/validators/claim_validators_factory_test.cpp | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/validators/claims/claimvalidatorfactory.cpp b/src/validators/claims/claimvalidatorfactory.cpp index 4dd233b..a456dc1 100644 --- a/src/validators/claims/claimvalidatorfactory.cpp +++ b/src/validators/claims/claimvalidatorfactory.cpp @@ -57,11 +57,11 @@ ClaimValidator *ClaimValidatorFactory::BuildInternal(const json &json) { ClaimValidator *constructed = nullptr; try { if (json.count("iss")) { - constructed = new ListClaimValidator("iss", BuildList(json["iss"])); + constructed = new IssValidator(BuildList(json["iss"])); } else if (json.count("sub")) { - constructed = new ListClaimValidator("sub", BuildList(json["sub"])); + constructed = new SubValidator(BuildList(json["sub"])); } else if (json.count("aud")) { - constructed = new ListClaimValidator("aud", BuildList(json["aud"])); + constructed = new AudValidator(BuildList(json["aud"])); } else if (json.count("exp")) { ::json val = json["exp"]; ::json leeway = val["leeway"]; diff --git a/test/validators/claim_validators_factory_test.cpp b/test/validators/claim_validators_factory_test.cpp index 1548abd..55f9306 100644 --- a/test/validators/claim_validators_factory_test.cpp +++ b/test/validators/claim_validators_factory_test.cpp @@ -37,6 +37,15 @@ TEST(parse_test, iss_not_a_stringlist) { ASSERT_THROW(ClaimValidatorFactory::Build(json), std::logic_error); } +// This test tries to test that the factory has created an AudValidator +// and not a basic ListClaimValidator +TEST(parse_test, aud_array_value_in_payload) { + std::string json = "{ \"aud\" : [ \"foo\" ]}"; + claim_ptr valid(ClaimValidatorFactory::Build(json)); + ::json aud = {{"aud", ::json::array({"foo", "bar", "baz"})}}; + EXPECT_TRUE(valid->IsValid(aud)); +} + TEST(parse_test, optional_exp) { std::string json = "{ \"optional\" : { \"exp\" : { \"leeway\" : 32} } }"; claim_ptr valid(ClaimValidatorFactory::Build(json));