pulsar-client-cpp
Loading...
Searching...
No Matches
Authentication.h
1
19#ifndef PULSAR_AUTHENTICATION_H_
20#define PULSAR_AUTHENTICATION_H_
21
22#include <pulsar/defines.h>
23#include <vector>
24#include <string>
25#include <map>
26#include <memory>
27#include <pulsar/Result.h>
28#include <functional>
29
30namespace pulsar {
31
33class Authentication;
34
35class PULSAR_PUBLIC AuthenticationDataProvider {
36 public:
38
42 virtual bool hasDataForTls();
43
47 virtual std::string getTlsCertificates();
48
52 virtual std::string getTlsPrivateKey();
53
57 virtual bool hasDataForHttp();
58
62 virtual std::string getHttpAuthType();
63
67 virtual std::string getHttpHeaders();
68
72 virtual bool hasDataFromCommand();
73
77 virtual std::string getCommandData();
78
79 protected:
81};
82
83typedef std::shared_ptr<AuthenticationDataProvider> AuthenticationDataPtr;
84typedef std::shared_ptr<Authentication> AuthenticationPtr;
85typedef std::map<std::string, std::string> ParamMap;
86
87class PULSAR_PUBLIC Authentication {
88 public:
89 virtual ~Authentication();
90
94 virtual const std::string getAuthMethodName() const = 0;
95
103 virtual Result getAuthData(AuthenticationDataPtr& authDataContent) {
104 authDataContent = authData_;
105 return ResultOk;
106 }
107
119 static ParamMap parseDefaultFormatAuthParams(const std::string& authParamsString);
120
121 protected:
123 AuthenticationDataPtr authData_;
124 friend class ClientConfiguration;
125};
126
135class PULSAR_PUBLIC AuthFactory {
136 public:
137 static AuthenticationPtr Disabled();
138
144 static AuthenticationPtr create(const std::string& pluginNameOrDynamicLibPath);
145
152 static AuthenticationPtr create(const std::string& pluginNameOrDynamicLibPath,
153 const std::string& authParamsString);
154
171 static AuthenticationPtr create(const std::string& pluginNameOrDynamicLibPath, ParamMap& params);
172
173 protected:
174 static bool isShutdownHookRegistered_;
175 static std::vector<void*> loadedLibrariesHandles_;
176 static void release_handles();
177};
178
182class PULSAR_PUBLIC AuthTls : public Authentication {
183 public:
184 AuthTls(AuthenticationDataPtr&);
185 ~AuthTls();
186
193 static AuthenticationPtr create(ParamMap& params);
194
200 static AuthenticationPtr create(const std::string& authParamsString);
201
208 static AuthenticationPtr create(const std::string& certificatePath, const std::string& privateKeyPath);
209
213 const std::string getAuthMethodName() const;
214
222 Result getAuthData(AuthenticationDataPtr& authDataTls);
223
224 private:
225 AuthenticationDataPtr authDataTls_;
226};
227
228typedef std::function<std::string()> TokenSupplier;
229
233class PULSAR_PUBLIC AuthToken : public Authentication {
234 public:
235 AuthToken(AuthenticationDataPtr&);
236 ~AuthToken();
237
253 static AuthenticationPtr create(ParamMap& params);
254
260 static AuthenticationPtr create(const std::string& authParamsString);
261
268 static AuthenticationPtr createWithToken(const std::string& token);
269
276 static AuthenticationPtr create(const TokenSupplier& tokenSupplier);
277
281 const std::string getAuthMethodName() const;
282
290 Result getAuthData(AuthenticationDataPtr& authDataToken);
291
292 private:
293 AuthenticationDataPtr authDataToken_;
294};
295
299class PULSAR_PUBLIC AuthBasic : public Authentication {
300 public:
301 explicit AuthBasic(AuthenticationDataPtr&);
302 ~AuthBasic() override;
303
310 static AuthenticationPtr create(ParamMap& params);
311
317 static AuthenticationPtr create(const std::string& authParamsString);
318
322 static AuthenticationPtr create(const std::string& username, const std::string& password);
323
327 static AuthenticationPtr create(const std::string& username, const std::string& password,
328 const std::string& method);
329
333 const std::string getAuthMethodName() const override;
334
342 Result getAuthData(AuthenticationDataPtr& authDataBasic) override;
343
344 private:
345 AuthenticationDataPtr authDataBasic_;
346};
347
351class PULSAR_PUBLIC AuthAthenz : public Authentication {
352 public:
353 AuthAthenz(AuthenticationDataPtr&);
354 ~AuthAthenz();
355
365 static AuthenticationPtr create(ParamMap& params);
366
372 static AuthenticationPtr create(const std::string& authParamsString);
373
377 const std::string getAuthMethodName() const;
378
386 Result getAuthData(AuthenticationDataPtr& authDataAthenz);
387
388 private:
389 AuthenticationDataPtr authDataAthenz_;
390};
391
392// OAuth 2.0 token and associated information.
393// currently mainly works for access token
395 public:
396 enum
397 {
398 undefined_expiration = -1
399 };
400
403
409 Oauth2TokenResult& setAccessToken(const std::string& accessToken);
410
416 Oauth2TokenResult& setIdToken(const std::string& idToken);
417
424 Oauth2TokenResult& setRefreshToken(const std::string& refreshToken);
425
431 Oauth2TokenResult& setExpiresIn(const int64_t expiresIn);
432
436 const std::string& getAccessToken() const;
437
441 const std::string& getIdToken() const;
442
447 const std::string& getRefreshToken() const;
448
452 int64_t getExpiresIn() const;
453
454 private:
455 // map to json "access_token"
456 std::string accessToken_;
457 // map to json "id_token"
458 std::string idToken_;
459 // map to json "refresh_token"
460 std::string refreshToken_;
461 // map to json "expires_in"
462 int64_t expiresIn_;
463};
464
465typedef std::shared_ptr<Oauth2TokenResult> Oauth2TokenResultPtr;
466
468 public:
469 virtual ~Oauth2Flow();
470
474 virtual void initialize() = 0;
475
480 virtual Oauth2TokenResultPtr authenticate() = 0;
481
485 virtual void close() = 0;
486
487 protected:
488 Oauth2Flow();
489};
490
491typedef std::shared_ptr<Oauth2Flow> FlowPtr;
492
494 public:
495 virtual ~CachedToken();
496
500 virtual bool isExpired() = 0;
501
507 virtual AuthenticationDataPtr getAuthData() = 0;
508
509 protected:
510 CachedToken();
511};
512
513typedef std::shared_ptr<CachedToken> CachedTokenPtr;
514
527class PULSAR_PUBLIC AuthOauth2 : public Authentication {
528 public:
529 AuthOauth2(ParamMap& params);
530 ~AuthOauth2();
531
540 static AuthenticationPtr create(ParamMap& params);
541
547 static AuthenticationPtr create(const std::string& authParamsString);
548
552 const std::string getAuthMethodName() const;
553
561 Result getAuthData(AuthenticationDataPtr& authDataOauth2);
562
563 private:
564 FlowPtr flowPtr_;
565 CachedTokenPtr cachedTokenPtr_;
566};
567
568} // namespace pulsar
569
570#endif /* PULSAR_AUTHENTICATION_H_ */
Definition: Authentication.h:351
Result getAuthData(AuthenticationDataPtr &authDataAthenz)
const std::string getAuthMethodName() const
static AuthenticationPtr create(ParamMap &params)
static AuthenticationPtr create(const std::string &authParamsString)
Definition: Authentication.h:299
Result getAuthData(AuthenticationDataPtr &authDataBasic) override
static AuthenticationPtr create(const std::string &username, const std::string &password)
static AuthenticationPtr create(const std::string &username, const std::string &password, const std::string &method)
static AuthenticationPtr create(const std::string &authParamsString)
const std::string getAuthMethodName() const override
static AuthenticationPtr create(ParamMap &params)
Definition: Authentication.h:135
static AuthenticationPtr create(const std::string &pluginNameOrDynamicLibPath)
static AuthenticationPtr create(const std::string &pluginNameOrDynamicLibPath, ParamMap &params)
static AuthenticationPtr create(const std::string &pluginNameOrDynamicLibPath, const std::string &authParamsString)
Definition: Authentication.h:527
static AuthenticationPtr create(ParamMap &params)
const std::string getAuthMethodName() const
static AuthenticationPtr create(const std::string &authParamsString)
Result getAuthData(AuthenticationDataPtr &authDataOauth2)
Definition: Authentication.h:182
static AuthenticationPtr create(const std::string &authParamsString)
const std::string getAuthMethodName() const
static AuthenticationPtr create(ParamMap &params)
static AuthenticationPtr create(const std::string &certificatePath, const std::string &privateKeyPath)
Result getAuthData(AuthenticationDataPtr &authDataTls)
Definition: Authentication.h:233
const std::string getAuthMethodName() const
Result getAuthData(AuthenticationDataPtr &authDataToken)
static AuthenticationPtr createWithToken(const std::string &token)
static AuthenticationPtr create(const std::string &authParamsString)
static AuthenticationPtr create(ParamMap &params)
static AuthenticationPtr create(const TokenSupplier &tokenSupplier)
Definition: Authentication.h:35
virtual std::string getCommandData()
virtual std::string getTlsPrivateKey()
virtual std::string getHttpHeaders()
virtual std::string getHttpAuthType()
virtual std::string getTlsCertificates()
Definition: Authentication.h:87
static ParamMap parseDefaultFormatAuthParams(const std::string &authParamsString)
virtual Result getAuthData(AuthenticationDataPtr &authDataContent)
Definition: Authentication.h:103
virtual const std::string getAuthMethodName() const =0
Definition: Authentication.h:493
virtual bool isExpired()=0
virtual AuthenticationDataPtr getAuthData()=0
Definition: ClientConfiguration.h:29
Definition: Authentication.h:467
virtual Oauth2TokenResultPtr authenticate()=0
virtual void initialize()=0
virtual void close()=0
Definition: Authentication.h:394
int64_t getExpiresIn() const
const std::string & getAccessToken() const
Oauth2TokenResult & setRefreshToken(const std::string &refreshToken)
Oauth2TokenResult & setIdToken(const std::string &idToken)
Oauth2TokenResult & setExpiresIn(const int64_t expiresIn)
const std::string & getRefreshToken() const
const std::string & getIdToken() const
Oauth2TokenResult & setAccessToken(const std::string &accessToken)
Definition: Authentication.h:30
Result
Definition: Result.h:31
@ ResultOk
An internal error code used for retry.
Definition: Result.h:33