ImFusion C++ SDK 4.4.0
ImFusion::QtAuthorizationProvider Class Reference

#include <ImFusion/GUI/QtAuthorizationProvider.h>

AuthorizationProvider that shows a Qt LoginDialog. More...

Inheritance diagram for ImFusion::QtAuthorizationProvider:

Detailed Description

AuthorizationProvider that shows a Qt LoginDialog.

Public Member Functions

std::optional< Network::AccessTokenaccessToken (const Filesystem::Url &url) const override
 Like authorization, but returns the full AccessToken.
std::string authorization (const Filesystem::Url &url) const override
 Get the Authorization header for the given url.
bool refreshAuthorization (const Filesystem::Url &url, int numFailedRequests) override
 Try to refresh the authorization without user interaction.
bool acquireAuthorization (const Filesystem::Url &serverUrl, const std::string &message) override
 Acquire authorization by e.g.
void removeAuthorization (const Filesystem::Url &url) override
 Remove any cached authorization for the given server.
void addBasicAuthorization ()
void addOAuth2DeviceFlow (Network::OAuth2::DeviceFlowConfig config)
void addOAuth2AuthCodeFlow (Network::OAuth2::AuthorizationCodeFlowConfig config)
void setDialogParent (QWidget *parent)
 Sets the parent that will be used for the LoginDialog.
Public Member Functions inherited from ImFusion::Network::AuthorizationProvider
Filesystem::Url extractServerUrl (const Filesystem::Url &url) const
 Extract the server part of the URL.

Protected Types

using ServerUrl = std::string

Protected Member Functions

virtual std::unique_ptr< Network::LoginDialogcreateDialog (const Filesystem::Url &serverUrl) const

Protected Attributes

QWidget * m_parent = nullptr
std::shared_mutex m_serverAuthorizationsMutex
std::unordered_map< ServerUrl, Network::AccessTokenm_serverAuthorizations
bool m_useBasicAuth = false
std::optional< Network::OAuth2::DeviceFlowConfigm_useOAuth2DeviceFlow
std::optional< Network::OAuth2::AuthorizationCodeFlowConfigm_useOAuth2AuthCodeFlow

Member Function Documentation

◆ accessToken()

std::optional< Network::AccessToken > ImFusion::QtAuthorizationProvider::accessToken ( const Filesystem::Url & url) const
overridevirtual

Like authorization, but returns the full AccessToken.

Reimplemented from ImFusion::Network::AuthorizationProvider.

◆ authorization()

std::string ImFusion::QtAuthorizationProvider::authorization ( const Filesystem::Url & url) const
overridevirtual

Get the Authorization header for the given url.

The url is the complete url for the request that is going to be performed. Implementation should cache the value according to the server URL (see extractServerUrl). When an empty string is returned, no Authorization header should be send. This method will be called from multiple threads.

Implements ImFusion::Network::AuthorizationProvider.

◆ refreshAuthorization()

bool ImFusion::QtAuthorizationProvider::refreshAuthorization ( const Filesystem::Url & url,
int numFailedRequests )
overridevirtual

Try to refresh the authorization without user interaction.

Implementations should stop retrying after a certain number of failed attempts. This method will be called from multiple threads. If an auth scheme does not support refreshing without user interaction, implementations should return false after the first failed attempt.

Implementations that cache authorization according to the url, should remove entries from the cache that cannot be refreshed after one failed request.

This method can also be called without a previously failed request (numFailedRequests == 0) in case the token should be refreshed before it expires.

E.g. if this method fails, the authorization method should return an empty string until acquireAuthorization was called again.

Implements ImFusion::Network::AuthorizationProvider.

◆ acquireAuthorization()

bool ImFusion::QtAuthorizationProvider::acquireAuthorization ( const Filesystem::Url & url,
const std::string & message )
overridevirtual

Acquire authorization by e.g.

asking the user.

This method might get called from another thread. In this case, implementations that require the main thread to show a GUI should just return false.

An optional message can be provided (e.g. to display an error from a previous login attempt).

Should return true if authorization could be acquired or false otherwise.

This method is not expected to check whether the acquired authorization actually works, because this is simply not possible with some auth schemes.

Code that requires authorization should call this method from the main thread before performing requests. If those requests fail with 401, this method should be called again from the main thread before retrying the requests. If multiple requests are run in parallel, it must be avoided to call this method multiple times simultaneous, because this might popup multiple dialogs.

Implements ImFusion::Network::AuthorizationProvider.

◆ removeAuthorization()

void ImFusion::QtAuthorizationProvider::removeAuthorization ( const Filesystem::Url & url)
overridevirtual

Remove any cached authorization for the given server.

This should essentially log out the user and let the user re-authenticate with the next acquireAuthorization call.

Implements ImFusion::Network::AuthorizationProvider.

◆ addBasicAuthorization()

void ImFusion::QtAuthorizationProvider::addBasicAuthorization ( )

◆ addOAuth2DeviceFlow()

void ImFusion::QtAuthorizationProvider::addOAuth2DeviceFlow ( Network::OAuth2::DeviceFlowConfig config)

◆ addOAuth2AuthCodeFlow()

void ImFusion::QtAuthorizationProvider::addOAuth2AuthCodeFlow ( Network::OAuth2::AuthorizationCodeFlowConfig config)

The documentation for this class was generated from the following file:
  • ImFusion/GUI/QtAuthorizationProvider.h
Search Tab / S to search, Esc to close