From 8f1b5b95e3f02d92c2e4c21a87436c1bd4299c06 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk <41349689+antkmsft@users.noreply.github.com> Date: Wed, 30 Jun 2021 17:23:20 -0700 Subject: [PATCH] Move POSIX time converter from KeyVault to Core (#2524) * Move POSIX time converter from KeyVault to Core * Move to Core namespace Co-authored-by: Anton Kolesnyk --- .../azure-core/inc/azure/core/datetime.hpp | 46 ++++++++++++++++++ .../CMakeLists.txt | 1 - .../common/internal/unix_time_helper.hpp | 47 ------------------- .../src/deleted_key.cpp | 8 ++-- .../src/import_key_options.cpp | 11 ++--- .../src/key_request_parameters.cpp | 8 ++-- .../src/key_vault_key.cpp | 14 +++--- .../src/list_keys_single_page_result.cpp | 19 ++++---- 8 files changed, 74 insertions(+), 80 deletions(-) delete mode 100644 sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/unix_time_helper.hpp diff --git a/sdk/core/azure-core/inc/azure/core/datetime.hpp b/sdk/core/azure-core/inc/azure/core/datetime.hpp index 1d9958c7f..4355227f4 100644 --- a/sdk/core/azure-core/inc/azure/core/datetime.hpp +++ b/sdk/core/azure-core/inc/azure/core/datetime.hpp @@ -267,4 +267,50 @@ inline bool operator>=(std::chrono::system_clock::time_point const& tp, DateTime return (dt <= tp); } +namespace Core { namespace _internal { + /** + * @brief Provides convertion methods for POSIX time to an #Azure::DateTime. + * + */ + class PosixTimeConverter final { + public: + /** + * @brief Converts POSIX time to an #Azure::DateTime. + * + * @param posixTime The number of seconds since 1970. + * @return Calculated #Azure::DateTime. + */ + static DateTime PosixTimeToDateTime(int64_t posixTime) + { + return DateTime(1970) + std::chrono::seconds(posixTime); + } + + /** + * @brief Converts a DateTime to POSIX time. + * + * @param dateTime The `%DateTime` to convert. + * @return The number of seconds since 1970. + */ + static int64_t DateTimeToPosixTime(DateTime const& dateTime) + { + // This count starts at the POSIX epoch which is January 1st, 1970 UTC. + return std::chrono::duration_cast(dateTime - DateTime(1970)).count(); + } + + private: + /** + * @brief An instance of `%PosixTimeConverter` class cannot be created. + * + */ + PosixTimeConverter() = delete; + + /** + * @brief An instance of `%PosixTimeConverter` class cannot be destructed, because no instance + * can be created. + * + */ + ~PosixTimeConverter() = delete; + }; +}} // namespace Core::_internal + } // namespace Azure diff --git a/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt b/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt index 9cd63553b..d13ad8a18 100644 --- a/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt +++ b/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt @@ -31,7 +31,6 @@ set( inc/azure/keyvault/common/internal/base64url.hpp inc/azure/keyvault/common/internal/keyvault_pipeline.hpp inc/azure/keyvault/common/internal/single_page.hpp - inc/azure/keyvault/common/internal/unix_time_helper.hpp inc/azure/keyvault/common/internal/keyvault_exception.hpp inc/azure/keyvault/common/sha.hpp ) diff --git a/sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/unix_time_helper.hpp b/sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/unix_time_helper.hpp deleted file mode 100644 index a7288eb75..000000000 --- a/sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/unix_time_helper.hpp +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// SPDX-License-Identifier: MIT - -/** - * @brief Provides helper method for using POSIX time. - * - */ - -#pragma once - -#include - -#include - -namespace Azure { namespace Security { namespace KeyVault { namespace _internal { - - /** - * @brief Provides convertion methods for POSIX time to Azure Core #Azure::Core::DateTime. - * - */ - class UnixTimeConverter final { - public: - /** - * @brief Converts POSIX time to a #Azure::Core::Datetime. - * - * @param unixTime The number of seconds since 1970. - * @return Calculated #Azure::Core::DateTime. - */ - static inline Azure::DateTime UnixTimeToDatetime(int64_t unixTime) - { - return Azure::DateTime(1970) + std::chrono::seconds(unixTime); - } - - /** - * @brief Converts an #Azure::Core::DateTime to POSIX time. - * - * @param dateTime The date time to convert. - */ - static inline int64_t DatetimeToUnixTime(Azure::DateTime dateTime) - { - // This count starts at the Unix epoch which is January 1st, 1970 UTC. - auto secondsSince1970 - = std::chrono::duration_cast(dateTime - Azure::DateTime(1970)); - return secondsSince1970.count(); - } - }; -}}}} // namespace Azure::Security::KeyVault::_internal diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/deleted_key.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/deleted_key.cpp index 9159422aa..ec84733f5 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/deleted_key.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/deleted_key.cpp @@ -4,8 +4,6 @@ #include #include -#include - #include "azure/keyvault/keys/deleted_key.hpp" #include "azure/keyvault/keys/key_vault_key.hpp" #include "private/key_constants.hpp" @@ -13,7 +11,7 @@ using namespace Azure::Security::KeyVault::Keys; using namespace Azure::Core::Json::_internal; -using Azure::Security::KeyVault::_internal::UnixTimeConverter; +using Azure::Core::_internal::PosixTimeConverter; DeletedKey _detail::DeletedKeySerializer::DeletedKeyDeserialize( std::string const& name, @@ -42,12 +40,12 @@ DeletedKey _detail::DeletedKeySerializer::DeletedKeyDeserialize( deletedKey.DeletedDate, jsonParser, _detail::DeletedOnPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); JsonOptional::SetIfExists( deletedKey.ScheduledPurgeDate, jsonParser, _detail::ScheduledPurgeDatePropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); return deletedKey; } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/import_key_options.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/import_key_options.cpp index ef56d39f7..a1557b8c0 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/import_key_options.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/import_key_options.cpp @@ -4,8 +4,6 @@ #include #include -#include - #include "azure/keyvault/keys/import_key_options.hpp" #include "private/key_constants.hpp" #include "private/key_serializers.hpp" @@ -21,6 +19,7 @@ std::string Azure::Security::KeyVault::Keys::_detail::ImportKeyOptionsSerializer::ImportKeyOptionsSerialize( ImportKeyOptions const& importKeyOptions) { + using Azure::Core::_internal::PosixTimeConverter; Azure::Core::Json::_internal::json payload; // key @@ -36,7 +35,7 @@ Azure::Security::KeyVault::Keys::_detail::ImportKeyOptionsSerializer::ImportKeyO importKeyOptions.Properties.CreatedOn, payload[_detail::AttributesPropertyName], _detail::CreatedPropertyName, - UnixTimeConverter::DatetimeToUnixTime); + PosixTimeConverter::DateTimeToPosixTime); JsonOptional::SetFromNullable( importKeyOptions.Properties.Enabled, payload[_detail::AttributesPropertyName], @@ -45,12 +44,12 @@ Azure::Security::KeyVault::Keys::_detail::ImportKeyOptionsSerializer::ImportKeyO importKeyOptions.Properties.ExpiresOn, payload[_detail::AttributesPropertyName], _detail::ExpPropertyName, - UnixTimeConverter::DatetimeToUnixTime); + PosixTimeConverter::DateTimeToPosixTime); JsonOptional::SetFromNullable( importKeyOptions.Properties.NotBefore, payload[_detail::AttributesPropertyName], _detail::NbfPropertyName, - UnixTimeConverter::DatetimeToUnixTime); + PosixTimeConverter::DateTimeToPosixTime); JsonOptional::SetFromNullable( importKeyOptions.Properties.RecoverableDays, payload[_detail::AttributesPropertyName], @@ -62,7 +61,7 @@ Azure::Security::KeyVault::Keys::_detail::ImportKeyOptionsSerializer::ImportKeyO importKeyOptions.Properties.UpdatedOn, payload[_detail::AttributesPropertyName], _detail::UpdatedPropertyName, - UnixTimeConverter::DatetimeToUnixTime); + PosixTimeConverter::DateTimeToPosixTime); // tags for (auto& tag : importKeyOptions.Properties.Tags) diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/key_request_parameters.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/key_request_parameters.cpp index fedea33d8..55c7ff9a6 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/key_request_parameters.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/key_request_parameters.cpp @@ -4,8 +4,6 @@ #include #include -#include - #include "private/key_constants.hpp" #include "private/key_request_parameters.hpp" @@ -13,10 +11,10 @@ using namespace Azure::Security::KeyVault::Keys::_detail; using namespace Azure::Core::Json::_internal; -using namespace Azure::Security::KeyVault::_internal; std::string KeyRequestParameters::Serialize() const { + using Azure::Core::_internal::PosixTimeConverter; Azure::Core::Json::_internal::json payload; // kty @@ -43,13 +41,13 @@ std::string KeyRequestParameters::Serialize() const m_options.ExpiresOn, payload[_detail::AttributesPropertyName], _detail::ExpPropertyName, - UnixTimeConverter::DatetimeToUnixTime); + PosixTimeConverter::DateTimeToPosixTime); JsonOptional::SetFromNullable( m_options.NotBefore, payload[_detail::AttributesPropertyName], _detail::NbfPropertyName, - UnixTimeConverter::DatetimeToUnixTime); + PosixTimeConverter::DateTimeToPosixTime); // tags for (auto tag : m_options.Tags) diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/key_vault_key.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/key_vault_key.cpp index 8d641cb3b..27c4ff347 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/key_vault_key.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/key_vault_key.cpp @@ -6,15 +6,13 @@ #include #include -#include - #include "azure/keyvault/keys/key_vault_key.hpp" #include "private/key_constants.hpp" #include "private/key_serializers.hpp" using namespace Azure::Security::KeyVault::Keys; using namespace Azure::Core::Json::_internal; -using Azure::Security::KeyVault::_internal::UnixTimeConverter; +using Azure::Core::_internal::PosixTimeConverter; KeyVaultKey _detail::KeyVaultKeySerializer::KeyVaultKeyDeserialize( std::string const& name, @@ -46,6 +44,8 @@ void _detail::KeyVaultKeySerializer::KeyVaultKeyDeserialize( KeyVaultKey& key, Azure::Core::Json::_internal::json const& jsonParser) { + using Azure::Core::_internal::PosixTimeConverter; + // Deserialize jwk _detail::JsonWebKeySerializer::JsonWebDeserialize(key.Key, jsonParser); @@ -63,22 +63,22 @@ void _detail::KeyVaultKeySerializer::KeyVaultKeyDeserialize( key.Properties.NotBefore, attributes, _detail::NbfPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); JsonOptional::SetIfExists( key.Properties.ExpiresOn, attributes, _detail::ExpPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); JsonOptional::SetIfExists( key.Properties.CreatedOn, attributes, _detail::CreatedPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); JsonOptional::SetIfExists( key.Properties.UpdatedOn, attributes, _detail::UpdatedPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); } // "Tags" diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/list_keys_single_page_result.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/list_keys_single_page_result.cpp index 6f3d57edf..21df765ff 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/list_keys_single_page_result.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/list_keys_single_page_result.cpp @@ -6,8 +6,6 @@ #include "private/key_constants.hpp" #include "private/key_serializers.hpp" -#include - #include #include #include @@ -15,12 +13,13 @@ using namespace Azure::Security::KeyVault::Keys; using namespace Azure::Core::Json::_internal; -using Azure::Security::KeyVault::_internal::UnixTimeConverter; KeyPropertiesPageResult _detail::KeyPropertiesPageResultSerializer::KeyPropertiesPageResultDeserialize( Azure::Core::Http::RawResponse const& rawResponse) { + using Azure::Core::_internal::PosixTimeConverter; + KeyPropertiesPageResult result; auto const& body = rawResponse.GetBody(); auto jsonParser = json::parse(body); @@ -44,22 +43,22 @@ _detail::KeyPropertiesPageResultSerializer::KeyPropertiesPageResultDeserialize( keyProperties.NotBefore, attributes, _detail::NbfPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); JsonOptional::SetIfExists( keyProperties.ExpiresOn, attributes, _detail::ExpPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); JsonOptional::SetIfExists( keyProperties.CreatedOn, attributes, _detail::CreatedPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); JsonOptional::SetIfExists( keyProperties.UpdatedOn, attributes, _detail::UpdatedPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); } // "Tags" @@ -87,6 +86,8 @@ _detail::KeyPropertiesPageResultSerializer::KeyPropertiesPageResultDeserialize( DeletedKeyPageResult _detail::KeyPropertiesPageResultSerializer::DeletedKeyPageResultDeserialize( Azure::Core::Http::RawResponse const& rawResponse) { + using Azure::Core::_internal::PosixTimeConverter; + auto const& body = rawResponse.GetBody(); auto jsonParser = Azure::Core::Json::_internal::json::parse(body); @@ -115,12 +116,12 @@ DeletedKeyPageResult _detail::KeyPropertiesPageResultSerializer::DeletedKeyPageR deletedKey.DeletedDate, key, _detail::DeletedOnPropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); JsonOptional::SetIfExists( deletedKey.ScheduledPurgeDate, key, _detail::ScheduledPurgeDatePropertyName, - UnixTimeConverter::UnixTimeToDatetime); + PosixTimeConverter::PosixTimeToDateTime); deletedKeyPageResult.Items.emplace_back(deletedKey); }