10Duke Scale C++ Client
Loading...
Searching...
No Matches
OAuthPKCERequest.h
1#ifndef TENDUKE_OAUTH_PKCE_OAUTHPKCEREQUEST_H
2#define TENDUKE_OAUTH_PKCE_OAUTHPKCEREQUEST_H
3
4#include "../OAuthBrowserAuthorizationRequest.h"
5#include "../OAuthConfiguration.h"
6#include "../OAuthTokenRequest.h"
7#include "../OAuthState.h"
8
9#include "crypto/MessageDigestFactory.h"
10#include "http/HTTPClient.h"
11#include "json/JSONParser.h"
12#include "net/URLParser.h"
13#include "time/Clock.h"
14#include "utl/Base64Encoder.h"
15
16#include <map>
17#include <memory>
18
19namespace tenduke { namespace oauth { namespace pkce {
20
21
26{
27public:
43 std::string scopes,
44 std::string state,
45 std::map<std::string, std::string> additionalParameters,
46 std::string codeVerifier,
47 std::shared_ptr<const tenduke::oauth::OAuthConfiguration> config,
48 std::shared_ptr<const tenduke::http::HTTPClient> httpClient,
49 std::shared_ptr<const tenduke::net::URLParser> urlParser,
50 std::shared_ptr<const tenduke::json::JSONParser> jsonParser,
51 std::shared_ptr<const tenduke::utl::Base64Encoder> base64Encoder,
52 std::shared_ptr<const tenduke::crypto::MessageDigestFactory> messageDigestFactory,
53 std::shared_ptr<tenduke::time::Clock> clock
54 );
55 ~OAuthPKCERequest() override = default;
56
57 // tenduke::oauth::OAuthBrowserAuthorizationRequest interface
58 std::string buildAuthorizationRequestUrl() const override;
59 std::unique_ptr<tenduke::oauth::OAuthState> handleCallback(const std::string &redirectUri) const override;
60
61protected:
67 virtual std::map<std::string, std::string> buildTokenRequestParameters(const std::string &code) const;
68
73 virtual std::map<std::string, std::string> buildAuthorizationRequestParameters() const;
74
79 virtual void createCodeChallenge(std::map<std::string, std::string> &parameters) const;
80
87 virtual std::unique_ptr<tenduke::oauth::OAuthState> handleSuccessfulCallback(const std::multimap<std::string, std::string> &queryParameters) const;
88
94 virtual std::unique_ptr<tenduke::oauth::OAuthState> handleTokenResponse(std::unique_ptr<tenduke::oauth::OAuthTokenResponse> response) const;
95
100 virtual bool isPKCERequest() const;
101
107 virtual std::unique_ptr<tenduke::oauth::OAuthTokenRequest> createTokenRequest(const std::string &code) const;
108
109private:
110 const std::string scopes;
111 const std::string state;
112 const std::map<std::string, std::string> additionalParameters;
113
114 const std::string codeVerifier; // PKCE code verifier
115
116 const std::shared_ptr<const tenduke::oauth::OAuthConfiguration> config;
117 const std::shared_ptr<const tenduke::http::HTTPClient> http;
118 const std::shared_ptr<const tenduke::net::URLParser> parseURL;
119 const std::shared_ptr<const tenduke::json::JSONParser> parseJSON;
120 const std::shared_ptr<const tenduke::utl::Base64Encoder> base64Encoder;
121 const std::shared_ptr<const tenduke::crypto::MessageDigestFactory> messageDigest;
122 const std::shared_ptr<tenduke::time::Clock> clock;
123};
124
125
126}}}
127
128#endif // TENDUKE_OAUTH_PKCE_OAUTHPKCEREQUEST_H
OAuth-request to handle OAuth authorization using browser.
Definition OAuthBrowserAuthorizationRequest.h:20
PKCE-implementation of tenduke::oauth::OAuthRequest.
Definition OAuthPKCERequest.h:26
virtual std::map< std::string, std::string > buildTokenRequestParameters(const std::string &code) const
Builds parameters for the token request.
Definition OAuthPKCERequest.cpp:128
virtual void createCodeChallenge(std::map< std::string, std::string > &parameters) const
Creates PKCE code challenge and adds it to the provided parameters.
Definition OAuthPKCERequest.cpp:207
virtual bool isPKCERequest() const
Checks if this is PKCE-request.
Definition OAuthPKCERequest.cpp:166
std::unique_ptr< tenduke::oauth::OAuthState > handleCallback(const std::string &redirectUri) const override
Handles callback: performs consequent actions to authorize.
Definition OAuthPKCERequest.cpp:61
virtual std::map< std::string, std::string > buildAuthorizationRequestParameters() const
Builds parameters for the authorization request.
Definition OAuthPKCERequest.cpp:184
virtual std::unique_ptr< tenduke::oauth::OAuthTokenRequest > createTokenRequest(const std::string &code) const
Creates the token request.
Definition OAuthPKCERequest.cpp:116
virtual std::unique_ptr< tenduke::oauth::OAuthState > handleSuccessfulCallback(const std::multimap< std::string, std::string > &queryParameters) const
Handles successful callback to redirect-uri from authorization request, performing the next steps to ...
Definition OAuthPKCERequest.cpp:81
virtual std::unique_ptr< tenduke::oauth::OAuthState > handleTokenResponse(std::unique_ptr< tenduke::oauth::OAuthTokenResponse > response) const
Handles token response.
Definition OAuthPKCERequest.cpp:149
std::string buildAuthorizationRequestUrl() const override
Creates the initial authorization request URL.
Definition OAuthPKCERequest.cpp:173
OAuth services.
Definition AccessTokenRequestAuthenticator.h:8
Root for classes, functions and globals of 10Duke C++ Client.
Definition BackendConfiguration.h:7