diff --git a/include/ocpp/v201/utils.hpp b/include/ocpp/v201/utils.hpp index fb79c2199..a1c1bf7ff 100644 --- a/include/ocpp/v201/utils.hpp +++ b/include/ocpp/v201/utils.hpp @@ -52,6 +52,11 @@ TriggerReasonEnum stop_reason_to_trigger_reason_enum(const ReasonEnum& stop_reas /// \return std::string sha256(const std::string& str); +/// @brief Return a SHA256 hash generated from a combination of the \p token type and id +/// @param token the token to generate the hash for +/// @return A SHA256 hash string +std::string generate_token_hash(const IdToken& token); + } // namespace utils } // namespace v201 } // namespace ocpp diff --git a/lib/ocpp/v201/charge_point.cpp b/lib/ocpp/v201/charge_point.cpp index 9fd5c93a6..d3d8a310c 100644 --- a/lib/ocpp/v201/charge_point.cpp +++ b/lib/ocpp/v201/charge_point.cpp @@ -272,13 +272,13 @@ AuthorizeResponse ChargePoint::validate_token(const IdToken id_token, const std: return this->authorize_req(id_token, certificate, ocsp_request_data); } - const auto hashed_id_token = utils::sha256(id_token.idToken.get()); + const auto hashed_id_token = utils::generate_token_hash(id_token); const auto cache_entry = this->database_handler->get_auth_cache_entry(hashed_id_token); if (!cache_entry.has_value()) { EVLOG_info << "AuthCache enabled but not entry found: Sending Authorize.req"; response = this->authorize_req(id_token, certificate, ocsp_request_data); - this->database_handler->insert_auth_cache_entry(utils::sha256(id_token.idToken.get()), response.idTokenInfo); + this->database_handler->insert_auth_cache_entry(hashed_id_token, response.idTokenInfo); return response; } @@ -287,7 +287,7 @@ AuthorizeResponse ChargePoint::validate_token(const IdToken id_token, const std: EVLOG_info << "Entry found in AuthCache but cacheExpiryDate exceeded: Sending Authorize.req"; this->database_handler->delete_auth_cache_entry(hashed_id_token); response = this->authorize_req(id_token, certificate, ocsp_request_data); - this->database_handler->insert_auth_cache_entry(utils::sha256(id_token.idToken.get()), response.idTokenInfo); + this->database_handler->insert_auth_cache_entry(hashed_id_token, response.idTokenInfo); return response; } @@ -299,7 +299,7 @@ AuthorizeResponse ChargePoint::validate_token(const IdToken id_token, const std: } response = this->authorize_req(id_token, certificate, ocsp_request_data); - this->database_handler->insert_auth_cache_entry(utils::sha256(id_token.idToken.get()), response.idTokenInfo); + this->database_handler->insert_auth_cache_entry(hashed_id_token, response.idTokenInfo); return response; } @@ -1233,7 +1233,7 @@ void ChargePoint::handle_start_transaction_event_response(CallResultdevice_model->get_optional_value(ControllerComponentVariables::AuthCacheCtrlrEnabled) .value_or(true)) { - this->database_handler->insert_auth_cache_entry(utils::sha256(id_token.idToken.get()), + this->database_handler->insert_auth_cache_entry(utils::generate_token_hash(id_token), msg.idTokenInfo.value()); } if (msg.idTokenInfo.value().status != AuthorizationStatusEnum::Accepted) { diff --git a/lib/ocpp/v201/utils.cpp b/lib/ocpp/v201/utils.cpp index ea1652948..eebf7ffde 100644 --- a/lib/ocpp/v201/utils.cpp +++ b/lib/ocpp/v201/utils.cpp @@ -149,6 +149,10 @@ std::string sha256(const std::string& str) { return ss.str(); } +std::string generate_token_hash(const IdToken& token) { + return sha256(conversions::id_token_enum_to_string(token.type) + token.idToken.get()); +} + } // namespace utils } // namespace v201 -} // namespace ocpp \ No newline at end of file +} // namespace ocpp