1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
#ifndef ONLINECREDENTIALS_H #define ONLINECREDENTIALS_H #include "curlresult.h" #include <QString> #include <QTime> class OnlineCredentials { public: class TimeLock { public: TimeLock(int timeToWaitInMs); /// puts thread asleep til ready, /// returns false if ready was stolen from other thread bool blockUntilReady(); private: bool lock(); QTime timer; int timeToWaitInMs; }; OnlineCredentials(); void set(const QString name, const QString password); void set(const QString name, const QString password, QString userAgent); virtual bool login() {return mHasVerifiedCredentials || this->verifyCredentials();} virtual const QString identifierKey() const = 0; virtual bool fetchFirstAuthorizeToken(QString /*code*/) { return false; } virtual const QString connectUri() const { return ""; } virtual bool isFresh() { return true; } virtual bool refresh() { return true; } bool assureFreshness(); CURL* curlClient(const char* url, CurlResult& userdata); CURL* curlClient(TimeLock& lock, const char *url, CurlResult &userdata) const; CURL* curlNoAuthClient(const char* url, CurlResult& userdata); CURL* curlNoAuthClient(TimeLock &lock, const char *url, CurlResult &userdata) const; bool readConfig(QString configFilePath); bool hasVerifiedCredentials() const; QString getUsername() const; TimeLock lock; protected: virtual bool verifyCredentials() = 0; virtual void setCredentialsForHandle(CurlResult &userdata, CURL *handle) const; bool mHasVerifiedCredentials; QString username; QString password; QString userAgent; private: CURL* curlClientNoLock(const char* url, CurlResult &userdata) const; CURL* curlNoAuthClientNoLock(const char* url, CurlResult& userdata) const; }; #endif // ONLINECREDENTIALS_H