Files
llink/cpp/src/authmanager.h
T

75 lines
1.6 KiB
C++

#ifndef AUTHMANAGER_H
#define AUTHMANAGER_H
#include <QObject>
QT_BEGIN_NAMESPACE
class QSettings;
QT_END_NAMESPACE
struct SessionData
{
QString id;
QString email;
QString emailPrefix;
};
class AuthManager : public QObject
{
Q_OBJECT
public:
explicit AuthManager(QObject *parent = nullptr);
bool isSignedIn() const;
/// @brief If isSignedIn() this will contain the human's session data.
/// @returns Session data for the authed human. nullptr if not signed in.
SessionData *sessionData() const;
public slots:
/// @brief Sends a code to the requested email.
///
/// You must verify the code in the signIn method to receive a session.
///
/// @params email to send code to.
void requestSignInCode(const QString &email);
/// @brief Creates a session if authenticated.
///
/// @params code that was sent to the email in the previous step
void signIn(const QString &code);
void signOut();
/// @brief checks if there is a cached session that is valid
void tryRestoreSession();
signals:
void sessionRestoreCompleted();
void isSignedInChanged();
void signedOut();
void signedIn();
void codeSentToEmail(const QString &email);
void errorOccurred(const QString &message);
private:
QString m_lastEmail;
bool m_isSignedIn;
void setIsSignedIn(bool);
SessionData *m_sessionData;
QSettings *m_settings;
QString m_sessionToken;
/// Sets session token internally to class, in storage, and sets networkmanager appropriately
/// Pass "" if you want to remove it.
void setSessionToken(const QString &);
};
#endif // AUTHMANAGER_H