ocpp 0.24.1
A C++ implementation of the Open Charge Point Protocol
authorization.hpp
1// SPDX-License-Identifier: Apache-2.0
2// Copyright Pionix GmbH and Contributors to EVerest
3
4#pragma once
5
6#include <ocpp/v2/message_handler.hpp>
7
8namespace ocpp::v2 {
9struct FunctionalBlockContext;
10struct AuthorizationCacheEntry;
11struct AuthorizeResponse;
12struct ClearCacheRequest;
13struct SendLocalListRequest;
14struct GetLocalListVersionRequest;
15
16class DatabaseHandlerInterface;
17
19public:
20 virtual ~AuthorizationInterface() {
21 }
22
23 virtual void start_auth_cache_cleanup_thread() = 0;
24 virtual AuthorizeResponse authorize_req(const IdToken id_token, const std::optional<CiString<5500>>& certificate,
25 const std::optional<std::vector<OCSPRequestData>>& ocsp_request_data) = 0;
26 virtual void trigger_authorization_cache_cleanup() = 0;
30 virtual bool is_auth_cache_ctrlr_enabled() = 0;
31 virtual void authorization_cache_insert_entry(const std::string& id_token_hash,
32 const IdTokenInfo& id_token_info) = 0;
33 virtual std::optional<AuthorizationCacheEntry> authorization_cache_get_entry(const std::string& id_token_hash) = 0;
34 virtual void authorization_cache_delete_entry(const std::string& id_token_hash) = 0;
35
41 virtual AuthorizeResponse validate_token(const IdToken id_token, const std::optional<CiString<5500>>& certificate,
42 const std::optional<std::vector<OCSPRequestData>>& ocsp_request_data) = 0;
43};
44
46private: // Members
47 const FunctionalBlockContext& context;
48
49 // threads and synchronization
50 bool auth_cache_cleanup_required;
51 std::condition_variable auth_cache_cleanup_cv;
52 std::mutex auth_cache_cleanup_mutex;
53 std::thread auth_cache_cleanup_thread;
54 std::atomic_bool auth_cache_cleanup_handler_running;
55
56public:
57 explicit Authorization(const FunctionalBlockContext& context);
59 void start_auth_cache_cleanup_thread() override;
60 void handle_message(const ocpp::EnhancedMessage<MessageType>& message) override;
61 AuthorizeResponse authorize_req(const IdToken id_token, const std::optional<ocpp::CiString<5500>>& certificate,
62 const std::optional<std::vector<OCSPRequestData>>& ocsp_request_data) override;
63 void trigger_authorization_cache_cleanup() override;
64 void update_authorization_cache_size() override;
65 bool is_auth_cache_ctrlr_enabled() override;
66 void authorization_cache_insert_entry(const std::string& id_token_hash, const IdTokenInfo& id_token_info) override;
67 std::optional<AuthorizationCacheEntry> authorization_cache_get_entry(const std::string& id_token_hash) override;
68 void authorization_cache_delete_entry(const std::string& id_token_hash) override;
69
75 AuthorizeResponse validate_token(const IdToken id_token, const std::optional<CiString<5500>>& certificate,
76 const std::optional<std::vector<OCSPRequestData>>& ocsp_request_data) override;
77
78private: // Functions
79 void stop_auth_cache_cleanup_thread();
80
81 // Functional Block C: Authorization
82 void handle_clear_cache_req(Call<ClearCacheRequest> call);
83 void cache_cleanup_handler();
84
85 // Functional Block D: Local authorization list management
86 void handle_send_local_authorization_list_req(Call<SendLocalListRequest> call);
87 void handle_get_local_authorization_list_version_req(Call<GetLocalListVersionRequest> call);
88
93 SendLocalListStatusEnum apply_local_authorization_list(const SendLocalListRequest& request);
94};
95} // namespace ocpp::v2
Definition: authorization.hpp:18
virtual void update_authorization_cache_size()=0
Calculate and update the authorization cache size in the device model.
virtual AuthorizeResponse validate_token(const IdToken id_token, const std::optional< CiString< 5500 > > &certificate, const std::optional< std::vector< OCSPRequestData > > &ocsp_request_data)=0
Validates provided id_token certificate and ocsp_request_data using CSMS, AuthCache or AuthList.
Definition: authorization.hpp:45
void handle_message(const ocpp::EnhancedMessage< MessageType > &message) override
Handles the given message from the CSMS. This includes dispatching a CALLRESULT as a response to the ...
Definition: authorization.cpp:43
AuthorizeResponse validate_token(const IdToken id_token, const std::optional< CiString< 5500 > > &certificate, const std::optional< std::vector< OCSPRequestData > > &ocsp_request_data) override
Validates provided id_token certificate and ocsp_request_data using CSMS, AuthCache or AuthList.
Definition: authorization.cpp:149
void update_authorization_cache_size() override
Calculate and update the authorization cache size in the device model.
Definition: authorization.cpp:113
Interface for handling OCPP2.0.1 CALL messages from the CSMS. Classes implementing a functional block...
Definition: message_handler.hpp:13
Contains a OCPP Call message.
Definition: call_types.hpp:60
Contains a OCPP message in json form with additional information.
Definition: message_queue.hpp:54
Contains a OCPP AuthorizeResponse message.
Definition: Authorize.hpp:41
Context / requirements for the functional blocks.
Definition: functional_block_context.hpp:23
Definition: ocpp_types.hpp:86
Definition: ocpp_types.hpp:36
Contains a OCPP SendLocalList message.
Definition: SendLocalList.hpp:19