10Duke Scale C++ Client
Loading...
Searching...
No Matches
OAuthPKCEFlow.h
1#ifndef TENDUKE_OAUTH_PKCE_OAUTHPKCEFLOW_H
2#define TENDUKE_OAUTH_PKCE_OAUTHPKCEFLOW_H
3
4#include "../BaseOAuthClient.h"
5#include "../OAuthBrowserFlow.h"
6#include "../OAuthConfiguration.h"
7
8#include "crypto/MessageDigestFactory.h"
9#include "http/HTTPClient.h"
10#include "json/JSONParser.h"
11#include "net/URLParser.h"
12#include "time/Clock.h"
13#include "utl/Base64Encoder.h"
14#include "utl/random/RandomURLSafeString.h"
15
16#include <cstddef>
17#include <map>
18#include <memory>
19#include <string>
20
21namespace tenduke { namespace oauth { namespace pkce {
22
23
25const std::size_t DEFAULT_STATE_LENGTH = 16;
27const std::size_t DEFAULT_CODEVERIFIER_LENGTH = 64;
28
29
35{
36public:
49 std::shared_ptr<const tenduke::oauth::OAuthConfiguration> config,
50 std::shared_ptr<const tenduke::http::HTTPClient> httpClient,
51 std::shared_ptr<const tenduke::net::URLParser> urlParser,
52 std::shared_ptr<const tenduke::json::JSONParser> jsonParser,
53 std::shared_ptr<const tenduke::utl::Base64Encoder> base64Encoder,
54 std::shared_ptr<const tenduke::crypto::MessageDigestFactory> messageDigestFactory,
55 std::shared_ptr<tenduke::time::Clock> clock,
56 std::shared_ptr<tenduke::utl::random::RandomUrlSafeString> randomUrlSafeString
57 );
58
59 // tenduke::oauth::OAuthBrowserFlow interface
60public:
61 std::unique_ptr<const tenduke::oauth::OAuthBrowserAuthorizationRequest> authorize(const std::string &scopes) const override;
62 std::unique_ptr<const tenduke::oauth::OAuthBrowserAuthorizationRequest> authorize(
63 const std::string &scopes,
64 const std::map<std::string, std::string> &additionalParameters
65 ) const override;
66
67protected:
72 std::string generateState() const;
73
78 std::string generateCodeVerifier() const;
79
80private:
81 std::size_t stateLength;
82 std::size_t pkceCodeVerifierLength;
83
84 const std::shared_ptr<const OAuthConfiguration> config;
85 const std::shared_ptr<const tenduke::http::HTTPClient> httpClient;
86 const std::shared_ptr<const tenduke::net::URLParser> urlParser;
87 const std::shared_ptr<const tenduke::json::JSONParser> jsonParser;
88 const std::shared_ptr<const tenduke::utl::Base64Encoder> base64Encoder;
89 const std::shared_ptr<const tenduke::crypto::MessageDigestFactory> messageDigestFactory;
90 const std::shared_ptr<tenduke::time::Clock> clock;
91 const std::shared_ptr<tenduke::utl::random::RandomUrlSafeString> randomUrlSafeString;
92};
93
94
95}}}
96
97#endif // TENDUKE_OAUTH_PKCE_OAUTHPKCEFLOW_H
Base class for OAuth-clients.
Definition BaseOAuthClient.h:27
OAuth-client to initiate OAuth authorization flow.
Definition OAuthBrowserFlow.h:40
OAuth Authorization Code Grant with PKCE implementation of tenduke::oauth::OAuthClient.
Definition OAuthPKCEFlow.h:35
std::string generateCodeVerifier() const
Generates PKCE code verifier.
Definition OAuthPKCEFlow.cpp:67
std::unique_ptr< const tenduke::oauth::OAuthBrowserAuthorizationRequest > authorize(const std::string &scopes) const override
Creates OAuthRequest to start the OAuth-authorization flow.
Definition OAuthPKCEFlow.cpp:33
std::string generateState() const
Generates value for "state"-parameter.
Definition OAuthPKCEFlow.cpp:60
const std::size_t DEFAULT_CODEVERIFIER_LENGTH
Default length of generated PKCE code verifier.
Definition OAuthPKCEFlow.h:27
const std::size_t DEFAULT_STATE_LENGTH
Default length of generated state-parameter.
Definition OAuthPKCEFlow.h:25
OAuth services.
Definition AccessTokenRequestAuthenticator.h:8
Root for classes, functions and globals of 10Duke C++ Client.
Definition BackendConfiguration.h:7