Skip to content

Commit de6843b

Browse files
committed
call CredentialProvider everytime when authenticating
Signed-off-by: Emelia Lei <[email protected]>
1 parent b4224de commit de6843b

File tree

6 files changed

+71
-69
lines changed

6 files changed

+71
-69
lines changed

src/groups/bmq/bmqa/bmqa_session.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -252,21 +252,6 @@ int SessionUtil::createApplication(SessionImpl* sessionImpl)
252252

253253
static bsls::AtomicInt s_sessionInstanceCount(0);
254254

255-
// Authentication Message
256-
bmqp_ctrlmsg::AuthenticationMessage authenticaionMessage;
257-
258-
bmqt::AuthnCredential credential;
259-
const bsl::shared_ptr<bmqpi::CredentialProvider>& credentialProvider =
260-
sessionImpl->d_sessionOptions.credentialProvider();
261-
if (credentialProvider) {
262-
credentialProvider->loadCredential(&credential);
263-
264-
bmqp_ctrlmsg::AuthenticateRequest& ar =
265-
authenticaionMessage.makeAuthenticateRequest();
266-
ar.mechanism() = credential.mechanism();
267-
ar.data() = credential.data();
268-
}
269-
270255
// Negotiation Message
271256
bmqp_ctrlmsg::NegotiationMessage negotiationMessage;
272257
bmqp_ctrlmsg::ClientIdentity& ci = negotiationMessage.makeClientIdentity();
@@ -332,7 +317,6 @@ int SessionUtil::createApplication(SessionImpl* sessionImpl)
332317
sessionImpl->d_application_mp.load(
333318
new (*(sessionImpl->d_allocator_p))
334319
bmqimp::Application(options,
335-
authenticaionMessage,
336320
negotiationMessage,
337321
eventHandler,
338322
sessionImpl->d_allocator_p),

src/groups/bmq/bmqimp/bmqimp_application.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -555,11 +555,10 @@ Application::stateCb(bmqimp::BrokerSession::State::Enum oldState,
555555
}
556556

557557
Application::Application(
558-
const bmqt::SessionOptions& sessionOptions,
559-
const bmqp_ctrlmsg::AuthenticationMessage& authenticationMessage,
560-
const bmqp_ctrlmsg::NegotiationMessage& negotiationMessage,
561-
const EventQueue::EventHandlerCallback& eventHandlerCB,
562-
bslma::Allocator* allocator)
558+
const bmqt::SessionOptions& sessionOptions,
559+
const bmqp_ctrlmsg::NegotiationMessage& negotiationMessage,
560+
const EventQueue::EventHandlerCallback& eventHandlerCB,
561+
bslma::Allocator* allocator)
563562
: d_allocatorStatContext(bmqst::StatContextConfiguration("Allocators",
564563
allocator),
565564
allocator)
@@ -605,12 +604,13 @@ Application::Application(
605604
allocator),
606605
allocator)
607606
, d_initialConnectionChannelFactory(
608-
InitialConnectionChannelFactoryConfig(&d_statChannelFactory,
609-
authenticationMessage,
610-
negotiationMessage,
611-
sessionOptions.connectTimeout(),
612-
d_blobSpPool_sp.get(),
613-
allocator),
607+
InitialConnectionChannelFactoryConfig(
608+
&d_statChannelFactory,
609+
negotiationMessage,
610+
sessionOptions.connectTimeout(),
611+
sessionOptions.credentialProvider().get(),
612+
d_blobSpPool_sp.get(),
613+
allocator),
614614
allocator)
615615
, d_connectHandle_mp()
616616
, d_brokerSession(&d_scheduler,

src/groups/bmq/bmqimp/bmqimp_application.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -253,12 +253,10 @@ class Application {
253253
/// negotiation. The application will use the specified
254254
/// `eventHandlerCB`. Use the specified `allocator` for all memory
255255
/// allocations.
256-
Application(
257-
const bmqt::SessionOptions& sessionOptions,
258-
const bmqp_ctrlmsg::AuthenticationMessage& authenticationMessage,
259-
const bmqp_ctrlmsg::NegotiationMessage& negotiationMessage,
260-
const EventQueue::EventHandlerCallback& eventHandlerCB,
261-
bslma::Allocator* allocator);
256+
Application(const bmqt::SessionOptions& sessionOptions,
257+
const bmqp_ctrlmsg::NegotiationMessage& negotiationMessage,
258+
const EventQueue::EventHandlerCallback& eventHandlerCB,
259+
bslma::Allocator* allocator);
262260

263261
/// Destructor
264262
~Application();

src/groups/bmq/bmqimp/bmqimp_application.t.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ static void test1_breathingTest()
5252
bmqimp::EventQueue::EventHandlerCallback emptyEventHandler;
5353

5454
bmqimp::Application obj(options,
55-
authenticaionMessage,
5655
negotiationMessage,
5756
emptyEventHandler,
5857
bmqtst::TestHelperUtil::allocator());
@@ -88,7 +87,6 @@ static void test2_startStopTest()
8887
bmqimp::EventQueue::EventHandlerCallback emptyEventHandler;
8988

9089
bmqimp::Application obj(options,
91-
authenticaionMessage,
9290
negotiationMessage,
9391
emptyEventHandler,
9492
bmqtst::TestHelperUtil::allocator());
@@ -143,7 +141,6 @@ static void test3_startStopAsyncTest()
143141
bmqimp::EventQueue::EventHandlerCallback emptyEventHandler;
144142

145143
bmqimp::Application obj(options,
146-
authenticaionMessage,
147144
negotiationMessage,
148145
emptyEventHandler,
149146
bmqtst::TestHelperUtil::allocator());

src/groups/bmq/bmqimp/bmqimp_initialconnectionchannelfactory.cpp

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#include <bmqsys_time.h>
2525

2626
#include <bmqio_channelutil.h>
27+
#include <bmqpi_credentialprovider.h>
28+
#include <bmqt_authncredential.h>
2729
#include <bmqu_blob.h>
2830
#include <bmqu_memoutstream.h>
2931
#include <bmqu_weakmemfn.h>
@@ -69,16 +71,17 @@ enum RcEnum {
6971
// ------------------------------------
7072

7173
InitialConnectionChannelFactoryConfig::InitialConnectionChannelFactoryConfig(
72-
bmqio::ChannelFactory* base,
73-
const bmqp_ctrlmsg::AuthenticationMessage& authenticationMessage,
74-
const bmqp_ctrlmsg::NegotiationMessage& negotiationMessage,
75-
const bsls::TimeInterval& connectTimeout,
76-
BlobSpPool* blobSpPool_p,
77-
bslma::Allocator* basicAllocator)
74+
bmqio::ChannelFactory* base,
75+
const bmqp_ctrlmsg::NegotiationMessage& negotiationMessage,
76+
const bsls::TimeInterval& connectTimeout,
77+
bmqpi::CredentialProvider* credentialProvider,
78+
BlobSpPool* blobSpPool_p,
79+
bslma::Allocator* basicAllocator)
7880
: d_baseFactory_p(base)
79-
, d_authenticationMessage(authenticationMessage, basicAllocator)
8081
, d_negotiationMessage(negotiationMessage, basicAllocator)
82+
, d_authenticationMessage()
8183
, d_connectTimeout(connectTimeout)
84+
, d_credentialProvider_p(credentialProvider)
8285
, d_blobSpPool_p(blobSpPool_p)
8386
, d_allocator_p(bslma::Default::allocator(basicAllocator))
8487
{
@@ -90,9 +93,10 @@ InitialConnectionChannelFactoryConfig::InitialConnectionChannelFactoryConfig(
9093
const InitialConnectionChannelFactoryConfig& original,
9194
bslma::Allocator* basicAllocator)
9295
: d_baseFactory_p(original.d_baseFactory_p)
93-
, d_authenticationMessage(original.d_authenticationMessage, basicAllocator)
9496
, d_negotiationMessage(original.d_negotiationMessage, basicAllocator)
97+
, d_authenticationMessage(original.d_authenticationMessage, basicAllocator)
9598
, d_connectTimeout(original.d_connectTimeout)
99+
, d_credentialProvider_p(original.d_credentialProvider_p)
96100
, d_blobSpPool_p(original.d_blobSpPool_p)
97101
, d_allocator_p(bslma::Default::allocator(basicAllocator))
98102
{
@@ -125,14 +129,14 @@ void InitialConnectionChannelFactory::baseResultCallback(
125129
const ResultCallback& userCb,
126130
bmqio::ChannelFactoryEvent::Enum event,
127131
const bmqio::Status& status,
128-
const bsl::shared_ptr<bmqio::Channel>& channel) const
132+
const bsl::shared_ptr<bmqio::Channel>& channel)
129133
{
130134
if (event != bmqio::ChannelFactoryEvent::e_CHANNEL_UP) {
131135
userCb(event, status, channel);
132136
return; // RETURN
133137
}
134138

135-
authenticate(channel, userCb);
139+
initialConnect(channel, userCb);
136140
}
137141

138142
void InitialConnectionChannelFactory::sendRequest(
@@ -248,22 +252,37 @@ void InitialConnectionChannelFactory::readResponse(
248252
}
249253
}
250254

255+
void InitialConnectionChannelFactory::initialConnect(
256+
const bsl::shared_ptr<bmqio::Channel>& channel,
257+
const ResultCallback& cb)
258+
{
259+
authenticate(channel, cb);
260+
negotiate(channel, cb);
261+
}
262+
251263
void InitialConnectionChannelFactory::authenticate(
252264
const bsl::shared_ptr<bmqio::Channel>& channel,
253-
const ResultCallback& cb) const
265+
const ResultCallback& cb)
254266
{
255267
BALL_LOG_INFO << "Client authenticate";
256268

257-
// If the authentication message is not an AuthenticateRequest, it means no
258-
// credential is provided. In this case, we will skip the authentication
259-
// step and proceed directly to the negotiation step.
260-
if (!d_config.d_authenticationMessage.isAuthenticateRequestValue()) {
261-
negotiate(channel, cb);
262-
return; // RETURN
263-
}
269+
// If there's no CredentialProvider, it means no credential is provided. In
270+
// this case, we will skip authentication.
271+
if (d_config.d_credentialProvider_p) {
272+
bmqt::AuthnCredential credential;
273+
d_config.d_credentialProvider_p->loadCredential(&credential);
264274

265-
sendRequest(channel, AUTHENTICATION, cb);
266-
readResponse(channel, AUTHENTICATION, cb);
275+
bmqp_ctrlmsg::AuthenticationMessage authenticaionMessage;
276+
bmqp_ctrlmsg::AuthenticateRequest& ar =
277+
authenticaionMessage.makeAuthenticateRequest();
278+
ar.mechanism() = credential.mechanism();
279+
ar.data() = credential.data();
280+
281+
d_config.d_authenticationMessage = authenticaionMessage;
282+
283+
sendRequest(channel, AUTHENTICATION, cb);
284+
readResponse(channel, AUTHENTICATION, cb);
285+
}
267286
}
268287

269288
void InitialConnectionChannelFactory::negotiate(

src/groups/bmq/bmqimp/bmqimp_initialconnectionchannelfactory.h

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <bmqio_status.h>
3838
#include <bmqp_blobpoolutil.h>
3939
#include <bmqp_ctrlmsg_messages.h>
40+
#include <bmqpi_credentialprovider.h>
4041
#include <bmqu_sharedresource.h>
4142

4243
// BDE
@@ -66,9 +67,10 @@ class InitialConnectionChannelFactoryConfig {
6667
private:
6768
// PRIVATE DATA
6869
bmqio::ChannelFactory* d_baseFactory_p;
69-
bmqp_ctrlmsg::AuthenticationMessage d_authenticationMessage;
7070
bmqp_ctrlmsg::NegotiationMessage d_negotiationMessage;
71+
bmqp_ctrlmsg::AuthenticationMessage d_authenticationMessage;
7172
bsls::TimeInterval d_connectTimeout;
73+
bmqpi::CredentialProvider* d_credentialProvider_p;
7274
BlobSpPool* d_blobSpPool_p;
7375
bslma::Allocator* d_allocator_p;
7476

@@ -82,12 +84,12 @@ class InitialConnectionChannelFactoryConfig {
8284

8385
// CREATORS
8486
InitialConnectionChannelFactoryConfig(
85-
bmqio::ChannelFactory* base,
86-
const bmqp_ctrlmsg::AuthenticationMessage& authenticationMessage,
87-
const bmqp_ctrlmsg::NegotiationMessage& negotiationMessage,
88-
const bsls::TimeInterval& d_connectTimeout,
89-
BlobSpPool* blobSpPool_p,
90-
bslma::Allocator* basicAllocator = 0);
87+
bmqio::ChannelFactory* base,
88+
const bmqp_ctrlmsg::NegotiationMessage& negotiationMessage,
89+
const bsls::TimeInterval& connectTimeout,
90+
bmqpi::CredentialProvider* credentialProvider_p,
91+
BlobSpPool* blobSpPool_p,
92+
bslma::Allocator* basicAllocator = 0);
9193

9294
InitialConnectionChannelFactoryConfig(
9395
const InitialConnectionChannelFactoryConfig& original,
@@ -158,11 +160,10 @@ class InitialConnectionChannelFactory : public bmqio::ChannelFactory {
158160
// PRIVATE ACCESSORS
159161

160162
/// Handle an event from our base ChannelFactory.
161-
void
162-
baseResultCallback(const ResultCallback& userCb,
163-
bmqio::ChannelFactoryEvent::Enum event,
164-
const bmqio::Status& status,
165-
const bsl::shared_ptr<bmqio::Channel>& channel) const;
163+
void baseResultCallback(const ResultCallback& userCb,
164+
bmqio::ChannelFactoryEvent::Enum event,
165+
const bmqio::Status& status,
166+
const bsl::shared_ptr<bmqio::Channel>& channel);
166167

167168
void sendRequest(const bsl::shared_ptr<bmqio::Channel>& channel,
168169
const ACTION action,
@@ -172,8 +173,11 @@ class InitialConnectionChannelFactory : public bmqio::ChannelFactory {
172173
const ACTION action,
173174
const ResultCallback& cb) const;
174175

176+
void initialConnect(const bsl::shared_ptr<bmqio::Channel>& channel,
177+
const ResultCallback& cb);
178+
175179
void authenticate(const bsl::shared_ptr<bmqio::Channel>& channel,
176-
const ResultCallback& cb) const;
180+
const ResultCallback& cb);
177181

178182
void negotiate(const bsl::shared_ptr<bmqio::Channel>& channel,
179183
const ResultCallback& cb) const;

0 commit comments

Comments
 (0)