Skip to content

Commit ea2d4b7

Browse files
committed
enable user defined base64 decoding function
1 parent fada69a commit ea2d4b7

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

include/jwt-cpp/jwt.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2051,8 +2051,8 @@ namespace jwt {
20512051
};
20522052

20532053
template<typename object_type, typename string_type>
2054-
using is_count_signature = typename std::is_integral<decltype(
2055-
std::declval<const object_type>().count(std::declval<const string_type>()))>;
2054+
using is_count_signature = typename std::is_integral<decltype(std::declval<const object_type>().count(
2055+
std::declval<const string_type>()))>;
20562056

20572057
template<typename object_type, typename string_type>
20582058
struct has_subcription_operator {
@@ -3784,7 +3784,8 @@ namespace jwt {
37843784
using iterator = typename jwt_vector_t::iterator;
37853785
using const_iterator = typename jwt_vector_t::const_iterator;
37863786

3787-
JWT_CLAIM_EXPLICIT jwks(const typename json_traits::string_type& str) {
3787+
template<typename Decode>
3788+
jwks(const typename json_traits::string_type& str, Decode decode) {
37883789
typename json_traits::value_type parsed_val;
37893790
if (!json_traits::parse(parsed_val, str)) throw error::invalid_json_exception();
37903791

@@ -3793,9 +3794,16 @@ namespace jwt {
37933794

37943795
auto jwk_list = jwks_json.get_claim("keys").as_array();
37953796
std::transform(jwk_list.begin(), jwk_list.end(), std::back_inserter(jwk_claims),
3796-
[](const typename json_traits::value_type& val) { return jwk_t{val}; });
3797+
[&](const typename json_traits::value_type& val) { return jwk_t(val, decode); });
37973798
}
37983799

3800+
#ifndef JWT_DISABLE_BASE64
3801+
JWT_CLAIM_EXPLICIT jwks(const typename json_traits::string_type& str)
3802+
: jwks(str, [](const typename json_traits::string_type& str) {
3803+
return base::decode<alphabet::base64url>(base::pad<alphabet::base64url>(str));
3804+
}) {}
3805+
#endif
3806+
37993807
iterator begin() { return jwk_claims.begin(); }
38003808
iterator end() { return jwk_claims.end(); }
38013809
const_iterator cbegin() const { return jwk_claims.begin(); }

include/jwt-cpp/traits/kazuho-picojson/defaults.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ namespace jwt {
5454
return decoded_jwt<traits::kazuho_picojson>(token, decode);
5555
}
5656

57+
#ifndef JWT_DISABLE_BASE64
5758
/**
5859
* Parse a jwk
5960
* \param token JWK Token to parse
@@ -63,7 +64,14 @@ namespace jwt {
6364
inline jwk<traits::kazuho_picojson> parse_jwk(const traits::kazuho_picojson::string_type& token) {
6465
return jwk<traits::kazuho_picojson>(token);
6566
}
67+
#endif
68+
69+
template<typename Decode>
70+
jwk<traits::kazuho_picojson> parse_jwk(const traits::kazuho_picojson::string_type& token, Decode decode) {
71+
return jwk<traits::kazuho_picojson>(token, decode);
72+
}
6673

74+
#ifndef JWT_DISABLE_BASE64
6775
/**
6876
* Parse a jwks
6977
* \param token JWKs Token to parse
@@ -73,6 +81,12 @@ namespace jwt {
7381
inline jwks<traits::kazuho_picojson> parse_jwks(const traits::kazuho_picojson::string_type& token) {
7482
return jwks<traits::kazuho_picojson>(token);
7583
}
84+
#endif
85+
86+
template<typename Decode>
87+
jwks<traits::kazuho_picojson> parse_jwks(const traits::kazuho_picojson::string_type& token, Decode decode) {
88+
return jwks<traits::kazuho_picojson>(token, decode);
89+
}
7690
} // namespace jwt
7791

7892
#endif // JWT_CPP_KAZUHO_PICOJSON_DEFAULTS_H

0 commit comments

Comments
 (0)