6#include "network/sasl_transport.hpp"
8#include <azure/core/credentials/credentials.hpp>
15namespace Azure {
namespace Core {
namespace Amqp {
namespace _internal {
21 class ConnectionStringParser final {
23 ConnectionStringParser(
const std::string& connectionString)
25 ParseConnectionString(connectionString);
27 ConnectionStringParser(
const ConnectionStringParser&) =
default;
28 ConnectionStringParser& operator=(
const ConnectionStringParser&) =
default;
29 ConnectionStringParser(ConnectionStringParser&&) =
default;
30 ConnectionStringParser& operator=(ConnectionStringParser&&) =
default;
31 ~ConnectionStringParser() =
default;
33 std::string
const& GetEndpoint()
const {
return m_endpoint; }
34 std::string
const& GetSharedAccessKeyName()
const {
return m_sharedAccessKeyName; }
35 std::string
const& GetSharedAccessKey()
const {
return m_sharedAccessKey; }
36 std::string
const& GetEntityPath()
const {
return m_entityPath; }
37 std::string
const& GetHostName()
const {
return m_hostName; }
38 uint16_t GetPort()
const {
return m_port; }
39 bool UseDevelopmentEmulator()
const {
return m_useDevelopmentEmulator; }
42 void ParseConnectionString(
const std::string& connectionString);
43 std::string m_endpoint;
44 std::string m_sharedAccessKeyName;
45 std::string m_sharedAccessKey;
47 std::string m_hostName;
48 bool m_useDevelopmentEmulator{
false};
50 std::string m_entityPath;
56 class ServiceBusSasConnectionStringCredential final :
public Credentials::TokenCredential {
68 ServiceBusSasConnectionStringCredential(
69 const std::string& connectionString,
70 const std::string& entityPath = {})
71 : TokenCredential(
"ServiceBusSasConnectionStringCredential"),
72 m_connectionParser(connectionString)
76 if (m_connectionParser.GetEntityPath().empty())
78 m_entityPath = entityPath;
80 else if (!entityPath.empty() && m_connectionParser.GetEntityPath() != entityPath)
84 throw std::invalid_argument(
85 "Entity Path provided: '" + entityPath
86 +
"' does not match connection string entity path: '"
87 + m_connectionParser.GetEntityPath() +
"'.");
96 ServiceBusSasConnectionStringCredential(
const ServiceBusSasConnectionStringCredential& other)
106 ServiceBusSasConnectionStringCredential& operator=(
107 const ServiceBusSasConnectionStringCredential& other)
115 ServiceBusSasConnectionStringCredential(
116 ServiceBusSasConnectionStringCredential&& other)
noexcept =
delete;
123 ServiceBusSasConnectionStringCredential& operator=(
124 ServiceBusSasConnectionStringCredential&& other)
noexcept =
delete;
127 ~ServiceBusSasConnectionStringCredential()
override =
default;
131 std::string GetAudience();
138 virtual std::shared_ptr<Network::_internal::Transport> GetTransport()
const;
140 std::string
const& GetEndpoint()
const {
return m_connectionParser.GetEndpoint(); }
141 std::string
const& GetSharedAccessKeyName()
const
143 return m_connectionParser.GetSharedAccessKeyName();
145 std::string
const& GetSharedAccessKey()
const
147 return m_connectionParser.GetSharedAccessKey();
149 std::string
const& GetEntityPath()
const {
return m_connectionParser.GetEntityPath(); }
150 std::string
const& GetHostName()
const {
return m_connectionParser.GetHostName(); }
151 uint16_t GetPort()
const {
return m_connectionParser.GetPort(); }
153 bool UseDevelopmentEmulator() {
return m_connectionParser.UseDevelopmentEmulator(); }
165 Credentials::AccessToken GetToken(
166 Credentials::TokenRequestContext
const& tokenRequestContext,
167 Context
const& context)
const override;
170 ConnectionStringParser m_connectionParser;
171 std::string m_entityPath;
179 std::string GenerateSasToken(std::chrono::system_clock::time_point
const& expiresOn)
const;