4#ifndef _Stroika_Frameworks_Auth_OAuth_Client_h_
5#define _Stroika_Frameworks_Auth_OAuth_Client_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
10#include "Stroika/Foundation/Common/Common.h"
11#include "Stroika/Foundation/Common/GUID.h"
12#include "Stroika/Foundation/Containers/KeyedCollection.h"
13#include "Stroika/Foundation/Containers/Mapping.h"
14#include "Stroika/Foundation/Containers/Sequence.h"
15#include "Stroika/Foundation/DataExchange/ObjectVariantMapper.h"
18#include "Stroika/Foundation/Execution/VirtualLockable.h"
29namespace Stroika::Frameworks::Auth::OAuth {
77 String grant_type{
"authorization_code"sv};
100 nonvirtual
String ToString ()
const;
104 nonvirtual
TypedBLOB ToWireFormat ()
const;
145 optional<String> id_token;
149 optional<String> token_type;
151 nonvirtual
String ToString ()
const;
153 nonvirtual
TypedBLOB ToWireFormat ()
const;
161 struct TokenRevocationRequest {
163 optional<String> refresh_token;
164 optional<String> client_id;
165 optional<String> client_secret;
167 nonvirtual
String ToString ()
const;
169 nonvirtual
TypedBLOB ToWireFormat ()
const;
186 nonvirtual
String ToString ()
const;
188 nonvirtual
TypedBLOB ToWireFormat ()
const;
200 optional<String> name;
204 optional<String> given_name;
208 optional<String> family_name;
212 optional<String> email;
217 optional<URI> picture;
219 nonvirtual
String ToString ()
const;
221 static UserInfo FromWireFormat (
const TypedBLOB& src);
234 bool fCaching{
false};
235 InternallySynchronized fInternallySyncrhonized{InternallySynchronized::eNotKnownInternallySynchronized};
283 nonvirtual
void RevokeTokens (
const TokenRevocationRequest& tr)
const;
311 nonvirtual optional<TokenIntrospectionResponse> FetchTokenIntrospection_ (
const String& accessToken)
const;
319 const Options fOptions_;
322 static constexpr auto kClearMaxFrequency_{30s};
330 unique_ptr<Cache_> fCache_;
333 nonvirtual
void ClearOldStuffFromCache_ ()
const;
time_point< RealtimeClock, DurationSeconds > TimePointSeconds
TimePointSeconds is a simpler approach to chrono::time_point, which doesn't require using templates e...
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Set<T> is a container of T, where once an item is added, additionally adds () do nothing.
ObjectVariantMapper can be used to map C++ types to and from variant-union types, which can be transp...
TypedBLOB is a named tuple<Memory::BLOB, optional<InternetMediaType>> - with friendlier names,...
simple wrapper on IO::Network::Transfer to do fetching (more configurability to do)
nonvirtual UserInfo GetUserInfo(const String &accessToken) const
nonvirtual TokenResponse GetToken(const TokenRequest &tr) const
nonvirtual void RevokeTokens(const TokenRevocationRequest &tr) const
Track configuration data about stuff that differentiates different OAuth providers - what URLs to use...
RFC 7662 compatible API for finding info about a token - https://datatracker.ietf....
this is the argument to the Fetcher::GetToken () API. It typically consists of a client_id,...
optional< String > code_verifier
auto operator<=>(const TokenRequest &rhs) const =default
Compare by string value of various fields.
optional< String > refresh_token
optional< String > client_secret
optional< URI > redirect_uri
this is the response to the Fetcher::GetToken () API. It typically provides an 'access token' with a ...
optional< String > refresh_token