root/src/onlinecredentials.h

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