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 <antkmsft@users.noreply.github.com>
This commit is contained in:
Anton Kolesnyk 2021-06-30 17:23:20 -07:00 committed by GitHub
parent f6765e667e
commit 8f1b5b95e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 74 additions and 80 deletions

View File

@ -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<std::chrono::seconds>(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

View File

@ -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
)

View File

@ -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 <azure/core/datetime.hpp>
#include <chrono>
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<std::chrono::seconds>(dateTime - Azure::DateTime(1970));
return secondsSince1970.count();
}
};
}}}} // namespace Azure::Security::KeyVault::_internal

View File

@ -4,8 +4,6 @@
#include <azure/core/internal/json/json.hpp>
#include <azure/core/internal/json/json_optional.hpp>
#include <azure/keyvault/common/internal/unix_time_helper.hpp>
#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<int64_t, Azure::DateTime>(
deletedKey.ScheduledPurgeDate,
jsonParser,
_detail::ScheduledPurgeDatePropertyName,
UnixTimeConverter::UnixTimeToDatetime);
PosixTimeConverter::PosixTimeToDateTime);
return deletedKey;
}

View File

@ -4,8 +4,6 @@
#include <azure/core/internal/json/json.hpp>
#include <azure/core/internal/json/json_optional.hpp>
#include <azure/keyvault/common/internal/unix_time_helper.hpp>
#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<Azure::DateTime, int64_t>(
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)

View File

@ -4,8 +4,6 @@
#include <azure/core/internal/json/json.hpp>
#include <azure/core/internal/json/json_optional.hpp>
#include <azure/keyvault/common/internal/unix_time_helper.hpp>
#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<Azure::DateTime, int64_t>(
m_options.NotBefore,
payload[_detail::AttributesPropertyName],
_detail::NbfPropertyName,
UnixTimeConverter::DatetimeToUnixTime);
PosixTimeConverter::DateTimeToPosixTime);
// tags
for (auto tag : m_options.Tags)

View File

@ -6,15 +6,13 @@
#include <azure/core/internal/json/json_serializable.hpp>
#include <azure/core/url.hpp>
#include <azure/keyvault/common/internal/unix_time_helper.hpp>
#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<int64_t, Azure::DateTime>(
key.Properties.ExpiresOn,
attributes,
_detail::ExpPropertyName,
UnixTimeConverter::UnixTimeToDatetime);
PosixTimeConverter::PosixTimeToDateTime);
JsonOptional::SetIfExists<int64_t, Azure::DateTime>(
key.Properties.CreatedOn,
attributes,
_detail::CreatedPropertyName,
UnixTimeConverter::UnixTimeToDatetime);
PosixTimeConverter::PosixTimeToDateTime);
JsonOptional::SetIfExists<int64_t, Azure::DateTime>(
key.Properties.UpdatedOn,
attributes,
_detail::UpdatedPropertyName,
UnixTimeConverter::UnixTimeToDatetime);
PosixTimeConverter::PosixTimeToDateTime);
}
// "Tags"

View File

@ -6,8 +6,6 @@
#include "private/key_constants.hpp"
#include "private/key_serializers.hpp"
#include <azure/keyvault/common/internal/unix_time_helper.hpp>
#include <azure/core/internal/json/json.hpp>
#include <azure/core/internal/json/json_optional.hpp>
#include <azure/core/internal/json/json_serializable.hpp>
@ -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<int64_t, Azure::DateTime>(
keyProperties.ExpiresOn,
attributes,
_detail::ExpPropertyName,
UnixTimeConverter::UnixTimeToDatetime);
PosixTimeConverter::PosixTimeToDateTime);
JsonOptional::SetIfExists<int64_t, Azure::DateTime>(
keyProperties.CreatedOn,
attributes,
_detail::CreatedPropertyName,
UnixTimeConverter::UnixTimeToDatetime);
PosixTimeConverter::PosixTimeToDateTime);
JsonOptional::SetIfExists<int64_t, Azure::DateTime>(
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<int64_t, Azure::DateTime>(
deletedKey.ScheduledPurgeDate,
key,
_detail::ScheduledPurgeDatePropertyName,
UnixTimeConverter::UnixTimeToDatetime);
PosixTimeConverter::PosixTimeToDateTime);
deletedKeyPageResult.Items.emplace_back(deletedKey);
}