Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ workspace.yaml
CMakeLists.txt.user
.idea/
MODULE.bazel.lock
/lib/everest/api_types/tests/test_file_autogenerator/pythonProject/__pycache__/
1 change: 1 addition & 0 deletions compile_commands.json
1 change: 1 addition & 0 deletions lib/everest/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
add_subdirectory(can_dpm1000)
add_subdirectory(conversions)
add_subdirectory(everest_api_types)
add_subdirectory(external_energy_limits)
add_subdirectory(helpers)
add_subdirectory(run_application)
Expand Down
134 changes: 134 additions & 0 deletions lib/everest/everest_api_types/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
find_package(everest-cmake 0.1 REQUIRED
PATHS ../everest-cmake
)


if(DISABLE_EDM)
find_package(nlohmann_json REQUIRED)
find_package(date REQUIRED)
endif()


# SO for API with structs and (de)serialization codec
add_library(everest_api_types SHARED)
add_library(everest::everest_api_types ALIAS everest_api_types)

add_dependencies(everest_api_types generate_cpp_files)

target_compile_options(everest_api_types
PUBLIC -Wall -Wextra -pedantic -Werror=switch)

set_target_properties(everest_api_types PROPERTIES
VERSION 0.1.0
SOVERSION 0
)

target_include_directories(everest_api_types
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/private_include>

PUBLIC $<INSTALL_INTERFACE:include>

PRIVATE "private_include/everest_api_types"
PRIVATE "include/everest_api_types"
PRIVATE "${CMAKE_BINARY_DIR}/generated/include"
)

target_sources(everest_api_types
PRIVATE

src/everest_api_types/auth/codec.cpp
src/everest_api_types/auth/json_codec.cpp
src/everest_api_types/auth/wrapper.cpp

src/everest_api_types/display_message/codec.cpp
src/everest_api_types/display_message/json_codec.cpp
src/everest_api_types/display_message/wrapper.cpp

src/everest_api_types/energy/codec.cpp
src/everest_api_types/energy/json_codec.cpp
src/everest_api_types/energy/wrapper.cpp

src/everest_api_types/error_history/codec.cpp
src/everest_api_types/error_history/json_codec.cpp
src/everest_api_types/error_history/wrapper.cpp

src/everest_api_types/evse_board_support/codec.cpp
src/everest_api_types/evse_board_support/json_codec.cpp
src/everest_api_types/evse_board_support/wrapper.cpp

src/everest_api_types/evse_manager/codec.cpp
src/everest_api_types/evse_manager/json_codec.cpp
src/everest_api_types/evse_manager/wrapper.cpp

src/everest_api_types/iso15118_charger/codec.cpp
src/everest_api_types/iso15118_charger/json_codec.cpp
src/everest_api_types/iso15118_charger/wrapper.cpp

src/everest_api_types/isolation_monitor/codec.cpp
src/everest_api_types/isolation_monitor/json_codec.cpp
src/everest_api_types/isolation_monitor/wrapper.cpp

src/everest_api_types/ocpp/codec.cpp
src/everest_api_types/ocpp/json_codec.cpp
src/everest_api_types/ocpp/wrapper.cpp

src/everest_api_types/over_voltage_monitor/codec.cpp
src/everest_api_types/over_voltage_monitor/json_codec.cpp

src/everest_api_types/power_supply_DC/codec.cpp
src/everest_api_types/power_supply_DC/json_codec.cpp
src/everest_api_types/power_supply_DC/wrapper.cpp

src/everest_api_types/powermeter/codec.cpp
src/everest_api_types/powermeter/json_codec.cpp
src/everest_api_types/powermeter/wrapper.cpp

src/everest_api_types/slac/codec.cpp
src/everest_api_types/slac/json_codec.cpp

src/everest_api_types/system/codec.cpp
src/everest_api_types/system/json_codec.cpp
src/everest_api_types/system/wrapper.cpp

src/everest_api_types/uk_random_delay/codec.cpp
src/everest_api_types/uk_random_delay/json_codec.cpp
src/everest_api_types/uk_random_delay/wrapper.cpp

src/everest_api_types/generic/codec.cpp
src/everest_api_types/generic/json_codec.cpp
src/everest_api_types/generic/string.cpp

src/everest_api_types/utilities/codec.cpp
src/everest_api_types/utilities/Topics.cpp

src/utils/date.cpp
)

target_link_libraries(everest_api_types
PRIVATE nlohmann_json::nlohmann_json
PRIVATE date::date
PRIVATE date::date-tz
)

install(TARGETS everest_api_types
EXPORT everest_api_types-targets
LIBRARY
)

install(
DIRECTORY include/everest_api_types
DESTINATION include
)

evc_setup_package(
NAME everest-api-types
EXPORT everest_api_types-targets
NAMESPACE everest
)

if(${BUILD_TESTING})
add_subdirectory(tests)
endif()


124 changes: 124 additions & 0 deletions lib/everest/everest_api_types/include/everest_api_types/auth/API.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright 2020 - 2025 Pionix GmbH and Contributors to EVerest

#pragma once
#include <everest_api_types/display_message/API.hpp>
#include <optional>
#include <string>
#include <vector>

