diff --git a/include/jwt/jwt.hpp b/include/jwt/jwt.hpp index 8086c46..b122458 100644 --- a/include/jwt/jwt.hpp +++ b/include/jwt/jwt.hpp @@ -421,12 +421,20 @@ public: // Exposed APIs /** */ template - bool has_claim_with_value(const std::string& cname, T&& cvalue) const + bool has_claim_with_value(const string_view cname, T&& cvalue) const { auto itr = claim_names_.find(cname); if (itr == claim_names_.end()) return false; - return (cvalue == payload_[cname]); + return (cvalue == payload_[cname.data()]); + } + + /** + */ + template + bool has_claim_with_value(registered_claims cname, T&& value) const + { + return has_claim_with_value(reg_claims_to_str(cname), std::forward(value)); } /** diff --git a/tests/test_jwt_decode b/tests/test_jwt_decode index 44f7fb2..53c2eca 100755 Binary files a/tests/test_jwt_decode and b/tests/test_jwt_decode differ diff --git a/tests/test_jwt_decode.cc b/tests/test_jwt_decode.cc index 4525d43..77fba90 100644 --- a/tests/test_jwt_decode.cc +++ b/tests/test_jwt_decode.cc @@ -64,6 +64,41 @@ TEST (DecodeTest, DecodeInvalidHeader) } +TEST (DecodeTest, DecodeInvalidPayload) +{ + using namespace jwt::params; + + const char* enc_str = + "eyJhbGciOiJOT05FIiwidHlwIjoiSldUIn0.eyfhuWcikiJyaWZ0LmlvIiwiZXhwIsexNTEzODYzMzcxLCJzdWIiOiJub3RoaW5nIG11Y2gifQ."; + + std::error_code ec; + auto obj = jwt::decode(enc_str, "", algorithms({"none"}), ec, verify(true)); + ASSERT_TRUE (ec); + + EXPECT_EQ (ec.value(), static_cast(jwt::DecodeErrc::JsonParseError)); +} + +TEST (DecodeTest, DecodeHS256) +{ + using namespace jwt::params; + + const char* enc_str = + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9." + "eyJpYXQiOjE1MTM4NjIzNzEsImlkIjoiYS1iLWMtZC1lLWYtMS0yLTMiLCJpc3MiOiJhcnVuLm11cmFsaWRoYXJhbiIsInN1YiI6ImFkbWluIn0." + "jk7bRQKTLvs1RcuvMc2B_rt6WBYPoVPirYi_QRBPiuk"; + + std::error_code ec; + auto obj = jwt::decode(enc_str, "secret", algorithms({"none", "hs256"}), ec, verify(false)); + ASSERT_FALSE (ec); + + EXPECT_TRUE (obj.has_claim("iss")); + EXPECT_TRUE (obj.payload().has_claim_with_value("iss", "arun.muralidharan")); + EXPECT_TRUE (obj.has_claim("IAT")); + EXPECT_TRUE (obj.payload().has_claim_with_value(jwt::registered_claims::issued_at, 1513862371)); + + EXPECT_FALSE (obj.payload().has_claim_with_value(jwt::registered_claims::issued_at, 1513862372)); +} + int main(int argc, char* argv[]) { ::testing::InitGoogleTest(&argc, argv); diff --git a/tests/test_jwt_encode.cc b/tests/test_jwt_encode.cc index 396c2e3..aa2bf32 100644 --- a/tests/test_jwt_encode.cc +++ b/tests/test_jwt_encode.cc @@ -3,7 +3,7 @@ #include "gtest/gtest.h" #include "jwt/jwt.hpp" -TEST (EncodeTest, StrEncodeHS2561) +TEST (EncodeTest, StrEncodeHS256_1) { using namespace jwt::params; @@ -30,7 +30,7 @@ TEST (EncodeTest, StrEncodeHS2561) EXPECT_EQ (enc_str, expected_sign); } -TEST (EncodeTest, StrEncodeHS2562) +TEST (EncodeTest, StrEncodeHS256_2) { using namespace jwt::params;