1#ifndef TENDUKE_OIDC_OIDCSESSIONIMPL_H
2#define TENDUKE_OIDC_OIDCSESSIONIMPL_H
4#include "./OIDCLogin.h"
5#include "./OIDCSession.h"
6#include "./OIDCSessionEventListener.h"
7#include "../OIDCState.h"
8#include "../OIDCClient.h"
44 std::unique_ptr<tenduke::oidc::OIDCState>
state,
45 const std::shared_ptr<const tenduke::oidc::OIDCLogin> &
oidc,
46 const std::shared_ptr<const tenduke::oidc::OIDCClient> &
oidcClient,
47 const std::shared_ptr<tenduke::time::Clock> &
clock,
48 const std::shared_ptr<::tenduke::oidc::OIDCSessionEventListener> &eventListener =
nullptr,
58 std::shared_ptr<const tenduke::oidc::OIDCState>
getOIDCState()
override;
80 std::shared_ptr<tenduke::oidc::OIDCState>
state;
91 const std::shared_ptr<tenduke::time::Clock>
clock;
93 const std::shared_ptr<const tenduke::oidc::OIDCLogin>
oidc;
95 const std::shared_ptr<const tenduke::oidc::OIDCClient>
oidcClient;
97 const std::shared_ptr<tenduke::oidc::OIDCSessionEventListener>
notify;
OIDCSessionImpl(std::unique_ptr< tenduke::oidc::OIDCState > state, const std::shared_ptr< const tenduke::oidc::OIDCLogin > &oidc, const std::shared_ptr< const tenduke::oidc::OIDCClient > &oidcClient, const std::shared_ptr< tenduke::time::Clock > &clock, const std::shared_ptr<::tenduke::oidc::OIDCSessionEventListener > &eventListener=nullptr, uint64_t validitySafetyMarginS=DEFAULT_SAFETY_MARGIN_S, std::chrono::milliseconds loginTimeout=DEFAULT_SESSION_LOGIN_TIMEOUT)
Constructs new instance.
Definition OIDCSessionImpl.cpp:219
virtual void login()
Performs login.
Definition OIDCSessionImpl.cpp:118
bool heartbeat() override
Executes a heartbeat with the backend, checking that the current access token really works.
Definition OIDCSessionImpl.cpp:201
std::shared_ptr< tenduke::oidc::OIDCState > state
The OIDC-state.
Definition OIDCSessionImpl.h:80
const std::shared_ptr< tenduke::oidc::OIDCSessionEventListener > notify
Listener for OIDC session events.
Definition OIDCSessionImpl.h:97
const std::chrono::milliseconds loginTimeout
Login timeout.
Definition OIDCSessionImpl.h:84
const std::uint64_t validitySafetyMarginS
Safety margin in seconds for checking if access token has expired.
Definition OIDCSessionImpl.h:88
bool abortRequested
Set by abortLogin(), cleared when a login starts.
Definition OIDCSessionImpl.h:77
void invalidate() override
Invalidates the session.
Definition OIDCSessionImpl.cpp:71
void abortLogin() override
Aborts an ongoing login flow.
Definition OIDCSessionImpl.cpp:25
std::shared_ptr< tenduke::oidc::OIDCLoginRequest > loginRequest
Current login request.
Definition OIDCSessionImpl.h:82
static const std::uint64_t DEFAULT_SAFETY_MARGIN_S
Default safety margin in seconds for checking access token expiration.
Definition OIDCSessionImpl.h:27
bool isValid() override
Checks that local session is valid.
Definition OIDCSessionImpl.cpp:76
virtual void refreshOrLogin()
Performs either refresh, or if it fails, new login.
Definition OIDCSessionImpl.cpp:97
virtual bool hasRefreshableState()
Checks if the session has state, which can be refreshed.
Definition OIDCSessionImpl.cpp:42
void ensureValidSession() override
Checks that the OIDC session is valid, but if it is NOT, either refreshes the access token or authent...
Definition OIDCSessionImpl.cpp:60
const std::shared_ptr< tenduke::time::Clock > clock
Clock for checking session validity locally.
Definition OIDCSessionImpl.h:91
void refresh() override
Forces refresh of the session.
Definition OIDCSessionImpl.cpp:190
std::string getAccessToken() override
Returns access token of the session.
Definition OIDCSessionImpl.cpp:47
const std::shared_ptr< const tenduke::oidc::OIDCClient > oidcClient
The OIDC-client.
Definition OIDCSessionImpl.h:95
OIDCSessionImpl(std::unique_ptr< tenduke::oidc::OIDCState > state, const std::shared_ptr< const tenduke::oidc::OIDCLogin > &oidc, const std::shared_ptr< const tenduke::oidc::OIDCClient > &oidcClient, const std::shared_ptr< tenduke::time::Clock > &clock, const std::shared_ptr<::tenduke::oidc::OIDCSessionEventListener > &eventListener=nullptr, uint64_t validitySafetyMarginS=DEFAULT_SAFETY_MARGIN_S, std::chrono::milliseconds loginTimeout=DEFAULT_SESSION_LOGIN_TIMEOUT)
Constructs new instance.
Definition OIDCSessionImpl.cpp:219
std::shared_ptr< const tenduke::oidc::OIDCState > getOIDCState() override
Returns the current OIDC-state for inspection.
Definition OIDCSessionImpl.cpp:55
void reEstablish() override
Re-establishes the session: Tries first to refresh the state, if it fails, re-authenticates the user.
Definition OIDCSessionImpl.cpp:185
std::mutex loginMutex
Guards loginRequest and abortRequested.
Definition OIDCSessionImpl.h:75
const std::shared_ptr< const tenduke::oidc::OIDCLogin > oidc
Service to perform OIDC login.
Definition OIDCSessionImpl.h:93
Stateful service to manage OIDC-session.
Definition OIDCSession.h:23
Implementation of OpenID Connect protocol.
Definition AutoDiscovery.h:18
const std::chrono::milliseconds DEFAULT_SESSION_LOGIN_TIMEOUT
Default login timeout.
Definition OIDCSessionImpl.h:18
Root for classes, functions and globals of 10Duke C++ Client.
Definition APIRequest.h:4