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 AuthAthenz : public Authentication {
300 public:
301 AuthAthenz(AuthenticationDataPtr&);
302 ~AuthAthenz();
303
313 static AuthenticationPtr create(ParamMap& params);
314
320 static AuthenticationPtr create(const std::string& authParamsString);
321
325 const std::string getAuthMethodName() const;
326
334 Result getAuthData(AuthenticationDataPtr& authDataAthenz);
335
336 private:
337 AuthenticationDataPtr authDataAthenz_;
338};
339
340// OAuth 2.0 token and associated information.
341// currently mainly works for access token
343 public:
344 enum
345 {
346 undefined_expiration = -1
347 };
348
351
357 Oauth2TokenResult& setAccessToken(const std::string& accessToken);
358
364 Oauth2TokenResult& setIdToken(const std::string& idToken);
365
372 Oauth2TokenResult& setRefreshToken(const std::string& refreshToken);
373
379 Oauth2TokenResult& setExpiresIn(const int64_t expiresIn);
380
384 const std::string& getAccessToken() const;
385
389 const std::string& getIdToken() const;
390
395 const std::string& getRefreshToken() const;
396
400 int64_t getExpiresIn() const;
401
402 private:
403 // map to json "access_token"
404 std::string accessToken_;
405 // map to json "id_token"
406 std::string idToken_;
407 // map to json "refresh_token"
408 std::string refreshToken_;
409 // map to json "expires_in"
410 int64_t expiresIn_;
411};
412
413typedef std::shared_ptr<Oauth2TokenResult> Oauth2TokenResultPtr;
414
416 public:
417 virtual ~Oauth2Flow();
418
422 virtual void initialize() = 0;
423
428 virtual Oauth2TokenResultPtr authenticate() = 0;
429
433 virtual void close() = 0;
434
435 protected:
436 Oauth2Flow();
437};
438
439typedef std::shared_ptr<Oauth2Flow> FlowPtr;
440
442 public:
443 virtual ~CachedToken();
444
448 virtual bool isExpired() = 0;
449
455 virtual AuthenticationDataPtr getAuthData() = 0;
456
457 protected:
458 CachedToken();
459};
460
461typedef std::shared_ptr<CachedToken> CachedTokenPtr;
462
475class PULSAR_PUBLIC AuthOauth2 : public Authentication {
476 public:
477 AuthOauth2(ParamMap& params);
478 ~AuthOauth2();
479
488 static AuthenticationPtr create(ParamMap& params);
489
495 static AuthenticationPtr create(const std::string& authParamsString);
496
500 const std::string getAuthMethodName() const;
501
509 Result getAuthData(AuthenticationDataPtr& authDataOauth2);
510
511 private:
512 FlowPtr flowPtr_;
513 CachedTokenPtr cachedTokenPtr_;
514};
515
516} // namespace pulsar
517
518#endif /* PULSAR_AUTHENTICATION_H_ */
Definition: Authentication.h:299
Result getAuthData(AuthenticationDataPtr &authDataAthenz)
const std::string getAuthMethodName() const
static AuthenticationPtr create(ParamMap &params)
static AuthenticationPtr create(const std::string &authParamsString)
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:475
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:441
virtual bool isExpired()=0
virtual AuthenticationDataPtr getAuthData()=0
Definition: ClientConfiguration.h:29
Definition: Authentication.h:415
virtual Oauth2TokenResultPtr authenticate()=0
virtual void initialize()=0
virtual void close()=0
Definition: Authentication.h:342
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