namespace everest::lib::API::V1_0::types::auth {

enum class AuthorizationStatus {
Accepted,
Blocked,
ConcurrentTx,
Expired,
Invalid,
NoCredit,
NotAllowedTypeEVSE,
NotAtThisLocation,
NotAtThisTime,
Unknown,
};

enum class CertificateStatus {
Accepted,
SignatureError,
CertificateExpired,
CertificateRevoked,
NoCertificateAvailable,
CertChainError,
ContractCancelled,
};

enum class TokenValidationStatus {
Processing,
Accepted,
Rejected,
TimedOut,
Withdrawn,
};

enum class SelectionAlgorithm {
UserInput,
PlugEvents,
FindFirst,
};

enum class AuthorizationType {
OCPP,
RFID,
Autocharge,
PlugAndCharge,
BankCard,
};

enum class IdTokenType {
Central,
eMAID,
MacAddress,
ISO14443,
ISO15693,
KeyCode,
Local,
NoAuthorization,
};

enum class WithdrawAuthorizationResult {
Accepted,
AuthorizationNotFound,
EvseNotFound,
Rejected,
};

struct CustomIdToken {
std::string value;
std::string type;
};

struct IdToken {
std::string value;
IdTokenType type;
std::optional<std::vector<CustomIdToken>> additional_info;
};

struct ProvidedIdToken {
IdToken id_token;
AuthorizationType authorization_type;
std::optional<int32_t> request_id;
std::optional<IdToken> parent_id_token;
std::optional<std::vector<int32_t>> connectors;
std::optional<bool> prevalidated;
std::optional<std::string> certificate;
// std::optional<std::vector<types::iso15118_charger::CertificateHashDataInfo>> iso15118CertificateHashData;
// FIXME: Provide datatype
};

struct TokenValidationStatusMessage {
ProvidedIdToken token;
TokenValidationStatus status;
std::optional<std::vector<display_message::MessageContent>> messages;
};

struct ValidationResult {
AuthorizationStatus authorization_status;
std::optional<CertificateStatus> certificate_status;
std::optional<TokenValidationStatusMessage> reason;
std::optional<std::string> expiry_time;
std::optional<IdToken> parent_id_token;
std::optional<std::vector<int32_t>> evse_ids;
std::optional<int32_t> reservation_id;
};

struct ValidationResultUpdate {
ValidationResult validation_result;
int32_t connector_id;
};

struct WithdrawAuthorizationRequest {
std::optional<int32_t> evse_id;
std::optional<IdToken> id_token;
};

} // namespace everest::lib::API::V1_0::types::auth
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright 2020 - 2025 Pionix GmbH and Contributors to EVerest

#pragma once

#include "API.hpp"
#include <optional>
#include <string>

namespace everest::lib::API::V1_0::types::auth {

std::string serialize(AuthorizationStatus val) noexcept;
std::string serialize(CertificateStatus val) noexcept;
std::string serialize(TokenValidationStatus val) noexcept;
std::string serialize(SelectionAlgorithm val) noexcept;
std::string serialize(AuthorizationType val) noexcept;
std::string serialize(IdTokenType val) noexcept;
std::string serialize(WithdrawAuthorizationResult val) noexcept;
std::string serialize(CustomIdToken const& val) noexcept;
std::string serialize(IdToken const& val) noexcept;
std::string serialize(ProvidedIdToken const& val) noexcept;
std::string serialize(TokenValidationStatusMessage const& val) noexcept;
std::string serialize(ValidationResult const& val) noexcept;
std::string serialize(ValidationResultUpdate const& val) noexcept;
std::string serialize(WithdrawAuthorizationRequest const& val) noexcept;

std::ostream& operator<<(std::ostream& os, AuthorizationStatus const& val);
std::ostream& operator<<(std::ostream& os, CertificateStatus const& val);
std::ostream& operator<<(std::ostream& os, TokenValidationStatus const& val);
std::ostream& operator<<(std::ostream& os, SelectionAlgorithm const& val);
std::ostream& operator<<(std::ostream& os, AuthorizationType const& val);
std::ostream& operator<<(std::ostream& os, IdTokenType const& val);
std::ostream& operator<<(std::ostream& os, WithdrawAuthorizationResult const& val);
std::ostream& operator<<(std::ostream& os, CustomIdToken const& val);
std::ostream& operator<<(std::ostream& os, IdToken const& val);
std::ostream& operator<<(std::ostream& os, ProvidedIdToken const& val);
std::ostream& operator<<(std::ostream& os, TokenValidationStatusMessage const& val);
std::ostream& operator<<(std::ostream& os, ValidationResult const& val);
std::ostream& operator<<(std::ostream& os, ValidationResultUpdate const& val);
std::ostream& operator<<(std::ostream& os, WithdrawAuthorizationRequest const& val);

template <class T> T deserialize(std::string const& val);
template <class T> std::optional<T> try_deserialize(std::string const& val) {
try {
return deserialize<T>(val);
} catch (...) {
return std::nullopt;
}
}
template <class T> bool adl_deserialize(std::string const& json_data, T& obj) {
auto opt = try_deserialize<T>(json_data);
if (opt) {
obj = opt.value();
return true;
}
return false;
}

} // namespace everest::lib::API::V1_0::types::auth
Loading