diff --git a/include/jwt/error_codes.hpp b/include/jwt/error_codes.hpp index bdd5795..4dacf82 100644 --- a/include/jwt/error_codes.hpp +++ b/include/jwt/error_codes.hpp @@ -30,6 +30,7 @@ enum class DecodeErrc AlgHeaderMiss, TypHeaderMiss, TypMismatch, + DuplClaims, }; /** diff --git a/include/jwt/impl/error_codes.ipp b/include/jwt/impl/error_codes.ipp index a673453..fcf9329 100644 --- a/include/jwt/impl/error_codes.ipp +++ b/include/jwt/impl/error_codes.ipp @@ -51,6 +51,8 @@ struct DecodeErrorCategory: std::error_category return "type mismatch"; case DecodeErrc::JsonParseError: return "json parse failed"; + case DecodeErrc::DuplClaims: + return "duplicate claims"; }; assert (0 && "Code not reached"); diff --git a/include/jwt/impl/jwt.ipp b/include/jwt/impl/jwt.ipp index bf6a260..65e770f 100644 --- a/include/jwt/impl/jwt.ipp +++ b/include/jwt/impl/jwt.ipp @@ -101,9 +101,15 @@ void jwt_payload::decode(const string_view enc_str, std::error_code& ec) noexcep ec = DecodeErrc::JsonParseError; return; } + //populate the claims set + for (auto it = payload_.begin(); it != payload_.end(); ++it) { + auto ret = claim_names_.insert(it.key()); + if (!ret.second) { + ec = DecodeErrc::DuplClaims; + break; + } + } - //validate the fields - //TODO: return; } @@ -429,9 +435,7 @@ jwt_object decode(const string_view enc_str, .get_claim_value(registered_claims::expiration) .get(); - std::cout << curr_time << " :: " << p_exp << std::endl; - - if (p_exp < curr_time) { + if (p_exp < (curr_time + dparams.leeway)) { throw VerificationError("Token expired"); } } diff --git a/include/jwt/jwt.hpp b/include/jwt/jwt.hpp index 689ddfb..6ed9735 100644 --- a/include/jwt/jwt.hpp +++ b/include/jwt/jwt.hpp @@ -306,7 +306,6 @@ public: // Exposed APIs { // Duplicate claim names not allowed // if overwrite flag is set to true. - std::cout << "Adding claim: " << claim_names_.size() << std::endl; auto itr = claim_names_.find(cname); if (itr != claim_names_.end() && !overwrite) { return false; @@ -398,8 +397,6 @@ public: // Exposed APIs //based overload bool has_claim(const string_view cname) const noexcept { - std::cout << "CSZ: " << claim_names_.size() << std::endl; - for (auto c : claim_names_) std::cout << "Claim: " << c << std::endl; return claim_names_.count(cname); } diff --git a/include/jwt/test/test_jwt_object b/include/jwt/test/test_jwt_object index b970955..b5ce73d 100755 Binary files a/include/jwt/test/test_jwt_object and b/include/jwt/test/test_jwt_object differ