10Duke Enterprise C++ SDK
Loading...
Searching...
No Matches
OIDCSessionImpl.h
1#ifndef TENDUKE_OIDC_OIDCSESSIONIMPL_H
2#define TENDUKE_OIDC_OIDCSESSIONIMPL_H
3
4#include "./OIDCLogin.h"
5#include "./OIDCSession.h"
6#include "./OIDCSessionEventListener.h"
7#include "../OIDCState.h"
8#include "../OIDCClient.h"
9#include "time/Clock.h"
10
11#include <cstdint>
12#include <memory>
13#include <mutex>
14
15namespace tenduke { namespace oidc {
16
18const std::chrono::milliseconds DEFAULT_SESSION_LOGIN_TIMEOUT = std::chrono::minutes(6);
19
24{
25public:
27 static const std::uint64_t DEFAULT_SAFETY_MARGIN_S;
28
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,
50 std::chrono::milliseconds loginTimeout = DEFAULT_SESSION_LOGIN_TIMEOUT
51 );
52
53 // tenduke::oidc::OIDCSession
54public:
55 void abortLogin() override;
56 void ensureValidSession() override;
57 std::string getAccessToken() override;
58 std::shared_ptr<const tenduke::oidc::OIDCState> getOIDCState() override;
59 bool heartbeat() override;
60 void invalidate() override;
61 bool isValid() override;
62 void reEstablish() override;
63 void refresh() override;
64
65protected:
67 virtual bool hasRefreshableState();
69 virtual void refreshOrLogin();
71 virtual void login();
72
73protected:
75 std::mutex loginMutex;
77 bool abortRequested = false;
78
80 std::shared_ptr<tenduke::oidc::OIDCState> state;
82 std::shared_ptr<tenduke::oidc::OIDCLoginRequest> loginRequest;
84 const std::chrono::milliseconds loginTimeout;
88 const std::uint64_t validitySafetyMarginS;
89
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;
98};
99
100}}
101
102#endif //TENDUKE_OIDC_OIDCSESSIONIMPL_H
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