Ditto 4.11.1
 
Loading...
Searching...
No Matches
Authenticator.hpp
1#ifndef _DITTO_AUTHENTICATOR_
2#define _DITTO_AUTHENTICATOR_
3
4#include "Ditto.hpp"
5
6#include "AuthenticationCallback.hpp"
7#include "AuthenticationStatus.hpp"
8#include "Observer.hpp"
9
10#include "authentication_status_handler.hpp"
11#include "dittoffi.hpp"
12
13#include <functional>
14#include <memory>
15#include <string>
16#include <vector>
17
18namespace ditto {
20class DittoError;
21class DittoHandleWrapper;
22
28class Authenticator : public std::enable_shared_from_this<Authenticator> {
29 friend class AuthenticationStatusHandler;
30 friend class AuthenticationStatusObserver;
31 friend class Ditto;
32 friend class LoginProvider;
33 friend class OnlinePlaygroundIdentity;
34 friend class OnlineWithAuthenticationIdentity;
35
36public:
41
58 void login(std::string token, std::string provider,
59 std::function<void(std::unique_ptr<std::string>,
60 std::unique_ptr<DittoError>)>
61 login_handler) const;
62
73 DITTO_DEPRECATED_BECAUSE("Use `login` instead.")
75 std::string token, std::string provider,
76 std::function<void(std::unique_ptr<DittoError>)> login_handler) const;
77
90 std::string username, std::string password, std::string provider,
91 std::function<void(std::unique_ptr<DittoError>)> login_handler) const;
92
105 void logout(std::function<void(Ditto)> cleanup = [](Ditto ditto) {}) const;
106
112 std::shared_ptr<Observer>
113 observe_status(std::function<void(AuthenticationStatus status)> callback);
114
115 ~Authenticator() = default;
116
117private:
118 AuthenticationStatus _status;
119 std::shared_ptr<DittoHandleWrapper> ditto_handle_wrapper;
120 std::weak_ptr<Ditto::Fields> weak_ditto_fields;
121 std::weak_ptr<AuthenticationCallback> callback;
122 std::vector<std::weak_ptr<AuthenticationStatusObserver>> status_observers;
123
124 Authenticator(std::shared_ptr<DittoHandleWrapper> ditto_handle_wrapper,
125 std::weak_ptr<Ditto::Fields> ditto_fields,
126 std::shared_ptr<AuthenticationCallback> callback);
127
128 void stop_status_observer(
129 std::shared_ptr<AuthenticationStatusObserver> status_observer);
130 void authentication_expiring(uint32_t time_remaining);
131 void update_and_notify(bool should_notify);
132 void update_status_and_notify(AuthenticationStatus status);
133};
134
135} // namespace ditto
136
137#endif
Definition AuthenticationStatusObserver.hpp:15
void login(std::string token, std::string provider, std::function< void(std::unique_ptr< std::string >, std::unique_ptr< DittoError >)> login_handler) const
Log in to Ditto with a third-party token.
Definition Authenticator.cpp:27
std::shared_ptr< Observer > observe_status(std::function< void(AuthenticationStatus status)> callback)
Definition Authenticator.cpp:105
void logout(std::function< void(Ditto)> cleanup=[](Ditto ditto) {}) const
Log out of Ditto.
Definition Authenticator.cpp:89
void login_with_token(std::string token, std::string provider, std::function< void(std::unique_ptr< DittoError >)> login_handler) const
Log in to Ditto with a third-party token.
Definition Authenticator.cpp:55
AuthenticationStatus get_status() const
Definition Authenticator.cpp:25
void login_with_credentials(std::string username, std::string password, std::string provider, std::function< void(std::unique_ptr< DittoError >)> login_handler) const
Log in to Ditto with a username and password.
Definition Authenticator.cpp:72
All errors that are thrown by the Ditto SDK are wrapped as a DittoError.
Definition Errors.hpp:42
Provides info about the authentication status.
Definition AuthenticationStatus.hpp:10