From c0a52bc1ca3bcde8107f7cd2b8924c1dda487b1c Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Thu, 11 Jul 2019 05:06:42 -0400 Subject: extracted api key validator from NXMAccessManager api key now part of ApiUserAccount --- src/nxmaccessmanager.h | 86 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 25 deletions(-) (limited to 'src/nxmaccessmanager.h') diff --git a/src/nxmaccessmanager.h b/src/nxmaccessmanager.h index 08a799f9..11370d65 100644 --- a/src/nxmaccessmanager.h +++ b/src/nxmaccessmanager.h @@ -31,6 +31,7 @@ along with Mod Organizer. If not, see . #include namespace MOBase { class IPluginGame; } +class NXMAccessManager; class ValidationProgressDialog : private QDialog { @@ -103,10 +104,56 @@ private: void onMessage(const QString& s); void onDisconnected(); void onError(QAbstractSocket::SocketError e); + void onSslErrors(const QList& errors); void onTimeout(); }; +class NexusKeyValidator +{ +public: + enum States + { + Connecting, + Finished, + InvalidJson, + BadResponse, + Timeout, + Cancelled, + Error + }; + + std::function finished; + std::function stateChanged; + + NexusKeyValidator(NXMAccessManager& am); + ~NexusKeyValidator(); + + void start(const QString& key); + void cancel(); + + bool isActive() const; + +private: + NXMAccessManager& m_manager; + QNetworkReply* m_reply; + QTimer m_timeout; + bool m_active; + + void setState(States s, const QString& error={}); + + void close(); + void abort(); + + void onFinished(); + void onSslErrors(const QList& errors); + void onTimeout(); + + void handleError( + int code, const QString& nexusMessage, const QString& httpError); +}; + + /** * @brief access manager extended to handle nxm links **/ @@ -127,7 +174,6 @@ public: explicit NXMAccessManager(QObject *parent, const QString &moVersion); - ~NXMAccessManager(); void setTopLevelWidget(QWidget* w); @@ -143,8 +189,8 @@ public: void clearCookies(); QString userAgent(const QString &subModule = QString()) const; + const QString& MOVersion() const; - QString apiKey() const; void clearApiKey(); void refuseValidation(); @@ -164,17 +210,9 @@ signals: * @param necessary true if a login was necessary and succeeded, false if the user is still logged in **/ void validateSuccessful(bool necessary); - void validateFailed(const QString &message); - void credentialsReceived(const APIUserAccount& user); -private slots: - - void validateFinished(); - void validateError(QNetworkReply::NetworkError errorCode); - void validateTimeout(); - protected: virtual QNetworkReply *createRequest( @@ -182,25 +220,23 @@ protected: QIODevice *device); private: + enum States + { + NotChecked, + Valid, + Invalid + }; + QWidget* m_TopLevel; - QTimer m_ValidateTimeout; - QNetworkReply *m_ValidateReply; mutable ValidationProgressDialog* m_ProgressDialog; - QString m_MOVersion; + NexusKeyValidator m_validator; + States m_validationState; - QString m_ApiKey; - - enum { - VALIDATE_NOT_CHECKED, - VALIDATE_CHECKING, - VALIDATE_NOT_VALID, - VALIDATE_ATTEMPT_FAILED, - VALIDATE_REFUSED, - VALIDATE_VALID - } m_ValidateState = VALIDATE_NOT_CHECKED; - - void startValidationCheck(bool showProgress); + void startValidationCheck(const QString& key, bool showProgress); + void onValidatorState(NexusKeyValidator::States s, const QString& e); + void onValidatorFinished(const APIUserAccount& user); + void onValidatorError(const QString& e); }; Q_DECLARE_OPERATORS_FOR_FLAGS(NXMAccessManager::ApiCheckFlags); -- cgit v1.3.1