Skip to content

Commit ea8f066

Browse files
committed
enable user defined base64 decoding function
1 parent bb1409a commit ea8f066

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

include/jwt-cpp/jwt.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3862,7 +3862,8 @@ namespace jwt {
38623862
using iterator = typename jwt_vector_t::iterator;
38633863
using const_iterator = typename jwt_vector_t::const_iterator;
38643864

3865-
JWT_CLAIM_EXPLICIT jwks(const typename json_traits::string_type& str) {
3865+
template<typename Decode>
3866+
jwks(const typename json_traits::string_type& str, Decode decode) {
38663867
typename json_traits::value_type parsed_val;
38673868
if (!json_traits::parse(parsed_val, str)) throw error::invalid_json_exception();
38683869

@@ -3871,9 +3872,16 @@ namespace jwt {
38713872

38723873
auto jwk_list = jwks_json.get_claim("keys").as_array();
38733874
std::transform(jwk_list.begin(), jwk_list.end(), std::back_inserter(jwk_claims),
3874-
[](const typename json_traits::value_type& val) { return jwk_t{val}; });
3875+
[&](const typename json_traits::value_type& val) { return jwk_t(val, decode); });
38753876
}
38763877

3878+
#ifndef JWT_DISABLE_BASE64
3879+
JWT_CLAIM_EXPLICIT jwks(const typename json_traits::string_type& str)
3880+
: jwks(str, [](const typename json_traits::string_type& str) {
3881+
return base::decode<alphabet::base64url>(base::pad<alphabet::base64url>(str));
3882+
}) {}
3883+
#endif
3884+
38773885
iterator begin() { return jwk_claims.begin(); }
38783886
iterator end() { return jwk_claims.end(); }
38793887
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

7791
/**
7892
* This type is the specialization of the \ref verify_ops::verify_context class which

0 commit comments

Comments
 (0)